PC-lint, 485–88
analysis comparison, 504
defined, 485
error types, 485–87
features, 485
language-construct analysis, 486–87
language-specific analyses, 486
numerical-type analysis, 486
preprocessor macro scan, 486
procedural value tracking, 487
technology, 485–87
usage, 487–88
See also Static-analysis tools
Penultimate pointer, 126
Petroski, Henry, 435–36, 437
Platforms
different, executing on, 255–56
stabilizing programs and, 203
Pointers
back, 318
inspecting, 120
null, 124, 144, 154
penultimate, 126
saving, to upper frontier, 125
Polya, George, 175
defined, 176
“How to Solve It” list, 176–77
questions and suggestions, 177–78
See also Mathematicians
Possibilities, enumerating, 41–42
_Power variable, 130, 131, 132, 144, 152
Preliminary design (engineering), 434–35
Probability decisions, 412–13
base rates, 413
certainty effect, 413
conjunction effect, 412–13
disjunction effect, 413
ease of representation, 412
framing of choices, 412
gambler’s fallacy, 413
See also Knowledge-based errors
Problems
application, cutting down, 204–5
categorizing, 208–12
code, 60
compiler, cutting down, 206–7
control-flow, 377
describing, 212–13
dynamic data-structure, 374
else, 325
explaining, to someone else, 213
external software, 379–80
GUI application, cutting down, 205–6
memory, 375–76
memory corruption, 320
object-oriented, 375
physical displacement of, 58
recalling, 214–15
rule, 403–4
similarity, 214–15
static data-structure, 373–74
value-corruption, 377–78
Procedure arguments display, 230–32
defined, 230
language specifics, 231–32
potential problems, 230
purpose, 230
questions answered, 230
refined tactics, 230–31
related tactics, 231
tactics selection, 231
See also Debugging tactics
Procedure metarules, 457–59
commentary, 458
convention examples, 458–59
See also Programming conventions
Program (case study I), 63–174
bug 1, 78–83
bug 2, 83–89
bug 3, 89–94
bug 4, 94–111
bug 5, 111–14
bug 6, 115–17
bug 7, 117–22
bug 8, 122–26
bug 9, 126–32
bug 10, 133–36
bug 11, 136–43
bug 12, 143–45
bug 13, 145–53
bug 14, 153–54
bug 15, 155–74
code, 64–77
complete binary tree, 64
defined, 63–64
heap sorts, 63–64
Program (case study II), 257–60
algorithm, 258
bug 1, 262–65
bug 2, 265–67
bug 3, 267–68
bug 4, 268–79
code, 258–62
defined, 257
final source, 275–79
final test, 269–74
Program (case study III), 279–360
bug 1, 303–7
bug 2, 307–11
bug 3, 311–16
bug 4, 316–17
bug 5, 317–19
bug 6, 319–22
bug 7, 323–26
bug 8, 326–28
bug 9, 328–31
bug 10, 331–34
code, 281–303
defined, 279–80
expression tree, 280
final source, 338–60
final test, 334–38
idioms, 280
idioms database, 281
matching phase, 281
numbering phase, 280, 281
Program Data Base (PDB), 468
Programming conventions, 451–566
class structure metarules, 455–57
defined, 451
language-construct avoidance metarules, 465–66
naming-convention metarules, 462–65
object-oriented, 452–53
procedure metarules, 457–59
source-file metarules, 453–55
statement metarules, 459–62
Program slices, 195
Program slice strategy, 195
assumptions, 195
choosing, 198
control structure, 195
See also Debugging strategies
Prototypes
functional, 445
implementation, 444–45
performance, 445
user-interface, 445
Psychologists
error cause explanations, 394–413
human cognition models, 388–89
human error definition/classification, 389–94
research, 414–27
way of, 3, 387–431
worldview of, 387–88
Purify, 495–97
analysis comparison, 504, 505
defined, 495
features, 495
technology, 496–97
usage, 497