All software systems, but especially those of a mission-critical nature, need a broad range of testing to verify their readiness.  These tests can be conducted manually; however, automated software testing almost always makes much more sense. It is worth mentioning that some tests lend themselves to automation more readily than others, and a later discussion will focus on calculating ROI in choosing tests.

What types of testing need to be conducted to verify that a system is ready for deployment? The range is broad and the list of individual tests is long, but from a bird’s eye view, software testing falls into three basic categories:  white-box testing, black-box testing and, in between, gray-box testing.

White-box testing focuses on the internals of a system’s software. Also known as structural testing, it tests the internal structures of an application as opposed to its functionality. It includes unit testing, code coverage testing, integration testing and regression testing. Some knowledge of the code and the system design is required for these tests. One of the objectives of testing at this phase is to verify the overall requirements of a system.

Black-box testing focuses more on functionality and less on the internal workings of a system. It tests the system in relation to user interface interaction. Black-box testing validates the correct function between the various layers of a system once the user is introduced. It answers the question, “Is the output of the user interface working as intended?” It is an essential phase, but will not uncover all defects.

Gray-box testing falls somewhere in between the two previous types of testing, and can detect errors that may be missed by them. Gray-box testing requires testers to have some knowledge of the underlying architecture and components that make up a system. It is the type of testing that allows testers to focus on areas of the system that are more prone to failure, often due to complexity or instability. Since gray-box test engineers have a deeper understanding of the system overall, this phase of testing will allow for improved ability to perform more investigative tests, increased testing precision and enhanced defect reporting.

The types of system problems that can be encountered during these testing phases will be the topic of the next blog in this series.

Some information taken from:  Dustin, Elfriede, Thom Garrett, and Bernie Gauf. Implementing Automated Software Testing: How to save Time and Lower Costs While Raising Quality. Upper Saddle River, NJ: Addison-Wesley, 2009. This book was authored by three current IDT employees and is a comprehensive resource on AST.  Blog content may also reflect interviews with the authors.