Software Quality Assurance: Functional and Non-Functional Testing

Software Testing: Black Box and White Box Testing

Currently there are a large number of companies and freelancers dedicated to software development. This generates great competition, which requires products to have higher quality every day. To achieve the required quality in programs, software testing is necessary.

What is software testing?

Software testing is the process of evaluating and verifying that a software product or application does what it is supposed to do.

Early detection of critical failures can save your company time and money. Software testing must be carried out from the beginning of the project to its completion, in all phases of its development. Tests can be manual or automatic.

There are many types of software testing, depending on what you want to evaluate and check at any given time.

Types of Software Testing

The types of tests according to their objective are classified into Functional Tests and Non-Functional Tests.

Functional testing

  1. Unitary
  2. Components
  3. Integration
  4. System
  5. Smoke
  6. Acceptance
  7. Regression
  8. Interface

Non-functional tests

  1. Performance
  2. Load and Stress
  3. Security
  4. Scalability

Functional tests, in turn, are classified into Black box tests and White box tests.

Black Box Testing

Black box tests are those that are performed from the user interface. Validates the operation of the application according to the system requirements, taking into account the input data set and the expected output data set.

White Box Testing

White box testing checks the code and helps gain the highest possible test coverage. They are generally carried out by software developers and engineers, since technical knowledge is needed to do them.

Unit tests

Unit testing is done on small parts of the code. It is necessary to divide the system into small units, functionalities or modules, to facilitate the verification of each functionality independently. This way it is easier to detect specific problems in each unit. They are the first tests that are carried out during the software development phase. With this test, they verify that the system works according to what is established in the Functional Requirements Survey document. They are executed by the development team.

What advantages do unit tests have?

  • They help to early detect errors in new functionalities or features developed.
  • Minimizes testing costs as issues are caught early.
  • It makes it easier to improve code quality with better code refactoring.
  • Supports the agile development process.
  • Simplifies integration and allows for good documentation.

Integration testing

A software application is made up of different submodules that work together for different functionalities. The function of integration testing is to verify the integration of the different components or modules and detect errors and problems related to them. This test is performed after the unit tests. Sometimes an independent functionality works well and when it is integrated with another, it generates an error.

Good QA practices indicate that these tests, unlike unit tests, which are carried out by developers, must be executed by teams specialized in Software Quality Assurance.

What advantages do integration tests have?

  • They ensure that all application modules are well integrated and work together as expected.
  • Detects interconnected problems and conflicts to resolve them before creating a big problem.
  • Validates functionality, reliability and stability between different modules.
  • Detect ignored exceptions to improve code quality.

Smoke Tests

Smoke tests are tests that verify the basic functionality of an application. They should be quick-to-run tests and aim to affirm that basic system processes are working as expected.

These tests should be performed when we release a new version of the product or software, to decide if other more specific tests will be executed. It is also necessary to perform them right after a deployment process, to verify that the application is working properly in the new deployed environment.

More details about smoke tests:

  • They are a set of high-level, strictly selected automated tests.
  • They take place between integration tests and regression tests.
  • The term “smoke proof” is said to have its origins in plumbing. If smoke could be seen coming from a pipe, it meant it was leaking and repairs needed to be made.

Acceptance Tests

Before starting to work on the development of the project, the team responsible for it must define, together with the client, its requirements and acceptance criteria. During its development there may be variations in these criteria and they must be reflected in writing for subsequent evaluation.

Acceptance tests are formal tests, executed to verify whether a system satisfies its business requirements.

These tests require that the system is in operation, and focus on replicating user behavior, with the aim of rejecting changes if the objectives are not met. These objectives can go beyond obtaining a specific response, and measure the performance of the system.

Acceptance testing is usually several manual tests that are performed after a development phase has finished (so that you can quickly go back and iterate if something isn’t right). Additionally, they verify that the software features meet all initial specifications and acceptance criteria.

Regression tests

Regression tests are those that are carried out on functionalities that have already been tested and worked correctly. They have the objective of verifying that a modification to that functionality will not generate a bug.

These types of regression tests are the most used as a project progresses, as they are carried out to validate that corrections or modifications to the code have not negatively impacted the existing functionalities of the product. This way they verify that the product continues to perform correctly with new features, bug fixes, or any changes to existing functionality.

In general, it is recommended that they be automated to reduce time and effort in their execution.

Test of performance

Performance testing is a type of non-functional testing, which is performed to determine the speed, stability and scalability of a software application. As the name suggests, the overall objective of this test is to check the performance of an application against different system and network benchmarks such as CPU utilization, page loading speed, peak traffic handling, server resource utilization, etc.

Load, endurance, stress, volume, peak and scalability tests are considered performance tests.

By performing these software tests, bottlenecks can be identified to make performance improvements. In this way we can optimize the system to ensure the reliability of the website under heavy load.

Load and Stress Tests

Before ending the software development process, it is necessary to check how much stress it can withstand before an error occurs. With this objective, much more information than usual is sent to check at what point the system is saturated. Generally, these tests are carried out with specialized tools.

Security Testing

Application security testing is a process of identifying, analyzing and correcting security vulnerabilities in a web application. The process consists of testing the application code and its environment to detect security flaws and possible vulnerabilities. Once identified, problems are addressed and resolved.

Application security testing can be done manually or with automated tools.

Scalability Tests

They are those non-functional tests that allow us to determine the degree of scalability that a system has. Scalable is understood as the capacity that the system has so that, without applying drastic changes to its configuration, it can support the increase in demand in the operation.

Manual Testing vs Automated Testing

As we mentioned previously, testing can be done manually or automated.

Manual tests are carried out by people, who in turn can make a mistake and make a mistake or omit a step in it. In addition to the time you must spend preparing the correct environment for testing and in turn testing.

Automated tests are carried out either by specific tools or programs for each type of test, in the case of non-functional tests.

To learn more about test automation tools, you can read our article

Herramientas de automatización de pruebas de software

These tests are faster and more reliable than those carried out manually. However, the quality of these automated tests depends on how well written the “test scripts” (code that determines what will be done in the test) are.

Conclusions

Carrying out tests throughout the software development process is of vital importance for optimizing its processes and guaranteeing its quality. Each system and work groups have their own characteristics, to which the tests must be adjusted at all times. Whether automatic or manual, the essential thing is that they are carried out with the required quality and achieve their objective, a system with high quality.

Skip to content