Test-Driven Development with Java: Create higher-quality software by writing tests first with SOLID and hexagonal architecture - Mellor (IEEE, 2003)