The Art Of Software Development (part 4): Delivering Quality - Code To Zero (
Page 2 of 7 ) Writing code is only half the battle - the other half involves testing
it. Typically, three types of tests are performed across the software
development lifecycle.
- Unit testing: This involves testing the units, or individual code
modules, that make up the entire system. This type of test is performed
to ensure that each module meets the individual requirements laid down
for it, and it highlights bugs or errors within each module. Typically,
unit testing is not performed by the test team; rather, it is performed
by 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 most
cases, it involves supplying the code unit with a variety of input data
and verifying that the output produced is as per requirements. Errors
that are encountered can be rapidly fixed by the developer in this
phase, before the code moves to the system test team for more exhaustive
testing. Unit testing thus serves as the first defense in the battle
against software flaws.
- System testing: In this second phase, the integrated system is tested
to verify that all the modules within it are working properly,
communicating with each other where required, and satisfy all
inter-module dependencies. This second level of testing highlights flaws
in the linkages between modules, and also serves to verify the complete
functionality of the system as it will be delivered to the customer.
Typically, system testing is performed by a separate test team, which
installs the software in an independent test environment and proceeds to
verify it using the test plan previously decided. This type of testing
is intended to find flaws in the communication between modules, and also
bugs within each module that may have been missed during the developer's
unit testing. The test team may also provide feedback to the development
team on the usability and performance of the software being tested; this
feedback may be used to improve the product during subsequent test
cycles.
- Acceptance testing: As the name implies, an acceptance test is the
test that the software must undergo in order for it to be formally
accepted by the customer. Although the test plan for this activity is
defined near the beginning of this project (you might remember this from
the second part of this article), this test is typically organized last,
once the internal tests are concluded to the satisfaction of the project
manager.
Acceptance testing may be performed by the customer, or by an internal
team acting on behalf of the customer. Note that it may be necessary to
train the customer on proper operation of the system prior to acceptance
testing. Depending on the nature of the application and the customer's
requirements, acceptance testing may be performed on-site, or in a
simulated 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 this
phase of the development cycle, and this is turn leads to bugs appearing
at a later stage. Since it is generally understood that software bugs
are erectified by the developer at no charge, the lack of adequate
attention to software testing can cause project costs to
mushroom...which is bad for the bottom line in the long run.
It is for this reason that most successful companies pay rigorous
attention to their quality control procedures, and ensure that processes
are in place to discover and correct bugs before the software is
released. Regardless of whether you're an independent developer or a
manager of a large development team, remember to budget enough time in
your schedule for a thorough test of your software, together with time
for error rectification and re-test - your customers will thank you, and
your organization's accountants will think nice things about you.
|