Software Testing Best Practices– Part II
27 May. 2011 Software Testing & QA
6. Test Cases must be repeatable and reusable.
Principle 6 is utmost important and plays a vital role supporting the fact that it is also useful for tests that need to be repeated after defect repair. The repetition and reuse of tests is also necessary during regression test (the retesting of software that has been modified) in the case of a new release of the software.
7. Testing should be carried out by a group that is independent of the development group.
This principle holds true for psychological as well as practical reasons and does not say that it is impossible for a programming organization to find some of its errors, because organizations do accomplish this with some degree of success. Rather, it implies that it is more economical for testing to be performed by an objective, independent party which gives a direction of the third vision by the means of test cases. Finally, independence of the testing group does not call for an adversarial relationship between developers and Software Testing Engineers.
8. Test Activities should be well planned.
Test plans should be developed for each level of testing, and objectives for each level should be described in the associated plan. The objectives should be stated as quantitatively as possible. Plans, with their precisely specified objectives, are necessary to ensure that adequate time and resources are allocated for testing tasks, and that testing can be monitored and managed. Test planning must be coordinated with project planning. A test plan is a roadmap for testing which should be mapped to organizational goals and policies pertaining to the software program. Test risks must be evaluated at each level of testing.
Careful test planning avoids wasteful “throwaway” tests and unproductive and unplanned “test–patch–retest” cycles that often lead to poor-quality software and the inability to deliver software on time and within budget.
9. Avoid throwaway test cases unless the program is truly a throwaway program.
Whenever the program has to be tested, the test cases must be reinvented. More often than not, since this reinvention requires a considerable amount of work, Software Testing Engineers tend to avoid it. Therefore, the retest of the program is rarely as rigorous as the original test, meaning that if the modification causes a previously functional part of the program to fail, this error often goes undetected.
10. Test results should be inspected meticulously.
This is probably the most obvious principle, but again it is something that is often overlooked. We’ve seen numerous tests that show many subjects failed to detect certain errors, even when symptoms of those errors were clearly observable on the output listings. Put another way, errors that are found on later tests are often missed in the results from earlier tests.
- A failure may be overlooked, and the test may be granted a “PASS” status when in reality the software has failed the test. Software Testing may continue based on erroneous test results. The defect may be revealed at some later stage of testing, but in that case it may be more costly and difficult to locate and repair.
- A failure may be suspected when in reality none exists. In this case the test may be granted a “FAIL” status. Much time and effort may be spent on trying to find the defect that does not exist. A careful re-examination of the test results could finally indicate that no failure has occurred.
Software Testing is an extremely creative and intellectually challenging task.
Creativity required in testing a large program exceeds the creativity required in designing or developing that program. We already have seen that it is impossible to test a program sufficiently to guarantee the absence of all errors. This requires a systematic test process and methodologies to design the robust test cases.
This principle supports that a Software Testing Engineer needs to have
- Comprehensive knowledge of the software engineering discipline.
- Knowledge from both experience and education as to how software is specified, designed, and developed.
- Knowledge of fault types and where faults of a certain type might occur in code constructs.
- Reasoning like a scientist and propose hypotheses that relate to presence of specific types of defects.
- A good grasp of the problem domain of the software that he/she is testing.
- Create and document test cases. To design the test cases the Software Testing Engineer must select inputs often from a very wide domain.
- Design and record test procedures for running the tests.
- Execute the tests and is responsible for recording results.
- Analyze test results and decide on success or failure for a test. This involves understanding and keeping track of an enormous amount of detailed information.
- Know the method for collecting and analyzing test-related measurements.
Our application testing services abide by these best practices in software testing to ensure you can launch a high quality application. Contact us now or call us on 1-877-RISHABH (1-877-747-4224) to learn more about these services!