I spent a chunk of my career in testing roles. Well, sort of. Despite still being known in many circles as a tester, I haven’t spent time testing as the majority of my job in nearly 20 years.
It’s a long story, but I’ve told it before in a previous post.
But I have a few cool bug stories from my past that I thought would be fun to share this week as a break from my normal drivel on leadership and culture.
I’ll Write Your Name
When I joined Microsoft, I knew a bit about software testing, and a bit about networking. That’s really the only reason I ended up with a job there. I tested networking components on Asian versions of Windows 95. This is the role where I was told that there wasn’t enough time to automate (there was, and I did), and also the role where I had a bug quota (I was expected to find 10 bugs a week). It was easy to find bugs, and I found plenty of things to test, so despite practices that (hopefully) sound horrible today, I had fun.
For those who have grown up in the generation of Unicode, Asian versions of windows had mixed-byte text - meaning that some characters were a single byte (as were all non-Asian versions of Windows 9x), and some characters were two bytes long. In practice, if a character had string had a particular byte in a string, it designated that it was the first character of a two-byte character. One of the most typical bugs we’d see in the UI was a character string where the cursor could be put in the middle of a character.
There are a lot more details that I’m not going to bother with, but if anyone wants to “umm actually” any of this, happy to have the conversation. In later years, I wrote a lot of code that was used to help developers and testers map and test problem characters on mixed byte systems.
Anyway, one of the cool things about Japanese mixed byte characters was that the trail byte - the character after the designated lead byte could be hex values like 0x5B, 0x5C, or 0x7B (the characters ‘[‘, ‘\’, and ‘|’). As you can imagine, 0x5C - the backslash was of particular interest in testing file names - especially in network tests. We created user names, share names, and files containing these characters frequently in our testing. It wasn’t quite the bug farm you’d expect - and probably edge cases in hindsight, but it was interesting, and I LOVE interesting.
I decided (or was told - don’t remember) to run some tests against a Windows NT 3.5 Japanese server. We had a “lab” down the hall filled with a wide variety of computers that vendors had sent for us to test, and the lab also contained a whole rack of various versions and languages of NT and Netware. I created a share on the NT-J server and went back to my office to run the tests. If, for some reason, you’re wondering why I didn’t just run the tests from the lab and avoid the walk, it’s because these were the days before wireless networks, and the lab didn’t have any available ethernet cables.
So - back in my office, I ran my batch file that connected to a server, then took my “special” strings to create shares and copy files back and forth. After a few minutes, my test hung. I ctrl-c’d the script, proof-read it, and ran it again.
It wouldn’t run at all. In fact, I couldn’t connect to the server manually. I walked to the lab, and the computer had blue-screened. Computers are flaky. NT was flaky, so I rebooted it and started over.
Then it blue screened again. Again, I thought computers are flaky, so I tried it against another NT-J server. As you have already figured out, I found a way to crash any NT-J server remotely. Fun stuff.
It’s Me. I’m the Problem.
I have worked on some cool products in my career. I have also worked on really dumb stuff. One from the latter category is a project names Mira. I’ll let you read the wikipedia article, but the short story is that it was Windows CE embedded into a display that would connect via terminal server back to the host. The idea was that you could be writing an email, decide you need to goto the bathroom or something, so you’d just take the monitor with you, and it would auto connect back to your PC and you could keep working.
Weird.
Mira, thankfully, wasn’t my full time job, but I volunteered to spend some time on it. There was really nothing to it. The underlying OS was well tested, so it was “just” a UI that ran a terminal server client. It had a button labeled “Connect” and a text box for a server name. It was already late in the day, so I decided the only thing I could do was write a bit of automation to enter a server name and click the connect button. Then I wrote another function that would disconnect from the server.
Pretty simple.
I wrote a little more code to loop the three functions (type a server name, press connect, wait 5 seconds, then disconnect - repeat). I started the “test”, and began packing up my stuff to leave. I was reaching for my coat when my test crashed.
I knew I rushed writing the code, so I gave it a review, cleaned up a few things that felt arbitrary, restarted everything, checked my email, put on my coat and …almost left, before I saw that my stupid test crashed again. I took my coat off, sat down, and poked around in debugger. While the system was running fine - mostly - the graphics layer was completely out of a certain type of memory object. Sure enough - when I looked at the code that did nothing but draw a button and a text box, it had a memory leak of that exact object. Purely because the developer wanted to do something “cool” with their button rather than use a standard Win32 control, but they didn’t know what they were doing.
Fun.
Win Stupid Prizes
Last story - this one doesn’t really involve a memorable bug, but I still like it. In the latter stages of XBox One development, the big challenge was getting the Game OS (games run on a separate operating system than the XBox main UI) working as the initial launch games were coming online. In order to get mileage in on the Microsoft Game Studios titles - as well as the Game OS, there were incentives for playing games and reporting bugs. One of my primary roles on XBox at this time was debugging broken stuff, and Forza had broken stuff. I got Forza to the point in the debugger where the graphics problems were happening and did some poking around. It looked like the bug was in code we got from the Windows team, and it looked like the bug may have been fixed in Windows code after we forked. I sent my findings to some folks in XBox and on Windows along with instructions on how to connect to my debugger session and went on to other work. The email thread continued, and every once in a while someone would connect to my debugger, poke around at the same things I poked around and then disconnect. I had other work to do (and other consoles in my office), so I just waited while my console sat in the debugger. Eventually, there was consensus on the solution, and a fix was checked in and we agreed I could shut down my debugging session. All was well.
But all was better. The next week, I found out that I won a $25 coffee certificate for “spending the most time testing Forza”. Apparently, all that time in the debugger added up to over 150 hours of “playing time”.
And yes - I bought all of my involved colleagues coffee.
Lots of fun.
-A
Thanks for sharing. I love bug stories!
Great stories, Alan!