Based on Robert C. Martins exercises in Agile Java