Sunteți pe pagina 1din 7

1. What is Software Testing?

Ans: Definitions of Software Testing y y y y y

It is the process of Creating, Implementing and Evaluating tests. Testing measures software quality Testing can find faults. When they are removed, software quality is improved. Testing is executing a program with an indent of finding Error/Fault and Failure. IEEE Terminology: An examination of the behavior of the program by executing on sample data sets. Ans:

2. Why is Software Testing Important?

y y y y y y y y

To discover defects. To avoid user detecting problems To prove that the software has no faults To learn about the reliability of the software. To avoid being sued by customers To ensure that product works as user expected. To stay in business To detect defects early, which helps in reducing the cost of defect fixing?

3. Testing Techniques :
Black Box Testing:
y y y

Test the correctness of the functionality with the help of Inputs and Outputs. User doesnt require the knowledge of software code. Black box testing is also called as Functionality Testing.

It attempts to find errors in the following categories:

y y y y y

Incorrect or missing functions. Interface errors. Errors in data structures or external data base access. Behavior or performance based errors. Initialization or termination errors.

White Box Testing:

y y y

Testing the Internal program logic White box testing is also called as Structural testing. User does require the knowledge of software code.

y y y y y y

Testing all loops Testing Basis paths Testing conditional statements Testing data structures Testing Logic Errors Testing Incorrect assumptions

