Overview Of Software Testing Techniques Information Technology Essay
In digital computers Software testing is considered as old as the hills in the history of this world. Software testing is an important technique of accessing the software for its quality and for the services which will be further provided by the software. About 40% to 50% of development efforts are consumed in the software testing process, it consumes more effort for systems that require higher levels of reliability, rather it can be simply said that software testing is a significant part of the software engineering.
The ultimate goal of software testing is to help the software designers, developers, and managers to construct systems with high quality. Thus research and development on testing aims at efficiently performing effective testing – to find more errors in requirement, design and implementation, and to increase confidence that the software has various qualities. On one hand it can be said that the software testing is mainly a process of finding the loop holes in any software. Testing technique research leads to the estination of practical testing methods and tools.
Progress toward this destination requires fundamental research, and the creation, refinement, extension, and popularization of better methods.
The standard of progress for the research of testing techniques mainly includes the following steps:
Degree of acceptance of the technology inside and outside the research community Â·
Degree of dependability on other areas of software engineering.
Change of research paradigms in response to the maturation of software development technologies
Feasibility of techniques being used in a widespread practical scope, and
Spread of technology – classes, trainings, management attention
The History of Testing Techniques
2.1. Concept Evolution
Software has been tested as early as software has been written i.e. it can be said that as soon as the software creation came into existence soon the software testing also emerged, both the fields are incomplete without each other. The concept of testing itself evolved with time. The evolution of definition and targets of software testing has directed the research on testing techniques.
2.2. Major Technical Contributions
Generally the research on testing techniques can be roughly divided into two categories namely: a)theoretical and b)methodological. Software testing techniques are based in variety or the combination of methods drawn from graph theory, programming language, reliability assessment, reliable-testing theory, etc.
The developments in the fiel of the software testing can be briefly summarized in the following diagram.
Fig: history of testing contributions
Software Testing Fundamentals
Software engineering produces a series of test cases that are used to test the software they have produced. Testing is one of the steps in the software development process that can be seen by the developer as destructive as well as constructive process. Software engineers are typically constructive people and testing requires them to overcome predefined concepts for correctness and deal with conflicts when errors and warnings are identified in any software.
Software Testing Objectives
A software tester should mainly ponder on a various set of rules but the main points to ponder upon are:
Testing is a process of executing a program with the main aim of finding errors.
A good test case will have a good chance of finding an undiscovered error.
A successful test case uncovers a new error or it prevents a future error.
Test information flow
Information flow for testing follows the pattern shown in the figure below. Two types of input are given to the test process:
a software configuration
a test configuration.
Tests are performed and all outcomes are considered, test results are compared with expected results. When erroneous data is identified error is implied and debugging begins. The debugging procedure is the most unpredictable element of the testing procedure. An “error” that indicates a discrepancy of 0.01 percent between the expected and the actual results can take hours, days or months to identify and correct. It is the uncertainty in debugging that causes testing to be difficult to schedule reliability.
Error rate data
Fig:Test information flow
Test case design
The design of software testing can be a challenging process. However software engineers often see testing as an afterthought, producing test cases that feel right but have little assurance that they are complete. The objective of testing is to have the highest likelihood of finding the most errors with a minimum amount of timing and effort. A large number of test case design methods have been developed that offer the software developer and the tester with a systematic approach to testing. Methods offer an approach that can ensure the completeness of tests and offer the highest likelihood for uncovering errors in software.
Any engineering product can be tested in two ways:
(1)Black box testing: Knowing the specified functions that the product has been designed to perform, tests can be performed that show that each function is fully operational
(2)White box: Knowing the internal workings of a product, tests can be performed to see if they are correct
6.1. Black box testing.
Black box testing relates to the tests that are performed at the software interface. Although they are designed to identify errors, black box tests are used to demonstrate that software functions are operational; that inputs are correctly accepted and the output is correctly produced. A black box test considers elements of the system with little interest in the internal logical arrangement of the software.
6.2. White box testing
White box testing of software involves a closer examination of procedural detail. Logical paths through the software are considered by providing test cases that exercise particular sets of conditions and the loops that it contains. The status of the system can be identified at diverse points to establish whether the expected status matches the actual status.
The Testing Spectrum
Testing is almost involved in every stage of software life cycle, but the testing done at each level of software development is different in nature and has different objectives to compare with.
Unit Testing is done at the lowest level. It tests the basic unit of software, which is the smallest testable piece of software, and is often called “unit”, “module”, or “component” interchangeably.
Integration Testing is performed when two or more tested units are combined into a larger structure. The test is often done on both the interfaces between the components and the larger structure being constructed, if its quality property cannot be assessed from its components.
System Testing tends to affirm the end-to-end quality of the entire system. System test is often based on the functional/requirement specification of the system. Non-functional quality attributes, such as reliability, security, and maintainability, are also checked.
Acceptance Testing is done when the completed system is handed over from the developers to the customers or users. The purpose of acceptance testing is rather to give confidence that the system is working than to find errors.
Static Analysis and Dynamic Analysis
Based on whether the actual execution of software under evaluation is needed or not, there are two major categories of quality assurance activities:
Static Analysis focuses on the range of methods that are used to determine or estimate software quality without reference to actual executions. Techniques in this area include code inspection, program analysis, symbolic analysis, and model checking.
Dynamic Analysis deals with specific methods for ascertaining and/or approximating software quality through actual executions, i.e., with real data and under real (or simulated) circumstances. Techniques in this area include synthesis of inputs, the use of structurally dictated testing procedures, and the automation of testing environment generation. Generally the static and dynamic methods are sometimes inseparable, but can almost always discussed separately. In this paper, we mean dynamic analysis when we say testing, since most of the testing activities (thus all the techniques studied in this paper) require the execution of the software.
Functional Technique and Structural Technique:
The information flow of testing is shown in the figure. As we can see, testing involves the configuration of proper inputs, execution of the software over the input, and the analysis of the output. The “Software Configuration” includes requirements specification, design specification, source code, and so on. The “Test Configuration” includes test cases, test plan and procedures, and testing tools. Based on the testing information flow, a testing technique specifies the strategy used in testing to select input test cases and analyze test results. Different techniques reveal different quality aspects of a software system, and there are two major categories of testing techniques, functional and structural. Functional Testing: the software program or system under test is viewed as a “black box”. The selection of test cases for functional testing is based on the requirement or design specification of the software entity under test. Examples of expected results, sometimes are called test oracles, include requirement/design specifications, hand calculated values, and simulated results. Functional testing emphasizes on the external behavior of the software entity.
Structural Testing: the software entity is viewed as a “white box”. The selection of test cases is based on the implementation of the software entity. The goal of selecting such test cases is to cause the execution of specific spots in the software entity, such as specific statements, program branches or paths. The expected results are evaluated on a set of coverage criteria. Examples of coverage criteria include path coverage, branch coverage, and data-flow coverage. Structural testing emphasizes on the internal structure of the software entity.
From the above data and considering the different myths and the software creation procedures and the software reliability it can be concluded that:
Testing has been widely used as a way to help the engineers i.e. the software developers to develop high quality software’s that are generally bug free and even free of the loop holes. The techniques for testing have evolved from the joint activities of small group of programmers to an organized discipline in software engineering. However, it can be clearly seen that the maturation of testing techniques has been fruitful, but not adequate. Pressure to produce higher-quality software at lower cost is increasing and existing techniques used in practice are not sufficient for this purpose. Fundamental research that addresses the challenging 15 problems, development of methods and tools, and empirical studies should be carried out so that we can expect significant improvement in the way we test software. Researchers should demonstrate the effectiveness of many existing techniques for large industrial software, thus facilitating transfer of these techniques to practice. The successful use of these techniques in industrial software development will validate the results of the research and drive future research. The pervasive use of software and the increased cost of validating it will motivate the creation of partnerships between industry and researchers to develop new techniques and facilitate their transfer to practice. Development of efficient testing techniques and tools that will assist in the creation of high-quality software will become one of the most important research areas in the near future.Order Now