Black box unit testing focuses on testing the functionality of the
application's individual components or units (each class and method) to
ensure that they behave properly and satisfy a defined specification or
use case. Having individual test cases for each unit of a code base
allows for quick identification, isolation, and resolution of errors.
Unit testing allows functionality problems to be identified and
resolved as soon as they are introduced — which is easier and
dramatically less costly than leaving them until the end of the
development cycle. The practice of unit testing, when applied as a
regular element of the software development process, has been proven to
significantly improve application quality, reliability, and performance
and to enhance the overall productivity and predictability of a
software development effort.
Despite its well-perceived value, unit testing is not practiced by
the majority of software development organizations. Even where it is
practiced, it is typically applied inconsistently or incorrectly. The
lack of general knowledge about how to write and apply unit test cases;
compressed and overcommitted development schedules; the absence of good
automated and integrated unit testing tools; and the absence of the
appropriate guidance in how to apply them are all contributors to the
slow adoption of the practice. Software development organizations
trying to implement a unit testing practice without availing themselves
of automated tools or the expertise in implementation and deployment
most often fail.
The traditional practice of relying on QA to find and report errors
at the end of the development cycle results in many unproductive man
hours of development time spent sifting through large, complex code
bases trying to find the source of those errors — all before a fix for
the error can even be contemplated. Finding and fixing a unit-level
error immediately after coding has proven to be 10 to 100 times less
costly than finding and fixing the same error later in the development
process. A practice of unit testing is key to achieving automated
software error prevention.
When you perform functional testing at the unit level, you can
quickly identify simple functionality problems because you are
verifying the unit directly. If the same problem entered the shared
code base and became part of a multi-million line application, it might
surface only as strange behavior during application testing and go
unaddressed. Implemented correctly, black box testing can be used to
create test scenarios that mimic "bug" behavior. Test cases
representative of inappropriate behavior or a specific bug will, when
executed regularly, ensure that these bugs or incorrect behavior do not
reenter the code base.
An effective black box unit testing practice requires knowing not
only how to create test cases, but also how to apply and maintain them.
In complex systems that often have multiple baselines, maintaining and
applying black box test cases is challenging. Without a well-defined
and implemented unit testing practice, inconsistent and/or inaccurate
test results are likely.
To achieve effective black box unit testing, you must not only have
a defined practice for its use, but that practice must be implemented
and integrated into your software development lifecycle so that it is
used consistently and regularly by your software development teams. It
is also important to have the means to monitor and measure its use.
|