1. 版本控制技術(shù)及工具
版本控制是程序開發(fā)、管理必不可少的工具,特別是在多人協(xié)作的團(tuán)隊(duì)中,適宜的版本控制工具可以提高開發(fā)效率,消除很多由代碼版本帶來的問題。通過使用版本控制技術(shù)及工具,可以確保在軟件項(xiàng)目開發(fā)中不同的開發(fā)人員所涉及的同一文檔都得到正確的更新。
1.1 常用版本控制工具
1. CVS (Concurrent Versions System)
CVS 是一款開放源代碼軟件,其功能強(qiáng)大、跨平臺、支持并發(fā)版本控制而且免費(fèi),所以它在中小型軟件企業(yè)中得到廣泛使用。CVS最大的遺憾就是缺少相應(yīng)的技術(shù)支持,許多問題的解決需要自己尋找資料,甚至是研究源代碼。CVS是一個典型的服務(wù)器/客戶端軟件,支持遠(yuǎn)程管理,項(xiàng)目組分布開發(fā)時一般都采用CVS做代碼及文檔的版本控制。
2. SVN (SubVersion)
SVN是對CVS的缺點(diǎn)進(jìn)行改進(jìn)產(chǎn)生的版本控制工具,相比于CVS而言,SVN更為簡單易用,且SVN有其特定平臺的客戶端工具。如TortoiseSVN,是為windows外殼程序集成到windows資源管理器和文件管理系統(tǒng)的SVN客戶端,使用相當(dāng)方便。
3. Clearcase
Clearcase是Rational公司一款重量級的軟件配置管理工具。與CVS和SVN不同的是,Clearcase涵蓋的范圍包括版本控制、建立管理、工作空間管理和過程控制。Clearcase貫穿于整個軟件生命周期,支持現(xiàn)有的絕大多數(shù)操作系統(tǒng),但它的安裝、配置、使用相對較復(fù)雜,需要進(jìn)行團(tuán)隊(duì)培訓(xùn)。
2. 軟件測試技術(shù)及工具
隨著軟件應(yīng)用領(lǐng)域越來越廣泛,軟件質(zhì)量的優(yōu)劣也日益受到人們的重視,軟件質(zhì)量保證能力的強(qiáng)弱成為了直接影響業(yè)界發(fā)展與生存的重要因素。軟件測試作為軟件質(zhì)量保證的主要內(nèi)容,是一個成熟軟件企業(yè)的重要組成部分,它是軟件生命周期中一項(xiàng)非常重要且復(fù)雜的工作,對軟件可靠性保證具有極其重要的意義。
2.1 軟件測試技術(shù)
軟件測試的目的是對軟件質(zhì)量或可接受性做出判斷,發(fā)現(xiàn)軟件開發(fā)過程存在的問題。在實(shí)際的項(xiàng)目開發(fā)流程中,經(jīng)常用到的軟件測試方法有:單元測試,集成測試,功能測試,驗(yàn)收測試等。
1. 單元測試
單元測試主要是開發(fā)者針對開發(fā)過程中程序內(nèi)部的函數(shù)、類、變量等數(shù)據(jù)進(jìn)行正確性測試。開發(fā)人員根據(jù)需求,在經(jīng)過詳細(xì)設(shè)計(jì)之后開始著手編寫代碼。一般情況下,每完成一個函數(shù)(類)之后,就要進(jìn)行單元測試,以驗(yàn)證編寫的函數(shù)能完成詳細(xì)設(shè)計(jì)說明中的功能。目前常用的單元測試工具有Junit測試、C++Test等等。
2. 集成測試
集成測試是在單元測試的基礎(chǔ)上,將所有模塊按照詳細(xì)設(shè)計(jì)的要求組裝成子系統(tǒng)或系統(tǒng),進(jìn)行集成測試。與單元測試側(cè)重單個函數(shù)(類)功能的正確性不同的是,集成測試側(cè)重于模塊間的接口正確性以及集成后的整體功能的正確性。
3. 功能測試
功能測試即軟件的黑盒測試。單元測試和集成測試保證了開發(fā)是可以正常運(yùn)行,執(zhí)行起來的效率是最高的,但無法保證需求所需的功能是正確實(shí)現(xiàn)的。根據(jù)用戶需求設(shè)計(jì)的功能測試(黑盒測試),可以按照嚴(yán)格的按照需求說明,測試新開發(fā)的系統(tǒng)是否完全符合用戶的要求以及是否符合實(shí)際的操作流程和業(yè)務(wù)邏輯。
4. 驗(yàn)收測試
在驗(yàn)收測試中,相關(guān)的用戶根據(jù)需求說明文檔對系統(tǒng)進(jìn)行測試和驗(yàn)收,決定是否接收系統(tǒng),它是一項(xiàng)確定產(chǎn)品是否能夠滿足合同或用戶所規(guī)定需求的測試。驗(yàn)收測試的目的是確保系統(tǒng)已經(jīng)準(zhǔn)備就緒,可以投入日常使用,讓最終用戶使用需求中描述的功能。
2.2 軟件測試工具
1. Junit測試
Junit測試是目前J2EE平臺上最為流行的單元測試工具,它是程序員測試,即所謂的白盒測試。在Junit測試中,程序員知道被測試的軟件如何完成功能和完成什么樣的功能,因此在繼承了TestCase后就可以用Junit進(jìn)行自動測試。
2. C++ Test測試
C++ Test是Parasoft公司出品的一個針對C/C++源代碼進(jìn)行自動化單元測試的工具,它可以對源代碼進(jìn)行三種測試:白盒測試、黑盒測試以及回歸測試。鑒于C/C++在嵌入式領(lǐng)域的廣泛應(yīng)用,Parasoft同時為嵌入式程序提供了相應(yīng)的版本,支持Eclipse和Visual Studio,可以批處理執(zhí)行。
3. WinRunner測試
Winrunner工具用于功能性測試,最主要的功能是自動重復(fù)執(zhí)行某一固定的測試過程。它記錄下手工測試的一系列操作,在環(huán)境相同的情況下重放,檢查程序在相同的環(huán)境中有無異常的現(xiàn)象或與實(shí)際結(jié)果不符的地方。
4. LoadRunner測試
LoadRunner是一種預(yù)測系統(tǒng)行為和性能的工業(yè)標(biāo)準(zhǔn)級壓力測試工具,近幾年來一直是軟件壓力測試的首選工具。它可以模擬成千上萬的并發(fā)操作,對應(yīng)用系統(tǒng)、Web Service、Web服務(wù)器、數(shù)據(jù)庫等進(jìn)行壓力和性能測試,兼容Window和Unix操作系統(tǒng)。
3. 文檔管理技術(shù)
項(xiàng)目文檔管理,是指在一個項(xiàng)目開發(fā)進(jìn)程中將提交的文檔進(jìn)行收集管理的過程。通常,文檔管理在項(xiàng)目開發(fā)中不是很受重視,當(dāng)發(fā)現(xiàn)其重要性時,往往為時已晚,整個項(xiàng)目可能因此變得管理混亂,問題產(chǎn)生后無據(jù)可查。文檔管理對于一個項(xiàng)目的順利進(jìn)行有著至關(guān)重要的作用,其關(guān)鍵性不容忽視。
3.1 文檔管理技術(shù)
軟件項(xiàng)目中的文檔是用來記錄、描述、展示軟件項(xiàng)目開發(fā)過程中一系列信息的處理過程,它描述和規(guī)定了軟件項(xiàng)目開發(fā)的每一個細(xì)節(jié),使用軟件的操作命令,對產(chǎn)品使用過程中意見及產(chǎn)品缺陷、質(zhì)量等方面的說明。
文檔的編寫需要了解和遵循文檔的行業(yè)標(biāo)準(zhǔn)。現(xiàn)有軟件開發(fā)中常見的文檔種類如下:
1. 開發(fā)文檔
這類文檔是在軟件項(xiàng)目開發(fā)過程中,體現(xiàn)了軟件開發(fā)人員前一階段工作的成果,同時又是后一階段工作的依據(jù)。這類文檔包括可行性研究報(bào)告、軟件項(xiàng)目開發(fā)計(jì)劃、軟件需求規(guī)格說明、系統(tǒng)規(guī)格說明書、軟件功能說明書和數(shù)據(jù)字典等。
2. 管理文檔
這類文檔是在軟件項(xiàng)目開發(fā)過程中,由軟件開發(fā)人員制定的需提交管理部門的一些工作計(jì)劃、工作方案和工作報(bào)告。通過閱讀這些文檔,管理人員能夠了解軟件項(xiàng)目開發(fā)活動安排、進(jìn)度、資源使用等情況。這類文檔包括項(xiàng)目開發(fā)計(jì)劃、測試計(jì)劃、測試方案、開發(fā)進(jìn)度報(bào)告和項(xiàng)目總結(jié)報(bào)告等。
3. 用戶文檔
這類文檔是軟件開發(fā)人員為使用該軟件的網(wǎng)點(diǎn)經(jīng)辦人員準(zhǔn)備的有關(guān)該軟件產(chǎn)品使用、操作的資料,主要是操作手冊及新功能介紹方面的文檔。
4. 軟件建模工具
隨著軟件開發(fā)規(guī)模越來越大,面向?qū)ο蠓治雠c設(shè)計(jì)的優(yōu)勢突顯,軟件開發(fā)建模在公司項(xiàng)目開發(fā)中呈現(xiàn)越來越頻繁的趨向。開發(fā)中常用的軟件建模技術(shù)有兩種,UML建模以及數(shù)據(jù)庫建模,前者作為一種可視化建模語言,主要用于面向?qū)ο竽P偷姆治雠c設(shè)計(jì);后者用于數(shù)據(jù)庫的邏輯設(shè)計(jì),生成的是項(xiàng)目數(shù)據(jù)庫的實(shí)體關(guān)系圖。
4.1 常用的軟件建模工具
1. Rational Rose
Rational Rose是一款強(qiáng)大的UML建模工具,它使改進(jìn)和維護(hù)設(shè)計(jì)、從模型生成報(bào)表、在平行協(xié)作環(huán)境中與他人共同進(jìn)行建模工作變得十分方便。同時,作為一款優(yōu)秀的分析和設(shè)計(jì)工具,Rose具有強(qiáng)大的正向和逆向工程能力。正向工程指的是由設(shè)計(jì)產(chǎn)生代碼,逆向工程指由代碼歸納出設(shè)計(jì),Rose可以通過逆向工程對歷史系統(tǒng)做出分析,然后進(jìn)行改進(jìn),再通過正向工程產(chǎn)生新的系統(tǒng)代碼,這樣的設(shè)計(jì)方式稱之為再工程。
2. Visio
Visio是目前國內(nèi)用得最多的Case工具,可以用于常見的case設(shè)計(jì)及UML建模。它提供了日常使用中的絕大多數(shù)框圖的繪畫功能(包括信息領(lǐng)域的各種原理圖,設(shè)計(jì)圖),同時提供了部分信息領(lǐng)域的實(shí)物圖。Visio的優(yōu)勢在于使用方便,安裝后的Visio既可以單獨(dú)運(yùn)行,也可以在Word中作為對象插入,與Word集成良好。Visio支持UML的靜態(tài)和動態(tài)建模,對UML的建模提供了單獨(dú)的組織管理。
3. PowerDesigner
簡練實(shí)用的建模工具,既是數(shù)據(jù)庫建模傳統(tǒng)的優(yōu)秀工具,也可以用于UML建模。PowerDesigner在數(shù)據(jù)庫建模方面功能強(qiáng)大,使用非常方便,自8.0版本后支持逆向工程、再工程,同時開始支持UML建模的UseCase/Sequence/Class視圖。
4. ER/Studio
另外一款常用的數(shù)據(jù)庫建模工具,是一款模型驅(qū)動的數(shù)據(jù)結(jié)構(gòu)管理和數(shù)據(jù)庫設(shè)計(jì)產(chǎn)品。與PowerDesigner相比更為精簡,且同樣支持逆向工程及再工程,在數(shù)據(jù)庫兼容性以及UML建模上與PowerDisigner有一定差距。
5. 軟件進(jìn)度管理:軟件開發(fā)周期估算
軟件開發(fā)周期估算是IT人員經(jīng)常提到的一個概念,那么究竟什么是軟件開發(fā)周期估算呢?我們可以把它定義如下:根據(jù)軟件的開發(fā)內(nèi)容、開發(fā)工具、開發(fā)人員等因素對需求調(diào)研、程序設(shè)計(jì)、編碼、測試等整個開發(fā)過程所花費(fèi)的時間做的預(yù)測。在這個定義中,“預(yù)測”兩個字非常關(guān)鍵,它突出體現(xiàn)了估算的含義,同時也隱含表明了結(jié)果的不確定性。有效的軟件開發(fā)周期估算在軟件開發(fā)中是非常困難的工序之一,之所以說困難,是因?yàn)檐浖_發(fā)所涉及的因素不僅多而且異常復(fù)雜,即便是及其類似的軟件項(xiàng)目也不能完全照搬,在估算的把握上有一定難度。估算也是軟件開發(fā)中很重要的一個環(huán)節(jié),如果低估項(xiàng)目周期會造成人力低估、成本預(yù)算低估、日程過短,最終人力資源耗盡,成本超出預(yù)算,為完成項(xiàng)目不得不趕工,影響項(xiàng)目質(zhì)量,甚至導(dǎo)致項(xiàng)目失敗。項(xiàng)目周期估計(jì)過長表面看來影響不大,但是實(shí)際上也會帶來成本估計(jì)過高,人力資源利用不充分效率低下的后果。無論哪種情況對于項(xiàng)目經(jīng)理控制整個項(xiàng)目都會帶來很大影響,周期估算如同蓋樓房中打地基,是后續(xù)工作的基礎(chǔ),它完成質(zhì)量的好壞所帶來的影響會貫穿整個項(xiàng)目,由此可見開發(fā)周期正確估算的重要性。
2.國內(nèi)外軟件估算比較
國內(nèi)軟件開發(fā)的管理目前正逐步向規(guī)范化發(fā)展,但是在開發(fā)周期的估算上絕大部分還是處于手工作坊的狀態(tài)。所謂的手工作坊指兩個方面,一方面是管理人員意識上沒有認(rèn)識到估算的重要性,認(rèn)為估算就是一個大概的估計(jì),很多還受限于商業(yè)行為,比如為了簽訂合同而不惜減少開發(fā)工作量卻未經(jīng)任何評審;另一方面也沒有專門的工具來輔助估算,或者說沒有專門對它進(jìn)行研究。一個軟件開發(fā)周期究竟要多長基本上是依靠經(jīng)驗(yàn)來判斷,不同經(jīng)驗(yàn)的人估算出的周期相差很大,而更糟糕的是這種開發(fā)周期的判斷由于完全憑借經(jīng)驗(yàn)使得不同意見的人之間很難溝通,因?yàn)檎l都沒有確切的量化標(biāo)準(zhǔn)來支持自己的判斷,最終的結(jié)果往往是以“專家”的估算為準(zhǔn)。這就有些類似于中式烹調(diào),放多少作料沒有依據(jù),一般都是“少許”,這個“少許”靠的就是經(jīng)驗(yàn),高級廚師和新手根據(jù)這個量炒出的菜味道可能差得很遠(yuǎn);實(shí)際上國內(nèi)的軟件開發(fā)需要的正是定量估算,這樣做不僅規(guī)范而且精確,十分有助于軟件事業(yè)的健康發(fā)展以及與國際接軌。
國外發(fā)達(dá)國家在軟件估算上比國內(nèi)要成熟的多,不僅有很多先進(jìn)方法比如代碼行估算法、功能點(diǎn)估算法、人力估算法,而且形成了專業(yè)化的估算工具來輔助這項(xiàng)工作,比如微軟公司開發(fā)的項(xiàng)目管理工具軟件Project,加拿大Software Productivity Center Inc.公司開發(fā)的Estimate,都是比較成熟的估算輔助工具。Project采用了自下而上的估算法,Estimate更是屬于專業(yè)化工具,包含常用的各種估算方法、校正方法,使用了Putnam Methodology、Cocomo II和 Monte Carlo Simulation幾種成熟算法,估算結(jié)果除了項(xiàng)目花費(fèi)時間、人力,還包括十幾種分析報(bào)告以及模擬發(fā)散圖、計(jì)劃編制選項(xiàng)圖、人力圖、預(yù)計(jì)缺陷圖、缺陷方差圖等等,從各種不同角度輔助管理人員進(jìn)行分析。
采用輔助工具對軟件開發(fā)周期進(jìn)行估算具有明顯的優(yōu)勢,這些輔助工具是在大量不同類型項(xiàng)目數(shù)據(jù)研究的基礎(chǔ)上總結(jié)開發(fā)出來的,采用的算法、估算的方法已經(jīng)很成熟,估算結(jié)果的準(zhǔn)確性有保障,由于這種估算是可以量化的,并非依據(jù)個人經(jīng)驗(yàn)直接得出一個結(jié)果,在結(jié)果的評審上有據(jù)可依。長期依靠工具輔助估算可以將大量項(xiàng)目的數(shù)據(jù)和估算結(jié)果積累形成歷史經(jīng)驗(yàn)庫,知識成果得以保存,便于以后利用。
3. 軟件估算中的因素探討
軟件開發(fā)是一項(xiàng)非常復(fù)雜的工程,不僅包含需求分析、設(shè)計(jì)、編碼、測試、實(shí)施、維護(hù)等完整的過程,還涉及到開發(fā)工具、開發(fā)人員、項(xiàng)目管理、風(fēng)險(xiǎn)等眾多因素,不同因素對估算產(chǎn)生的影響不盡相同,在進(jìn)行軟件估算時(包括利用工具輔助估算)必須考慮到這些方面,否則最終結(jié)果就會和實(shí)際結(jié)果有很大的偏差,影響項(xiàng)目控制,以下對其中幾個常見的因素做一些探討。
3.1估算與軟件規(guī)模
軟件規(guī)模通常指的是軟件的大小,這可以通過不同的方式來描述,比如程序代碼行的長度、功能函數(shù)的數(shù)量、數(shù)據(jù)庫中表的數(shù)量、數(shù)據(jù)庫的大小等等。一般而言軟件規(guī)模越大,所花費(fèi)的開發(fā)周期就越長,但這并不是一個簡單的線形函數(shù)關(guān)系,下表詳細(xì)列舉了實(shí)際開發(fā)中的一些數(shù)據(jù),開發(fā)平臺為Lotus Domino/Notes。
表一
單個模塊的開發(fā)周期
序號 模塊 開發(fā)周期(中級程序員) 代碼行長度 數(shù)據(jù)庫大小(無數(shù)據(jù))
1. 辦事指南 0.25人月 300 1170K
2. 名片簿 0.25人月 300 1039K
3. 合同管理 0.25人月 460 2110K
4. 物控管理 0.5人月 850 2560K
5. 組織機(jī)構(gòu) 0.5人月 900 1318Khttp://www.mypm.net
6. 流程管理 0.8人月 1000 2304K
7. 公告板 0.5人月 1400 2560K
8. 人事管理 1人月 1800 3840K
9. 公文管理 1.8人月 2500 2304K項(xiàng)目管理者聯(lián)盟文章,深入探討。
10. 事務(wù)審批 1.5人月 3750 2110K
11. 考勤管理 1.8人月 4800 3840K
12. 資源管理 1.8人月 5800 3840K
13. 會議管理 2.5人月 11000 4608K
表二http://blog.mypm.net
軟件項(xiàng)目的開發(fā)周期
軟件項(xiàng)目 開發(fā)周期 包含的模塊 備注http://www.mypm.net
某政府客戶 3個人月 10個 定制開發(fā)量較小
某媒體客戶 6個人月 17個 有3個模塊完全重新開發(fā)
某金融客戶 10個人月 14個 80%完全重新開發(fā)
某保險(xiǎn)客戶 16個人月 18個 完全重新開發(fā)
? ? 從表一中可以看出,模塊的代碼行越長,開發(fā)周期就越長,對同一開發(fā)工具而言基本是一個線形關(guān)系,但其中也要考慮代碼重用問題,比如一個模塊代碼很長,但是可能包含了很多公用函數(shù),那么在估算時就應(yīng)適當(dāng)減少代碼行數(shù)量,表中會議管理就是個例子,這個模塊的代碼行超過一萬行,但其中公共函數(shù)很多,去除此因素,真正的代碼行在9000行左右。
表二是軟件項(xiàng)目的實(shí)際開發(fā)周期(不考慮系統(tǒng)實(shí)施),從普通意義上說軟件項(xiàng)目中包含的功能模塊越多、越復(fù)雜,或者說軟件越大開發(fā)周期增長的就越快,這個時間絕不是模塊開發(fā)時間的簡單疊加,因?yàn)槟K功能數(shù)量的增加直接帶來了軟模塊間相互關(guān)聯(lián)度、復(fù)雜度的成倍增加,這就直接導(dǎo)致了在需求、設(shè)計(jì)等階段需要花費(fèi)更多的時間,這比單獨(dú)考慮一個模塊復(fù)雜的多。在表二中隨著模塊數(shù)量增加,開發(fā)周期增加不是特別明顯,這是因?yàn)楫a(chǎn)品化程度高所引起的,由于相當(dāng)數(shù)量的模塊可以完全重用,實(shí)際開發(fā)量大大減少,最后一個例子完全重新開發(fā),開發(fā)周期就長的多。
? ? 在實(shí)際進(jìn)行軟件開發(fā)周期估算的時候,軟件規(guī)??隙ㄊ鞘紫瓤紤]的因素,根據(jù)我們上面所討論的情況,在考慮軟件規(guī)模時一定要去除可重用的部分,由于當(dāng)今軟件在設(shè)計(jì)上很重視這點(diǎn),所以這部分會占相當(dāng)?shù)谋戎?。另外軟件功能之間的關(guān)聯(lián)所造成的復(fù)雜性必須足夠重視,這樣在估算上就不會產(chǎn)生重大偏差。
3.2估算與項(xiàng)目風(fēng)險(xiǎn)
任何一個項(xiàng)目都或多或少存在風(fēng)險(xiǎn),軟件項(xiàng)目開發(fā)過程中也避免不了這種情況而且有這類項(xiàng)目自己的特點(diǎn),最常見的風(fēng)險(xiǎn)有以下幾種:技術(shù)風(fēng)險(xiǎn),項(xiàng)目技術(shù)難度很大,花費(fèi)的時間超過原先的估計(jì);客戶風(fēng)險(xiǎn),客戶需求不定,增加需求,組織協(xié)調(diào)不暢;人員風(fēng)險(xiǎn),開發(fā)人員突然更換、離職;管理風(fēng)險(xiǎn),項(xiàng)目經(jīng)理管理不善、決策失誤。對于風(fēng)險(xiǎn)控制,在項(xiàng)目管理中通常是提前做風(fēng)險(xiǎn)分析和預(yù)測,制定風(fēng)險(xiǎn)應(yīng)對措施,這樣在風(fēng)險(xiǎn)真的來臨時不至于措手不及,提高整個項(xiàng)目的可控性。
? ? 軟件項(xiàng)目的潛在風(fēng)險(xiǎn)對于開發(fā)周期的影響在很多情況下是非常大的,當(dāng)然好的項(xiàng)目控制會最大限度的減少這種影響,絕對避免是不可能的,所以在開發(fā)周期估算時項(xiàng)目風(fēng)險(xiǎn)應(yīng)該適當(dāng)考慮,尤其是技術(shù)風(fēng)險(xiǎn)和客戶風(fēng)險(xiǎn)。
技術(shù)風(fēng)險(xiǎn)主要來自于軟件本身的技術(shù)難度,如果對于一套成熟的產(chǎn)品,定制開發(fā)的技術(shù)風(fēng)險(xiǎn)相對非常小,因?yàn)橹匾募夹g(shù)已經(jīng)成型,客戶也很少有新的能帶來高難度技術(shù)問題的需求,這種風(fēng)險(xiǎn)可以不予考慮。但是對于完全重新開發(fā)的項(xiàng)目,或是研發(fā)類的項(xiàng)目,技術(shù)風(fēng)險(xiǎn)必須特別重視,其中應(yīng)該考慮的細(xì)節(jié)主要包括下面幾個。
開發(fā)平臺,是否能適合本項(xiàng)目所涉及的軟件開發(fā)、能否滿足最終的需求,平臺的錯誤選擇將導(dǎo)致龐大的開發(fā)工作量,即便滿足了用戶需求也可能造成系統(tǒng)效率低下,擴(kuò)展性差的致命問題,軟件可能會很快被淘汰。功能實(shí)現(xiàn)難度,在切實(shí)了解需求的基礎(chǔ)上要仔細(xì)分析采用的開發(fā)工具能否實(shí)現(xiàn)其中的難點(diǎn),是否會耗費(fèi)大量時間。
在實(shí)際估算中,建議技術(shù)難度分為十級,每一級在初次估算的代碼行上增加10%,最終估算代碼長度=初始估算代碼長度×(1+0.1×n)。假設(shè)模塊A的初次估計(jì)代碼行為15000行,但考慮技術(shù)難度高的風(fēng)險(xiǎn),設(shè)定技術(shù)難度級別為二級,最終代碼行的估算數(shù)量為15000X(1+20%)=18000。
? ? 由于技術(shù)風(fēng)險(xiǎn)的分析是一項(xiàng)技術(shù)性很強(qiáng)的工作,要求做技術(shù)風(fēng)險(xiǎn)分析的人必須是技術(shù)專家,在相關(guān)技術(shù)領(lǐng)域有著豐富的經(jīng)驗(yàn),對重大技術(shù)風(fēng)險(xiǎn)的分析結(jié)果必須要經(jīng)過評審,保證準(zhǔn)確性。
客戶風(fēng)險(xiǎn)存在于客戶化項(xiàng)目中,不同行業(yè)的客戶特點(diǎn)不盡相同,技術(shù)、理解水平也相差甚遠(yuǎn),在我經(jīng)歷開發(fā)的項(xiàng)目中,80%的項(xiàng)目延期屬于客戶方的原因,而且這種風(fēng)險(xiǎn)可控性很低,對項(xiàng)目影響超過技術(shù)風(fēng)險(xiǎn)。在開發(fā)周期估算前,項(xiàng)目經(jīng)理要仔細(xì)分析客戶的具體狀況,包括客戶的計(jì)算機(jī)水平、管理水平、可溝通程度,在此基礎(chǔ)上結(jié)合以往的經(jīng)驗(yàn)綜合判斷是否會對開發(fā)帶來明顯的影響,可以按照上述的技術(shù)風(fēng)險(xiǎn)的方式將客戶分級,最終確定開發(fā)周期。在這個過程中,項(xiàng)目經(jīng)理的經(jīng)驗(yàn)極其重要,對客戶的分析基本上要依賴經(jīng)驗(yàn)做判斷,要求管理人員有大量的客戶經(jīng)驗(yàn)和行業(yè)分析能力。
3.3估算與人力資源
對于軟件開發(fā)項(xiàng)目來說,人力資源是核心力量,因?yàn)檐浖_發(fā)不同于其它類型的項(xiàng)目,除了電腦它不需要利用其它工具,最終結(jié)果的產(chǎn)生完全取決于人腦中的知識,這也是知識經(jīng)濟(jì)的最大特點(diǎn)。
人力資源對估算的影響表現(xiàn)在技術(shù)水平、理解能力、溝通能力等幾個方面,編程水平的高低、速度的快慢、能否適應(yīng)團(tuán)隊(duì)、能否與各成員保持良好的溝通都會對開發(fā)進(jìn)度產(chǎn)生影響,其中技術(shù)水平是最關(guān)鍵的因素。評價程序員的技術(shù)水平可以從編程熟練程度、編程速度、解決技術(shù)問題的能力幾個因素考慮,編程熟練程度指的是程序員能否很順暢的使用編程工具實(shí)現(xiàn)軟件的功能,編程速度指的是完成某個功能的時間,解決技術(shù)問題的能力可以反映程序員在遇到技術(shù)難點(diǎn)時表現(xiàn)出的技術(shù)功底,如果以100%作為總和,這三個因素分別占70%、15%和15%這樣的比例。
? ? 軟件開發(fā)周期估算前,應(yīng)對開發(fā)人員定級,建議按新手、初級程序員、中級程序員、高級程序員來劃分,每一級人員再評定上述三個因素,初次估算時可以假定開發(fā)人員為中級程序員,然后依據(jù)項(xiàng)目組實(shí)際人員的水平做修正,這樣結(jié)果的精確度能大大提高。
4. 歷史數(shù)據(jù)估算法的運(yùn)用
依據(jù)歷史數(shù)據(jù)估算軟件開發(fā)周期是一種比較常見的方法,這種方法以歷史軟件開發(fā)周期為依據(jù),在估算時把當(dāng)前軟件項(xiàng)目的情況與歷史數(shù)據(jù)加以對比,從而得出最終結(jié)果。按照歷史數(shù)據(jù)估算開發(fā)周期準(zhǔn)確度還是相當(dāng)高的,但這種方法只適用于對某類軟件的開發(fā),比如某個行業(yè)業(yè)務(wù)系統(tǒng)的開發(fā),當(dāng)要估算的軟件與歷史軟件相差太多,比如開發(fā)工具完全不同,或者類型完全不同,就不能再依賴這種方法,最起碼應(yīng)該輔助使用其它估算法。如果沒有歷史數(shù)據(jù)或是開發(fā)一種新領(lǐng)域軟件,可以使用代碼行或功能點(diǎn)估算法,在此基礎(chǔ)上再通過其它方法校正。
? ? 事實(shí)上目前項(xiàng)目管理人員對開發(fā)周期的估算大部分屬于人力時間估算法,憑借的是自己的經(jīng)驗(yàn),經(jīng)驗(yàn)越多估算的結(jié)果就越精確,但是大部分項(xiàng)目管理人員對以前很有價值的歷史數(shù)據(jù)缺乏歸納整理,估算的時候憑借感覺的成分多一些,所以精確度相對要低很多,所以要求我們的項(xiàng)目管理人員不僅要有大量軟件開發(fā)的經(jīng)驗(yàn)還要不斷總結(jié)積累,歷史項(xiàng)目數(shù)據(jù)對于以后軟件開發(fā)周期的估算是非常有價值的。
? ? 在實(shí)際使用歷史數(shù)據(jù)估算法時,建議項(xiàng)目經(jīng)理建立一個歷史項(xiàng)目數(shù)據(jù)庫,在庫中包含以前所有項(xiàng)目的開發(fā)周期、項(xiàng)目規(guī)模、開發(fā)人員狀況、客戶狀況等詳細(xì)數(shù)據(jù),當(dāng)估算時根據(jù)當(dāng)前項(xiàng)目的狀況在庫中尋找最類似的歷史項(xiàng)目,然后再比較兩個項(xiàng)目之間在項(xiàng)目規(guī)模、項(xiàng)目風(fēng)險(xiǎn)、人力資源之間的區(qū)別,我們假定歷史項(xiàng)目開發(fā)周期為A當(dāng)前項(xiàng)目的周期可以依據(jù)下列公式得出
B=A×(2×S+R+P+2×C)/6
S:代表軟件規(guī)模 R:代表風(fēng)險(xiǎn) P:代表人力資源 C:代表客戶
以上值均指當(dāng)前項(xiàng)目與歷史項(xiàng)目的比率。
實(shí)際的比較因素應(yīng)該不止這些,但軟件規(guī)模、風(fēng)險(xiǎn)、人力資源及客戶狀況是其中最重要的,對軟件開發(fā)的影響也最大,所以這個公式中只考慮了這些因素。其中軟件規(guī)模和客戶兩項(xiàng)占的權(quán)重最大,這也是根據(jù)項(xiàng)目管理經(jīng)驗(yàn)得出的,在實(shí)際使用歷史數(shù)據(jù)估算法時還可以靈活加入其它因素。
項(xiàng)目經(jīng)理的一個重要職責(zé)就是要保證項(xiàng)目的進(jìn)度,同時負(fù)責(zé)項(xiàng)目的進(jìn)展,那么如何能夠保證項(xiàng)目的進(jìn)度呢?那么首先要弄清楚,進(jìn)度與進(jìn)展的概念.
1 首先要區(qū)分進(jìn)度和進(jìn)展的概念
進(jìn)度:schedule,工期是否拖延了,拖延了多久。
進(jìn)展: progress,任務(wù)的完成情況,任務(wù)完成了%多少,還有哪些任務(wù)未完成。
比如:
? 某項(xiàng)任務(wù)到今天為止,工期已經(jīng)拖了2天,任務(wù)完成了80%了,還剩20%未完成;
? 某項(xiàng)任務(wù)到今天為止,已經(jīng)完成,但是比計(jì)劃日期拖期了2天,任務(wù)100%完成了。
2 如何度量進(jìn)度?
(1)檢查關(guān)鍵路徑是否拖期,如果關(guān)鍵路徑有拖期,則項(xiàng)目一定是拖期了,則要計(jì)算關(guān)鍵路徑的拖期天數(shù)。
(2)檢查非關(guān)鍵路徑是否拖期了,如果非關(guān)鍵路徑的拖期后超過了關(guān)鍵路徑的工期,則要計(jì)算非關(guān)鍵路徑的拖期天數(shù)。
(3)上述2步計(jì)算結(jié)果的最大值即為項(xiàng)目的拖期天數(shù)。提前以此類推。
3 如何度量進(jìn)展?
有多種方法:
(1)? ? ? 任務(wù)完成%=已完成的任務(wù)個數(shù)/應(yīng)完成的任務(wù)個數(shù)。
(2)? ? ? SPI=掙值/計(jì)劃值,在軟件項(xiàng)目中通常采用已完成任務(wù)的計(jì)劃工作量/應(yīng)完成任務(wù)的計(jì)劃工作量。
(3)? ? ? 需求完成%=已完成的需求個數(shù)/總的需求個數(shù),或者=已完成需求的功能點(diǎn)/總的功能點(diǎn),在敏捷方法中可以用已完成的故事點(diǎn)/總的故事點(diǎn)
(4)? ? ? 在敏捷方法中也可以是燃燒圖,度量剩余任務(wù)的計(jì)劃工作量。