本书列出的编程实践是互为支撑的,它们背后有着清晰的理论主线。图1总结了本书将要介绍的主要编程实践和这些实践之间的联系。为了便于记忆,我把它们概括为一个根本挑战、两大核心价值、三大设计原则和对应的软件设计实践。

图1 精益编程实践

其中,一个根本挑战指的是软件与生俱来的复杂性,两大核心价值指的是软件开发的当前业务价值(满足业务需求)和长期资产价值(复用和演进),三大设计原则指的是分而治之、持续演进和质量内建。在此基础上,图1列出的互为支撑的软件设计实践分别为高质量需求、领域模型、由外而内的设计开发、设计分解、接口和契约、测试先行,以及演进式设计中包含的系列软件实践。第12章会更详细地介绍上述概念之间的关系。