Anticipate misuse, validate and test data, handle files and solve complete procedural problems.
Anticipate misuse and check that a user is authorised before granting access.
Keep asking until a numeric input lies inside inclusive limits.
Choose a validation rule that matches the data being entered.
Classify why a program failed and correct the faulty line.
Use normal, boundary, invalid and erroneous values to try to break a program.
Open, read, write and close files so data can survive between program runs.
Generate inclusive random values and seed Python when a repeatable test is required.
Plan a larger problem as small sub-programs, then combine all three programming constructs.