Unit Testing
The primary goal of unit testing is to take the smallest piece of testable software in the application, isolate it from the remainder of the code, and determine whether it behaves exactly as we expect. 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
Integration Testing
Integration testing is a logical extension of unit testing. In its simplest form, two units that have already been tested are combined into a component and the interface between them is tested. Eventually all the modules making up a process are tested together.Integration testing identifies problems that occur when units are combined.
We can do integration testing in a variety of ways but the following are three common strategies:
The top-down approach to integration testing requires the highest-level modules be test and integrated first. This allows high-level logic and data flow to be tested early in the process and it tends to minimize the need for drivers. Disadvantage of top-down integration testing is its poor support for early release of limited functionality.
The bottom-up approach requires the lowest-level units be tested and integrated first. These units are frequently referred to as utility modules. By using this approach, utility modules are tested early in the development process and the need for stubs is minimized. Like the top-down approach, the bottom-up approach also provides poor support for early release of limited functionality.
The umbrella approach, requires testing along functional data and control-flow paths. First, the inputs for functions are integrated in the bottom-up pattern. The outputs for each function are then integrated in the top-down manner. The primary advantage of this approach is the degree of support for early release of limited functionality. It also helps minimize the need for stubs and drivers.
System Testing Types
The system test phase begins once modules are integrated enough to perform tests in a whole system environment. System testing can occur in parallel with integration test, especially with the top-down method.
1. Regression Testing
Rerunning existing tests against the modified code to determine whether the changes break anything that worked prior to the change.
To make the Regression Testing Cost Effective and yet ensure good coverage one or more of the following techniques may be applied:
(a) Test Automation: If the Test cases are automated they may be executed using scripts after each change is introduced in the system. The execution of test cases in this way helps eliminate oversight, human errors. It may also result in faster and cheaper execution of Test cases. However there is cost involved in building the scripts.
(b) Selective Testing: Some Teams choose execute the test cases selectively. They do not execute all the Test Cases during the Regression Testing. They test only what they decide is relevant. This helps reduce the Testing Time and Effort
Installation testing is a kind of quality assurance work in the software industry that focuses on what customers will need to do to install and set up the new software successfully. The testing process may involve full, partial or upgrades install/uninstall processes. This testing is typically done by the software testing engineer in conjunction with the configuration manager
3. Fail-over Recovery Testing
Fail over and Recovery testing verifies product in terms of ability to confront and successfully recover from possible failures, arising from software bugs, hardware failure or communication problems (eg network failure). The objective of this test is to check the system restore (or duplicate the main functional systems), which, in the event of failure, ensure the safety and integrity of the data product being tested.
3. Fail-over Recovery Testing
Fail over and Recovery testing verifies product in terms of ability to confront and successfully recover from possible failures, arising from software bugs, hardware failure or communication problems (eg network failure). The objective of this test is to check the system restore (or duplicate the main functional systems), which, in the event of failure, ensure the safety and integrity of the data product being tested.
4. Performance Testing
Performance testing is intended to determine the responsiveness, throughput, reliability, and/or scalability of a system under a given workload. Performance testing is typically done to help identify bottlenecks in a system, establish a baseline for future testing, support a performance tuning effort, determine compliance with performance goals and requirements, and/or collect other performance-related data to help stakeholders make informed decisions related to the overall quality of the application being tested
Stress testing is the process of determining the ability of a computer, network, program or device to maintain a certain level of effectiveness under unfavorable conditions. When conducting a stress test, an adverse environment is deliberately created and maintained.
Actions involved may include:
Actions involved may include:
(i) Running several resource-intensive applications in a single computer at the same time
(ii) Attempting to hack into a computer and use it as a zombie to spread spam
(iii) Flooding a server with useless e-mail messages
(iv) Making numerous, concurrent attempts to access a single Web site
Load tests measures the capability of an application to function correctly under load, by measuring transaction pass/fail/error rates. Load testing must be executed on “today’s” production size database, and optionally with a “projected” database. They may need to be executed several times in the first year of wide scale deployment, to ensure that new releases and changes in database size do not push response times beyond prescribed SLA's
Security testing is a process to determine that an information system protects data and maintains functionality as intended.
The six basic concepts that need to be covered by security testing are: ANACIA
Authentication, Non-repudiation, Availability, Confidentiality, Integrity, Authorization
Security testing as a term has a number of different meanings and can be completed in a number of different ways. As such a Security Taxonomy helps us to understand these different approaches and meanings by providing a base level to work from.
Authentication, Non-repudiation, Availability, Confidentiality, Integrity, Authorization
Security testing as a term has a number of different meanings and can be completed in a number of different ways. As such a Security Taxonomy helps us to understand these different approaches and meanings by providing a base level to work from.
Acceptance testing is a final stage of testing that is performed on a system prior to the system being delivered to a live environment. Acceptance tests are generally performed as "black box" tests. User acceptance testing (UAT), is the term used when the acceptance tests are performed by the person or persons who will be using the live system once it is delivered. The UAT acts as a final confirmation that the system is ready for go-live. A successful acceptance test at this stage may be a contractual requirement prior to the system being signed off by the client