雖然估算是一門科學(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í),恐怕無法知道對于我們真正有用的文件在哪里,當(dāng)我們的軟件相目中收集了各種需求、意見、問題時(shí),我們也很難從中估算出整個(gè)項(xiàng)目的規(guī)模、工作量以及成本。因此,在估算之前我們首先要對眾多信息進(jìn)行整理、歸類分析,從而得到一個(gè)條理清晰的項(xiàng)目計(jì)劃,在這個(gè)計(jì)劃提供的框架內(nèi),才可能開始正確的估算。精心的規(guī)劃是任何一個(gè)軟件開發(fā)項(xiàng)目成功與否的關(guān)鍵,有了規(guī)劃就有如成竹在胸,之后無論風(fēng)云變幻,都有應(yīng)對入流的方法。當(dāng)然只有正確的規(guī)劃,才能給軟件開發(fā)指引正確的方向。
軟件項(xiàng)目規(guī)劃的重點(diǎn)是對人員角色、任務(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)勢 ,等等。
獲得軟件范圍,最直接最可靠的來源就是用戶對軟件的需求描述。例如,在開發(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ù)??偛肯到y(tǒng)通過自動(dòng)分析,整理出整個(gè)區(qū)內(nèi)的安全形勢報(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)端就不可以對已提交信息進(jìn)行修改、刪除,只能閱讀、查詢。節(jié)點(diǎn)間數(shù)據(jù)互相隔離,只有總部才具備對各個(gè)節(jié)點(diǎn)數(shù)據(jù)的管理權(quán)限,但是對于歸檔數(shù)據(jù)(一旦審核完畢的數(shù)據(jù),就進(jìn)行歸檔)總部不具備刪改的權(quán)限。系統(tǒng)設(shè)置數(shù)據(jù)庫管理員,獨(dú)立于審核權(quán)限,其職責(zé)是對歷史數(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ǔ)過程中安全可靠??蛻粢笫褂肕ODEM進(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í),