19.2 敏捷开发
敏捷开发是20世纪90年代末出现的一种软件开发方法,是关于如何使软件开发更加轻量级、灵活和增量的想法的集合;它在2001年的一次从业人员会议上被正式定义。敏捷开发主要是关于软件开发的过程(组织团队、管理时间表、单元测试的作用、与客户互动等),而不是软件设计。尽管如此,它与本书中的一些设计原则有关。
敏捷开发中最重要的元素之一是这一概念:开发应该是增量和迭代的。在敏捷方法中,一个软件系统是在一系列的迭代中开发的,每一次迭代都会增加和评估一些新的功能;每一次迭代都包括设计、测试和客户的意见。一般来说,这与本书提倡的增量方法相似。正如第1章中提到的,在项目开始时不可能很好地将一个复杂的系统可视化,以确定最佳的设计。最终得到一个好的设计的最好方法是以增量的方式开发一个系统,每一次增量都会增加一些新的抽象,并根据经验重构现有的抽象。这与敏捷开发方法类似。
敏捷开发的风险之一是,它可能导致战术性编程。敏捷开发倾向于将开发人员的注意力集中在功能上,而不是抽象上,它鼓励开发人员推迟设计决策,以便尽快生产出可以使用的软件。例如,一些敏捷实践者认为,你不应该马上实现通用的机制;应该先实现最小的特殊用途的机制,一旦你知道需要它,再重构成更通用的东西。尽管这些论点在某种程度上是有道理的,但它们反对投资的方法,而且鼓励一种更为战术性的编程风格。这可能会导致复杂性的快速积累。
增量开发通常是一个好主意,但开发的增量应该是抽象,而不是功能。在某项功能需要之前,暂缓对某一抽象的思考是可以的。一旦你需要这个抽象,就花时间把它设计得干净利落;遵循第6章的建议,使它具有一定的通用性。
Last updated