2. 如果决定了使用阶段式交付,那么就制定出一个详细的交付阶段规划。规划交付阶段时应注意:
(1) 给每个阶段定义一个主题(theme),通过主题确定每个阶段要交付哪些feature。
(2) 按照重要性程度对theme进行排序,先交付重要的主题,再交付次要的主题。
(3) 一定要让开发人员参与到交付阶段的规划中来。跟开发人员一道来确定每个阶段的主题和主题的次序,确保各阶段的安排在技术上可行,确保所有开发人员都认可这份规划。
3. 严格按照交付阶段规划,在每个阶段中,都要完成详细设计、构建、测试,并在各个阶段末交付一个可工作的产品。但是,并不必把每个阶段的版本都交付给用户。
4. 在阶段式交付中应注意防范feature creep的风险。阶段式交付对用户需求变更并没有太多的灵活性。
6.4 Evolutionary Delivery(渐进交付)
渐进交付与阶段式交付相似但又不同。它可以把软件中某些选定的部分更早地交付,但它未必能把整个软件更早地交付。渐进交付还具有一定的响应客户要求而修改产品方向的能力。渐进交付是贯穿整个项目的,如果你想要使用它的话,就需要在项目开始之前就做好规划。渐进交付的工作流程如下图所示。
最佳实践:Evolutionary Delivery(渐进交付)
1. 在完成需求分析之后,确定是否使用渐进交付。如果你对欲建立的系统有一个基本的理解,但同时又认为客户需求很可能在今后会发生变更,那么就可以考虑使用渐进交付。
2. 一旦决定采用渐进交付,那么首先要设计一个architecture和system core。Architecture应该尽可能地预见系统未来的走向,而core则应由那些不会因客户反馈而改变的较底层的系统功能组成。
3. 对每次交付迭代,先制定交付规划,决定本次迭代要开发的功能。注意:一定要确保先开发系统必需的功能。开发与测试完成之后,向客户演示这个系统,以获得他们的反馈。根据客户的反馈,再制定下一次迭代的交付规划,开始下一次迭代。
4. 重复这个循环,直到消耗完时间或金钱、直到完成计划的迭代次数、或者直到客户满意为止。
6.5 为你的项目选择最合适的生命期模型
软件经理必须意识到:对于任何特定的软件项目来说,最好的生命期模型完全取决于项目本身的需求;没有一个生命期模型能适用于所有项目。
最佳实践:为项目选择最合适的生命期模型
1. 在需求分析完成之后,便决定项目要采用哪种生命期模型。
2. 选择生命期模型时,参考下面的表格。
生命期模型的能力
纯瀑布
螺旋模型
阶段式交付
渐进交付
Works with poorly understood requirements
Poor
Excellent
Poor
Fair to excellent
Works with poorly understood architecture
Poor
Excellent
Poor
Poor
Produces highly reliable system
Excellent
Excellent
Excellent
Fair to excellent
Produces system with large growth envelope
Excellent
Excellent
Excellent
Excellent
Manages risks
Poor
Excellent
Fair
Fair
Can be constrained to a predefined schedule
Fair
Fair
Fair
Fair
Has low overhead
Poor
Fair
Fair
Fair
Allows for midcourse corrections
Poor
Fair
Poor
Fair to excellent
Provides customer with progress visibility
Poor
Excellent
Fair
Excellent
Provides management with progress visibility
Fair
Excellent
Excellent
Excellent
Requires little manager or developer sophistication