Chapter 2. Finding your starting point
Figure 2.1. Architecture of TimeTrack, the employee time-tracking system
Figure 2.2. The Audit component’s processing pipeline
Figure 2.3. Visualizing site performance with Fluentd, Elasticsearch, and Kibana
Figure 2.4. Screenshot of a Kibana dashboard
Figure 2.5. Improving code using static analysis tools
Figure 2.6. An example FindBugs analysis result
Figure 2.7. Running FindBugs on a larger codebase
Figure 2.8. An example PMD analysis result
Figure 2.9. Continuous inspection workflow
Figure 2.10. A brand new Jenkins install
Figure 2.11. Browsing FindBugs results in the Jenkins UI
Figure 2.12. Happy graphs!
Chapter 3. Preparing to refactor
Figure 3.1. The spectrum of developer attitudes towards legacy code
Figure 3.2. Pain points and low-hanging fruit
Figure 3.3. Estimating the size of a project: how many iPhones fit in a cinema screen?
Chapter 4. Refactoring
Figure 4.1. IntelliJ’s Refactor menu
Figure 4.2. A Java class representing a tweet
Figure 4.3. Using the Tweet constructor directly
Figure 4.4. The Replace Constructor with Builder wizard
Figure 4.5. Creating a Tweet using TweetBuilder
Figure 4.6. An example of using Git branches to aid refactoring
Figure 4.7. An example of a dependency graph drawn using the Mikado Method
Figure 4.8. Our plan for refactoring the BannerAdChooser class using the Chain of Responsibility and Decorator patterns
Figure 4.9. Introducing a view adapter
Figure 4.10. Levels of modularity and their corresponding tests