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