T09 - VALIDATION AND VERIFICATION

Chapter 8 - Software Verification and Validation

Introduction to Software Testing

  • Software testing is a critical process intended to ensure that software meets its requirements and functions as expected before it is used.

  • Testing helps identify defects in the software through the execution of programs with artificial data.

  • The testing process is part of a larger framework known as verification and validation (V&V).


Types of Testing

Development Testing

  • Conducted during the development phase to discover defects as early as possible.

  • Includes various tests such as unit testing, component testing, and system testing.

    • Unit Testing: Tests individual components or methods in isolation, ensuring they function correctly.

    • Component Testing: Focuses on testing the interactions between integrated components.

    • System Testing: Tests the integrated system as a whole.

Release Testing

  • Performed on a completed version of the software before it is made available to users.

  • Aims to validate the functionality and reliability of the software from the end-user perspective.

  • Generally considered a black-box testing process.

User Testing

  • Involves real users testing the software to provide feedback on its usability, performance, and reliability in their working environment.

  • Helps identify issues that may not be apparent in controlled testing environments.


Program Testing Goals

  • Primary goals include:

    • Validation Testing: Demonstrates that the software meets specified requirements.

    • Defect Testing: Aims to uncover faults and errors in software behavior.

  • Effective testing identifies incorrect outputs and system behavior that doesn’t conform to requirements.


Testing Process Overview

  • Validation Testing: Confirms that software functions as intended under expected conditions.

  • Defect Testing: Designed to uncover defects through unexpected inputs or interactions.

  • Both processes are integral to building confidence in the software's reliability and functionality.


Verification vs. Validation

  • Verification: Ensures that the software conforms to its specifications.

  • Validation: Confirms that the software meets the actual needs of the user.


Inspections vs. Testing

  • Inspections: Focus on reviewing static representations of the software to find defects. They do not involve executing the software and can be applied at any stage of development.

  • Testing: Involves dynamic verification; software is executed, and its behavior under test data is observed.

Advantages of Inspections

  • Can identify many defects quickly without needing a working version of the software.

  • Effective in assessing compliance with quality standards and verifying broader attributes like maintainability.


Review Process

  1. Pre-review Activities: Planning and preparing for the review by assembling a team and distributing documents.

  2. Review Meeting: Discuss the software/documents with its author and examine it collectively for defects.

  3. Post-review Activities: Address any issues identified and ensure all comments are considered in subsequent iterations.


Testing Policies

  • Exhaustive testing is impractical; therefore, policies should define minimum requirements for test coverage.

  • Examples include testing all functions accessed through menus or verifying inputs under both correct and incorrect scenarios.


Regression Testing

  • Conducted to ensure that new changes in the software do not negatively impact existing functionality.

  • Automated testing makes this process efficient.


Performance and Stress Testing

  • These tests assess the system's reliability and performance under normal and extreme conditions.

  • Important for understanding how the system behaves under various loads.


User Testing Types

  • Alpha Testing: Conducted at the developer’s site by selected users.

  • Beta Testing: Released to a broader group of users for real-world testing.

  • Acceptance Testing: Final evaluation to determine if the software is ready to be deployed.


Key Points

  • Effective testing strategies should aim to discover defects through prior experience and include automated tests wherever possible.

  • Techniques like test-first development and scenario testing are beneficial in creating robust test cases.

robot