| adding new methods | Broken Dispatch, Chapter 14 |
| assertion (definition and types) | Fictitious Implementation, Chapter 17 |
| assertion (determining place in interface implementation) | Fictitious Implementation, Chapter 17 |
| assertion (overhead) | Fictitious Implementation, Chapter 17 |
| avoiding type mismatches with if-then-else block | Impostor Type, Chapter 15 |
| best time to check the view properties | Liar View, Chapter 12 |
| changes to the stop() method | Orphaned Thread, Chapter 18 |
| checking for initialization without casting at runtime | Run-On Initializer, Chapter 19 |
| checking the data on input | existing data | Saboteur Data, Chapter 13 |
| class fields | null values | initialization | Run-On Initializer, Chapter 19 |
| class state | Run-On Initializer, Chapter 19 |
| ClassCastException | casting | null values | Null Pointers, Chapter 11 |
| ClassCastException | recursive data descent | Double Descent, Chapter 11 |
| ClassCastException | Visitor() method | Rogue Tile, Chapter 7 |
| ClassCastException avoidance by wrapping cast in an instanceof check | Double Descent, Chapter 11 |
| clean-up code | Split Cleaner, Chapter 16 |
| code crash | same task, different data | Saboteur Data, Chapter 13 |
| code dispatch after a method call | Double Descent, Chapter 11 |
| code extension | Split Cleaner, Chapter 16 |
| commenting invariants in code | Double Descent, Chapter 17 |
| constructor signatures | legacy code | Run-On Initializer, Chapter 19 |
| constructor signatures | Run-On Initializer, Chapter 19 |
| constructor | Broken Dispatch, Chapter 19 |
| copying code | Rogue Tile, Chapter 7 |
| copy-and-paste errors | Rogue Tile, Chapter 7 |
| data corruption (automatic file generation) | Saboteur Data, Chapter 13 |
| data corruption (manual editing) | Saboteur Data, Chapter 13 |
| data corruption (semantics) | Saboteur Data, Chapter 13 |
| data corruption (syntax) | Saboteur Data, Chapter 13 |
| data-input code | Saboteur Data, Chapter 13 |
| determining version of method to invoke | Fictitious Implementation, Chapter 17 |
| determining whether an instance is initialized | Run-On Initializer, Chapter 19 |
| discovering corrupt data before a crash | Saboteur Data, Chapter 13 |
| discrepancies in testing and runtime results | Liar View, Chapter 12 |
| documenting invariants | Fictitious Implementation, Chapter 17 |
| easily automating GUI tests | Liar View, Chapter 12 |
| equals() | Double Descent, Chapter 11 |
| execution paths | Split Cleaner, Chapter 16 |
| expressiveness | type signatures | unit tests | Fictitious Implementation, Chapter 17 |
| extension | Split Cleaner, Chapter 16 |
| freeing resources | Split Cleaner, Chapter 16 |
| general method constructor overloaded with a more specific method | Broken Dispatch, Chapter 14 |
| GUI design pitfalls | Liar View, Chapter 12 |
| GUI passes tests, fails in real world | Liar View, Chapter 12 |
| how GUI tests work | Liar View, Chapter 12 |
| ID semantically corrupt data | type checking | Saboteur Data, Chapter 13 |
| including exception-throwing methods | initialization | Run-On Initializer, Chapter 19 |
| inconsistent code on various JVMs | Platform-Dependent Bugs, Chapter 20 |
| inconsistent code on various operating systems | Platform-Dependent Bugs, Chapter 20 |
| inconsistent code on various versions of a JVM | Platform-Dependent Bugs, Chapter 20 |
| infesting code with tests | Broken Dispatch, Chapter1 4 |
| initialization | class fields | null values | Run-On Initializer, Chapter 19 |
| initialization and new contexts | Run-On Initializer, Chapter 19 |
| initialized/uninitialized fields | Run-On Initializer, Chapter 19 |
| input with large data structure | Saboteur Data, Chapter 13 |
| instanceof | Double Descent, Chapter 11 |
| interface semantic requirements | Fictitious Implementation, Chapter 17 |
| interface | Fictitious Implementation, Chapter 17 |
| invariants | Double Descent, Chapter 17 |
| IsInitialized() method | Run-On Initializer, Chapter 19 |
| iteration of data | Saboteur Data, Chapter 13 |
| Java Robot class | Liar View, Chapter 12 |
| Leaf class | Leaf nodes | null values | Branch | ClassCastException | casting | Null Pointers, Chapter 11 |
| legacy code | constructor signatures | Run-On Initializer, Chapter 19 |
| limited specification | extra invariants | interface | Fictitious Implementation, Chapter 17 |
| memory leaks | Split Cleaner, Chapter 16 |
| method arguments don't match | Broken Dispatch, Chapter 14 |
| Model-View-Controller architecture (MVC) | Liar View, Chapter 12 |
| modified method | Rogue Tile, Chapter 7 |
| multiple identical instances of the same class. | Double Descent, Chapter 11 |
| multithreaded code freezes up | (does not) print to standard error | Orphaned Thread, Chapter 18 |
| null pointers | Dangling Composite, Chapter 9 |
| null values | class fields | initialization | Run-On Initializer, Chapter 19 |
| null values | Leaf class | Leaf nodes | Branch | ClassCastException | casting | Null Pointers, Chapter 11 |
| NullPointerException. | Null Pointers, Chapter 19 |
| overloaded methods | Broken Dispatch, Chapter 14 |
| overloading method #1, breaking method #2 | Broken Dispatch, Chapter 14 |
| parsing | compilers | Saboteur Data, Chapter 13 |
| passing unit tests, failing program | Liar View, Chapter 12 |
| persistent bug | Rogue Tile, Chapter 7 |
| previously corrected bug | Rogue Tile, Chapter 7 |
| recursive data descent | ClassCastException | Double Descent, Chapter 11 |
| recursively defined data types | Dangling Composite, Chapter 9 |
| refactoring (other components) | Liar View, Chapter 12 |
| refactoring (perpetual) | Liar View, Chapter 12 |
| representing default values | Run-On Initializer, Chapter19 |
| resource clean-up code | Split Cleaner, Chapter 16 |
| restricting specification of interface invariants to type signatures | Fictitious Implementation, Chapter 17 |
| semantic requirements | Fictitious Implementation, Chapter 17 |
| single recursive call | Double Descent, Chapter11 |
| single-threaded vs. multithreaded design | Orphaned Thread, Chapter18 |
| special classes representing default values | performance hit | Run-On Initializer, Chapter19 |
| specification of an interface | Fictitious Implementation, Chapter 17 |
| specification- vs. implementation-related bug | Bugs/Specs/Implement, Chapter 20 |
| specification/implementation bug round-up | Platform-Dependent Bugs, Chapter 20 |
| splitting a text line into two Strings | Saboteur Data, Chapter 13 |
| statement execution order | Run-On Initializer, Chapter 19 |
| static type system | Impostor Type, Chapter 15 |
| stop() method | Orphaned Thread, Chapter 18 |
| system resources | Split Cleaner, Chapter 16 |
| tracing through execution paths | Split Cleaner, Chapter 16 |
| treating all types of data as the same type | Impostor Type, Chapter 15 |
| TreeVisitor | ClassCastException | Visitor() method | Rogue Tile, Chapter 7 |
| TreeVisitor interface | accept() methods | Rogue Tile, Chapter 7 |
| type | value field | class | Rogue Tile, Chapter 7 |
| type checking | identifying semantically corrupt data | Saboteur Data, Chapter 13 |
| type mismatches | Impostor Type, Chapter 15 |
| uninitialized/initialized fields | Run-On Initializer, Chapter 19 |
| unit tests | interface implementation | all possible inputs | Fictitious Implementation, Chapter 17 |
| unit tests and runtime behavior don't match | Liar View, Chapter 12 |
| unit tests | Broken Dispatch, Chapter 17 |
| using automated tests to check GUI code | Liar View, Chapter 12 |
| using instanceof and equals() to check for class and object identity | Double Descent, Chapter 11 |
| using tags in special fields to distinguish data types | Impostor Type, Chapter 15 |
| using the static type system to distinguish data types | Impostor Type, Chapter 15 |
| value field | class | type | Rogue Tile, Chapter 7 |
| variable assigned to null | Null Pointers, Chapter 8 |
| Visitor() method | ClassCastException | TreeVisitor | Rogue Tile, Chapter 7 |
| why so many unit tests | Liar View, Chapter 12 |
| won't recognize some data types | Impostor Type, Chapter 15 |