Low-Level Testing (OQ)

Low-level testing of computerized systems (CS) corresponds to the Operational Qualification (OQ) in conventional validation (equipment qualification) and follows the Installation Qualification (IQ) of CS.

The objectives of low-level testing of CS (OQ) are as follows:

  1. Identify and eliminate errors in the operation of individual modules/components of the system (module testing)
  2. Identify and eliminate errors in the interaction between modules/components of the system (integration testing)
  3. Identify and eliminate errors in the operation of individual functions/user interface elements (functional testing)

Before starting low-level testing of CS, test data sets are prepared, and automated testing tools are developed if necessary.

Testing refers to the examination of a computerized system or its components in operation to detect and correct errors. From the perspective of GMP/GAMP5, testing involves turning the system on and running code components, corresponding to the traditional OQ and PQ stages of validation.

Testing is performed according to an approved protocol by providing the program/component with data from a pre-developed test data set and recording the program/component's results in a report. Testing can be manual or automated. In traditional software development practices, manual testing also includes code inspections (code walkthroughs, desk checks), which, in the GMP/GAMP-based validation process, correspond to Stage 4: Design Review/Design Qualification (DR/DQ).

In traditional software development practices, testing is divided into low-level and high-level testing.

Low-level testing includes:

  • Module (component) testing: The process of testing individual blocks, subroutines, classes, or procedures that make up the program.
  • Integration testing: The process of testing the interaction between blocks, subroutines, classes, or procedures that make up the program.
  • Functional testing: The process of testing individual functions/user interface elements for discrepancies with the external (functional) specification from the user's perspective.

In turn, high-level testing (see corresponding section) includes:

  • System testing
  • User testing

Module Testing

Module testing is the process of testing individual blocks, subroutines, classes, or procedures that make up the program for discrepancies with module interface specifications and to detect/eliminate errors.

Module testing is conducted before the module is integrated into the program. Typically, a tested module cannot function independently and requires a specific environment for its operation. For module testing, the following are needed:

  • A driver module to call (run) the tested module.
  • One or more stub modules that simulate interfaces with missing program modules.
  • A data set transmitted to the module via the driver module, made accessible through stub modules or user interface elements.
  • An interface for displaying/recording the module’s output.

In manual testing, the module is executed, interfaces are simulated, the data set is provided, and the results are recorded manually.

In automated testing, all operations are conducted automatically using specially developed auxiliary test modules or within a specialized test environment (such as xUnit). Automated testing tools used must in turn be tested and deemed suitable for module testing (in other words, validated).


Integration Testing

Integration testing is the process of testing the interaction between blocks, subroutines, classes, or procedures that make up the program for discrepancies with specifications and to detect/eliminate errors.

Integration testing is performed after individual tested modules are combined within the program or after new modules are added to an existing group. Various approaches to integration testing exist depending on the order of adding/combining modules in the program. Integration testing can be manual or automated. The procedure/principles of integration testing are identical to module testing, with the difference being that the test object is a group of modules rather than a single module.

Using an incremental testing approach, integration testing may not be separated into a distinct stage and can be considered part of module testing.


Functional Testing

Functional testing is the process of testing individual functions/user interface elements for discrepancies with the external (functional) specification from the user’s perspective and to detect/eliminate errors.

During functional testing, the operation of individual user-facing functions of the system and user interface elements are verified. Functional testing is conducted after all modules have been successfully integrated into the system, meaning that module/integration testing is assumed to have been completed successfully. Functional testing can be manual or automated. Automated testing tools used must also be tested and validated.


The specialists at Tarqvara Pharma Technologies have years of experience in conducting qualification, validation, and acceptance tests within the pharmaceutical industry, in full compliance with international, European, and national GMP/GxP regulations and standards.

See also:
Qualification / Validation / Commissioning
Computerized Systems Validation (CSV)
Acceptance Tests (FAT/SAT)
Risk-Oriented Approach