In the previous post, we answered questions from the coverage criteria exercise to recap that topic. Today we recap some of the oldest software testing definitions. We will introduce you to software testing based on the remarkable book, Introduction To Software Testing by Paul Ammann and Jeff Offutt.
Black And White
Black-box testing: Deriving tests from external descriptions of the software, including specifications, requirements, and design.
I would like to contrast this definition with Black Box Software Testing Courses created by Cem Kaner:
Testing and test design without knowledge of the code.
This is very important distinction. In black box testing approach, we use all knoweledge about the application under test, except the application code. This includes specifications, requirements and design, but also all implicit artifacts. In black box, we investigate how application uder test behaves with it’s environment.
White-box testing: Deriving tests from the source code inter- nals of the software, specifically including branches, individual conditions, and statements.
BBST Courses definition adds one important component to code, and that is data.
Top And Down
Here we distinguish our approaches how application code is organized into procedures. Top or root is main procedure, where down is towards the leaves procedures, procedures that do not call any procedure.
Top-Down Testing: Test the main procedure, then go down through procedures it calls, and so on.
Bottom-Up Testing: Test the leaves in the tree (procedures that make no calls), and move up to the root. Each procedure is tested only if all of its children have been tested.
Static And Dynamic
In static analysis we do not execute application code, but source code is run throug static analysis tools. For example, we could analyze:
- code structure rules
- memory leaks
- code complexity
In dynamic analysis we execute code using test data. This could be using testing frameworks on various levels, or by runing the application as a whole, as a user would use the application.
Static Testing: Testing without executing the program. This includes software inspections and some forms of analysis.
DynamicTesting: Testing by executing the program with real inputs.