In-Depth Notes on Testing Strategies and Process

Test Process

  • Testing is crucial to ensure software reliability and quality.
  • Several types of testing exist, including unit testing, integration testing, system testing, and acceptance testing.

Unit Testing

  • Definition: The smallest testable part of software, such as functions or methods.
  • Purpose: Verify that each unit behaves as expected.
  • Typically conducted by developers.

Integration Testing

  • Definition: Testing the interaction between multiple components that have been individually unit-tested.
  • Goals of Integration Testing:
    • Identify issues from component interactions.
    • Ensure correct communication between components.
    • Test off-the-shelf components that aren't unit tested.
  • Strategies for Integration Testing:
    • Big Bang Integration: Integrating all components at once, which can be quick but may lead to complex debugging.
    • Incremental Integration: Gradually adding components, allowing for easier fault location and fixes.
    • Bottom-up Integration: Testing lower-level modules first and then integrating them upward.
    • Top-down Integration: Testing upper-level modules first to check control structures and interfaces.
    • Sandwich Strategy: Combining elements from both top-down and bottom-up approaches for better fault isolation.

Test Case Allocation

  • Allocate test cases strategically:
    • 80% for developed systems; 20% for other areas such as interface and hardware.
  • Prepare a test procedure that sets environmental conditions and runs test cases randomly.

System Testing

  • The final integration step before the system delivery.
  • Includes both functional and non-functional testing.
  • Often performed by independent testing teams.
  • Critical non-functional aspects include performance, security, and usability.
  • Differences in Testing Types:
    • System testing checks the entire system, while integration tests focus on interconnections between components.

Acceptance Testing

  • The last validation phase conducted usually by the end-users.
  • Users test the system based on their business processes for final sign-off.
  • Types of Acceptance Testing:
    • Alpha Testing: Internal testing simulating end-user experience.
    • Beta Testing: External testing in a real-world environment to validate user expectations.

Continuous Integration (CI)

  • CI is a development practice where code check-ins are frequent, requiring automated builds and tests.
  • CI ensures a runnable system from day one, integrating tool support for build management, tests, and issue tracking.

Non-Functional Testing

  • Importance of testing non-functional requirements:
    • Performance, usability, security, and compatibility should not be neglected during system testing.
  • Often documented separately to ensure clarity on specific needs.

Summary of Testing Lifecycle

  • Testing involves several stages:
    • Unit Testing
    • Integration Testing
    • System Testing
    • Acceptance Testing
  • Quality assessment techniques should accompany each testing phase to ensure overall quality and reliability of the software system.