The purpose of software testing is to ensure that the software performs as it should.
There was a recent announcement that the Duqu virus was using a flaw in Windows operating system to infect computers. This is an example of a software defect that was not uncovered in testing and which could have serious implications for users.
It is ultimately the users of software who benefit from thorough testing. The following areas are potential sources of problems:
- The individual programs may not be operating correctly
- The combination of several programs may not be performing as required.
- The programs may be performing correctly to specification but may not meet the actual user requirements in operation – the specification is flawed.
- The system may be performing correctly as designed, but the design may be problematic, as in the Duqu virus example mentioned above
For proper testing, the tests should be designed in tandem with the software. Tests should actually be set up before the programs are written to encourage thorough testing. The following types of tests should be done:
- Unit testing – In unit testing the individual programs are tested. To simplify this, programs should be specified to perform only one task. This makes the testing simpler because the number of interactions is limited
- The units which form parts of sub-systems should be tested in combination to make sure that they are performing correctly.
- The whole system should be tested to make sure it is functioning to specification.
- The software should be tested to be sure it can be implemented correctly.
- User testing by a knowledgeable user is needed to make sure the system as designed will meet the user needs correctly.
A knowledgeable user should preferably be available at all stages of testing to help make sure that the software, while performing correctly to design, will also meet the actual requirements in practice and that important functionality has not been overlooked in the design process.
The users involved in testing should preferably be those who actually currently perform the tasks. More senior people may not be aware of all the detail involved in performing a task.
Traditionally, a testing team only got involved in system acceptance testing, but it is better if they are engaged at every stage. The earlier a fault, particularly a design fault, is picked up, the less it costs to correct and the shorter the delay.
Automatic testing tools which are available are a very useful adjunct, as well as different testing methodologies, each of which has its own advantages.
These help to pick simple programming errors and technical mistakes. But ultimately there is no substitute for the educated eye of an experienced user for ensuring correct functioning and design.
White box testing will report on the code usage in each Black-box test, and whether all the code has been tested. Without this it is difficult to ensure that everything has been tested and that every possible combination has been covered.
In practice, an unexpected combination which rarely occurs can be the agent that reveals a programming flaw, and these may go undetected and compromise the data.
To many people it may seem that testing is an expensive process and there is often a temptation to reduce the amount of testing due to budgetary constraints. This is a basic mistake which can compromise the success of the project.
It is better to limit functionality or reduce “bells and whistles” if the budget is tight, but not testing. Thorough testing is the best way of making sure that a quality system is produced, and this should be the primary concern.
Get more information on our quality assurance and software testing services.
© Global World Tech
Posted: November 18th, 2011 under Software Testing.