This essay has been submitted by a student. This is not an example of the work written by our professional essay writers.
In the realm of software development engineering, Software testing is an important process that is performed to support and enhance reliability and quality of the software. Software testing consists of estimating testing effort, selecting suitable test team, designing test cases, executing the software with those test cases and examining the results produced. Testing varies according to the purpose, process and level of testing. Software testing remains a very broad area which involves many other technical and non-technical areas, such as specification, design, implementation, maintenance, process and management issues. In software development process, testing is intended to reveal quality-related information about the product with respect to the context in which it is intended to operate. However, testing can never completely establish the correctness of arbitrary computer software. . An important point is that software testing should be distinguished from the separate discipline of Software Quality Assurance (SQA), which encompasses all business process areas, not just testing.
The wordtestis derived from the Latin word for an earthen pot or vessel (testum). The notion of "testingprograms" arose almost simultaneously with the first experiences in writing programs. The programs that ran on the firstmachines had to be tested, and references to programtestingin the literature can be traced back to 1950 (Ed Miller, 1980). According to Hatzel, 1973 the definition of testing is
"Testingis the process of establishing confidence that a program or system does what it is supposed to".
This view oftestingmakes "finding errors" is the goal. Myers et al (1979) emphasizes that if our goal is to demonstrate that a program has no errors, then we are subconsciously steered toward that goal; that is, we tend to select test data that have a low probability of causing the program to fail. On the other hand, if our goal is to demonstrate that a program has errors, our test data will have a higher probability of finding errors and we become more successful intesting.
Testing is involved in every stage of software life cycle and has different objectives. It is common to find within a single software company a wide range of testing techniques and approaches - especially in the early phases of testing. Testing policies and standards defining how testing work is conducted, what is to be tested, who is responsible and providing for ongoing tracking of testing effectiveness and cost are rare in our experience - they exist in less than one out of every ten organisation. The followings are the main types of testing organisation follows.
The primary goal of unit testing is done at the lowest level of the software building. In order to do that the smallest piece of testable software in the application is taken and isolated from the reminder of the code and determine whether it behave exactly as it's expected. Each unit is tested separately before integrating them into modules to test the interfaces between modules. Unit testing has proven its value in that a large percentage of defects are identified during its use (http://msdn.microsoft.com). Most unittestingis informal-no records are maintained of the tests that are run, defects found, and so forth.
System leveltestingbegins when modules are brought together. Often separatetestinglevel, called integrationtesting, is carried out first to test interfaces and ensure that modules are communicating as expected. Then the system functions are exercised and thesoftwareis stressed to uncover its limitations and measure its full capabilities.System testing identifies problems that occur when units are combined together (Michael & Lin, 2004). Test plan is used to test each unit and ensure the viability of each before combining units.
Acceptancetestingbegins whensystemtestingis complete. Its purpose is to provide the end user or customer with confidence and insurance that thesoftwareis ready to be used. Test cases or situations are often a subset of the system test set and usually include typical business transactions or a parallelmonth of processing. Tests are quite often conducted informally, with little record maintained as to what is tested and what results are obtained.
There are two categories of testing technique, functional and structural. Functional testing where the software under test is viewed as 'black box', which is based on the requirement or design specification. It emphasizes on the external behaviour of the software entity. Structural testing is viewed as 'white box' and the selection of test cases is based on the implementation of the software entity. It emphasizes on the internal structure of the software entity.
Testing can be performed manually or using software tools. The decision about whether to use tools depends upon the size and complexity of the project, the size and complexity of the task, the monotony of the manual task, the relevance of the tools and the quality of the tools- in every sense of the work 'quality'. For each of the types of test the number of individual tasks is significant and includes the following (Hetzel, 1998):
Planning of the entire test - the identification and scheduling of tasks and assignment of resources.
Â· Designing the test conditions.
Â· Specifying test case.
Â· Preparing test data.
Â· The formal setting-out of the expected outcome of each of the tests planned.
Â· Running of the software with the chosen input data.
Â· Comparing the actual results against the expected results.
Â· Identifying and correcting errors in the software, the design, the analysis and the requirement.
Â· Monitoring the progress of the tests.
Â· Improving the testing process- a continuous search for enhancements to all aspects of the test process.
Â· Using volume tests and performance issues to ensure that the hardware and software configuration can cope with operational extremes.
Â· Evaluating the non-functional aspects, such as user-friendliness of the system, maintainability of the code.
Â· Finally, regression testing, to show that corrections to the software as a result of the detection of errors have not had knock-on effects elsewhere.
Â· A statistical assessment of the completeness of the testing undertaken.
The ultimate goal of software testing is to help designers, developers and managers construct systems with higher quality. Studies indicate that more than fifty percent of the cost of software development is devoted to testing.
The concept of a testing methodology that defines the steps and tasks to test a software system. The methodology consists of procedures to follow for each major phase of work. The procedures specify what should take place during each phase of the work and spell out individual sub-phases and tasks in considerable detail. The intent is to bring discipline to the manner in which the testing is carried out and to ensure that required steps are completed in an appropriate sequence.
It is necessary to have a testing methodology that is closely integrated with the development process and that brings discipline to the manner in which the what-to-test, when-to-stop, and who-does-the-work questions are answered. Testing requirements at each step of development have to be defined and, in effect, a "testing life cycle" has to exist side by side with the development life cycle.
The following phases of software development life cycle consist of several other software testing sub-phases for integration to assure software is being tested in every steps of the life cycle (Hetzel, 1998):
1. Project Initiation
Â· Develop broad test strategy
Â· Establish the overall test approach and effort.
Â· Establish the testing requirements.
Â· Assign testing responsibilities.
Â· Design preliminary test procedures and requirements-based tests.
Â· Test and validate the requirements.
Â· Prepare preliminary system test plan and design specification.
Â· Complete acceptance test plan and design specification.
Â· Complete design-based tests.
Â· Test and validate the design.
Â· Complete the system test plan.
Â· Finalize test procedures and any code-based tests.
Â· Complete module or unit test designs.
Â· Test the programs.
Â· Integrate and test subsystems.
Â· Conduct the system test.
Â· Conduct the acceptance test.
Â· Test changes and fixes.
Â· Evaluate testing effectiveness
Testing, an important research area within computer science is likely to become even more important in the future. Testing has been widely used as a way to help engineers develop high-quality systems and the techniques for testing have evolved from an adhoc activities of small group of programmers to an organized discipline in software engineering. 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.
It is easy to be misled into believing that in a world of sophisticated software there must be a software tool to carry out these tasks; but bear in mind that the errors have been put there by one or more human beings and the delivered system is to be used by human beings. Only through significant intervention by human beings will quality be delivered. For example, if a software tool were able to generate the expected results from a given set of input data, then that tool would be doing what the developed software is required to do but correctly. Why not just use the tool instead of developing new software?
Nevertheless, there are several useful software tools under the CAST (computer-aided software testing) banner, which will be worth considering. Most of the market research organizations have produced reports, which are updated regularly, evaluating and comparing the available products and their suppliers.
Ed Miller, 1980, Program Testing - An Overview for Managers, IEEE software testing tutorials.
William Hetzel, Ed.,(1973) Program Test Methods(Englewood Cliffs, N.J.: Prentice-Hall.
Glenford J. Myers, B., Tom, Todd M. Thomas, S., Corey,(1979) Art ofSoftwareTesting, John Wiley, New York.
B,.Hetzel,. (1998) The Complete Guide to Software Testing, 2nd Edition.John Wiley & Sons, New York.
Unit Testing, online at <http://msdn.microsoft.com/en-us/library/aa292197(VS.71).aspx > on 14 February 2010