Software Development
Software Development covers the path from design to working, tested code: lifecycle models, coding practice, test design, and configuration control.
Core rules
- Match the lifecycle to uncertainty and risk. Waterfall suits stable, well-understood requirements; the V-model pairs each build stage with a test level; spiral is risk-driven; iterative/incremental delivers slices; agile Scrum/Kanban suits changing priorities but still needs discipline.
- Distinguish verification (“built right”) from validation (“right product”). Test levels are unit, integration, system, and acceptance; alpha/beta are acceptance variants, not unit tests.
- White-box coverage: statement coverage executes every statement; branch/decision coverage executes every outcome of each decision; condition coverage evaluates each boolean subexpression. 100% statement does not guarantee 100% branch.
- Black-box techniques: equivalence partitioning, boundary value analysis, decision tables, state transition testing.
- Practice TDD as red-green-refactor; use CI to run builds and tests; use version control branches and code review; refactor under tests.
Worked example
A rule accepts an age if 18 ≤ age ≤ 65. Equivalence classes are below 18, 18–65, above 65. Boundary values are 17, 18, 65, 66. To achieve branch coverage on if (age >= 18 && age <= 65), test at least one true outcome and one false outcome; 17 and 30 suffice for branch, while condition coverage needs cases that make each subexpression true and false.
Traps
Claiming statement coverage implies branch coverage; omitting boundaries; confusing integration with system testing; treating continuous delivery as continuous deployment; testing only happy paths.