The Software Development Life Cycle - Testing
What is the testing phase? (Phase)
The testing phase is concerned with ensuring that the current software version conforms to the requirements defined in the software planning and/or design document by (how) rectifying defects and validating fixes 1.
The following activities are carried out in the testing phase [1, 2 c4]
- Planning
- Test environment development
- Test readiness review
- Test-case generation
- Execution
- Test logging and/or test results reporting
- Test results evaluation
- Program refinement
- Software handover to support staff
Why do I have to test software? (High-quality software)
[2 c4]
- Detect as many faults, and failures prior to software usage
- Improve software reliability by pre-emptively identifying and resolving faults, and failures
- Prove that a software project’s functionality, efficiency, and quality objectives have been met
Where do I test software? (Controlled environment)
- Locations: In person, remote, hybrid meetings, events, collaborations, interviews
- Persons: Quality assurance team, software testers, users
- Testing environment
When do I test software? (Design and development session)
- After development phase i.e. when an individual, business, or government having created a working software version/prototype want to prove the software satisfies the defined requirements
- During any phase in the SDLC project i.e. when a want or need is identified to alter any activity, result, report created in the testing phase
How do I test software? (Methodology)
[2 c4]
- Software testing principles
- Dynamic: Test execution on select input (state)
- Finite: Test execution on a subset of all possible tests
- Selected: Select test input according to desired test result
- Expected: Test must have a definite outcome
- Software testing methodologies:
- Attitudes / Egoless Programming
- Test guides
- Test process management
- Test documentation and work products
- Test-Driven development
- Internal vs. Independent test team
- Cost/Effort estimation and test process measures
- Termination
- Test reuse and test patterns
- Software testing categories:
- The target/object of the test
- Unit testing: testing a single module
- Integration testing: testing a group of related modules
- System testing: testing an entire software system
- The objective/purpose of the test
- Acceptance/Qualification testing
- Installation testing
- Alpha and Beta testing
- Operational (or Statistical) testing
- Regression testing
- Performance testing
- Security testing
- Stress testing
- Back-to-Back testing
- Recovery testing
- Configuration testing
- Interface testing
- Usability testing
- Human Computer Interface testing
- Defect testing failed scenarios
- Path testing
- Data set testing
- Black-box testing
- White-box testing
- Automation testing
- The target/object of the test
- Software testing technologies:
- Evaluation of the Program Under Test
- Evaluation of the Tests Performed
- Software testing tools:
- Test harnesses (drivers, stubs)
- Test generators
- Capture/replay tools
- Oracle/file comparators/assertion checking tools
- Coverage analyzers and instrumenters
- Tracers
- Regression testing tools
- Reliability evaluation tools
- Software testing techniques:
- Based on the Software engineer’s intuition and experience
- Input Domain-Based techniques
- Code-Based techniques
- Fault-Based techniques
- Usage-Based techniques
- Model-Based testing techniques
- Techniques based on the nature of the application
- Selecting and combining techniques
- Software testing process:
- Planning
- Test environment development
- Test readiness review
- Test-case generation
- Execution
- Test logging and/or test results reporting
- Test results evaluation
- Program refinement
- Software handover to support staff
- Project management process:
- In a sequential methodology such as Waterfall, testing phase is a one-off activity
- In an iterative methodology such as Agile, Prototype, development phase is a testing process
- In an hybrid methodology, development phase is both a sequential and a concurrent phase
- Persons: Stakeholders, software engineers/developers who are directly involved with the project