Friday 30 November 2012

Test case optimization techniques



Black Box Testing

Black Box Testing is testing without knowledge of the internal workings of the item being tested. For example, when black box testing is applied to software engineering, the tester would only know the "legal" inputs and what the expected outputs should be, but not how the program actually arrives at those outputs. It is because of this that black box testing can be considered testing with respect to the specifications, no other knowledge of the program is necessary




Black - Box Testing




Black Box Testing:
Focus on functional requirements.
Compliments white box testing.

“A programmer makes mistakes by Omission as well as Commission”

Black box testing is concerned only with testing the specification, it cannot guarantee that all parts of the implementation have been tested. Thus black box testing is testing against the specification and will discover faults of omission, indicating that part of the specification has not been fulfilled. White box testing is testing against the implementation and will discover faults of commission, indicating that part of the implementation is faulty. In order to fully test a software product both black and white box testing are required.

Black Box Testing Attempts to find:
1.      incorrect or missing functions
2.      interface errors
3.      errors in data structures or external database access
4.      performance errors
5.      initialization and termination errors

The advantages of this type of testing include:
·         The test is unbiased because the designer and the tester are independent of each other.
·         The tester does not need knowledge of any specific programming languages.
·         The test is done from the point of view of the user, not the designer.
·         Test cases can be designed as soon as the specifications are complete.
The disadvantages of this type of testing include:
·         The test can be redundant if the software designer has already run a test case.
·         The test cases are difficult to design.
·         Testing every possible input stream is unrealistic because it would take a inordinate amount of time; therefore, many program paths will go untested.

Black Box Testing Methods:

1.      Equivalence Partitioning
2.      Boundary Value Analysis.
3.      Cause Effect Graphing Techniques.
4.      Comparison Testing


Equivalence Partitioning
Equivalence partitioning is a black-box testing method that divides the input domain of a program into classes of data from which test cases can be derived.
An ideal test case single-handedly uncovers a class of errors that might otherwise require many cases to be executed before the general error is observed. Equivalence partitioning strives to define a test case that uncovers classes of errors, thereby reducing the total number of test cases that must be developed.

– An equivalence class represents a set of valid or invalid classes for an input condition
        An input condition is a specific numeric value, a range of values, a set of related values or a Boolean condition (true or false)

Equivalence Partitioning






• Example: Suppose a program called for an input that is a 5-digit integer between 10,000 and 99,999. This input condition defines the following equivalence classes:

        equivalence partitions are <10,000, 10,000-99,999 and >10, 000
        Test cases would be selected from each equivalence class i.e. 00000, 09999, 10000, 99999, 10001






If input condition specifies
– A range, 1valid and 2 invalid classes are defined
– A specific value, 1 valid and 2 invalid classes are defined
– A member of a set, 1 valid and 1 invalid classes are defined
        A Boolean condition, 1 valid and 1 invalid classes are defined

Basic idea:
Partition the input domain of a program into a finite number of equivalence classes such that one can reasonably assume that a test of a representative value of each class is equivalent to a test of any other value.
The method:
Step 1: Study the program specification to find input conditions and identify the equivalence classes.

(1) for each condition Pi, identify one valid equivalence class defined by Pi and one
invalid equivalence class defined by ¬Pi. e.g., if Pi is "the first symbol of the identifier must be a letter" then the valid equivalence class is defined by "it is a letter" and the invalid one is defined by "it is not a letter".
(2) for each input condition of the form Pi and Pj, identify one valid equivalence class
defined by Pi and Pj, and two invalid ones defined by ¬ Pi and ¬ Pj, respectively.
e.g., if the input condition is 1 = n = 5, the valid equivalence class is defined by 1 = n = 5, and the two invalid equivalence classes are defined by n < 1 and n > 5, respectively.
(3) if there is any reason to suspect that elements in an equivalence class are not treated in an identical manner by the program, split the equivalence class into smaller ones.

The method:
Step 2: Select the test cases.
(1) Until all valid equivalence classes have been covered by test cases, find a new test case that covers as many of the uncovered valid equivalence classes as possible.
(2) For every invalid equivalence class, find a test case that covers that invalid equivalence class only.


Boundary Value Analysis
Since a greater number of errors tend to occur at the boundaries of the input domain than in the "center", boundary value analysis has been developed as a testing technique. BVA compliments equivalence partitioning and leads to a selection of test cases that exercise bounding values. Rather than focusing solely on input conditions, BVA derives test cases from the output domain as well.

• Boundary Value Analysis is a black box testing technique that where test cases are designed to test the boundary of an input domain. Studies have shown that more errors occur on the "boundary" of an input domain rather than on the "center".
• Boundary value analysis complements and can be used in conjunction with
equivalence partitioning.

– Test at min and max values of an input and output range, and just below max and just above min values
– Test values at input and output min and max numbers and just above min and just below max numbers
– Test at data structure boundaries

Basic idea:
Select test cases that lie directly on, above, and beneath the boundaries of input  equivalence classes and output equivalence classes to explore the program behavior along the border.
(The counterpart of domain-strategy testing)

