The Theory of Software Testing


New programming methodology, such as Radip application development (RAD), Extreme Programming, have led to intensive development of automated testing. The main feature of these methodologies is the ability to produce different versions of the software product of the increasing volume of high frequency. Hence, the current testing has become an iterative nature – each new version is accompanied by a significant number of new tests, as well as refining existing automated testing tools. Because each version of the project is necessary to develop a means of allowing the most complete test all its features, relevant methods and algorithms for design of automated testing tools that can help you quickly and cost-effective to develop such a tool. Distinctive features of the design of automated testing tools a consequence of specific tasks which are before them:

  • Objective test difficulty: it is destructive (ie the inverse creative) process. Therefore, the projected funds should instead collect and process information to perform its division into parts and analyze these parts.
  • Testing of absolutely all possible situations is infinite, so the projected means testing should take into account the impossibility of enumerating all possible tests.

In turn, the development of software products, in order to reduce cost, widely used methods and algorithms of the software or information systems. But not all are suitable for designing testing tools, in addition to the rapid and continuous changes in the test project to constantly redesign the existing tools. Intensive development and modernization of automated testing tools make the actual task of finding and applying best practices and design of algorithms, you can use to quickly and cost effectively design a new testing tool.

Software Testing

Testing is conducted to ensure the quality of developed software product. Standard ISO-8402, dedicated to the description of quality assurance systems, software quality by understanding "the totality of characteristics of software related to its ability to meet established and projected needs of the customer." The main parameter of program quality is reliability. Reliability is defined as the probability of operation without failure for a certain period of time, calculated the cost to the user for each refusal. Denial of software – it is a manifestation of errors in it. Hence, software testing – a process of program execution to detect errors in it. "Successful" test is this, where the program failed. On the contrary, "failed" is called the test did not reveal an error in the program. Basic principles of testing:

  1. Necessary part of each test should be a description of the expected outcomes of the program;
  2. Program should not be tested by the author;
  3. Organization – the developer of the software should not be "solely" to test;
  4. Necessary to select tests not only for the right (under) input data, but for the wrong (unexpected);
  5. When analyzing the results of each test is necessary to check whether the program does what it should not do;
  6. "The principle of accumulation of errors" – the probability of having no errors found in some parts of the program is directly proportional to the number of errors already found in this part.

The testing process consists of three phases:

  1. Designing tests.
  2. Execution of tests.
  3. Analysis of the results.

In the first phase addressed the question of selecting a subset of tests that will be able to find the greatest number of errors for the least amount of time. At the stage of execution of tests carried out, running tests and catch errors in the tested software product. There are two testing methodology – the "black" and "white" box.

  • "Black Box" – testing the functional behavior of the program from the perspective of the outside world (the text of the program is not used).
  • "White Box" – testing the code for the logic of the program and the correctness of its work from the perspective of a compiler for the language in which it was written.

The obtained test results suggest about the reliability of software. They serve as the basis for its certification and quality assurance.

To facilitate and expedite the testing process is widely used automation of one or a series of complex stages of testing. In the market of software (SW), there are many firms predlashgayuschih their automated testing tools. Below is a list of the most famous among them are:

  • Compuware Corporation (DevPartner `s)
  • Rational Software from IBM
  • Gcov (open source program for TrueCoverage)
  • Various editors and tools to facilitate editing of the text (EditPlus 2, WinEdit, etc.)

Automated tools are designed primarily for the following stages of the testing process:

  • Testing of functional requirements
  • Testing the UI
  • Testing of individual modules
  • Comprehensive testing
  • Analysis of the complexity of software modules
  • Testing software code coverage
  • Testing the speed of loading system
  • Testing of the boundary conditions
  • Testing memory leaks

There are two basic types of testing: functional and structural. When functional testing program is seen as a "black box" (ie the text is not used). Verifies the compliance of the program behavior of its external specification. The criterion for completeness of testing in this case is the examination of all possible values of input data that impossible. Since exhaustive functional testing is impossible, we can talk about the development of methods to select the tests do not "blindly", but with a high probability of detecting errors in the program.
The structural testing program is seen as "white box" (ie, its text is open for use). Checks the program logic. Completing a test in this case is one that will lead to the sorting of all possible paths on the graph transmission control program (its control graph). If we restrict the exhaustive search only the linearly independent paths, and in this case a comprehensive structural testing is practically impossible, since it is unclear how to select tests to provide "cover" of all such paths. Therefore, the structural testing is necessary to use other criteria for its completeness makes it easy to monitor their performance, but do not give guarantees of full verification of logic programs. But even assuming that it was possible to achieve complete structural testing of a program, it may nevertheless contain errors, because

1) the program may not meet its external specification, which in particular may lead to the fact that its control flow graph will be missing some essential ways;

2) are not found errors, the occurrence of which depends on the processed data (ie, on some input data the program works correctly, but on the other – with an error).

Thus, neither structural nor functional testing can not be exhaustive. To increase the percentage of error detection during the functional and structural testing using test automation tools.

See Also

    Advertising

    Archives