TutorChase logo
Login
AQA A-Level Computer Science

3.1.4 Testing and validation

Testing and validation are vital processes in software development, ensuring that a system works as intended, meets requirements, and handles data accurately and securely.

The purpose of testing

Testing is a crucial and systematic process in software development. It is conducted to verify that a program functions correctly and meets its defined requirements. The primary objective of testing is to uncover any faults or defects in the software before it is released to users. These faults might include syntax errors, logic errors, or issues related to incorrect assumptions in the design.

Testing serves two main purposes:

  • To detect and correct errors – by identifying bugs, developers can correct faults before the software is released, improving reliability and correctness.

  • To verify the system meets its requirements – testing ensures that the implemented features behave as specified in the functional and non-functional requirements.

Without proper testing, software may be released with undetected flaws, potentially causing system failures, security vulnerabilities, or poor user experience. Effective testing improves user confidence, system dependability, and long-term maintainability.

Testing is not limited to the final stages of development. It is an iterative and continuous process, conducted at different levels throughout the software development lifecycle – from individual modules to entire integrated systems.

Key objectives of testing

Take your grades to the next level!

UPGRADING TO PREMIUM UNLOCKS
AI Tutor
AI-powered study assistant
instant feedback and guidance
Predicted Papers
Examiner-style predicted papers
based on recent exam trends
Practice Questions
All exam practice questions
by topic for each subject
Study Notes
All detailed revision notes
written by expert teachers
Cheat Sheets
Quick revision summaries
perfect for last-minute review
Past Papers
Complete collection
of practice and past exam papers
Email
Password
Confirm Password
Already have an account?

Practice Questions

FAQ

Boundary testing is especially effective because many software errors occur at the edges of input ranges, often due to incorrect comparison logic, off-by-one errors, or misinterpretation of range limits. While normal data checks that the system behaves correctly under expected input, it rarely exercises the edge cases where logic is most likely to break down. For example, a programmer might write a condition that incorrectly excludes the upper boundary value, such as using “< 100” instead of “<= 100”. This small mistake would go undetected by normal testing with values like 50 or 75, but boundary testing using the value 100 would expose the issue. Additionally, boundary values often trigger different code paths, error messages, or formatting operations that aren’t tested under typical input. Testing both just within and just outside acceptable boundaries helps verify not only correct acceptance but also proper rejection of data, ensuring the program behaves precisely as intended under all relevant conditions.

Regression testing is the process of re-running previously executed tests after code changes have been made, to ensure that existing functionality has not been unintentionally affected. When bugs are fixed, features are added, or optimisations are introduced, they can sometimes interfere with parts of the system that were already working correctly. Regression testing helps to quickly detect such unintended consequences, ensuring that the integrity of the software remains intact. It is especially important in large or modular systems, where a change in one module can impact another indirectly. Over time, a suite of regression tests forms a powerful safety net, allowing developers to make updates and improvements with confidence. Automated regression testing tools are often used in professional environments to efficiently run large numbers of tests. Without regression testing, maintenance can become risky and unreliable, potentially leading to software that becomes increasingly fragile and error-prone as it evolves.

Automated testing tools streamline and accelerate the testing process by executing pre-defined test cases without human intervention. They are particularly useful for regression testing, where tests must be repeated frequently after every update. Automation ensures consistency in test execution, eliminates human error, and reduces time and labour involved in running manual tests. For example, tools like Selenium or JUnit can run thousands of test cases quickly, validating outputs, checking for exceptions, and logging results automatically. These tools can also run tests overnight or as part of continuous integration pipelines, allowing rapid feedback to developers. Furthermore, they support testing under multiple environments and configurations, increasing test coverage. Automated tools can handle unit tests, integration tests, and even simulate user interactions in system-level testing. While initial setup requires time and effort to write scripts and configure the environment, the long-term benefits include faster development cycles, higher confidence in software quality, and reduced overall cost of testing.

A trace table is a manual tool used to track the values of variables as a program or algorithm executes step by step. It helps students and developers understand how data changes throughout a program, making it easier to identify logic errors or unexpected behaviour. Each row in a trace table represents a step or iteration in the program, while each column corresponds to a variable. By filling in the table as each instruction is executed, testers can clearly observe whether the program is working as intended or if a mistake has occurred at a specific point. Trace tables are particularly useful when working with loops, conditionals, and algorithm-based problems where mental execution becomes complex. In exams and development, they are a valuable method for manually verifying that logic flows correctly before running the actual program. Using trace tables improves understanding of control structures and helps with early error detection during both design and debugging phases.

Documenting test results is essential for ensuring transparency, traceability, and accountability throughout the testing process. It allows developers, testers, and stakeholders to see exactly which tests have been conducted, what inputs were used, what outputs were expected, and what results were obtained. When a test fails, documentation helps pinpoint the failure's cause, track how it was resolved, and confirm that the same issue does not reoccur. Well-documented results also enable effective communication within teams, especially in collaborative or long-term projects. Moreover, in formal development environments, testing documentation may be required for audits, certification, or quality assurance reviews. It also supports maintenance activities by providing historical context for decisions and behaviours. When systems are updated or modified, previous test documentation serves as a benchmark for regression testing. Overall, keeping detailed records of test outcomes enhances software quality, aids in continuous improvement, and ensures that testing is repeatable, justifiable, and aligned with the original requirements.

Hire a tutor

Please fill out the form and we'll find a tutor for you.

1/2
Your details
Alternatively contact us via
WhatsApp, Phone Call, or Email