雖然估算是一門科學(xué),更是一門藝術(shù),這個(gè)重要的活動(dòng)不能以隨意的方式來進(jìn)行……因?yàn)楣浪闶撬衅渌?xiàng)目計(jì)劃活動(dòng)的基礎(chǔ),而項(xiàng)目計(jì)劃又提供了通往成功的軟件工程的道路圖,所以,沒有它我們就會(huì)搭錯(cuò)車?!猺oger s. pressman 《軟件工程——實(shí)踐者的研究方法》
1、估算前的規(guī)劃
當(dāng)我們的辦公室內(nèi)堆滿了雜亂無章的文件時(shí),恐怕無法知道對(duì)于我們真正有用的文件在哪里,當(dāng)我們的軟件相目中收集了各種需求、意見、問題時(shí),我們也很難從中估算出整個(gè)項(xiàng)目的規(guī)模、工作量以及成本。因此,在估算之前我們首先要對(duì)眾多信息進(jìn)行整理、歸類分析,從而得到一個(gè)條理清晰的項(xiàng)目計(jì)劃,在這個(gè)計(jì)劃提供的框架內(nèi),才可能開始正確的估算。精心的規(guī)劃是任何一個(gè)軟件開發(fā)項(xiàng)目成功與否的關(guān)鍵,有了規(guī)劃就有如成竹在胸,之后無論風(fēng)云變幻,都有應(yīng)對(duì)入流的方法。當(dāng)然只有正確的規(guī)劃,才能給軟件開發(fā)指引正確的方向。
軟件項(xiàng)目規(guī)劃的重點(diǎn)是對(duì)人員角色、任務(wù)進(jìn)度、經(jīng)費(fèi)、設(shè)備資源、工作成果等等做出合適的安排,制定出一些計(jì)劃(包括高層的和細(xì)節(jié)的),使大家按照計(jì)劃行事,最終順利地達(dá)到預(yù)定的目標(biāo)。
1.1、規(guī)劃的第一步:確定軟件范圍
確定軟件范圍,就是確定目標(biāo)軟件的數(shù)據(jù)和控制、功能、性能、約束、接口以及可靠性。這項(xiàng)工作和需求分析是很類似的,如果之前已經(jīng)達(dá)成需求分析規(guī)約,那么可以直接從《需求分析說明書》中把有用的部分拿來使用。如果還沒有開始需求分析,關(guān)于確定軟件范圍的方法方面,我們可以采用許多需求分析技術(shù)(如需求誘導(dǎo)),從客戶那里得到一個(gè)具體的軟件范圍。當(dāng)然如果是一次全新的軟件邊界探索,就應(yīng)當(dāng)考慮軟件本身可行性問題,包括團(tuán)隊(duì)是否具備在技術(shù)、財(cái)務(wù)、時(shí)間、資源上游可靠的保障,軟件本身在市場上是否有可靠的競爭優(yōu)勢(shì) ,等等。
獲得軟件范圍,最直接最可靠的來源就是用戶對(duì)軟件的需求描述。例如,在開發(fā)一個(gè)c/s架構(gòu)的鐵路供電段數(shù)據(jù)上報(bào)系統(tǒng)中,客戶向我們提供了以下的目標(biāo)軟件需求描述:
在供電站總部每天結(jié)束前要審核下屬節(jié)點(diǎn)操作員(30~40個(gè))的供電安全數(shù)據(jù)報(bào)表,要求每個(gè)節(jié)點(diǎn)必須在下午5:30~6:00之間上傳數(shù)據(jù)。總部系統(tǒng)通過自動(dòng)分析,整理出整個(gè)區(qū)內(nèi)的安全形勢(shì)報(bào)表,并自動(dòng)反饋到每個(gè)節(jié)點(diǎn)。各個(gè)節(jié)點(diǎn)之間通過調(diào)制解調(diào)器撥號(hào)(modem)用內(nèi)部電話線相連,每個(gè)節(jié)點(diǎn)電腦主機(jī)配備一個(gè)modem。上傳數(shù)據(jù)為制式報(bào)表出了制式信息外,系統(tǒng)自動(dòng)附加操作員姓名、上報(bào)時(shí)間、上報(bào)節(jié)點(diǎn)名稱。信息一旦上傳,節(jié)點(diǎn)端就不可以對(duì)已提交信息進(jìn)行修改、刪除,只能閱讀、查詢。節(jié)點(diǎn)間數(shù)據(jù)互相隔離,只有總部才具備對(duì)各個(gè)節(jié)點(diǎn)數(shù)據(jù)的管理權(quán)限,但是對(duì)于歸檔數(shù)據(jù)(一旦審核完畢的數(shù)據(jù),就進(jìn)行歸檔)總部不具備刪改的權(quán)限。系統(tǒng)設(shè)置數(shù)據(jù)庫管理員,獨(dú)立于審核權(quán)限,其職責(zé)是對(duì)歷史數(shù)據(jù)的清理維護(hù)。
通過上面的描述,我們通過提煉和簡化,得到軟件的一下功能:
◆ 節(jié)點(diǎn)數(shù)據(jù)錄入、查詢、上傳
◆ 總部數(shù)據(jù)匯總、查詢、反饋
◆ 總部與節(jié)點(diǎn)的互聯(lián)
◆ 總部數(shù)據(jù)庫存儲(chǔ)
◆ 節(jié)點(diǎn)數(shù)據(jù)的本地存儲(chǔ)
在本例中,軟件的性能是潛在的??蛻綦m然沒有明確提出,但是由于數(shù)據(jù)本身的重要性,要求系統(tǒng)在數(shù)據(jù)上傳、反饋、存儲(chǔ)過程中安全可靠。客戶要求使用modem進(jìn)行撥號(hào)連接,那么鑒于modem連接過程中可能會(huì)出現(xiàn),由于撥號(hào)斷開而道導(dǎo)致的數(shù)據(jù)丟失,在節(jié)點(diǎn)本地存放一份數(shù)據(jù)副本是有必要的。由于系統(tǒng)要求每天上傳數(shù)據(jù),總部數(shù)據(jù)庫應(yīng)當(dāng)是7x24小時(shí)不間斷服務(wù)的,再加上目前總部只有該系統(tǒng)運(yùn)行接受數(shù)據(jù)任務(wù),各節(jié)點(diǎn)數(shù)據(jù)量并不大,那么在建議用戶選擇服務(wù)器時(shí),應(yīng)當(dāng)考慮性能穩(wěn)定可靠,但并不一定要購買大容量磁盤陣列和高性能雙cpu主機(jī)。由于每天上傳數(shù)據(jù)接近下班時(shí)間,那么總部匯總數(shù)據(jù)應(yīng)當(dāng)是自動(dòng)進(jìn)行的,一旦分析發(fā)現(xiàn)重大問題,可以通過與外部網(wǎng)絡(luò)的設(shè)置,向值班人員發(fā)送手機(jī)訊息、e-mail或其他警示。由于不同人員對(duì)于上報(bào)數(shù)據(jù)的權(quán)限不同,對(duì)于系統(tǒng)用戶實(shí)行分級(jí)管理。不同級(jí)別的用戶,具有對(duì)數(shù)據(jù)的不同管理權(quán)力,從而保證在軟件使用過程中不發(fā)生混亂。
那么現(xiàn)在一個(gè)較為清晰的軟件模型已經(jīng)構(gòu)造完畢,接下來我們需要進(jìn)入計(jì)劃的第二步:確定工作所需資源。
1.2、規(guī)劃的第二步:確定工作所需資源
軟件工作所需資源包括:工作環(huán)境(軟硬件環(huán)境、辦公室環(huán)境)、可復(fù)用軟件資源(構(gòu)件、中間件)、人力資源(包括不同各種角色的人員:分析師、設(shè)計(jì)師、測(cè)試師、程序員、項(xiàng)目經(jīng)理……)。這三種資源的組成比例,可以看作一個(gè)金字塔的模式,最上面是人力資源、其次是可復(fù)用軟件資源、最下面是工作環(huán)境。最上面的是組成比例最小的,最下面的是組成比例的部分。
■ 人力資源
一個(gè)項(xiàng)目到底需要多少種職務(wù)的人員構(gòu)成、多少數(shù)量的人員總量,再能成為最有創(chuàng)造力的團(tuán)隊(duì)呢?這恐怕是最讓項(xiàng)目經(jīng)理頭疼的事情了。任何一個(gè)軟件工程,都必須在確定軟件的工作量之后,才能清楚地知道究竟需要多少人力才能以最小成本和效率完成任務(wù)。在這之前,不能盲目地進(jìn)行人力擴(kuò)充,而且絕對(duì)不能為了給公司抬高門面,盲目招收高學(xué)歷。
■ 可復(fù)用軟件資源
這是一個(gè)容易在計(jì)劃階段被忽視的重要資源,很多人總是進(jìn)入編碼階段才發(fā)現(xiàn)可復(fù)用資源的價(jià)值和存在。經(jīng)過長期的項(xiàng)目積累或是購買,公司的軟件資源庫中或許已經(jīng)積累了大量的可復(fù)用資源,但在當(dāng)前任務(wù)中,只能選擇有價(jià)值的資源。根據(jù)不同的應(yīng)用、時(shí)間、來源,可復(fù)用軟件資源被分為以下幾種:
可直接使用的構(gòu)件:已有的,能夠從第三方廠商獲得或已經(jīng)在以前的項(xiàng)目中開發(fā)過的軟件。這些構(gòu)件已經(jīng)經(jīng)過驗(yàn)證及確認(rèn)且可以直接用在當(dāng)前的項(xiàng)目中。
具有完全經(jīng)驗(yàn)的構(gòu)件:已有的為以前類似于當(dāng)前要開發(fā)的項(xiàng)目建立的規(guī)約、設(shè)計(jì)、代碼、或測(cè)試數(shù)據(jù)。當(dāng)前軟件項(xiàng)目組的成員在這些構(gòu)件所代表的應(yīng)用領(lǐng)域中具有豐富的經(jīng)驗(yàn)。因此,對(duì)于這類構(gòu)件進(jìn)行所需的修改其風(fēng)險(xiǎn)相對(duì)較小。
具有部分經(jīng)驗(yàn)的構(gòu)件:已有的為以前與當(dāng)前要開發(fā)的項(xiàng)目相關(guān)的項(xiàng)目建立的規(guī)約、設(shè)計(jì)、代碼、或測(cè)試數(shù)據(jù),但需做實(shí)質(zhì)上的修改。當(dāng)前軟件項(xiàng)目組的成員在這些構(gòu)件所代表的應(yīng)用領(lǐng)域中僅有有限的經(jīng)驗(yàn),因此,對(duì)于這類構(gòu)件進(jìn)行所需的修改會(huì)有相當(dāng)程度的風(fēng)險(xiǎn)。
新構(gòu)件:軟件項(xiàng)目組為滿足當(dāng)前項(xiàng)目的特定需要而必須專門開發(fā)的軟件構(gòu)件。
在采用構(gòu)件的時(shí)候,應(yīng)當(dāng)以低成本、低風(fēng)險(xiǎn)為使用前提。如果任何一個(gè)漂亮的構(gòu)件的應(yīng)用,可能會(huì)帶來潛在出錯(cuò)的風(fēng)險(xiǎn)或者必須經(jīng)過復(fù)雜修改或者效率低下時(shí),我們都應(yīng)當(dāng)毫不猶豫地把它拋棄。我們只采用那些能夠滿足項(xiàng)目的需要且可直接使用的構(gòu)件,或者具有完全經(jīng)驗(yàn)的構(gòu)件,或者經(jīng)過稍微修改便可使用的構(gòu)件。
■ 環(huán)境資源
“工欲善其事,必先利其器”,要得到高效的開發(fā)過程,就必須向工作人員提供良好的軟硬件環(huán)境,包括開發(fā)工具、開發(fā)設(shè)備、工作環(huán)境、管理制度。一般管理人員都會(huì)購買可以滿足需要的軟件開發(fā)工具和硬件平臺(tái),但是工作環(huán)境和管理制度往往被忽視。
站在人件的角度看,向工作人員提供更輕松自在、安靜舒適的辦公環(huán)境的公司員工往往比整天在狹小隔間中工作的公司員工,產(chǎn)生更高的工作效率。而那些擁有靈活人性化的管理制度的公司,比整天加班的公司更能留住高技術(shù)的人才。所以如何在有限資金中,規(guī)劃一個(gè)合理的環(huán)境是很重要的事情。
到此為止,估算前的項(xiàng)目計(jì)劃已經(jīng)完成,我們已經(jīng)形成一個(gè)工程開發(fā)框架。這是一個(gè)有界限的框架,雖然還不夠精確,但足以進(jìn)行估算的工作。
1、估算前的規(guī)劃
當(dāng)我們的辦公室內(nèi)堆滿了雜亂無章的文件時(shí),恐怕無法知道對(duì)于我們真正有用的文件在哪里,當(dāng)我們的軟件相目中收集了各種需求、意見、問題時(shí),我們也很難從中估算出整個(gè)項(xiàng)目的規(guī)模、工作量以及成本。因此,在估算之前我們首先要對(duì)眾多信息進(jìn)行整理、歸類分析,從而得到一個(gè)條理清晰的項(xiàng)目計(jì)劃,在這個(gè)計(jì)劃提供的框架內(nèi),才可能開始正確的估算。精心的規(guī)劃是任何一個(gè)軟件開發(fā)項(xiàng)目成功與否的關(guān)鍵,有了規(guī)劃就有如成竹在胸,之后無論風(fēng)云變幻,都有應(yīng)對(duì)入流的方法。當(dāng)然只有正確的規(guī)劃,才能給軟件開發(fā)指引正確的方向。
軟件項(xiàng)目規(guī)劃的重點(diǎn)是對(duì)人員角色、任務(wù)進(jìn)度、經(jīng)費(fèi)、設(shè)備資源、工作成果等等做出合適的安排,制定出一些計(jì)劃(包括高層的和細(xì)節(jié)的),使大家按照計(jì)劃行事,最終順利地達(dá)到預(yù)定的目標(biāo)。
1.1、規(guī)劃的第一步:確定軟件范圍
確定軟件范圍,就是確定目標(biāo)軟件的數(shù)據(jù)和控制、功能、性能、約束、接口以及可靠性。這項(xiàng)工作和需求分析是很類似的,如果之前已經(jīng)達(dá)成需求分析規(guī)約,那么可以直接從《需求分析說明書》中把有用的部分拿來使用。如果還沒有開始需求分析,關(guān)于確定軟件范圍的方法方面,我們可以采用許多需求分析技術(shù)(如需求誘導(dǎo)),從客戶那里得到一個(gè)具體的軟件范圍。當(dāng)然如果是一次全新的軟件邊界探索,就應(yīng)當(dāng)考慮軟件本身可行性問題,包括團(tuán)隊(duì)是否具備在技術(shù)、財(cái)務(wù)、時(shí)間、資源上游可靠的保障,軟件本身在市場上是否有可靠的競爭優(yōu)勢(shì) ,等等。
獲得軟件范圍,最直接最可靠的來源就是用戶對(duì)軟件的需求描述。例如,在開發(fā)一個(gè)c/s架構(gòu)的鐵路供電段數(shù)據(jù)上報(bào)系統(tǒng)中,客戶向我們提供了以下的目標(biāo)軟件需求描述:
在供電站總部每天結(jié)束前要審核下屬節(jié)點(diǎn)操作員(30~40個(gè))的供電安全數(shù)據(jù)報(bào)表,要求每個(gè)節(jié)點(diǎn)必須在下午5:30~6:00之間上傳數(shù)據(jù)。總部系統(tǒng)通過自動(dòng)分析,整理出整個(gè)區(qū)內(nèi)的安全形勢(shì)報(bào)表,并自動(dòng)反饋到每個(gè)節(jié)點(diǎn)。各個(gè)節(jié)點(diǎn)之間通過調(diào)制解調(diào)器撥號(hào)(modem)用內(nèi)部電話線相連,每個(gè)節(jié)點(diǎn)電腦主機(jī)配備一個(gè)modem。上傳數(shù)據(jù)為制式報(bào)表出了制式信息外,系統(tǒng)自動(dòng)附加操作員姓名、上報(bào)時(shí)間、上報(bào)節(jié)點(diǎn)名稱。信息一旦上傳,節(jié)點(diǎn)端就不可以對(duì)已提交信息進(jìn)行修改、刪除,只能閱讀、查詢。節(jié)點(diǎn)間數(shù)據(jù)互相隔離,只有總部才具備對(duì)各個(gè)節(jié)點(diǎn)數(shù)據(jù)的管理權(quán)限,但是對(duì)于歸檔數(shù)據(jù)(一旦審核完畢的數(shù)據(jù),就進(jìn)行歸檔)總部不具備刪改的權(quán)限。系統(tǒng)設(shè)置數(shù)據(jù)庫管理員,獨(dú)立于審核權(quán)限,其職責(zé)是對(duì)歷史數(shù)據(jù)的清理維護(hù)。
通過上面的描述,我們通過提煉和簡化,得到軟件的一下功能:
◆ 節(jié)點(diǎn)數(shù)據(jù)錄入、查詢、上傳
◆ 總部數(shù)據(jù)匯總、查詢、反饋
◆ 總部與節(jié)點(diǎn)的互聯(lián)
◆ 總部數(shù)據(jù)庫存儲(chǔ)
◆ 節(jié)點(diǎn)數(shù)據(jù)的本地存儲(chǔ)
在本例中,軟件的性能是潛在的??蛻綦m然沒有明確提出,但是由于數(shù)據(jù)本身的重要性,要求系統(tǒng)在數(shù)據(jù)上傳、反饋、存儲(chǔ)過程中安全可靠。客戶要求使用modem進(jìn)行撥號(hào)連接,那么鑒于modem連接過程中可能會(huì)出現(xiàn),由于撥號(hào)斷開而道導(dǎo)致的數(shù)據(jù)丟失,在節(jié)點(diǎn)本地存放一份數(shù)據(jù)副本是有必要的。由于系統(tǒng)要求每天上傳數(shù)據(jù),總部數(shù)據(jù)庫應(yīng)當(dāng)是7x24小時(shí)不間斷服務(wù)的,再加上目前總部只有該系統(tǒng)運(yùn)行接受數(shù)據(jù)任務(wù),各節(jié)點(diǎn)數(shù)據(jù)量并不大,那么在建議用戶選擇服務(wù)器時(shí),應(yīng)當(dāng)考慮性能穩(wěn)定可靠,但并不一定要購買大容量磁盤陣列和高性能雙cpu主機(jī)。由于每天上傳數(shù)據(jù)接近下班時(shí)間,那么總部匯總數(shù)據(jù)應(yīng)當(dāng)是自動(dòng)進(jìn)行的,一旦分析發(fā)現(xiàn)重大問題,可以通過與外部網(wǎng)絡(luò)的設(shè)置,向值班人員發(fā)送手機(jī)訊息、e-mail或其他警示。由于不同人員對(duì)于上報(bào)數(shù)據(jù)的權(quán)限不同,對(duì)于系統(tǒng)用戶實(shí)行分級(jí)管理。不同級(jí)別的用戶,具有對(duì)數(shù)據(jù)的不同管理權(quán)力,從而保證在軟件使用過程中不發(fā)生混亂。
那么現(xiàn)在一個(gè)較為清晰的軟件模型已經(jīng)構(gòu)造完畢,接下來我們需要進(jìn)入計(jì)劃的第二步:確定工作所需資源。
1.2、規(guī)劃的第二步:確定工作所需資源
軟件工作所需資源包括:工作環(huán)境(軟硬件環(huán)境、辦公室環(huán)境)、可復(fù)用軟件資源(構(gòu)件、中間件)、人力資源(包括不同各種角色的人員:分析師、設(shè)計(jì)師、測(cè)試師、程序員、項(xiàng)目經(jīng)理……)。這三種資源的組成比例,可以看作一個(gè)金字塔的模式,最上面是人力資源、其次是可復(fù)用軟件資源、最下面是工作環(huán)境。最上面的是組成比例最小的,最下面的是組成比例的部分。
■ 人力資源
一個(gè)項(xiàng)目到底需要多少種職務(wù)的人員構(gòu)成、多少數(shù)量的人員總量,再能成為最有創(chuàng)造力的團(tuán)隊(duì)呢?這恐怕是最讓項(xiàng)目經(jīng)理頭疼的事情了。任何一個(gè)軟件工程,都必須在確定軟件的工作量之后,才能清楚地知道究竟需要多少人力才能以最小成本和效率完成任務(wù)。在這之前,不能盲目地進(jìn)行人力擴(kuò)充,而且絕對(duì)不能為了給公司抬高門面,盲目招收高學(xué)歷。
■ 可復(fù)用軟件資源
這是一個(gè)容易在計(jì)劃階段被忽視的重要資源,很多人總是進(jìn)入編碼階段才發(fā)現(xiàn)可復(fù)用資源的價(jià)值和存在。經(jīng)過長期的項(xiàng)目積累或是購買,公司的軟件資源庫中或許已經(jīng)積累了大量的可復(fù)用資源,但在當(dāng)前任務(wù)中,只能選擇有價(jià)值的資源。根據(jù)不同的應(yīng)用、時(shí)間、來源,可復(fù)用軟件資源被分為以下幾種:
可直接使用的構(gòu)件:已有的,能夠從第三方廠商獲得或已經(jīng)在以前的項(xiàng)目中開發(fā)過的軟件。這些構(gòu)件已經(jīng)經(jīng)過驗(yàn)證及確認(rèn)且可以直接用在當(dāng)前的項(xiàng)目中。
具有完全經(jīng)驗(yàn)的構(gòu)件:已有的為以前類似于當(dāng)前要開發(fā)的項(xiàng)目建立的規(guī)約、設(shè)計(jì)、代碼、或測(cè)試數(shù)據(jù)。當(dāng)前軟件項(xiàng)目組的成員在這些構(gòu)件所代表的應(yīng)用領(lǐng)域中具有豐富的經(jīng)驗(yàn)。因此,對(duì)于這類構(gòu)件進(jìn)行所需的修改其風(fēng)險(xiǎn)相對(duì)較小。
具有部分經(jīng)驗(yàn)的構(gòu)件:已有的為以前與當(dāng)前要開發(fā)的項(xiàng)目相關(guān)的項(xiàng)目建立的規(guī)約、設(shè)計(jì)、代碼、或測(cè)試數(shù)據(jù),但需做實(shí)質(zhì)上的修改。當(dāng)前軟件項(xiàng)目組的成員在這些構(gòu)件所代表的應(yīng)用領(lǐng)域中僅有有限的經(jīng)驗(yàn),因此,對(duì)于這類構(gòu)件進(jìn)行所需的修改會(huì)有相當(dāng)程度的風(fēng)險(xiǎn)。
新構(gòu)件:軟件項(xiàng)目組為滿足當(dāng)前項(xiàng)目的特定需要而必須專門開發(fā)的軟件構(gòu)件。
在采用構(gòu)件的時(shí)候,應(yīng)當(dāng)以低成本、低風(fēng)險(xiǎn)為使用前提。如果任何一個(gè)漂亮的構(gòu)件的應(yīng)用,可能會(huì)帶來潛在出錯(cuò)的風(fēng)險(xiǎn)或者必須經(jīng)過復(fù)雜修改或者效率低下時(shí),我們都應(yīng)當(dāng)毫不猶豫地把它拋棄。我們只采用那些能夠滿足項(xiàng)目的需要且可直接使用的構(gòu)件,或者具有完全經(jīng)驗(yàn)的構(gòu)件,或者經(jīng)過稍微修改便可使用的構(gòu)件。
■ 環(huán)境資源
“工欲善其事,必先利其器”,要得到高效的開發(fā)過程,就必須向工作人員提供良好的軟硬件環(huán)境,包括開發(fā)工具、開發(fā)設(shè)備、工作環(huán)境、管理制度。一般管理人員都會(huì)購買可以滿足需要的軟件開發(fā)工具和硬件平臺(tái),但是工作環(huán)境和管理制度往往被忽視。
站在人件的角度看,向工作人員提供更輕松自在、安靜舒適的辦公環(huán)境的公司員工往往比整天在狹小隔間中工作的公司員工,產(chǎn)生更高的工作效率。而那些擁有靈活人性化的管理制度的公司,比整天加班的公司更能留住高技術(shù)的人才。所以如何在有限資金中,規(guī)劃一個(gè)合理的環(huán)境是很重要的事情。
到此為止,估算前的項(xiàng)目計(jì)劃已經(jīng)完成,我們已經(jīng)形成一個(gè)工程開發(fā)框架。這是一個(gè)有界限的框架,雖然還不夠精確,但足以進(jìn)行估算的工作。