This mini-lesson covers OCR J277 · 2.3 Producing robust programs: defensive design (anticipating misuse, input validation, authentication), maintainability (comments, sensible names, indentation), and testing (iterative & terminal testing, test data — normal, boundary & invalid, and error types).
Answer the questions as you go and collect ⭐ stars. Press Start when you're ready.
Defensive design
Defensive design
Defensive design means writing programs that anticipate misuse and cope with unexpected input without crashing.
Input validation — checking data is sensible before it is used (e.g. a range check, type check, length check, presence check, format check).
Authentication — confirming who the user is, e.g. with a username & password, before granting access.
Anticipating misuse — thinking about how a user might enter wrong data and handling it gracefully.
Validation vs verification:validation checks data is reasonable/sensible; verification checks it was entered correctly (e.g. typing a password twice).
Quick check
Which check?
?A program should only accept an age between 0 and 120. What kind of input validation is this?
Maintainability
Maintainability
Well-written code is easy for others (and future-you) to understand and change. Good practices:
Comments — notes in the code explaining what sections do (ignored when the program runs).
Sensible variable/subprogram names — e.g. totalScore not x.
Indentation — laying out code so blocks (loops, if-statements) are clear.
Subprograms — breaking code into reusable named blocks.
Why it matters: maintainable code is quicker to debug, update and hand over to another programmer.
Testing
Testing: iterative & terminal
Testing checks a program works correctly:
Iterative testing — testing as you build, fixing problems in each part before moving on.
Terminal (final) testing — testing the whole finished program against the requirements at the end.
You choose test data to cover different cases:
Normal — sensible data the program should accept (e.g. age 30).
Boundary (extreme) — values at the edge of what's allowed (e.g. age 0 and 120).
Invalid / erroneous — data that should be rejected (e.g. age −5 or "cat").
Quick check
Which test data?
?A field accepts marks from 0 to 100. A tester enters 0 and 100 to check the edges are handled. What type of test data is this?
Sort it
Test data for a 1–10 field
A field should accept whole numbers from 1 to 10. Tap a value, then tap what test data it is.
✅ Normal
⚖️ Boundary
❌ Invalid
Error types
Syntax & logic errors
Two kinds of programming error:
Syntax error — the code breaks the rules of the language so it won't run/translate (e.g. a missing bracket or misspelt keyword). The translator reports these.
Logic error — the code runs but gives the wrong result (e.g. using + instead of −). The program doesn't crash, so these are harder to find.
Tell them apart: syntax error = won't run; logic error = runs but wrong answer.
Quick check
Which error?
?A program runs with no crash, but a total is always double what it should be because + was used instead of leaving a value alone. What type of error is this?
Quick check
Maintainable code
?Which of these makes a program easier to maintain?
Match it
Match term to meaning
Tap a term on the left, then its matching description on the right.