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) == 0

Common 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

Official references