需求蔓延、基線與砍半法

----摘自《軟件工程核心知識》上卷第17章(第276頁)

需求蔓延與基線

什麼是需求蔓延?

隨着軟件開發的進行,新需求總會不斷地出現。其中的一些是已有需求的衍生需求, 而另一些則完全與已有需求無關。這些需求中還不乏一些重要的、必須要在當前軟件版本或後續版本中實現的需求。 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% 的點值。

在具體需求遴選實踐中, 必須綜合項目的如上因素, 預估蔓延需求量, 特別是其中的必須在既定版本中實現的蔓延需求。預估的準確性會影響需求基線定義。對於時限嚴格的項目, 宜作保守估計, 即充分預估蔓延需求量 (杜絕低估)。


 ----摘自《軟件工程核心知識》上卷第17章(第276頁)----
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章