The 1982 video game Sinistar had an interesting bug:
Sinistar contains a bug that grants the player many lives (ships). It happens only if the player is down to one life and Sinistar is about to eat the player’s ship. If a warrior ship shoots and destroys the ship at this moment, it immediately takes the player to zero lives, and Sinistar eating the player subtracts another life. Since the number of lives is stored in the game as an 8 bit unsigned integer, the subtraction from zero will cause the integer to wrap around to the largest value representable with 8 bits, which is 255 in decimal.
I have never tested video games. Frankly, there are three types of applications:
- Do applications, which are designed to have one task or set of tasks, and the outcome is known. The workflows are pretty closed and known.
- Create applications, which are designed to let a user make something from scratch. A lot of rules are in place as to how the user creates, but the workflows and end results are open-ended.
- Video games, where there are also some rules and some predicted end results, but the users can get there in myriad ways (or will do something other than those intended end results). Additionally, users will sometimes try to break the established rules just to see what will happen.
Frankly, I’ve done most of my testing in the context of the first. Video game companies rely heavily on beta testing and crowd sourcing to get the greatest number of monkeys at the typewriters as possible. Outside of the first type, though, you really have to have some creativity, insight, and awareness outside of the normal test case way of thinking because there really aren’t enough test cases to cover everything.