第5章 軟件項(xiàng)目計(jì)劃
軟件項(xiàng)目管理過程從一組被稱為項(xiàng)目計(jì)劃的活動(dòng)開始。這些活動(dòng)中的第一個(gè)是估算。無論何時(shí)進(jìn)行估算,我們都是在預(yù)測(cè)未來,并會(huì)接受某種程度的不確定性。引用Frederish Brooks[BRO75]的話來說:
我們的估算技術(shù)發(fā)展緩慢。更為嚴(yán)重的是,它們隱含了一個(gè)很不正確的假設(shè),即“一切都會(huì)好的”……;因?yàn)槲覀儗?duì)自己的估算沒有把握,軟件管理者常常缺少讓人們得到一個(gè)好產(chǎn)品的信心。
雖然估算是一門科學(xué),但它更是一門藝術(shù),可這個(gè)重要的活動(dòng)不能以隨意的方式來進(jìn)行。對(duì)時(shí)間及工作量進(jìn)行評(píng)估的有用技術(shù)確實(shí)存在。而且因?yàn)楣浪闶撬衅渌?xiàng)目計(jì)劃活動(dòng)的基礎(chǔ),而項(xiàng)目計(jì)劃又提供了通往成功的軟件工程的行車圖,因此,沒有它我們就會(huì)搭錯(cuò)車。
5.1對(duì)估算的觀
一位總經(jīng)理曾經(jīng)被問到:在選擇一個(gè)項(xiàng)目管理者時(shí),什么特質(zhì)是最重要的。他的回答是:“具有在錯(cuò)誤真正發(fā)生之前就能知道它的能力”。我們還可以加上:“在未來還是一團(tuán)迷霧的時(shí)候就有勇氣進(jìn)行估算”。
估算一個(gè)軟件開發(fā)工作的資源、成本及進(jìn)度需要經(jīng)驗(yàn)、需要了解以前的有用信息、以及當(dāng)僅存在定性的數(shù)據(jù)時(shí)進(jìn)行定量測(cè)量的勇氣。估算具有與生俱來的風(fēng)險(xiǎn)(風(fēng)險(xiǎn)分析技術(shù)在第6章討論),而正是這種風(fēng)險(xiǎn)導(dǎo)致了不確定性。
項(xiàng)目復(fù)雜性對(duì)計(jì)劃中固有的不確定性產(chǎn)生重大影響。不過,復(fù)雜性是一個(gè)受到對(duì)以前工作的熟悉程度影響的相對(duì)的測(cè)量。實(shí)時(shí)應(yīng)用對(duì)于一個(gè)以前僅僅開發(fā)過批處理應(yīng)用的軟件項(xiàng)目組而言,可能被認(rèn)為是“非常復(fù)雜的”。同樣的實(shí)時(shí)應(yīng)用對(duì)于一個(gè)經(jīng)常開發(fā)高速處理控制的軟件項(xiàng)目組而言,則可能被認(rèn)為是“小菜一碟”。目前已經(jīng)有一些定量的軟件復(fù)雜性測(cè)量(第18章和23章)。這類測(cè)量主要用于設(shè)計(jì)級(jí)及代碼級(jí),因此難以在軟件計(jì)劃中(它在設(shè)計(jì)及編碼之前)使用。不過,關(guān)于復(fù)雜性的其他一些更為主觀的評(píng)估(如,第4章描述的功能點(diǎn)復(fù)雜度調(diào)整因子)可以在早期的計(jì)劃過程中建立。
項(xiàng)目規(guī)模是另一個(gè)影響估算準(zhǔn)確性的因素。隨著規(guī)模的增長(zhǎng),軟件中各個(gè)元素之間的相互依賴性也迅速增加(項(xiàng)目規(guī)模的增長(zhǎng)會(huì)對(duì)項(xiàng)目的成本及進(jìn)度產(chǎn)生幾何級(jí)數(shù)級(jí)的影響[MAH96]。估算中采用的重要方法——問題分解,也因?yàn)榉纸獬鰜淼脑厝匀缓艽蠖兊酶鼮槔щy。改寫Murphy定律:“所有可能出錯(cuò)的地方都會(huì)出錯(cuò)”——如果有更多的部分可能失敗,那就會(huì)有更多的部分失敗。
結(jié)構(gòu)不確定性的程度也會(huì)對(duì)估算的風(fēng)險(xiǎn)產(chǎn)生影響。在這里,結(jié)構(gòu)是指:需求能被確定的程度,功能能被分解的容易程度,以及必須要加工的信息的層次性。
歷史信息的可用程度也決定了估算的風(fēng)險(xiǎn)。Santayana曾經(jīng)說過:“不記得過去的人必將重蹈覆轍”。通過回顧過去,我們能夠效法好的地方,且避免再出現(xiàn)同樣的問題。當(dāng)存在大量可用的關(guān)于過去項(xiàng)目的軟件度量時(shí)(第4章),估算就會(huì)有更大的保證;能夠建立進(jìn)度計(jì)劃,以避免以前遇到過的困難;總體風(fēng)險(xiǎn)也會(huì)降低。
風(fēng)險(xiǎn)是由為資源、成本及進(jìn)度建立的定量估算中存在的不確定性來測(cè)量的。如果對(duì)項(xiàng)目范圍理解很差或項(xiàng)目需求不斷變化,不確定性及風(fēng)險(xiǎn)就會(huì)很高。軟件計(jì)劃者應(yīng)該要求功能、性能及接口定義(包含在系統(tǒng)說明中)的完備性。計(jì)劃者,尤其是用戶,應(yīng)該認(rèn)識(shí)到軟件需求的變化意味著成本及進(jìn)度的不穩(wěn)定。
作為對(duì)估算的最后一個(gè)觀察,我們引用亞里斯多德(公元前330年)的話:
記?。簯?yīng)該滿足于事物的本性所能容許的精確度,當(dāng)只能近似于真理時(shí),不要去尋求絕對(duì)的準(zhǔn)確……
項(xiàng)目管理者不應(yīng)該被估算所困擾?,F(xiàn)代軟件工程方法(如,演化軟件過程模型)支持開發(fā)的迭代視圖。在這類方法中,當(dāng)用戶改變需求時(shí),有可能會(huì)重新審查估算(在知道更多信息后)并修改之。①
軟件項(xiàng)目管理過程從一組被稱為項(xiàng)目計(jì)劃的活動(dòng)開始。這些活動(dòng)中的第一個(gè)是估算。無論何時(shí)進(jìn)行估算,我們都是在預(yù)測(cè)未來,并會(huì)接受某種程度的不確定性。引用Frederish Brooks[BRO75]的話來說:
我們的估算技術(shù)發(fā)展緩慢。更為嚴(yán)重的是,它們隱含了一個(gè)很不正確的假設(shè),即“一切都會(huì)好的”……;因?yàn)槲覀儗?duì)自己的估算沒有把握,軟件管理者常常缺少讓人們得到一個(gè)好產(chǎn)品的信心。
雖然估算是一門科學(xué),但它更是一門藝術(shù),可這個(gè)重要的活動(dòng)不能以隨意的方式來進(jìn)行。對(duì)時(shí)間及工作量進(jìn)行評(píng)估的有用技術(shù)確實(shí)存在。而且因?yàn)楣浪闶撬衅渌?xiàng)目計(jì)劃活動(dòng)的基礎(chǔ),而項(xiàng)目計(jì)劃又提供了通往成功的軟件工程的行車圖,因此,沒有它我們就會(huì)搭錯(cuò)車。
5.1對(duì)估算的觀
一位總經(jīng)理曾經(jīng)被問到:在選擇一個(gè)項(xiàng)目管理者時(shí),什么特質(zhì)是最重要的。他的回答是:“具有在錯(cuò)誤真正發(fā)生之前就能知道它的能力”。我們還可以加上:“在未來還是一團(tuán)迷霧的時(shí)候就有勇氣進(jìn)行估算”。
估算一個(gè)軟件開發(fā)工作的資源、成本及進(jìn)度需要經(jīng)驗(yàn)、需要了解以前的有用信息、以及當(dāng)僅存在定性的數(shù)據(jù)時(shí)進(jìn)行定量測(cè)量的勇氣。估算具有與生俱來的風(fēng)險(xiǎn)(風(fēng)險(xiǎn)分析技術(shù)在第6章討論),而正是這種風(fēng)險(xiǎn)導(dǎo)致了不確定性。
項(xiàng)目復(fù)雜性對(duì)計(jì)劃中固有的不確定性產(chǎn)生重大影響。不過,復(fù)雜性是一個(gè)受到對(duì)以前工作的熟悉程度影響的相對(duì)的測(cè)量。實(shí)時(shí)應(yīng)用對(duì)于一個(gè)以前僅僅開發(fā)過批處理應(yīng)用的軟件項(xiàng)目組而言,可能被認(rèn)為是“非常復(fù)雜的”。同樣的實(shí)時(shí)應(yīng)用對(duì)于一個(gè)經(jīng)常開發(fā)高速處理控制的軟件項(xiàng)目組而言,則可能被認(rèn)為是“小菜一碟”。目前已經(jīng)有一些定量的軟件復(fù)雜性測(cè)量(第18章和23章)。這類測(cè)量主要用于設(shè)計(jì)級(jí)及代碼級(jí),因此難以在軟件計(jì)劃中(它在設(shè)計(jì)及編碼之前)使用。不過,關(guān)于復(fù)雜性的其他一些更為主觀的評(píng)估(如,第4章描述的功能點(diǎn)復(fù)雜度調(diào)整因子)可以在早期的計(jì)劃過程中建立。
項(xiàng)目規(guī)模是另一個(gè)影響估算準(zhǔn)確性的因素。隨著規(guī)模的增長(zhǎng),軟件中各個(gè)元素之間的相互依賴性也迅速增加(項(xiàng)目規(guī)模的增長(zhǎng)會(huì)對(duì)項(xiàng)目的成本及進(jìn)度產(chǎn)生幾何級(jí)數(shù)級(jí)的影響[MAH96]。估算中采用的重要方法——問題分解,也因?yàn)榉纸獬鰜淼脑厝匀缓艽蠖兊酶鼮槔щy。改寫Murphy定律:“所有可能出錯(cuò)的地方都會(huì)出錯(cuò)”——如果有更多的部分可能失敗,那就會(huì)有更多的部分失敗。
結(jié)構(gòu)不確定性的程度也會(huì)對(duì)估算的風(fēng)險(xiǎn)產(chǎn)生影響。在這里,結(jié)構(gòu)是指:需求能被確定的程度,功能能被分解的容易程度,以及必須要加工的信息的層次性。
歷史信息的可用程度也決定了估算的風(fēng)險(xiǎn)。Santayana曾經(jīng)說過:“不記得過去的人必將重蹈覆轍”。通過回顧過去,我們能夠效法好的地方,且避免再出現(xiàn)同樣的問題。當(dāng)存在大量可用的關(guān)于過去項(xiàng)目的軟件度量時(shí)(第4章),估算就會(huì)有更大的保證;能夠建立進(jìn)度計(jì)劃,以避免以前遇到過的困難;總體風(fēng)險(xiǎn)也會(huì)降低。
風(fēng)險(xiǎn)是由為資源、成本及進(jìn)度建立的定量估算中存在的不確定性來測(cè)量的。如果對(duì)項(xiàng)目范圍理解很差或項(xiàng)目需求不斷變化,不確定性及風(fēng)險(xiǎn)就會(huì)很高。軟件計(jì)劃者應(yīng)該要求功能、性能及接口定義(包含在系統(tǒng)說明中)的完備性。計(jì)劃者,尤其是用戶,應(yīng)該認(rèn)識(shí)到軟件需求的變化意味著成本及進(jìn)度的不穩(wěn)定。
作為對(duì)估算的最后一個(gè)觀察,我們引用亞里斯多德(公元前330年)的話:
記?。簯?yīng)該滿足于事物的本性所能容許的精確度,當(dāng)只能近似于真理時(shí),不要去尋求絕對(duì)的準(zhǔn)確……
項(xiàng)目管理者不應(yīng)該被估算所困擾?,F(xiàn)代軟件工程方法(如,演化軟件過程模型)支持開發(fā)的迭代視圖。在這類方法中,當(dāng)用戶改變需求時(shí),有可能會(huì)重新審查估算(在知道更多信息后)并修改之。①

