Survey on Various Testing Techniques and Strategies for Bug Finding

: Software testing is verification and validation process aimed for evaluating a program and ensures that it meets the required result. The main goal of software testing is to uncover the errors in software. So the main aim of test cases is to derive set of tests that have highest probability of finding bugs. There are many approaches to software testing, but effective testing of any software product is essentially a tough process. It is nearly impossible to find all the errors in the program. The major problem in testing is what would be the strategy that we should adopt for testing. Thus, the selection of right strategy at the right time will make the software testing efficient and effective. In this paper I have described software testing techniques which are classified by purpose.


INTRODUCTION
Software testing is a set of activities primarily aimed at finding the maximum errors in software. It also verifies and validate whether the software or system is working correctly. It also analyzes the software. Software testing is not just used for finding and fixing of bugs but it also ensures that the system is working according to the specifications set by the developer. Software testing is a process to make sure that the computer code does what it was designed to do. The main purpose of testing is to maintain quality, attain reliability, correctness, completeness, validation or verification. The general objective of software testing is to check the quality of software system by exercising the software in systematic and controlled circumstances.

SOFTWARE TESTING TECHNIQUES
In this Section the emphasis is mainly on the different software testing Techniques. Software Testing Techniques can be divided into two types:-  The highly effective testing in detecting and resolving problem is the White box testing. In this bugs are often found before they cause trouble. White box testing is the checking of how the system processes the input to generate the required output. White box testing is also called clear box testing. While white-box testing can be applied at the unit, integration and system levels of the software testing process. White box testing is considered as a security testing method that can be used to validate the code in accordance to intended design, to validate security functionality, and to uncover exploitable vulnerabilities.
Some Different types of white box testing techniques are as follows:-1) Basis Path Testing 2) Loop Testing

3) Control Structure Testing
Advantages of white box testing:-1) All logical decisions will be exercised.
2) All loops at their boundaries will be executed.
3) All modules will be checked at least once.

4)
For validation maintenance all data structures will be exercised.

5) Hidden Errors in codes are revealed.
Disadvantages of white box testing:-1) Omitting Missed out cases in the code.
2) It is costly as the internal structure and the code are basic necessities for the tester.
3) It is near to impossible to look for every bit of code to find out hidden errors, which results in failure of the application. 2) Few possible input can actually be tested.
3) Some parts of the back end are never tested.
4) Chances of having unidentified paths during this testing.

5)
Chances of having repetition of tests that are already done by programmer.

Input
Process Output c) Grey Box Testing: A methodology used to test software applications is gray box testing. This testing is platform and language independent. Gray box method can be applied in real time using software executing. Gray box testing combines the testing strategies of white box and black box. It is used for testing a module of software against its specifications using some knowledge of its internal working. The understanding of internals of the program in grey box testing is more than black box testing, but less than clear box testing.

Performance Testing
Performance Testing involve all the phases of testing life cycle as an independent module which involves plan, design, execution, analysis and reporting. All softwares do not have specification on performance explicitly. Performance has always been an issue for driving a computer evolution. The goals of performance testing can be any of these: performance bottleneck identification, performance comparison and evaluation. Performance testing is of two types:-Load testing: Load testing is the process of testing a computer, peripheral, server, network or applications to its specifications. Load testing can be done under control to compare the capabilities of different systems or to measure the capabilities of a single system. In this we check how the load of many users handled by system.

Stress testing:
Stress testing is conducted to evaluate a system at or beyond the limits of its specified requirements to determine the load under which it fails and how.

Security Testing
Software quality, reliability and security are tightly coupled. Flaws in software can be exposed by intruders for security holes. Security testing makes sure that only the authorized user can access the program and the functions available to their security level. The security testing is performed to check any information leakage in encrypting the application or using different software and hardware firewall.

Reliability Testing
The purpose of reliability testing is to check potential problems as early as possible and to ensure that the system meets its reliability requirements. Reliability testing is related to many aspects of software in which testing process is included; this testing process is an effective sampling method to measure software reliability. In system after software is developed reliability testing techniques like analyze or fix techniques can be carried out to check whether to use the software.

SOFTWARE TESTING STRATEGIES
A software Testing strategy integrates software test case design methods into a well planned manner that result in successful software construction. Software testing Strategies gives the road map for testing. A testing Strategy should be flexible to promote a customized testing approach. Strategy is generally developed by project managers, software engineer and testing specialist. There are four different software testing strategies.
A) Unit testing B) Integration testing C) Acceptance/Validation testing D) System testing

A. Unit Testing
Unit is the smallest module of any software. It is a collection of lines of code which can be tested. Unit testing is just one level of testing which go together to make the platform of complete system testing. It integrates system level testing and also complements code reviews and walkthroughs. Unit testing is generally considered as a white box test class.

Unit testing techniques:
A number of effective testing techniques are usable in unit testing stage. The testing techniques may be broadly divided into three types:

B. Integration Testing
Integration testing is a systematic technique for constructing the program structure and conducting tests to uncover errors associated with interfacing. The main objective is to take unit tested modules and build a program structure in accordance to design. Different Integration testing Strategies are discussed below:

1) Top down Integration testing 2) Bottom up Integration testing
Top down Integration: Top-down integration testing is an incremental approach to construct program structure. Modules are integrated by moving downward through the structure, beginning from the master module. Modules subordinate to the master module are incorporated into the structure in either a depth-first or breadth-first manner.

Bottom up Integration:
Bottom-up integration testing tests the atomic modules. Processing required for components subordinate to a given level is always available because components are integrated from the bottom up.

C. Acceptance Testing
Acceptance testing is carried out to verify if the product is developed as per the standards and specified criteria and meets all the specified requirements. This type of testing is generally carried out by a user/customer where the product is developed by another party. Acceptance testing falls within the black box testing methodology where the user is not very much interested in internal working/coding of the system. In this testing user evaluates the overall functioning of the system and compares it with the requirements specified by them. Hence it is considered as one of the most important testing by user before the system is finally delivered to the end user. It is also known as validation testing or final testing. Acceptance testing is carried out at two different levels; one at the system provider level and another at the end user level.

D. System Testing
System testing of software is conducted on a complete, integrated system to evaluate the system with its specified requirements. System testing falls under the scope of black box testing and does not require any knowledge of the inner design of the code. System testing is actually a series of different tests whose primary purpose is to execute the computerbased system. S e p t 3 0 , 2 0 1 3

CONCLUSION
Software testing is an important technique for the improvement and measurement of a software system quality. But it is really tough task to find out all the errors in the program. So, the fundamental issue is which strategy we would adopt to test. In the paper, I have described some of the most effective and commonly used strategies of software testing which are classified by purpose such as Correctness testing, Performance testing, Reliability testing, Security testing. Further we have discussed the basic principles of black box testing, white box testing and gray box testing. We have surveyed some of the strategies supporting these paradigms, and have discussed their pros and cons. Finally we describes about different software testing strategies such as unit testing, Integration testing, acceptance testing and system testing.