Structure = 1 Entry + 1 Exit with certain Constraints, Conditions and Loops. Logic Errors and incorrect assumptions most are likely to be made while coding for special cases. Need to ensure these execution paths are tested. Approaches / Methods / Techniques for White Box Testing Basic Path Testing (Cyclomatic Complexity (Mc Cabe Method)
y y y y

Measures the logical complexity of a procedural design. Provides flow-graph notation to identify independent paths of processing Once paths are identified - tests can be developed for - loops, conditions Process guarantees that every statement will get executed at least once.

Structure Testing:
y y y

Condition Testing - All logical conditions contained in the program module should be tested. Data Flow testing- Selects test paths according to the location of definitions and use of variables. Loop Testing: o Simple Loops o Nested Loops o Concatenated Loops o Unstructured Loops

Gray Box Testing:

y y y y y y

It is just a combination of both Black box & white box testing. It is platform independent and language independent. Used to test embedded systems. Functionality and behavioral parts are tested. Tester should have the knowledge of both the internals and externals of the function If you know something about how the product works on the inside, you can test it better from the outside.

Gray box testing is especially important with Web and Internet applications, because the Internet is built around loosely integrated components that connect via relatively well-defined interfaces. Unless you understand the architecture of the Net, your testing will be skin deep. ACCEPTANCE TESTING Testing to verify a product meets customer specified requirements. A customer usually does this type of testing on a product that is developed externally. BLACK BOX TESTING Testing without knowledge of the internal workings of the item being tested. Tests are usually functional. COMPATIBILITY TESTING Testing to ensure compatibility of an application or Web site with different browsers, OSs, and hardware platforms. Compatibility testing can be performed manually or can be driven by an automated functional or regression test suite. CONFORMANCE TESTING Verifying implementation conformance to industry standards. Producing tests for the behavior of an implementation to be sure it provides the portability, interoperability, and/or compatibility a standard defines. FUNCTIONAL TESTING Validating an application or Web site conforms to its specifications and correctly performs all its required functions. This entails a series of tests which perform a feature by feature validation of behavior, using a wide range of normal and erroneous input data. This can involve testing of the product's user interface, APIs, database management, security, installation, networking; etc F testing can be performed on an automated or manual basis using black box or white box methodologies. INTEGRATION TESTING Testing in which modules are combined and tested as a group. Modules are typically code modules, individual applications, client and server applications on a network, etc. Integration Testing follows unit testing and precedes system testing. LOAD TESTING Load testing is a generic term covering Performance Testing and Stress Testing. PERFORMANCE TESTING Performance testing can be applied to understand your application or WWW site's scalability, or to benchmark the performance in an environment of third party products such as servers and middleware for potential purchase. This sort of testing is particularly useful to identify performance bottlenecks in high use applications. Performance testing generally involves an automated test suite as this allows easy simulation of a variety of normal, peak, and exceptional load conditions. REGRESSION TESTING Similar in scope to a functional test, a regression test allows a consistent, repeatable validation of each new release of a product or Web site. Such testing ensures reported product defects have been corrected for each new release and that no new quality problems were introduced in the maintenance process. Though regression testing can be performed manually an automated test suite is often used to reduce the time and resources needed to perform the required testing.

SMOKE TESTING A quick-and-dirty test that the major functions of a piece of software work without bothering with finer details. Originated in the hardware testing practice of turning on a new piece of hardware for the first time and considering it a success if it does not catch on fire. STRESS TESTING Testing conducted to evaluate a system or component at or beyond the limits of its specified requirements to determine the load under which it fails and how. A graceful degradation under load leading to non-catastrophic failure is the desired result. Often Stress Testing is performed using the same process as Performance Testing but employing a very high level of simulated load. SYSTEM TESTING Testing conducted on a complete, integrated system to evaluate the system's compliance with its specified requirements. System testing falls within the scope of black box testing, and as such, should require no knowledge of the inner design of the code or logic. UNIT TESTING Functional and reliability testing in an Engineering environment. Producing tests for the behavior of components of a product to ensure their correct behavior prior to system integration. WHITE BOX TESTING Testing based on an analysis of internal workings and structure of a piece of software. Includes techniques such as Branch Testing and Path Testing. Also known as Structural Testing and Glass Box Testing.

This article will provide a brief introduction and overview of software testing, discuss both manual and automated testing, and introduce the concept of blended testing. It is intended as a brief primer on the software testing process. Software testing is both a discipline and a process. Though software testing is part of the software development process, it should not be considered part of software development. It is a separate discipline from software development. Software development is the process of coding functionality to meet defined end-user needs. Software testing is an iterative process of both validating functionality, and, even more important, attempting to break the software. The iterative process of software testing consists of:
y y y y

Designing tests Executing tests Identifying problems Getting problems fixed

The objective of software testing is to find problems and fix them to improve quality. Software testing typically represents 40% of a software development budget. While Software testing tends to be considered a part of development, it is really its own discipline and should be tracked as its own project. Software testing, while working very closely

with development, should be independent enough to be able to hold-up or slow product delivery if quality objectives are not met. Types of Software Testing Software testing consists of several subcategories, each of which is done for different purposes, and often using different techniques. Software testing categories include:

y y

y y y y y

Functionality testing to verify the proper functionality of the software, including validation of system and business requirements, validation of formulas and calculations, as well as testing of user interface functionality. Forced error testing, or attempting to break and fix the software during testing so that customers do not break it in production. Compatibility testing to ensure that software is compatible with various hardware platforms, operating systems, other software packages, and even previous releases of the same software. Performance testing to see how well software performs in terms of the speed of computations and responsiveness to the end-user. Scalability testing to ensure that the software will function well as the number of users and size of databases increase. Stress testing to see how the system performs under extreme conditions, such as a very large number of simultaneous users. Usability testing to ensure that the software is easy and intuitive to use. Application security testing to make sure that valuable and sensitive data cannot be accessed inappropriately or compromised under concerted attack.

In some cases, there may even have to be other types of testing such as regulatory-compliance testing, depending on the type of software and intended industry. Methods of Software Testing There are two basic methods of performing software testing: 1. Manual testing 2. Automated testing Manual Software Testing As the name would imply, manual software testing is the process of an individual or individuals manually testing software. This can take the form of navigating user interfaces, submitting information, or even trying to hack the software or underlying database. As one might presume, manual software testing is labor-intensive and slow. There are some things for which manual software testing is appropriate, including:

User interface or usability testing

y y y

Exploratory/ad hoc testing (where testers do not follow a 'script', but rather testers 'explore' the application and use their instincts to find bugs) Testing areas of the application which experience a lot of change. User acceptance testing (often, this can also be automated)

The time commitment involved with manual software testing is one of its most significant drawbacks. The time needed to fully test the system will typically range from weeks to months. Variability of results depending on who is performing the tests can also be a problem. For these reasons, many companies look to automation as a means of accelerating the software testing process while minimizing the variability of results. Automated Software Testing Automated software testing is the process of creating test scripts that can then be run automatically, repetitively, and through many iterations. Done properly, automated software testing can help to minimize the variability of results, speed up the testing process, increase test coverage (the number of different things tested), and ultimately provide greater confidence in the quality of the software being tested. There are, however, some things for which automated software testing is not appropriate. These include:
y y

End user usability testing is not typically a good candidate for automated testing. Tests which will not be run more than a couple of times are typically not a good candidate for automated tasting, since the payoff of in test automation comes after many test executions. Tests for areas of the application which experience a lot of change are also not a good candidate for automation since this can lead to substantial maintenance of test automation scripts. Such areas of the application may be more effectively tested manually.

It is important to note that test automation is software, and just like the software you are building for internal or external customers, it must be well-architected. A good test automation architecture, such as a keyword-driven testing framework, will reduce the overall cost of ownership of your test automation by minimizing maintenance expense and increasing the number of automated tests, allowing your organization to run more tests (and achieve higher quality) for the same investment of time and money. Achieving the Right Blend of Software Testing An effective software testing process is typically a mix of test types, executed through a combination of manual and automated testing. The mix and number of tests is determined by the quality requirements of the application (i.e. Is it mission critical? Is time-to-market the most important factor?). Each method (automated or manual) is used for what is appropriate. Manual testing is best leveraged for those tests which require spontaneity and creativity, as well a good deal of subjectivity:

y y

User interface or usability testing Exploratory/ad hoc testing

While automated testing is best used for tests which are explicit and repetitive:
y y y

General QA and functionality tests (i.e. does each module do what the requirements say it should? How does the application respond to incorrect inputs?) 'End to end' scenario tests (simulating a 'real world' use of the software in a production environment) Performance, load, and stress testing

In practice, 80 to 95% of tests should be able to be automated. It is typically not the tests which limit the amount of automation, but rather a limit in the number or ability of testing staff, or technical limitations in the test automation tool to interact with the application. The right combination of tests, technology, and people can lead to a very high level of test automation and all the inherent benefits. Conclusion As one can see, software testing is a very large undertaking. It is very important to have an effective process in place prior to embarking on any major software development effort. This is essential to the success of the overall effort, and delivering quality software to end-users.