Software Testing Notes
I. Testing Basics
1. Testing as an Engineering Activity
- Systematic activity to ensure software meets requirements.
- Focus on defect prevention, detection, and removal.
2. Role of Process in Software Quality
- Quality is built, not tested at the end.
- Defined processes = predictable, consistent outcomes.
3. Testing as a Process
- Planned activity: Planning → Designing → Execution → Reporting → Closure.
4. Basic Definitions
- Error: Mistake by developer.
- Defect (Bug): Flaw in code.
- Failure: Deviation from expected result.
- Test Case: Inputs + Conditions + Expected result.
5. Software Testing Principles
1. Testing shows presence, not absence of defects.
2. Exhaustive testing impossible.
3. Early testing saves cost & time.
4. Defects cluster in few modules.
5. Repeated tests lose effectiveness.
6. Testing is context-dependent.
7. Bug-free ≠ useful software.
6. Tester’s Role
- Independent validation, defect reporting, collaboration.
7. Origins of Defects
- Human errors, process gaps, environment, communication.
8. Defect Classes
- Requirements, Design, Code, Test defects.
9. Defect Repository
- Centralized database of defects, aids analysis & prevention.
10. Defect Examples
- Wrong calculation, UI issue, security loophole.
11. Developer/Tester Support
- Tools: JIRA, Bugzilla, Redmine.
------------------------------------------------------------
II. Test Case Design
1. Test Design
- Goal: Efficient coverage with minimum test cases.
2. Smarter Tester
- Focus on risk-based testing.
3. Test Case Strategies
- Black Box: Requirement-based.
- White Box: Structure-based.
4. Black Box Methods
- Random Testing, Equivalence Partitioning, BVA, State Transition, Decision Tables.
5. COTS Testing
- Black box useful where code unavailable.
6. White Box Methods
- Adequacy criteria, coverage (statement, branch, path).
- Control flow graphs, loop testing, data flow testing.
7. Evaluating Adequacy
- Balance cost vs effectiveness.
------------------------------------------------------------
III. Levels of Testing
1. Need
- Large systems need multiple test levels.
2. Unit Testing
- Test smallest component (function/class).
- Test harness: drivers + stubs.
3. Integration Testing
- Ensures modules work together.
- Strategies: Top-down, Bottom-up, Big-bang.
4. System Testing
- Full system validation: functional + non-functional + regression.
5. Acceptance Testing
- Alpha: Developer environment.
- Beta: User environment.
- Customer acceptance: Final approval.