Motivation:

On page 3 of our text the author states:

"Software is present in our cars, ovens, cell phones, games, and workplaces. It drives billing systems, communication systems, and Internet connections. The proliferation of software systems has reached the point that corporate and national economies are increasingly dependent on the successful development and delivery of software"

The point is that since we are increasingly dependent on software systems to conduct our daily lives, it is becoming increasingly important for software developers and test engineers to "...test well enough that damaging defects don't escape to our customers".

To elaborate on this further, as software systems proliferate and become more pervasive, the consequence of inadequate testing by the software development community becomes more apparent in our lives.

Consider Software Systems that fall into the following categories:

Operations Software:

Note: The consequence of inadequate testing is moderate to high. Software developers and customers will often tolerate a relatively high failure rate. The deployment schedule often drives the testing schedule and hence the quality of the deployed software.

Real Time Software:

Note: The consequence of inadequate testing is very high to critical (can lead to loss of life). Software developers and customers will NOT tolerate a high failure rate. The testing schedule often drives the deployment schedule. Software developers are embracers of QA techniques and methods and often influence the development of new techniques and methods.

Consumer Electronic Devices Software - Convergence:

Note: The consequence of inadequate testing is high to very high. Software developers and customers cannot afford a high failure rate. Poor software quality directly affects profit margins, impacts profitability, affects market share. Software developers and managers are embracers of QA techniques and methods.

Software Testing:

We may define software testing thus:

The Process of exercising/executing a software artifact and comparing actual behavior with expected behavior.

Note: The intention is to detect deviations (if any) between actual behavior and expected behavior.

On page 4 of the text the author provides the following definition:

The Process of analyzing or operating software artifacts for the purpose of finding bugs.

From the authors definition, several points are worth noting:

  1. The word Process indicates testing that involves planned orderly activities. That is, a well thought out, systematic approach.
  2. Testing can involve analyzing or operating software. That is testing may be static or dynamic.
  3. A bug is a flaw in the development of the software that causes a discrepancy between the expected result of an operation and the actual result.

Note (sidebar 1.1): A bug is an error in some activity that relates to software development. That is, may be requirements definition, design, coding. The manifestation of this error is a fault. It may go undetected until a failure occurs in an executable artifact of the development process. Ideally the life of a bug ends when it is uncovered in static or dynamic testing and fixed.

It is important to recognize that software testing is not debugging. Software testing discovers unexpected behavior. The unexpected behavior may be due to an error in the software artifact itself or it may be a design error, a specification error, a testing error, etc. If it is an error in the software artifact, then debugging is performed to track down the cause of the error so that it may be fixed.

The goal of software testing: