Requirement Study Low Level Design High Level Design Unit Testing Integration Testing System Testing User Acceptance Testing Production Verification Testing SDLC - STLC 1 IntroductiontoSoftware 1 Evolution of the Software Testing discipline The effective functioning of modern systems depends on our ability to produce software in a cost-effective way. The term software engineering was first used at a 1968 NATO workshop in West Germany. It focused on the growing software crisis! Thus we see that the software crisis on quality, reliability, high costs etc. started way back when most of today’s software testers were not even born! The attitude towards Software Testing underwent a major positive change in the recent years. In the 1950’s when Machine languages were used, testing is nothing but debugging. When in the 1960’s, compilers were developed, testing started to be considered a separate activity from debugging. In the 1970’s when the software engineering concepts were introduced, software testing began to evolve as a technical discipline. Over the last two decades there has been an increased focus on better, faster and cost-effective software. Also there has been a growing interest in software safety, protection and security and hence an increased acceptance of testing as a technical discipline and also a career choice!. Now to answer, “What is Testing?” we can go by the famous definition of Myers, which says, “Testing is the process of executing a program with the intent of finding errors” 2 The Testing process and the Software Testing Life Cycle Every testing project has to follow the waterfall model of the testing process. The waterfall model is as given below 1.Test Strategy & Planning 2.Test Design 3.Test Environment setup 4.Test Execution 5.Defect Analysis & Tracking 6.Final Reporting According to the respective projects, the scope of testing can be tailored, but the process mentioned above is common to any testing activity. Software Testing has been accepted as a separate discipline to the extent that there is a separate life cycle for the testing activity. Involving software testing in all phases of the software development life cycle has become a necessity as part of the software quality assurance process. Right from the Requirements study till the implementation, there needs to be testing done on every phase. The V- Model of the Software Testing Life Cycle along with the Software Development Life cycle given below indicates the various phases or levels of testing. 3 Broad Categories of Testing Based on the V-Model mentioned above, we see that there are two categories of testing activities that can be done on software, namely, Static Testing Dynamic Testing The kind of verification we do on the software work products before the process of compilation and creation of an executable is more of Requirement review, design review, code review, walkthrough and audits. This type of testing is called Static Testing. When we test the software by executing and comparing the actual & expected results, it is called Dynamic Testing 4 Widely employed Types of Testing From the V-model, we see that are various levels or phases of testing, namely, Unit testing, Integration testing, System testing, User Acceptance testing etc. Let us see a brief definition on the widely employed types of testing. Unit Testing: The testing done to a unit or to a smallest piece of software. Done to verify if it satisfies its functional specification or its intended design structure. Integration Testing: Testing which takes place as sub elements are combined (i.e., integrated) to form higher-level elements Regression Testing: Selective re-testing of a system to verify the modification (bug fixes) have not caused unintended effects and that system still complies with its specified requirements System Testing : Testing the software for the required specifications on the intended hardware Acceptance Testing: Formal testing conducted to determine whether or not a system satisfies its acceptance criteria, which enables a customer to determine whether to accept the system or not. Performance Testing: To evaluate the time taken or response time of the system to perform it’s required functions in comparison Stress Testing: To evaluate a system beyond the limits of the specified requirements or system resources (such as disk space, memory, processor utilization) to ensure the system do not break unexpectedly Load Testing: Load Testing, a subset of stress testing, verifies that a web site can handle a particular number of concurrent users while maintaining acceptable response times Alpha Testing: Testing of a software product or system conducted at the developer’s site by the customer Beta Testing: Testing conducted at one or more customer sites by the end user of a delivered software product system. 5 The Testing Techniques To perform these types of testing, there are two widely used testing techniques. The above said testing types are performed based on the following testing techniques. Black-Box testing technique: This technique is used for testing based solely on analysis of requirements (specification, user documentation.). Also known as functional testing. White-Box testing technique: This technique us used for testing based on analysis of internal logic (design, code, etc.)(But expected results still come requirements). Also known as Structural testing. These topics will be elaborated in the coming chapters 6 Chapter Summary This chapter covered the Introduction and basics of software testing mentioning about Evolution of Software Testing The Testing process and lifecycle Broad categories of testing Widely employed Types of Testing The Testing Techniques . Introduction to Software 1 Evolution of the Software Testing discipline The effective functioning of modern systems depends on our ability to produce software. enables a customer to determine whether to accept the system or not. Performance Testing: To evaluate the time taken or response time of the system to perform