Testing Introduction

Testing is a critical component of the software development process. The goals of testing include ensuring your application produces the desired output and handles errors gracefully. Checking that your program performs correctly by providing expected and correct input is only part of the process — it’s important to test your system with incorrect and erroneous input, and to stress test it. Failing to consider these latter cases can cause you to overlook bugs that may be in your code.

Software defects can sometimes just be amusing. If you try to watch a video with an age restriction from Hulu, but the video is streamed through a different website, it is possible to successfully enter February 30 as your birthday. But, bugs can also be costly. In 2002, NIST reported that software bugs cost nearly $60 billion. They can also cost human lives — the Patriot Missile system had a floating point round-off error that got worse over time, and since the appropriate endurance tests weren’t carried out, the Patriot's ability to shoot down other missiles was severely compromised.

There are many different levels of testing:

There are several approaches that refer to the visibility of the code being tested. White box testing is where the tester knows about the inner workings of the software being tested. On the other hand, black box testing involves just the opposite — the tester knows the functionality of the system, but not how that functionality is implemented. In today’s lab, you will be black box testing a class that has already been written for you.