需求蔓延与基线
什么是需求蔓延?
随着软件开发的进行,新需求总会不断地出现。其中的一些是已有需求的衍生需求, 而另一些则完全与已有需求无关。这些需求中还不乏一些重要的、必须要在当前软件版本或后续版本中实现的需求。 Alan Davis 称这种 “新需求随开发进程而不断涌现” 的现象为 “需求蔓延” (Creep)。这些新需求故而称为蔓延
(Creeping) 需求。
需求蔓延在一定程度上会直接导致项目的范围蔓延, 即在项目过程中因不断地添加新产品功能而导致项目范围持续扩大的现象。参见《软件工程核心知识》下卷第 50 章的相关阐述 (页 828)。从实践来看, 需求蔓延毫无例外地出现在每一个软件开发项目中,
且一般具有如下两规律:
(1) 大部分蔓延需求都与已有需求存在一定的关联关系。
(2) 待开发的软件规模越大且开发时间越长, 蔓延需求量就越大。
注意, 较大比例的蔓延需求属于设计需求, 集中出现在软件设计阶段。这个 “在软件设计阶段密集地涌现出大量设计需求” 的现象常称为 “需求爆炸” (Explosion)。 虽说需求爆炸是一种需求蔓延特例, 但相比于普通情形的需求蔓延, 需求爆炸显得尤为 “剧烈”, 在短时间内就集中涌现出许多设计需求。在实践中, 如果工程师在获取需求时能够参考初始架构方案,
就能在需求阶段及时有效地获取绝大多数架构需求, 从而减少在设计阶段涌现出的设计需求数量, 也能减少这些新需求对已有需求及其分析成果 (如优先级序列和基线定义) 造成的可能冲击。
什么是需求基线?
基线 (Baseline) 是一个常用概念, 在各领域应用广泛。它泛指一个集合, 包含一些相对稳固的指定对象。在软件领域, 软件基线就指软件的特定状态, 包括处于该状态下的代码、数据和文档。从软件版本演化过程来看, 后一版本的开发常基于前一版本的基线进行,从而使得前后版本之间具有强烈的继承性。
需求基线就是为开发某软件版本而从产品需求总集中选定的需求子集。位于需求基线之内的需求就称为基线需求, 而挑选基线需求的过程也就称为需求遴选(即定义需求基线)。需求遴选是需求管理的一项重要活动。经遴选而形成的需求基线直接决定了目标版本的潜在价值,
也极大影响了它的开发过程 (包括成本、时间和复杂度等)。
砍半法
需求遴选本质上是一个商业过程, 应当由客户担纲完成, 目的就是为客户创造最大价值反馈或最佳价值/成本比。但是, 项目中还存在很多技术因素, 也会影响到需求遴选。其中最典型的因素就是需求蔓延现象。在实现某需求基线的过程中还会发现很多新需求,其中还不乏一些亟待与基线需求同时实现的需求。这些新需求会扩充待实现的需求基线,进而影响需求实现过程。概言之,
蔓延需求增加了需求遴选的难度和不确定性。
保守的基线定义实践
对于具有严格时限的软件开发项目而言, 需求遴选尤为重要。有经验的管理者通常会以 “保守” 的态度遴选基线需求, 如下描述的 “砍半法” 实践就是一项典型的保守做法。
最佳实践: 软件版本的需求基线不宜超过可在50%至90%的计划时间内实现的最大需求量。
管理者基于既定需求规约文档, 遴选待实现的需求, 形成候选需求基线。进而, 管理者应预测在实现这些需求的过程中可能涌现出的蔓延需求量, 并以此削减候选需求基线, 通常削减 10% 至 50%。这实质是要控制需求基线能在 50% 至 90% 的计划时间内有效完成。这就是业界常说的砍半法。如果不砍半
(即削减 10%—50%), 实际实现的需求量必然远超出既定基线的范围, 从而会增加版本开发成本, 尤其是延长版本开发时间。这对于那些具有严格时限的软件项目而言显然是不可接受的。
影响基线定义的因素
当然, “砍 10%” 与 “砍 50%” 毕竟存在很大差别, 故而 “是否真应减半” 还有待就具体项目作具体分析。以上述实践而言, 它给出的 “50% 至 90%” 本身就是一个很大的区间。如何在该区间中选取一个合适的比例值就是需求基线定义的首要难点。笔者认为,
这个合理比例值的选取主要取决于如下项目因素:
(1) 需求稳定性: 需求到底有多么不稳定? 对于相对稳定的需求, 可选取靠近 90% 的点值; 反之, 对于相对不稳定的需求, 可选取靠近 50% 的点值。
(2) 时间计划的柔性: 软件版本的开发时长是否苛刻, 不可延长? 如果柔性不大 (如版本必须限期完成), 则可选取靠近 50% 的点值, 否则可选取靠近 90% 的点值。
(3) 成本计划的柔性: 软件版本的开发成本是否固定, 不可超支? 如果柔性不大 (如版本不可超支), 则可选取靠近 50% 的点值, 否则可选取靠近 90% 的点值。
(4) 开发人员的工期柔性: 软件开发人员是否可以拖延工期直至开发结束? 如果柔性不大, 则可选取靠近 50% 的点值, 否则可选取靠近 90% 的点值。
(5) 版本开发所处时段: 当前版本开发过程处于总的软件系列过程中的哪个阶段? 在初始版本的开发过程中涌现的蔓延需求相对较多, 因而应选取靠近 50% 的点值。而后续版本的开发过程可选取靠近 90% 的点值。
在具体需求遴选实践中, 必须综合项目的如上因素, 预估蔓延需求量, 特别是其中的必须在既定版本中实现的蔓延需求。预估的准确性会影响需求基线定义。对于时限严格的项目, 宜作保守估计, 即充分预估蔓延需求量 (杜绝低估)。
需求蔓延、基线与砍半法,布布扣,bubuko.com
需求蔓延、基线与砍半法
原文:http://blog.csdn.net/secbok/article/details/23207587