軟件項目的估算歷來是比較復雜的事,因為軟件本身的復雜性、歷史經(jīng)驗的可重復性、估算工具的缺乏以及一些人為錯誤,都會導致軟件項目的估算往往和實際情況相差甚遠。據(jù)有關機構調查發(fā)現(xiàn),約有60%的軟件項目的失敗是因為估算偏差引起的,而不是因為技術實力不夠。因此,估算偏差已被列為軟件項目失敗的四大原因之一。
從軟件工程學上,我們知道軟件需求和估算是軟件項目的基礎。因為只有準確的了解客戶的需求,以之為基礎,并使用科學的方法對目標軟件系統(tǒng)的規(guī)模、工作量和進度做出合理的估算,我們才能在預算內按時按質順利的完成項目。然而,軟件估算作為軟件項目的基礎領域卻常常被人們所忽視。我在近期的一個開發(fā)項目中嘗到忽視軟件規(guī)模估算帶來的苦果,結果是項目進行到一半時發(fā)現(xiàn)不但工期嚴重滯后于計劃,而且項目的各種資源也嚴重的不足和缺乏,項目被迫暫停下馬。
常見的項目規(guī)模估算失準原因
一直以來,軟件項目的規(guī)模估算(Size Estimation)是個爭論不休的問題。不論是對軟件開發(fā)團隊還是對軟件用戶,軟件規(guī)模估算的重要性都是不容置疑的。因為它能極大的影響著甲方對發(fā)包軟件的成本估算,乙方對自身開發(fā)成本的預測,以及乙方對開發(fā)過程的量化管理等諸多方面。而且,只有相對合理和相對準確地估算軟件規(guī)模,才能對項目的進度安排、資源分配等各個環(huán)節(jié)進行合理的部署。所以,軟件項目的規(guī)模估算是軟件項目中相當重要的一環(huán)。但是,以下的原因卻使到我在這次項目的實際操作中對項目規(guī)模估算失準了:
(1)對項目規(guī)模估算認識不足
項目規(guī)模估算一般分為兩種應用場景:一是招投標的時候用來估價、報價;二是用來安排進度計劃和指導項目具體工作的分配。因此,如果對規(guī)模估算認識不足的話,將可能會在這兩種應用場景中估算失準。例如,如果項目規(guī)模低估的話會造成人力估算低估、成本預算低估、日程過短,終人力資源耗盡,成本超出預算。后為了完成項目不得不趕工,不但會影響到項目質量,甚至會導致項目失敗。而如果規(guī)模高估的話,會因估價過高而降低了招投標時的競爭力,或在進度安排時提高了開發(fā)成本和浪費資源。由于對規(guī)模估算的認識不足,使到我在這次項目中嘗到一個大苦果,是低估項目規(guī)模導致項目需要多次的追加預算。我不但多次受到公司領導的批評,而且還受到客戶的多次投訴。
(2)個人經(jīng)驗估算法帶有一定的局限性
一般來說,依靠歷史或個人經(jīng)驗的規(guī)模估算方法都有一定的局限性。原因是很難在項目分析和計劃階段對軟件的規(guī)模進行相對準確的估算。因為估算是依靠評估人員的經(jīng)驗,所以對評估人員的能力要求比較強,并且難以由第三方對評估人員的工作偏差作出修正。在這次項目的初期,我片面的只是根據(jù)個人經(jīng)驗進行估算,結果是輕率的估算了項目規(guī)模。這是后導致項目失利的原因之一。另外,不同軟件項目使用的技術不一樣,這一點也非常影響到軟件規(guī)模的估算。例如同一個功能,使用JAVA語言和使用Ruby語言所涉及的代碼行相差數(shù)十行,甚至數(shù)百行。即使同為JAVA語言,使用不用的框架所需要編寫的代碼行也不一樣。
(3)對項目估算時缺乏數(shù)據(jù)支持
因為在軟件開發(fā)初期時對規(guī)模估算都是很難準確量化的,所以到底需要多少資源、多長時間或者規(guī)模估算到什么的程度才算是合理的是沒有一個標準的。但一個好的項目估算,是離不開一個準確的、可信的、客觀的數(shù)據(jù)作為基礎。如果在項目規(guī)模估算時只憑項目管理人員的經(jīng)驗進行估算,而缺乏大量的數(shù)據(jù)支持,那么估算終會變成常見的"三拍"現(xiàn)象:"首先是項目經(jīng)理拍腦袋估算,然后是項目經(jīng)理估算失準時拍馬屁的補救,后是項目失敗時拍屁股走人"。當然,這只是個玩笑。不過由此可見項目規(guī)模估算不能只依靠經(jīng)驗來估算,而應該是要有大量的數(shù)據(jù)來支持。
什么是軟件項目的規(guī)模估算?
軟件開發(fā)項目管理中的一項重要任務是開發(fā)項目的規(guī)模估算,這是極其重要但卻很容易被忽視的一項內容。因為沒有正確的規(guī)模估算,項目計劃會失去成功的基礎?上Т蟛糠值拈_發(fā)團隊都很難做到對項目規(guī)模進行準確的估算。
(1)什么是項目規(guī)模估算?
做好軟件項目管理的基礎是要做好項目的規(guī)劃工作,而做好項目規(guī)劃的前提是要做好軟件估算。也是說,是沒有好的軟件估算,項目的規(guī)劃、跟蹤和控制根本無從談起。因此,軟件估算是項目計劃活動的基礎之一。
軟件估算一般是通過主觀經(jīng)驗和客觀分析兩種方法進行,包括有四個重要方面:規(guī)模估算、工作量估算、進度估算和成本估算。其中,對規(guī)模進行估算是為了將項目范圍進行量化。規(guī)模估算是整個軟件估算中核心、基礎的環(huán)節(jié),也是整個軟件估算的第一步。規(guī)模估算有兩個主要作用:一是通過規(guī)模估算建立項目基線;二是利用基線對項目生產(chǎn)率和狀態(tài)進行評價,并確定軟件過程的進度目標。也是說,規(guī)模估算是一切估算的基礎,是能直接決定和影響到其它三個估算的決策。
(2)常用的軟件規(guī)模估算方法
估算是建立在客觀事實上對未來可能發(fā)生的事情的一種合理性預測。估算本身的不確定性,決定了它不可能是百分之百準確無誤的,但是依據(jù)某種方法進行合理估計顯然比瞎猜好得多。軟件估算方法有很多,大致分為基于技術分解模型和基于經(jīng)驗模型兩大類。目前基于技術分解模型的方法有:功能點估算法、LOC估算法、MARK II等;基于經(jīng)驗模型的方法有:IBM模型、普特南模型、COCOMO模型等。目前基于技術分解的常用方法是FP功能點估算法和LOC代碼行估算法。本文重點介紹這兩種方法。
①FP功能點法
功能點分析法 (FPA:Function Point Analysis) 是一種相對抽象的方法,是一種人為設計的估算方式。它是從系統(tǒng)的復雜性和系統(tǒng)的特性這兩個角度來估算系統(tǒng)的規(guī)模,它的關注點在于程序的"功能性"和"實用性",是對軟件和軟件開發(fā)過程的間接估算。初是由 IBM 工程師艾倫艾爾布策提出的,隨后被IFPUG 方法繼承,是目前國際上主流的軟件規(guī)模估算方法。