Unit Testing
In computer programming,
unit testing is a software
testing method by which individual units of source code, sets
of one or more computer program modules together with associated control data,
usage procedures, and operating procedures are tested to determine if they are
fit for use. Intuitively, one can view a unit as the smallest testable part of
an application. In procedural programming, a unit could be an entire
module, but it is more commonly an individual function or procedure. In object-oriented
programming, a unit is often an entire interface, such as a class, but
could be an individual method. Unit tests are short code fragments created by
programmers or occasionally by white box testers during the development
process.
Ideally, each test case
is independent from the others. Substitutes such as method stubs, mock
objects, fakes, and test harnesses can be used to assist
testing a module in isolation. Unit tests are typically written and run by software
developers to ensure that code meets its design and behaves as intended.
UNIT TESTING LIMITATIONS
Testing will not catch every
error in the program, since it cannot evaluate every execution path in any but
the most trivial programs. The same is true for unit testing. Additionally,
unit testing by definition only tests the functionality of the units
themselves. Therefore, it will not catch integration errors or broader system-level
errors (such as functions performed across multiple units, or non-functional
test areas such as performance). Unit testing should be done in
conjunction with other software testing activities, as they can only
show the presence or absence of particular errors; they cannot prove a complete
absence of errors. In order to guarantee correct behavior for every execution
path and every possible input, and ensure the absence of errors, other
techniques are required, namely the application of formal methods to proving
that a software component has no unexpected behavior.
Software testing is a
combinatorial problem. For example, every boolean decision statement requires
at least two tests: one with an outcome of "true" and one with an
outcome of "false". As a result, for every line of code written,
programmers often need 3 to 5 lines of test code. This obviously takes time and
its investment may not be worth the effort. There are also many problems that
cannot easily be tested at all – for example those that are nondeterministic
or involve multiple threads. In addition, code for a unit test is likely
to be at least as buggy as the code it is testing. Fred Brooks in The Mythical Man-Month quotes:
"Never go to sea with two chronometers; take one or three.Meaning, if two chronometers
contradict, how do you know which one is correct?
Another challenge related to
writing the unit tests is the difficulty of setting up realistic and useful
tests. It is necessary to create relevant initial conditions so the part of the
application being tested behaves like part of the complete system. If these
initial conditions are not set correctly, the test will not be exercising the
code in a realistic context, which diminishes the value and accuracy of unit
test results
To obtain the intended
benefits from unit testing, rigorous discipline is needed throughout the
software development process. It is essential to keep careful records not only
of the tests that have been performed, but also of all changes that have been
made to the source code of this or any other unit in the software. Use of a version
control system is essential. If a later version of the unit fails a
particular test that it had previously passed, the version-control software can
provide a list of the source code changes (if any) that have been applied to
the unit since that time.
It is also essential to
implement a sustainable process for ensuring that test case failures are
reviewed daily and addressed immediately. If such a process is not implemented
and ingrained into the team's workflow, the application will evolve out of sync
with the unit test suite, increasing false positives and reducing the
effectiveness of the test suite.
Unit testing embedded system
software presents a unique challenge: Since the software is being developed on
a different platform than the one it will eventually run on, you cannot readily
run a test program in the actual deployment environment, as is possible with
desktop programs.
Related Topics
Privacy Policy, Terms and Conditions, DMCA Policy and Compliant
Copyright © 2018-2023 BrainKart.com; All Rights Reserved. Developed by Therithal info, Chennai.