Testing SDLC Vs Agile Software Quality Assurance Software quality assurance (SQA) All those planned or systematic actions necessary to provide adequate confidence that a product or service is of the type and quality needed and expected by the customer. consists of a means of monitoring the software engineering processes and methods used to ensure quality. It does this by means of audits of the quality management system under which the software system is created. These audits are backed by one or more standards, usually ISO 9000 or CMMI. Software Quality Assurance Verification Verification is preventing mechanism to detect possible failures before the testing begin. It involves reviews, meetings, evaluating documents, plans, code, inspections, specifications etc. Validation Validation occurs after verification and it's the actual testing to find defects against the functionality or the specifications. Software testing Is the process used to help identify the correctness, completeness, security, and quality of developed computer software Software testing is oriented to "detection". It's examining a system or an application under controlled conditions. It's intentionally making things go wrong when they should not and things happen when they should not. V-Model The V-model is a software development process which can be presumed to be the extension of the waterfall mode V Model is also called test based development There are two phases in the V model development. They are 1. Verification Requirements analysis System Design Architecture Design Module Design 2. Validation. Unit Testing Integration Testing System Testing User Acceptance Testing V-Model Requirements analysis In this phase, the requirements of the proposed system are collected by analyzing the needs of the user(s). This phase is concerned about establishing what the ideal system has to perform However, it does not determine how the software will be designed or built. The user acceptance tests(UAT) are designed in this phase. System Design System engineers analyze and understand the business of the proposed system by studying the user requirements document. They figure out possibilities and techniques by which the user requirements can be implemented. If any of the requirements is not feasible, the user is informed of the issue. The software specification document which serves as a blueprint for the development phase is generated The documents for system testing is prepared in this phase. Architecture Design This phase can also be called as high-level design (HLD). The baseline in selecting the architecture is that it should realize all the requirements within the given time, cost and resources. The output of this phase is the high-level design document which typically consists of the list of modules, brief functionality of each module, their interface relationships, dependencies, database tables, architecture diagrams, technology details etc The integration testing design is carried out in this phase. Module Design This phase can also be called as lowlevel design (LLD). The designed system is broken up in to smaller units or modules and each of them is explained so that the programmer can start coding directly. The unit test design is developed in this stage. Coding It is the process of writing, testing, and maintaining the source code of computer programs. The source code is written in a programming language. Validation Phases Unit Testing In the V-model of software development, unit testing implies the first stage of dynamic testing process. Testing of individual components It involves analysis of the written code with the intention of eliminating errors. It also verifies that the codes are efficient and adheres to the adopted coding standards. Testing is usually white box. Integration Testing Objectives: To expose problems arising from the combination To quickly obtain a working solution from components. In integration testing the separate modules will be tested together expose faults in the interfaces and in the interaction between integrated components. Testing is usually black box as the code is not directly checked for errors. System Testing System testing will compare the system specifications against the actual system. The system test design derived from the system design documents and is used in this phase. Sometimes system testing is automated using testing tools. System Testing Objective: Assess whether the app does what it is supposed to do Functional testing: coverage Performance testing Performance seen by users: delay, throughput System owner: memory, CPU, comm Performance Event-based coverage Data-based Explicitly specified or expected to do well Unspecified find the limit Usability testing Human element in system operation GUI, messages, reports, … User Acceptance Testing Acceptance Testing checks the system against the requirements of the user. It uses black box testing using real data, real people and real documents to ensure ease of use and functionality of systems. Purpose: ensure that end users are satisfied Regression Testing Retesting a previously tested program following modification to ensure that faults have not been introduced or uncovered as a result of the changes made Whenever a system is modified (fixing a bug, adding functionality, etc.), the entire test suite needs to be rerun Make sure that features that already worked are not affected by the change Automatic re-testing before checking in changes into a code repository Incremental testing strategies for big systems Performance Testing Testing conducted to evaluate the compliance of a system or component with specified performance requirements. Often this is performed using an automated test tool to simulate large number of users. Also know as "Load Testing". These tests are also performed on different platforms Test Plan A document describing the scope, approach, resources, and schedule of intended testing activities. It identifies test items, the features to be tested, the testing tasks, who will do each task, and any risks requiring contingency planning. Tests Plans Test plan need to be as early as possible, we are trying to identify the mechanism to be used to ensure that the customer receives a quality, test product. Scope of testing(summarising functional, performance, and internal design characteristics to be tested, plus schedule constraints, completion criteria, etc) Test plan (provides the overall strategy for test integration) Test phases and builds Schedule Overhead software Environment and resources Test procedures Order of integration (purpose, and modules to be tested ) Unit tests - description of tests and expected results – Test environment - special tools, techniques Test case data Expected results Test-Cases - Basics Test Case is a commonly used term for a specific test. This is usually the smallest unit of testing. A Test Case will consist of information such as requirements testing, test steps, verification steps, prerequisites, outputs, test environment, etc. A set of inputs, execution preconditions, and expected outcomes developed for a particular objective, such as to exercise a particular program path or to verify compliance with a specific requirement. test-cases are derived during all phases of the development cycle determine expected results before running a test-case look for errors where you found errors before Testing and debugging Defect testing and debugging are distinct processes Defect testing is concerned with confirming the presence of errors Debugging is concerned with locating and repairing these errors Debugging involves formulating a hypothesis about program behaviour then testing these hypotheses to find the system error ©Ian Sommerville 1995 Debugging Activities Locate error & fault Design fault repair Repair fault Re-test program ©Ian Sommerville 1995 Testing Activities Identify Test conditions (“What”): an item or event to be verified. Design How the “what” can be tested: realization Build Build test cases (imp. scripts, data) Run the system Execute Test case outcome with Compare expected outcome Test result Test tools Computer programs used in the testing of a system, a component of the system, or its documentation. Various Automated Testing Tools have been developed and are used to evaluate usability from different perspectives. Test automation is the use of software to control the execution of tests, the comparison of actual outcomes to predicted outcomes, The setting up of test preconditions, and other test control and test reporting functions Commonly, test automation involves automating a manual process already in place that uses a formalized testing process. Test tools Code-driven testing A growing trend in software development is to use testing frameworks such as the xUnit frameworks (for example, JUnit and NUnit) which allow the code to conduct unit tests to determine whether various sections of the code are acting as expected under various circumstances. Code driven test automation is a key feature of Agile software development It is considered more reliable because the code coverage is better, and because it is run constantly during development rather than once at the end of a waterfall development cycle. Test tools Graphical User Interface (GUI) testing Many test automation tools provide record and playback features that allow users to record interactively user actions and replay it back any number of times, comparing actual results to those expected. Many test automation tools provide record and playback features that allow users to record interactively user actions and replay it back any number of times, comparing actual results to those expected. A variation on this type of tool is for testing of web sites. Here, the "interface" is the web page. Test tools JUnit A regression testing framework used by developers who implement unit tests in Java. (freeware) Platforms running Java. Software Description • JUnit is a regression testing framework written by Erich Gamma and Kent Beck. It is used by the developer who implements unit tests in Java. C++Test A C/C++ unit testing tool that automatically tests any C/C++ class, function, or component. Test tools Test Mentor - Java Edition Java component, unit and function test automation Software Description • A functional test and test modeling tool for Java developers & QA Engineers to use as they develop their Java classes, clusters, subsystems, frameworks, and other components, either deployed on the client or the server during unit and integration testing. Check A unit test framework for C (freeware) Software Description • Check features a simple interface for defining unit tests, putting little in the way of the developer. Tests are run in a separate address space, so Check can catch both assertion failures and code errors that cause segmentation faults or other signals. The output from unit tests can be used within source code editors and IDEs. Test tools HtmlUnit Java unit testing framework for web applications (freeware) Software Description HtmlUnit is a java unit testing framework for testing web based applications. It is similar in concept to httpunit but is very different in implementation HttpUnit models the http protocol so you deal with request and response objects. HtmlUnit on the other hand, models the returned document so that you deal with pages and form and tables. http://www.testingfaqs.org/tunit.html#C++Test