Software Testing Fundamentals
Proving code works correctly, automatically and repeatably.
CurrentbeginnerBeginner-friendlyFull course available
Overview
Software testing fundamentals covers the vocabulary and levels of testing -- unit, integration, end-to-end -- and why automated tests matter: they prove behavior once and keep proving it on every future change, unlike manual re-checking. This platform's own test suite (unit, integration, and Playwright end-to-end tests, all listed in PROJECT_STATUS.md) is a real, inspectable example.
- What it is
- The practice and vocabulary of proving software behaves correctly through automated checks.
- Why it's used
- Manual re-testing doesn't scale; automated tests catch regressions immediately and let you change code with confidence.
- Where it fits
- Woven throughout development, not a separate phase at the end. The Software Testing Foundations course covers this in depth (test levels/types, structured test design techniques, risk-based planning, defect reporting); the Python Fundamentals course also includes one lesson on it in context.
Core concepts
- Unit tests
- Integration tests
- End-to-end tests
- The testing pyramid
- Deterministic assertions vs. flaky tests
Example
A unit test asserts a specific, deterministic outcome for a specific input -- this exact test can be re-run forever, catching any future change that breaks add().
def add(a, b):
return a + b
def test_add():
assert add(2, 3) == 5
assert add(-1, 1) == 0Common use cases
- Preventing regressions
- Documenting expected behavior through executable examples
- Enabling confident refactoring
Project ideas
- Write unit tests for a small function you've already written, covering typical and edge-case inputs