What is Software testing ? What are the different testing principles ?
Software Testing :
It is the process of executing a program with the intention of finding errors in the code. It is the process of exercising or evaluating a system or system components by manual or automatic means to verify that it satisfies specified requirements or to identify differences between expected and actual results.
The objective of testing is to show incorrectness and testing is considered to succeed when an error is detected. An error is a conceptual mistake made by either the programmer of the designer or a discrepancy between a computed value and a theoretically correct value.
The objective of software testing are listed as follows :
- The main objective of software testing is to execute a program in a proper way, where there should be error arises during execution time.
- A good test is one that has high probability of finding as yet undiscovered errors.
- To deliver high quality of software project.
- To ensure that software is according to the requirements of the users.
- To ensure that software is reliable and working as per the specification.
- System actually uncover different type errors in minimum time and with a minimum amount of efforts.
- It also help in minimize cost of maintenance, if software project is tested in systematic way.
- It also help in minimize chances of failure after its implementaion.
- It also help in reducing catastrophic failure, which is very dangerous, if software fail during execution time. For example, aircraft control, nuclear reactor control plant.
- Software Quality Improvement.
- Verification and validation.
- Software Reliability Estimation.
- A successful test is one, in which there is no errors are founds, our objectives is to design test that systematically uncover different classes of errors and do with a minimum amount of time and effort.
Testing Principles :
- Testing should be based on user requirements : This is in order to uncover any defects that might cause the program or system to fail to meet the client's requirements.
- It is impossible to test everything : Exhaustive tests of all possible scenarios are impossible, simple because of the many different variables affecting the system and the number of paths a program flow might take.
- Use effective resources to test : This represents use of the most suitable tools, procedures and individuals to conduct the tests. The test team should use tools that they are confident and familiar with. Testing procedures should be clearly defined. Testing personnel may be a technical group of people independent of the development.
- Testing for invalid and unexpected input conditions as well as valid conditions : The program should generate correct message when an invalid test is encountered and should generate correct results when the test is valid.
- Testing planning should be done early : This is because test planning can begin independently of coding and as soon as the client requirements are set.
- Testing must be done by an independent party : Testing should not be performed by the person or team that developed the software since they tend to defend the correctness of the program.
- Assign best personnel to the task : Because testing requires high creativity and responsibility only the best personnel, must be assigned to design,implement, and analyze test cases, test data and test results.
- Testing is the process of executing software with the intent of finding errors.
- Keep software static during test : The program must not be modified during the implementation of the set of designed test cases.
- Document test cases and test results.
- Provide expected test results if possible : A necessary part of test documentation is the specification for expected results, even if providing such results is impractical.
(b) Equivalent Class Partitioning :
In equivalence partitioning, a test case is designed so as to uncover a group or class of error. This limits the number of test cases that might need to be developed otherwise.
In this method, input domain of a program is partitioned into a finite number of equivalence classes such that one can reasonably assume, but not be absolutely sure that the test of a representative value of each class is equivalent to a test of any other value. That is, if one test case in a class detects an error all other test cases in the class would be expected to find same error. If a test case did not detect an error, we would expect that no other test case in the class would find an error.
Thus, in this approach, the domain of input values to a program is partitioned into a set of equivalence classes. This partitioning is done such that the behaviour of the program is similar to every input data belonging to the same equivalence class.
Equivalence input classes may be defined according to following guidelines :
- If an input condition specifies a range, one valid and two invalid equivalence classes are defined.
- If an input condition requires a specific value, one valid and two invalid equivalence classes are defined.
- If an input condition specified a member of a set, one valid an one invalid equivalence classes are defined.
- If an input condition is Boolean, one valid and one invalid classes are defined.
- By applying these guidelines of the derivation of an equivalence classes, test cases for each input domain data object can be developed and executed.
In figure, each equivalence partitions shown in an ellipse. Both valid and invalid inputs also form partitions.
One common approach for determining equivalence classes is as follows : If there is reason to believe that the entire range of an input will not be treated in the same manner, then the range should be split into two or more equivalence classes, each consisting of values for which the behaviour is expected to be similar. For example, for a character input, if we have reasons to believe that the program will perform different actions if the character is an alphabet, a number or a special character, then we should split the input into three valid equivalence classes.