1.1.7 Suggest various types of testing.
Testing is investigating a computer system to find flaws, discrepancies or errors. There are various types of testing that can be applied to various parts of the development process.
Testing is necessary at every stage of development and installation.
Inadequate testing can reduce employee productivity and lead to end-user dissatisfaction.
White-box testing: Tests the internal structures and algorithms of an application through code analysis.
Black-box testing: Examines the functionality of an application using a set of test inputs.
Involves testing the internal structures and workings of systems.Internal perspective of the system, as well as programming skills, are used to perform white-box testing.
Advantages
Code optimization: Facilitates the removing of unnecessary code and the finding of hidden errors in early phases of development.
Efficiency: Two algorithms can solve the same problem correctly but have very different efficiencies (e.g. Binary Search and Sequential Search). By examining the code, white-box testing can find where needless inefficiencies are.
Thoroughness: Looking at the actual code can find potential causes of errors that black-box testing could miss.
Disadvantages
Technical knowledge The tester must have knowledge of the system and required: programming skills due to the complexity of the testing.
Limited scope: Functionality and usability are untested. Tests focus on the software as it exists, and missing functionality may not be discovered.
Expensive and White-box testing is time intensive and therefore can be time consuming: expensive for the organization to hire skilled testers.
Focuses on the functionality of a system, as opposed to internal system structures or working.Can be applied to virtually every phase of testing.
Advantages
Automated testing: Testers save time by focusing on software functionality. Comprehensive testing can be done quickly by automated programs that check for expected output results from a set of inputted test cases.
Code access not Specific programming knowledge is not required to run the test Required: Less technical knowledge required.
Disadvantages
Limited by test: The tests are only as good as the test data.
It may not test all cases: functionality thoroughly. Creating the test can also be time Consuming.
Interface issues: Realistic Graphical User Interface (GUI) interactions may be difficult to simulate and test with scripts.
Limited scope: Test only cover application functionality; they do not evaluate the efficiency of the system’s code or the system’s usability.
Unit testing ⇒ Integration testing ⇒ System testing ⇒ Alpha testing ⇒ Beta testing
UNIT TESTING is a level of software testing where individual units/ components of a software are tested. The purpose is to validate that each unit of the software performs as designed. A unit is the smallest testable part of any software. It usually has one or a few inputs and usually a single output.
A quality measurement and evaluation procedure.
Evaluates how an individual unit of software code complies with its purpose.
May be performed manually--by one or more developer--or through an automated software solution.
A form of black-box testing.
Dedicated testers are sometimes called Quality Assurance (QA) engineers.
Early detection: Problems are found early in the development cycle, making it easier to fix them.
Modular detection: Unit testing allows code to be changed within a small unit (sub-part) of the system and then easily tested again without retesting entire systems. This simplifies the process of integration with other units because they have been thoroughly tested.
E.g. Consider a simple program that accepts a student’s exam percentage and output that they have passed if the percentage is greater than or equal to fifty or otherwise outputs that they have failed. We can test that input with:
Normative data such as 23 or 56 will check to see if the pass and fail messages are properly delivered.
Data at the limits such as 0, 49, 50, 100 are all examples of normal data at the Limits.
Extreme data such as -1, 104, 122 will be outside the normal limits. The user may not type in such data because they’re dumb and / or it’s easy to hit a key accidentally or twice by mistake.
Abnormal data such as “three”, “3 5” will be the type of input data that is unacceptable. In this case it could be a String when it is asking for an integer.
User Acceptance Testing (UAT) is a type of testing performed by the end user or the client to verify/accept the software system before moving the software application to the production environment
Given to users to test for functionality or to gain feedback on functions or the user interface;
Is the last phase of the software testing process.
Actual software users test the software to make sure it can handle required tasks in real world scenarios, according to specifications.
Can be implemented by making software available for a free beta trial on the Internet or through an in-house testing team comprised of actual software users.
Can be tested to see if users can efficiently access the programs functionality.
Is often divided into Alpha and Beta testing.
Alpha testing is simulated or actual operational testing by potential users/customers or an independent test team at the developers' site. It is a type of software testing performed to identify bugs before releasing the product to real users or the public. It is a type of acceptance testing.
A group of programmers within the organization examines early versions to see how the system performs.
A type of acceptance testing that is performed to identify all possible issues / bugs before releasing the product to everyday users or public.
Is conducted when the software may still be unstable or has incomplete functionality.
Beta testing comes after alpha testing and can be considered a form of external user acceptance testing. Versions of the software, known as beta versions, are released to a limited audience outside of the programming team known as beta testers. The software is released to groups of people so that further testing can ensure the product has few faults or bugs. Beta versions can be made available to the open public to increase the feedback field to a maximal number of future users and to deliver value earlier, for an extended or even indefinite period of time (perpetual beta)
The software is released to users outside the company who can try it out in a range of different environments.
Is usually released to a limited number of end-users to obtain feedback on system quality.
Reduces failure risks and increases the quality through customer validation.
Is conducted when the software is close to being ready for release, has complete functionality and when the developers believe that there are few or no errors.
Performed by testers who are internal employees of the organization.
Performed at developer's site.
Involves both white and black-box techniques.
Critical issues or fixes can be addressed by developer's immediately.
Used to ensure the quality of the product before moving to Beta testing.
Performed by clients or end users who are not employees of the organization.
Performed at client or end user's location of the product.
Only uses black-box testing.
Most of the issues of feedback collected will be implemented in the future versions of the product.
Concentrates on the quality of the product, but gathers users inputs of the product and ensures that it is ready for real time users.
Used when there are tests that can’t be accomplished by manual testing because they would consume too much time and resources.
Static program analysis Analysis of computer software that is performed without actually executing programs. In most cases the analysis is performed on the source code to ensure that best programming practices have been followed.
Dynamic program analysis Performed by executing programs with a set of test inputs and comparing the results to expected outputs. Unit testing is usually implemented with dynamic program analysis.
Automated load testing Used to test online services. They evaluate the performance of the system while simulating the resources consumption equivalent to hundreds of thousands of simultaneously connected users.
Automated testing throughout development is often referred to as Continuous Integration (CI).
Tools and services that run automated tests include Travis CI, Jenkins CI, Web-CAT, CodeClimate, Coveralls, etc.