Software Testing

Software testing has been described previously, but only by name, and maybe the stages at which it should be applied; however, this post will be dedicated to it (as if it wasn’t implied by the title). Software Testing can be defined as:

“Process to check if software meets requirements and its devoid of defects by executing software components and/or using automated tools”

Software testing, is great to make a product cost-effective, secure, of quality, and to assure that meets the customers expectations.

Software Testing Process

The stages of process testing can be diffetent for each project, but it can be broke down into 5 basic ones:

  • Planning: the scope of the test is determined, impact analysis is performed, all resources are listed, and dates for testing are planned (of course they are estimates).
  • Creation of Scenarios: expected outputs are prepared. And test scenarios are created.
  • Preparation of Test Environment and Data Creation: all preparations are made in order to start the test. Basically, setting all up.
  • Run the Scenarios: the created test scenarios are run.
  • Reporting the Results: Pretty self-explanatory, check the results and compare them to the expected output, to design the next test cycle.

I should be noted that this is a process that should be applied on all stages of the Software Development Life Cycle (SDLC).

Types of Testing

There are three main categories:

  • Functional Testing: testing the components that are essential for the functional requirements. This includes Unit testing, Integration testing, User acceptance testing, among others.
  • Non-Functional Testing: testing the components that are essential for the non-functional requirements. This includes Performance testing, Endurance testing, Load testing and so on.
  • Maintenance Testing: testing the product in order to keep it functional or improve it. This includes Regreesion testing and Maintenance testing.

Although some examples were given, there are hundreds of different types of testing. Here is a list of them: https://www.guru99.com/types-of-software-testing.html

Levels of Testing

Lists are always welcomed, so of course the different levels of testing are going to be listed. But before it should be noted that this is not a strict set of levels that should always be followed, this is more of a list of most relevant levels that provide a comple testing process:

  • Unit Testing (Level 1): Testing by small blocks of code. For this to work these blocks should be able to be tested separately, and in a considerable small amount of time.
  • Integration Testing (Level 2): Test groups of blocks of code to check if their functionality as a whole meets the requirements.
  • System Testing (Level 3): Test the system as a whole.
  • Acceptance Testing (Level 4): Test user scenarios, to confirm that the user accepts the product.
Activities and Roles in Testing

There is a designated testing team, or at least it should be, that is divided in different roles, the two main ones are, the test lead and the testers. But here, 3 roles will be given:

  • Software Tester Role: designs test case scenarios, conducts them, analyses the results and reports the observations. Interacts with clients to better understand the product, and do modifications, and also creates the documentation. Ensures that all tests are carried out accordingly to standards and procedures. There are many different roles for a software tester, thus, why so many responsabilities were listed.
  • Software Test Manager Role: represent the team, interact with customers, recruit software test staff, supervise all testing activities, schedule testing activities, select test tools, improve test processes with the help of metrics, and check the quality of the requirements.
  • Software Test Automator Role: design procedures and test cases for automated software testing, design reusable automated scripts, and ensure that all automated processes are done by the defined standards.
Testing Environment

A test environment enables the creation of identical environments for testing, in order to control the most variables in the testing stage. A controlled test enviroment can provide useful feedback to the behavior of the application. There are some key elements that should be completed to create the test environments:

  1. Implementation of test beds (data created and inserted to the environment)
  2. Setup of the database
  3. Configure the environment
  4. Select hardware and software to run the application
  5. Configure the network
  6. Document all actions

There is a difference between test environment and staging environment, since stanging environment is the exact replica of the production level of the application, so is used to check if it is ready for deployment. Basically, a test environment is used to test specific parts of the producto while staging environment is for the product as a whole.

To manage the test environment there is also a checklist

  1. A repository with all the updated versions of the environments
  2. Create new environments as required
  3. Monitoring the environment
  4. Updating/Deleting outdated environments
  5. Check for errors in the environments
  6. Coordinate to solve all the errors in the environments
Test Case Design Techniques

There are three main types of design techniques:

  • Specification-Based Technique: a black box technique. These tests are done to know how the system behaves. This is more about creating test cases based on the output.
  • Structure-Based Technique: a white box technique. Tests that are done to have a level of coverage of control flows. Done by code analysis.
  • Experience-Based Technique: this is entirely based on the tester’s expertise. The tester designs tests based on previous experiences, guesses, and different known techniques.

From these 3 types, many techniques can be chosen, such as, error guessing, boundary value analysis, equivalence class partitioning, decision table based testing, state transition, and many others.

Defect Management

Defects, or bugs, are very relevant to software testing, since one of the main objectives of software testing is to reduce them. The defect management process goes as:

  • Discovery: the team tries to discover as many bugs as possible.
  • Categorization: all the bugs are classified, in order to decide the priorities of the team. A critical error should be fixed immediately. A high level error is the next priority, since it affects the main features. A medium level error causes damage that is not urgent, but no insignificant. Finally, a low level bug is very minor.
  • Defect resolution: a process to fix the bugs, divided in four stages:
    • Assignment: assing the bug to a developer to solve it
    • Schedule fixing: schedule by when it should be fixed
    • Fixing: fix the bug, while tracking the progress
    • Report resolution: report what the solution was.
  • Verification: verify that the bug is resolved.
  • Closure: Change bug status to close.

During all process, the bug should reported to the management team for feedback. Now, to measure the quality test execution, there are to parameters: Defect Rejection Ratio (Number of defects rejected over total of defects raised) and Defect Leakage Ratio (Number of defects missed over total defects of software). The value of these measures is better the smaller it is.

References

Software Testing. (n.d.). What is Software Testing? Definition, Basics & Types. Guru99. Retrieved from https://www.guru99.com/software-testing-introduction-importance.html#1

Testing Environment. (n.d.). Test Environment for Software Testing. Guru99. Retrieved from https://www.guru99.com/test-environment-software-testing.html#:~:text=A%20testing%20environment%20is%20a,of%20the%20Application%20Under%20Test.

Test Case Design Techniques. (n.d.). Software Testing Techniques with Test Case Design Examples. Guru99. Retrieved from https://www.guru99.com/software-testing-techniques.html

Software Testing. (n.d.). Defect Management Process in Software Testing (Bug Report Template). Guru99. Retrieved from https://www.guru99.com/defect-management-process.html

Öztürk, M. (2020). Software Testing Process and Levels of Testing. The Startup. Retrieved from https://medium.com/swlh/software-testing-process-and-levels-of-testing-4274904ce655

Software Testing Roles. (n.d.). Software Testing Roles and Responsibilities. Test Institute. Retrieved from https://www.test-institute.org/Software_Testing_Roles_And_Responsibilities.php#:~:text=Test%20engineers%2FQA%20testers%2FQC%20testers%20are%20responsible%20for%3A&text=Develop%20test%20cases%20and%20prioritize,the%20code%20to%20fix%20defects.

Test Environment. (2019). What Is a Test Environment? A Guide to Managing Your Testing. testim. Retrieved from https://www.testim.io/blog/test-environment-guide/

Test Case Design Techniques. (2016). Test Case Design and Testing Techniques. RapidValue. Retrieved from https://es.slideshare.net/Rapidvaluesolutions/whitepaper-test-case-design-and-testing-techniques-factors-to-consider