Boundary-value analysis

This method differs from the equivalence partitioning in two respects:
(a) rather than checking to see if the program will execute correctly for a representative element in an equivalence class, it attempts to determine if the program defines the equivalence class correctly, and
(b) rather than selecting test cases based on input conditions only, it also requires derivation of test cases base on output conditions.

The method:
(1) If an input variable is defined in a range from LB to UB, use LB, UB, LB - ? , and UB + ? as the test cases. (Here delta represents the smallest possible change in value.)
(2) Use rule (1) for each output variable.
(3) If the input or output of a program is a sequence (e.g., a sequential file or a linear list), focus attention on the first and last element of the sequence.
(4) Use your ingenuity to search for additional boundary values.


Cause Effect Graphing Techniques
Translation of natural language descriptions of procedures to software based algorithms is error prone.

        Causes and effects are listed, graphed, converted to a decision table, and then to test cases

Basic idea:
A "cause" is an input condition, and an "effect" is a specific sequence of computations to be performed. A cause-effect graph is basically a directed graph that describes the logical combinations of causes and their relationship to the effects to be produced.
Cause-effect graphing is a technique that aids in selecting test cases to check if the program will produce right effect for every possible combination of causes.

The method:
(1) Divide the program specification into pieces of workable size.
(2) Identify causes and effects in the specification.
(3) Analyze the specification to determine the logical relationship among causes and effects, and express it as a cause effect graph.
(4) Identify syntactic or environmental constraints that make certain combinations impossible.
(5) Translate the graph into a limited-entry decision table.
(6) Select a test case for every column in the decision table.

The format of a limited-entry decision table
condition stubs
condition entries
action stubs                          
action entries


• The condition stub contains a list of conditions, one to each row.
• The condition entry lists combinations of condition values in a column.
• The condition constraints express interactions between conditions.
• The action stub contains a list of actions.
• The action entry contains an "X" for each action to be performed.
• The application constraints express the conditions under which an action is to be performed.

Example:
Shown below is an example of a limited-entry decision table obtained by analyzing and completing the following program specification:
From US Army Corps of Engineers:
Executive Order 10358 provides in the case of an employee whose work week varies from the normal Monday through Friday work week, that Labor Day and Thanksgiving Day each were to be observed on the next succeeding workday when the holiday fell on a day outside the employee's regular basic work week. Now, when Labor Day, Thanksgiving Day or any of the new Monday holidays are outside an employee's basic workbook, the immediately preceding workday will be his holiday when the non-workday on which the holiday falls is the second non-workday or the non-workday designated as the employee's day off in lieu of Saturday. When the non-workday on which the holiday falls is the first non-workday or the non-workday designated as the employee's day off in lieu of Sunday, the holiday observance is moved to the next succeeding workday.

How do you test code which attempts to implement this?
Cause-effect graphing attempts to provide a concise representation of logical combinations and corresponding actions.
1.      Causes (input conditions) and effects (actions) are listed for a module and an identifier is assigned to each.
2.      A cause-effect graph developed.
3.      Graph converted to a decision table.
4.      Decision table rules are converted to test cases.

Comparison Testing

In some applications the reliability is critical.
Redundant hardware and software may be used.
For redundant s/w, use separate teams to develop independent versions of the software.
Test each version with same test data to ensure all provide identical output.
Run all versions in parallel with a real-time comparison of results.
Even if will only run one version in final system, for some critical applications can develop independent versions and use comparison testing or back-to-back testing.
When outputs of versions differ, each is investigated to determine if there is a defect.
Method does not catch errors in the specification.







Diffrence between Black Box , white box and grey box testing



White Box Testing Vs. Black Box Testing
    >  Black box testing is easy to use, as the tester does not have to be bothered about the internal workings of the software. The test cases have to be written around the application, exactly the way the end user would use the application.
    > However, with white box testing, the tester has to look inside the application and design the test cases.
    > Since the tester is only concerned about the interface, the task of designing test cases in black box testing does not take very long, as the internal paths do not have to be identified as is the case with white box testing. The task of testing is simplified, as the focus of attention is only the valid and invalid inputs and the outputs received.
    > However, in white box testing digging into the application helps in thorough testing of the application, which is not possible with black box.

 The other difference between white box and black box testing is that :
> black box testing a script is used to test the application. When the interface changes, the valid and invalid input and the output also changes, due to which it becomes very difficult to maintain a script.
> However, with white box testing, the objects to be tested are identified programmatically, which proves to be useful in changing interface scenarios

Gray box testing

When we talk about gray box testing, we're talking about testing a system while having at least some knowledge of the internals of a system. This knowledge is usually constrained to detailed design documents and architecture diagrams. Example : Data Encryption of credit card  no.
Gray box testing allows security analysts to run automated and manual penetration tests against a target application. And it allows those analysts to focus and prioritize their efforts based on superior knowledge of the target system. This increased knowledge can result in more significant vulnerabilities being identified with a significantly lower degree of effort and can be a sensible way for analysts to better approximate certain advantages attackers have versus security professionals when assessing applications.