HomePractices Page 2 - The Art Of Software Development (part 4): Delivering Quality
Code To Zero - Practices
Just writing code isn't enough - you also need to test itthoroughly before you release it to a customer. This article discussesthe testing phase of the software development cycle, providing you withan overview of test cases and testing processes, together with adiscussion of how to go about documenting your software in a clear andconcise user manual.
Writing code is only half the battle - the other half involves testingit. Typically, three types of tests are performed across the softwaredevelopment lifecycle.
Unit testing: This involves testing the units, or individual codemodules, that make up the entire system. This type of test is performedto ensure that each module meets the individual requirements laid downfor it, and it highlights bugs or errors within each module. Typically,unit testing is not performed by the test team; rather, it is performedby the developer, or the developer's peer group.
Unit testing is meant to confirm the functionality, data processing,logic flow and exception handling of a particular unit of code. In mostcases, it involves supplying the code unit with a variety of input dataand verifying that the output produced is as per requirements. Errorsthat are encountered can be rapidly fixed by the developer in thisphase, before the code moves to the system test team for more exhaustivetesting. Unit testing thus serves as the first defense in the battleagainst software flaws.
System testing: In this second phase, the integrated system is testedto verify that all the modules within it are working properly,communicating with each other where required, and satisfy allinter-module dependencies. This second level of testing highlights flawsin the linkages between modules, and also serves to verify the completefunctionality of the system as it will be delivered to the customer.
Typically, system testing is performed by a separate test team, whichinstalls the software in an independent test environment and proceeds toverify it using the test plan previously decided. This type of testingis intended to find flaws in the communication between modules, and alsobugs within each module that may have been missed during the developer'sunit testing. The test team may also provide feedback to the developmentteam on the usability and performance of the software being tested; thisfeedback may be used to improve the product during subsequent testcycles.
Acceptance testing: As the name implies, an acceptance test is thetest that the software must undergo in order for it to be formallyaccepted by the customer. Although the test plan for this activity isdefined near the beginning of this project (you might remember this fromthe second part of this article), this test is typically organized last,once the internal tests are concluded to the satisfaction of the projectmanager.
Acceptance testing may be performed by the customer, or by an internalteam acting on behalf of the customer. Note that it may be necessary totrain the customer on proper operation of the system prior to acceptancetesting. Depending on the nature of the application and the customer'srequirements, acceptance testing may be performed on-site, or in asimulated environment that replicates the conditions of the real one.
Each of these phases is essential to the software development process,and plays an important role in achieving the goal of high-quality,zero-defect software. Sadly, however, many organizations neglect thisphase of the development cycle, and this is turn leads to bugs appearingat a later stage. Since it is generally understood that software bugsare erectified by the developer at no charge, the lack of adequateattention to software testing can cause project costs tomushroom...which is bad for the bottom line in the long run.
It is for this reason that most successful companies pay rigorousattention to their quality control procedures, and ensure that processesare in place to discover and correct bugs before the software isreleased. Regardless of whether you're an independent developer or amanager of a large development team, remember to budget enough time inyour schedule for a thorough test of your software, together with timefor error rectification and re-test - your customers will thank you, andyour organization's accountants will think nice things about you.