| Definition | Record what the script actually does without immediately guessing why. | State the result the learner expected for the same input and conditions. | Classify the problem before editing: syntax, value/type, state, input, branch, repetition, function contract, or file interaction. | Inspect one signal that could support or reject the likely cause. | Choose the smallest safe action that tests the current hypothesis. | Confirm the intended case and nearby edge cases after the learner makes a change. |
|---|
| Primary decision question | What output, stop, repetition, or message can be observed consistently? | What should have happened, and what rule or requirement supports that expectation? | Which category best explains the difference between observed and expected behavior? | What value, condition, input, or state transition would distinguish this hypothesis from another? | What is the least invasive check that will produce new information? | Did the change solve the cause without breaking another path? |
|---|
| Purpose | Separates evidence from assumptions and gives the debugging session a stable starting point. | Turns a vague complaint into a testable difference between actual and intended behavior. | Narrows the search and prevents unrelated edits. | Makes debugging an evidence-gathering process rather than random editing. | Preserves working behavior and keeps cause and effect visible. | Distinguishes a verified correction from a coincidental successful run. |
|---|
| Time horizon | The smallest repeatable run that demonstrates the behavior. | The same small run used for the observed behavior. | One diagnostic hypothesis at a time. | A single run or focused inspection. | One edit or one additional observation. | Normal, boundary, and invalid-input checks appropriate to the small example. |
|---|
| Typical information | Exact input, relevant output, error category, and the smallest learner-owned excerpt needed to reason about flow. | A learner-written example, expected state change, or output description. | Message location, variable values, branch decisions, loop state, function inputs/outputs, and boundary cases. | A trace, temporary observation, boundary input, or hand-worked state table. | A deliberately selected test input, a state trace, or a tiny fictional reproduction. | Before/after behavior and a compact test table written by the learner. |
|---|
| Common confusion | Describing the intended result as though it were the observed result. | Using a broad goal such as make it work without a specific observable result. | Treating the first line named in a message as proof of the root cause. | Changing several lines before observing which change mattered. | Rewriting the whole script because one path is unclear. | Stopping after one successful input. |
|---|
| What does not belong | Uploading an entire graded program or asking for a replacement solution. | Restating or reproducing a restricted prompt. | Copying an unexplained fix from a solution repository. | Collecting student, credential, or production-system data. | Replacing learner-owned code with completed work. | Claiming broad correctness without tests or learner review. |
|---|