Software Testing

The software testing process, although not exactly the same for every methodology, can be generalized to contain the main and most important points that help us have an effective testing experience.

First we need to define the test strategy and test plan. Some of the things you can use to describe your project’s testing scope are:

  • Systems that need to be tested
  • Focused features and functions of the project
  • Non-functional requirements
  • Tools
  • And many more

With no strategy and plan, every project will find it difficult to be productive. This will help you define your entry and exit criteria for testing, which are important as a control for your team. If requirements lack specificity, the will not enter testing. If tested code doesn’t meet the specific quality standards, the code will never move onto the next phase.

Second, you need the test design. In here you will have a collection of test cases necessary to validate the system. Test design relies on test experience, testers’ knowledge of the system being tested and prevailing testing practices. It is focused on uncovering and fixing major bugs, rather than any other superficial aspects or flaws.

The third phase is test execution. There are many ways in which you can execute tests, for this step you will have to adapt your testing to the adequate amount of testing until you are sure that your system is fully functional and mostly bug-free. Understanding your test environment requirements is key to be able to decide your testing strategy.

Finally, we have the test closure. Here is where your exit criteria comes into play because it signals the completion of the test cycle and readiness for your product’s release. To ensure test closure, all your requirements must be met, both technical and business. You need to have passed a minimum percentage pass rate, best practice is targeting 90% of your tests passed. Every critical defect must be fixed. These steps are just a general view of how your testing process should look like.

There are four levels of software testing that you must take into account. These are:

  • Unit testing: Program is submitted to assessments that focus on specific components of the software to see if they are fully functional. The purpose of this round of testing is to determine whether the software works as designed. A unit could refer to a function, an individual program or a procedure.
  • Integration testing: This allows individuals the opportunity to combine every unit in a program and test them together. It is designed to find interface defects between every module or function.
  • System testing: The system testing level is the first in which the application is tested as a whole. Its goal is to evaluate whether the system has complied with all of the requirements and to see if it meets the quality standards.
  • Acceptance testing: This is the final level of testing and is used to determine whether a system is ready for its release or not. Requirements may change during the development cycle so you need to test in order to see if the process meets the business’ needs. After this level is passed, the software can be delivered to production.

There are several roles and activities to be done in testing, each of which have certain responsibilities that need to be done. The main roles are:

  • Test manager: The test manager is usually hired when there are many testing groups. Some of the major roles of a test manager are: preparing test strategy, preparing the test budget, defining the levels and test cycles, developing the strategy for test documentation, metrics and reporting, and many more.
  • Test leader: Every testing group must be led by a test leader. The test leader performs the roles of test manager when they are absent and have their own responsibilities including: preparing the test plan at each test level, defining the objectives, assigning roles and providing schedules to testers, etc.
  • Testers: Testers group can have different levels of testers and roles like performance testers, automation testers, etc. Some of their responsibilities are: gathering the test requirements, set up and verify the test environment, automate the tests, and many more.

If you would like to see a more extensive list of the activities and responsibilities that each has, check the external links below.

Something we need to address too are testing environments. Testing environments are a setup of software and hardware in which the testing teams execute test cases. They support test execution with hardware, software, and a network configured. Test environments are configured as needed by the application under test. It is important to have them properly setup in order to ensure that the software is being tested successfully. There are many things to be taken into account when setting up your test environment and in order to avoid this blog becoming too long, I will leave a link below explaining what you must do in order to assure that your process environment is adequate.

Another important point you need to understand is software testing techniques. Their purpose is to help you design better test cases. They help reduce the number of test cases to be executed while increasing test coverage and helping you identify test conditions. Some of the most important testing techniques are:

  • Boundary Value Analysis (BVA)
  • Equivalence class partitioning
  • Decision table based testing
  • State transition
  • Error guessing

As you can see, software testing is an extensive topic that requires research in several different branches in order for you to successfully do your testing. It is important for you to at least have a general idea of what their purposes are and to follow them if you want your test process to be much more effective and fluent.

External links:

Testing process

Levels of testing

Activities and roles

Testing environments

Testing techniques