Yuhang (Henry) Wang  
Scott Thornton  

1.0 Introduction


Table of Contents

Introduction
 
Software Testing happens immediately after the source code of the software has been generated. It is performed to uncover and correct as many of the potential errors as possible before delivery to the customer. Within the field of Software Quality Management, Software Testing is an important approach to Software Quality Assurance. It represents the last defense to correct deviations from specification and errors in design or code implementation when compared to other techniques such as inspection, walkthroughs and other reviews.

This paper will examine software testing from a quality management context. It begins with a brief history of the theory of testing in order to frame the current approach and techniques. Section Two provides some testing fundamentals, describing what constitutes a valid test, various testing techniques and the four testing levels or stages of the software development cycle: unit, integration, system, and acceptance testing. Sections Three through Six delve into the details of each of these stages. Section Seven addresses organizational issues associated with software testing, with a discussion and conclusions wrapping up the paper in Section Eight.
 


History of Software Testing  
Throughout the history of software development, there have been many divergent definitions for Software Testing. First, in the 1950s, testing was defined as "what programmers did to find bugs in their programs" [Hetzel 1988]. Today, this definition is much too restrictive in that software testing has been extended to include not only determining that a program functions correctly, but also that the functions themselves are correct.

As the science of software engineering matured through the 1960s and 1970s, the definition of testing underwent a revision. Consideration was given to exhaustive testing of the software in terms of the possible paths through the code, or by enumerating the possible input datasets. Even with the complexity of the software systems being developed at that time, this was impractical, if not theoretically impossible. The 1950s concepts were extended to include "what is done to demonstrate correctness of a program" [Goodenough 1975] or to define testing as "the process of establishing confidence that a program or system does what it is supposed to do" [Hetzel 1973]. Although this concept is valid in theory, in practice it is insufficient. If only simple, straightforward tests are performed, it is easy to show that the software "works". Since these tests may not exercise a significant portion of the software, large number of defects may remain to be discovered during actual operational use. It was therefore concluded that correctness demonstrations are an ineffective method of testing during software development. There is still a need for correctness demonstrations (acceptance testing for example), as will be seen later in this paper.

The 1980s saw the definition of testing extended to include defect prevention. According to Boris Beizer [Beizer 1983], the act of designing tests is one of the most effective bug preventers known. As well, with the blossoming costs and effort dedicated to testing, it was recognized that a testing methodology was required, specifically that testing must include reviews and that it should be a managed process.

The power of early test design was recognized in the beginning of the 1990s. Testing was redefined to be "the planning designing, building, maintaining and executing tests and test environments" [Hetzel 1991]. This incorporated all of the ideas to date in that good testing is a managed process, a total life cycle concern with testability [Beizer 1990].
 


The University of Calgary
Software Engineering Research Network
Scott Thornton
Last Modified Date:
10-April-2003
Introduction