Skip to content

Software Testing, From First Principles

This course is built around a single throughline: how do you earn justified confidence that software works — and how do you think about the edge cases that break it? You can never prove software is bug-free — the inputs are effectively infinite — so testing is not about proof. It is about buying confidence cheaply and finding where things break before your users do. Every part below serves that one question.

How to read this: go in order — each part builds on the ideas before it. At the end of each page, answer the Check-your-understanding questions in your own words before moving on; that is where the ideas actually stick. Optimize for depth over speed: it is better to truly understand one part than to skim five.

Foundations — Why We Test

Thinking Like a Tester

Test Design Techniques

Levels of Testing

Unit Testing

Integration & End-to-End Testing

Types of Testing

Test Automation

TDD & BDD

Coverage & Quality Metrics

Edge Cases — A Field Guide

Testing in Practice

Frontier — Fuzzing, Chaos & AI

Hands-On — Test a Feature End to End