Software testing types and bug detection

In software testing you can encounter several types of tests with different purposes, functionalities and specifications. In this article, we will explain the phases of the testing cycle, how software tests are categorized, and the types of bugs detected during testing.

Software testing is employed to assess the quality and functionality of the software product, ensuring alignment with the customer’s requirements and needs. What does a software tester do on the project to identify potential risks and bugs that might adversely affect the software functionality or user experience?

The software testing process is an integral part of SDLC – software development life cycle. Each test has its own test cycle called STLC or software testing life cycle. Software testing consists of four phases, i.e. steps that must be followed for each test preparation and execution:

  • Test planning – the first phase includes defining the test requirements and resources for the tests, defining the test objectives as well as the test strategy, and last but not least, designing and preparing the test plan.
  • Analysis and test preparation – in this step the tester designs tests that will be used to check and verify the correctness of the system requirements.
  • Test execution and evaluation – the third phase involves the actual execution of the test and the evaluation of its results. The focus is on whether the program is working as it should and whether there is no bug or problem.
  • Error monitoring – the final step is to address the severity of the bugs found and how to fix them as easily (and cost-effectively) as possible.

Types of tests in SW development can be divided into different areas

In addition to the traditional definition of tests based on the method of implementation using manual testing tools and automation testing tools, we distinguish several types of software testing. Below, we present a breakdown based on chronology, access to code, program runtime, quality dimensions, and scope.

Testing by development phase (chronology)

When dividing tests in terms of time sequence within the development model, the most important factor is the timing of the testing activity during software development.

  • Developer testing involves initial tests performed by the programmer, aiming to check and test at the source code level to prevent bugs caused by oversight, etc. Fixes at this stage are the least expensive.
  • Unit testing is conducted after the developer has tested the code. These tests involve automated testing of units, which are individual parts of the application program, to ensure the functionality of the code. This types of tests are also implemented by the programmer as they are written in the form of program code.
  • Component/module testing is mainly performed by developers in large IT projects when testing the functionality of a specific component or module of a program.
  • Integration testing is used by the testing team to verify the internal integrity of the software. It determines whether the individual components and modules are communicating correctly with each other.
  • Functional testing is used to test the functionality of the entire program from the end user’s point of view and to meet the acceptance criteria.
  • System testing takes place at a later stage of software development, where the software application tester tests the program as a whole from the customer’s point of view before handing it over to the customer. Using various simulations, tester creates test scenarios and repeatedly detects bugs or potential risks.
  • Acceptance testing is carried out by the customer, who provides feedback on the software product.
a young male it tester with a beard and glasses works on a computer behind a desk
Software testing can be divided according to the method and intent of implementation.

Testing by code visibility

According to the IT tester’s approach to the source code of the program, we distinguish three types of testing: black-box, white-box and grey-box testing.

  • Black box testing – the tester does not have access to the code, so they only observe and evaluate the results of the program based on their inputs.
  • White box testing – in this type of testing, the tester has access to the internal structure of the software and their task is to check the passes and reactions of the source code. They write tests based on their knowledge of the application.
  • Grey box testing – as the name suggests, this type of testing is a combination of black box and white box testing. It is used, for example, in UI testing, where the tester verifies the program from the end user’s side with partial knowledge of the code.

Testing by software program runtime

Another area is the testing division into static and dynamic. Static testing does not require running the application because it is primarily done in the early phases of the SDLC, that is, before the program is put into operation. It is used for source code analysis, requirements checking, and ideally to uncover potential application issues and risks.

When static testing is performed using a code analyzer, it is called static code analysis. If it is done by the developer themself, we call it code review. Dynamic testing, on the other hand, can no longer be done without running the program and serves to ensure smooth operation in the later stages of development.

Testing by software quality dimensions

In software testing, it is essential not only to look at the functionality of the program, but also to focus on the quality dimensions defined by the standard ISO/IEC 25010:2011.

  • Functionality – when testing functionality, we find out whether the individual functions of the application behave according to the defined functional specifications and requirements.
  • Reliability – tests are used to verify that the program behaves unchanged, especially after an error, failure or overload, and to ensure that the system detects and reports these problems.
  • Security – ensuring system security and differentiation of access roles.
  • Usability – testing the system in terms of user experience. It aims to ensure that the application is user-friendly.
  • Sustainability – tests examine whether the application can be updated, changed, tested, etc. in the future.
  • Performance – tests aimed at ensuring that the program runs smoothly, quickly and without problems.
  • Compatibility – the ability and possibility of merging the application with another system is tested.
  • Portability – the ability of a program to run on other hardware or operating systems.

Range-based testing

Last but not least, software testing can also be divided by scope into smoke and regression testing. Smoke testing is used for quick and basic verification of the functionality of the whole program, for example after a software update. Thus, it is performed in small numbers, unlike regression testing. This is used to see if the application works the same as before after the software update, using the original test scenarios.

Bug detection in software testing

Software testing also includes bug detection, which can be marked as correct or incorrect. If the program does not contain any relative error, it is marked as correctly or incorrectly evaluated.

Based on the number of correct and incorrect detections, as well as the total sample size, it is then possible to evaluate how many metrics characterize the success of the tool used.

  • Sensitivity – represents the fraction of errors found among constructs with an error.
  • Specificity – represents the part of the constructs in which no bug has been reported or discovered.
  • Precision – is part of correct fault detection.
  • Accuracy – this is the relative number of correct decisions regarding the marking of (in)correct detections.

As you can see, there are indeed a large number of tests that can be used to test software. They may differ according to the stage of development at which they are carried out, the way they are implemented, their scope or the quality dimension they focus on. So the most important thing is to know what, how and with what goal you plan to test.

Are you interested in an IT job with no experience and eager to learn more about testing? Come and develop your skills with us at msg life Slovakia, where you can expect an above-average IT tester salary, a friendly team of colleagues and attractive employee benefits. Our doors are also open to seasoned IT tester specialist or IT tester consultant. Browse our job offers and kick-start your IT career in our international company!

Let us know about you