In general the “testing lifecycle” of software is summarized as: unit testing, system or integration testing, and acceptance (functional) testing.
The basic concept of unit testing is write more code which will test the main code we’ve written, by “throwing” sample data at it and examining what it gets back.
There are two approaches to unit testing: black box testing and white box testing.
A Unit Test verifies the behavior of some small part of the overall system. What makes a test a unit test is that the system under test (SUT) is a very small subset of the overall system and may be unrecognizable to someone who is not involved in building the software. The actual SUT may be as small as a single object or method that is a consequence of one or more design decisions although its behavior may also be traced back to some aspect of the functional requirements. There is no need for unit tests to be readable, recognizable or verifiable by the customer or business domain expert. In eXtreme Programming, unit tests are also called developer testsor programmer tests.
System Test usually occurs after the functional verification stage is complete, which is after the core function has been verified. It is intended to find problems with the entire system as a whole. The system test phase occurs near the end of a development life cycle. It is therefore imperative that system test applications are designed to be as efficient as possible in finding code defects. System test usually comprises of three areas. These are:
1. Performance: It involves the process of determining the relevant product statistics. For example: How many messages per second? How many simultaneous users of a service are acceptable?
2. Scenario: It is the process of recreating an exact configuration that a customer requires. Any problems found in the scenario can therefore be detected before the customer uses the product.
3. Stress (or workload balancing): It is different from the other two areas in that it is designed to strain the software by applying a large workload effort. If carried out effectively, by maintaining a highly strenuous usage of the product (but not beyond the limits determined by the performance statistics), stress testing often uncovers many obscure bugs that any of the other techniques mentioned above will not find (it is also often the case that they will be the most difficult to fix).
Arguably the most efficient of the three system test components, in terms of detecting code defects, is the area of stress testing.
_______________-
Functional Verification is a testing process in which designers, who have limited knowledge of the product source code, identify the core functionality of a product or service. Tests are designed to prove this core function conforms to the specification.
_______________-