Introduction
Testing every possible input for software is impossible and inefficient. To solve this, testers use smart methods to pick representative inputs that catch most errors without checking everything.
Imagine sorting mail into bins by zip code ranges. Instead of checking every address, you check one letter from each zip code range to ensure sorting works. Then, you check letters with zip codes right at the start and end of each range to catch sorting mistakes at the boundaries.
┌─────────────────────────────┐ │ Input Range │ │ ┌───────────┐ ┌───────────┐ │ │ │ Partition │ │ Partition │ │ │ │ 1 │ │ 2 │ │ │ └───────────┘ └───────────┘ │ │ ↑ ↑ │ │ Test Test │ │ one value one value │ │ from from │ │ each part each part │ │ │ │ Boundaries: │ │ ┌─┐ ┌─┐ │ │ │*│ │*│ │ │ └─┘ └─┘ │ │ Test values at edges │ └─────────────────────────────┘