Validation: demonstrate the software meets requirements ("right product?"). Defect testing: find incorrect behaviour ("product right?"). Different goals: confidence vs bug-hunting.
Identify increment -> write an automated test -> run (fails) -> implement and refactor -> rerun (passes). Benefits: better understanding, high coverage, regression suite, easier debugging, tests as documentation.
Alpha: users test at the developer's site. Beta: selected users test at their own sites. Acceptance: formal customer testing to decide acceptance (contractual). Alpha/beta are user testing during development; acceptance is the final check.
Changing a system after delivery; the most expensive phase (most cost is evolution). Three types: fault repairs, environmental adaptation, functionality addition.
Continuing change (must change or lose usefulness), increasing complexity (degrades without work), continuing growth (functionality must increase), declining quality (declines without adaptation). Most relevant today: continuing change, growth and complexity.
Restructuring/redesigning software to improve maintainability without changing functionality. Benefits over replacement: lower risk and cost, retained knowledge, business keeps running while improved.
Business value: usage, processes supported, dependability, output quality. Technical quality: code understandability, documentation, data quality, performance, language, configuration management, test data, maintainer skills.