Purpose The purpose of integration testing is to verify functional, performance, and reliability requirements placed on major design items. These "design items", i.e. assemblages (or groups of units), are exercised through their interfaces using black box testing, success and error cases being simulated via appropriate parameter and data inputs. Simulated usage of shared data areas and inter-process communication is tested and individual subsystems are exercised through their input interface. Test cases are constructed to test whether all the components within assemblages interact correctly, for example across procedure calls or process activations, and this is done after testing individual modules, i.e. unit testing. Some different types of integration testing are big bang, top-down, and bottom-up. Big Bang A type of Big Bang Integration testing is called Usage Model testing. Top-down and Bottom-up Limitations References See also
Related: Testing Frameworks
Manual testingCompare with Test automation. Manual testing is the process of manually testing software for defects. It requires a tester to play the role of an end user, and use most of all features of the application to ensure correct behavior. To ensure completeness of testing, the tester often follows a written test plan that leads them through a set of important test cases. Overview A key step in the process is, testing the software for correct behavior prior to release to end users. For small scale engineering efforts (including prototypes), exploratory testing may be sufficient. Large scale engineering projects that rely on manual software testing follow a more rigorous methodology in order to maximize the number of defects that can be found. Testing can be through black-, white- or grey-box testing. Static and dynamic testing approach may also be used. Testing can be further divided into functional and non-functional testing. Stages There are several stages. Unit Testing System Testing
Unit testingIn computer programming, unit testing is a method by which individual units of source code, sets of one or more computer program modules together with associated control data, usage procedures, and operating procedures are tested to determine if they are fit for use. Intuitively, one can view a unit as the smallest testable part of an application. In procedural programming, a unit could be an entire module, but it is more commonly an individual function or procedure. In object-oriented programming, a unit is often an entire interface, such as a class, but could be an individual method. Unit tests are short code fragments created by programmers or occasionally by white box testers during the development process. Ideally, each test case is independent from the others. Benefits The goal of unit testing is to isolate each part of the program and show that the individual parts are correct. A unit test provides a strict, written contract that the piece of code must satisfy.
aharin/inproctesterScenario testingHistory Kaner coined the phrase scenario test by October 2003. He commented that one of the most difficult aspects of testing was maintaining step-by-step test cases along with their expected results. His paper attempted to find a way to reduce the re-work of complicated written tests and incorporate the ease of use cases. A few months later, Buwalda wrote about a similar approach he had been using that he called "soap opera testing". Methods System scenarios In this method only those sets of realistic, user activities that cover several components in the system are used as scenario tests. Use-case and role-based scenarios In this method the focus is on how a user uses the system with different roles and environment.[need quotation to verify] See also References
Graphical user interface testingIn software engineering, graphical user interface testing is the process of testing a product's graphical user interface to ensure it meets its written specifications. This is normally done through the use of a variety of test cases. Test Case Generation To generate a set of test cases, test designers attempt to cover all the functionality of the system and fully exercise the GUI itself. The difficulty in accomplishing this task is twofold: to deal with domain size and with sequences. Unlike a CLI (command line interface) system, a GUI has many operations that need to be tested. The second problem is the sequencing problem. Regression testing becomes a problem with GUIs as well. These issues have driven the GUI testing problem domain towards automation. Most of the testing techniques attempt to build on those previously used to test CLI (Command Line Interface) programs, but these can have scaling problems when applied to GUI’s. Planning and artificial intelligence
System testingSystem testing of software or hardware is 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.  As a rule, system testing takes, as its input, all of the "integrated" software components that have passed integration testing and also the software system itself integrated with any applicable hardware system(s). The purpose of integration testing is to detect any inconsistencies between the software units that are integrated together (called assemblages) or between any of the assemblages and the hardware. System testing is a more limited type of testing; it seeks to detect defects both within the "inter-assemblages" and also within the system as a whole. Testing the whole system Types of tests to include in system testing See also References
Citrus FrameworkRegression testingThe intent of regression testing is to ensure that a change such as those mentioned above has not introduced new faults. One of the main reasons for regression testing is to determine whether a change in one part of the software affects other parts of the software. Common methods of regression testing include rerunning previously completed tests and checking whether program behavior has changed and whether previously fixed faults have re-emerged. Regression testing can be performed to test a system efficiently by systematically selecting the appropriate minimum set of tests needed to adequately cover a particular change. Background Experience has shown that as software is fixed, emergence of new and/or reemergence of old faults is quite common. Sometimes reemergence occurs because a fix gets lost through poor revision control practices (or simple human error in revision control). Regression testing is an integral part of the extreme programming software development method.
Black-box testingBlack box diagram Black-box testing is a method of software testing that examines the functionality of an application (e.g. what the software does) without peering into its internal structures or workings (see white-box testing). This method of test can be applied to virtually every level of software testing: unit, integration, system and acceptance. Test procedures Specific knowledge of the application's code/internal structure and programming knowledge in general is not required. Test cases Test cases are built around specifications and requirements, i.e., what the application is supposed to do. Test design techniques Typical black-box test design techniques include: Hacking See also References Jump up ^ Ron, Patton. External links BCS SIGIST (British Computer Society Specialist Interest Group in Software Testing): Standard for Software Component Testing, Working Draft 3.4, 27.
Acceptance testingIn systems engineering it may involve black-box testing performed on a system (for example: a piece of software, lots of manufactured mechanical parts, or batches of chemical products) prior to its delivery. Software developers often distinguish acceptance testing by the system provider from acceptance testing by the customer (the user or client) prior to accepting transfer of ownership. In the case of software, acceptance testing performed by the customer is known as user acceptance testing (UAT), end-user testing, site (acceptance) testing, or field (acceptance) testing. Overview Testing generally involves running a suite of tests on the completed system. Acceptance Tests/Criteria (in Agile Software Development) are usually created by business customers and expressed in a business domain language. Acceptance test cards are ideally created during sprint planning or iteration planning meeting, before development begins so that the developers have a clear idea of what to develop.