What is a Software?
Software can be defined as a series of programs and instructions for a computer system to carry out a specific task or tasks.
Software Testing Techniques
Software Testing Techniques can, therefore, be defined as the different ways and methods of testing these programs and instructions to ensure that they are functioning well and carries out the specific tasks that they were designed to.
These techniques are as varied as there are software applications and as there are tasks to be carried out.
They can be classified or categorized in a number of ways. However, for the purpose of this article, we shall be looking at Software Test Levels, Software Testing Types and Software Testing Methods – these all are techniques for testing software.
Under each of the areas listed, we shall be looking at the following:
a) Software Testing Levels:
- Unit testing,
- Integration testing,
- System testing, and
- Acceptance Testing.
b) Software Testing Types:
- Smoke testing,
- Performance testing,
- Compliance testing,
- Functional Testing,
- Usability testing,
- Regression testing, and
- Security testing.
c) Software Testing Methods:
- Ad hoc testing,
- Agile testing,
- Black box testing,
- White box Testing, and
- Gray box testing
Software Testing Levels
These following tests are carried out at different stages during the development of software.
1. Unit Testing
Software applications comprises of various blocks of code (modules, routines, procedures, functions, calls, etc.) each referred to as a unit.
Each of these units carries out a unique and specific function or task.
Unit testing is the testing of each of the units independently to ensure that it carries out its intended task or function.
For example: A mobile phone has a number of system and user apps (such as phone dial, file manager, messages, camera, backup and restore, contacts, downloads, storage manager, facelock, fingerprint, etc. Each of these is a unit and can be tested on its own independent of each other.
2. Integration Testing
In our mobile phone example above, the camera app integrates with the storage manager.
This is because when the camera is used (in taking a picture or recording a video), the output must be stored on a storage media (be it internal or external memory).
Integration testing ensures that this occurs – that is, for example, the camera unit integrates successfully with storage manager.
This should not be confused with system testing or functional testing (both discussed below).
3. System Testing
A system is a combination of various units integrated together to carry out a function or task.
System testing ensures that all the units are fully integrated and functioning as one, meeting the design requirements.
Once a phone is fully complete, it is tested as a whole to see how well it functions as a phone with its individual components.
4. Acceptance Testing
At this level of software development, it is tested for acceptance both in-house (by persons not directly involved with its design and development (Alpha testing) and also externally by a selected group of end-users (Beta testing).
Software Testing Types
These are many ways the various forms of tests that can be carried out on software. There are literally hundreds of ways of testing a software. However, we will limit ourselves to these prominent ones for this blog.
1. Smoke Testing (a.k.a. build verification testing)
This manner of testing got its name from switching on a newly designed electrical equipment in the design factory for the first time and hoping it does not blow up in smoke. Smoke testing lightly inspects most of the major components paying particular attention to proper integration. If this test is passed, the product proceeds to further testing.
2. Performance Testing
This examines the software’s performance, responsiveness and stability when under a certain load.
Areas tested in this regard includes spike testing (i.e. load is spiked up or significantly increased), stress testing (i.e. how it behaves at work levels beyond what is expected), endurance testing (i.e. how well and how long the software can support and sustain excessive loads), and load testing (i.e. how the software responds as its workload increases).
3. Compliance Testing
This is to ensure that the software meets with internal and external standards, policies and regulations.
Internal compliance testing is carried out by selected persons or a department in the developing company while external compliance testing is carried out by external bodies or regulatory authorities.
For example, the FCC will test mobiles phones for acceptable interference and radiation levels.
4. Functional Testing
A test to ascertain if the software works according to its design specifications and requirements.
Unlike System Testing that checks everything, this testing is normally concerned with the output of the system, not minding the inputs and processes carried out.
5. Usability Testing
The user is the most important element in the development of any software. This test examines how human factors and the user interface agrees with end-users.
It looks are the processes and steps required to carry out tasks and analyzes how effective, intuitive and easy those steps are.
For example, suppose a user uses the camera phone and each time the system asks where to save the file (internal or external memory).
This could be looked at as inefficient. Instead, the user could set the default storage location and not have to indicate such each time the camera is used.
6. Regression Testing
Changes and upgrades are made to software continually.
Regression testing ensures that new versions or upgrades have not created problems for other areas previously working okay.
The test is carried out using previous test cases and the new results compared to previous results.
7. Security Testing
Every software is liable to malicious attacks and intruders.
Security testing looks for loopholes, defects and vulnerabilities in the system that can expose the software to such threats.
Software Testing Methods
Methods are the ways by which the tests are actually carried out.
Ad-hoc Testing (a.k.a. monkey or random testing)
– A test carried out with no documentation or planning given. It is usually carried out randomly without any pre-defined process or intention.
2. Agile Testing
– A testing that ensures that the ideals of agile software development are adhered to according to their Manifesto.
3. Black Box Testing (a.k.a. Behavioral testing)
This is testing of the entire system by persons who have no idea about the design, structure and implementation of the software.
It is tested for errors in interface, performance, behavior, data structures, functions, etc.
4. White Box Testing (a.k.a. Blass Box testing, Clear Box testing, Open Box testing)
This is similar to Black Box testing except that the design, structure and implementation of the software are known to the tester.
5. Gray Box Testing
– A testing comprising of the two ideals of the black box and white box testing. Some parts of the design, structure and implementation of the item are known to the tester and some are not.
As said earlier, there are different techniques of testing a software-defined on your perspective.
To explain the difference between levels, methods and types, a Performance Test (a Type) can be carried out during System Testing (a Level) using White Box Testing (a Method).