Refactoring for Testability
There are a lot of examples on the web on how to introduce good agile testing and architectural patterns when you are starting a new software development project. In reality, even on newer projects, you are more often working in a less than ideal state.