軟件開發中如何合理的預估項目的開發時間始終是一個難題。由於項目中不肯定性的因素太多。這裏咱們根據平常項目中開發的規律總結出一種工做量預估的模型。該模型參考物理學中時間的計算方式:
\[ 時間(T)=\frac {距離(S)}{速度(V)} \]
獲得咱們的軟件開發時間計算公式:
\[ 開發時間(T)=\frac {工做量(S)}{開發速度(V)} \]html
工做量主要與三方面的因素有關係。任務的規模、任務的複雜度以及完成該任務的人員能力水平。這裏咱們先假設一個標準的人員水平(即:理想狀態下人員水平都是必定的標準工程師)。那麼此時工做量主要與任務的規模與任務的複雜度有關係。程序員
關於任務的規模拆分出以下等級。(咱們能夠總結本身項目的規律來調整這個等級):編程
級別 | 描述 |
---|---|
5 | 任務規模極其之大,甚至不能估計,能夠拆分紅不少小任務,甚至子工程。 |
4 | 任務規模較大,須要一週左右的時間來完成,能夠拆分紅不少小任務 |
3 | 中等規模的任務,須要三到五天左右的工做量 |
2 | 任務小,須要兩到三天左右的工做量 |
1 | 任務較小,須要一天左右的工做量 |
0.5 | 任務很是小,須要不多的工做量,須要幾個小時的工做 |
注意:這裏的工做量只是完成任務自己所需的工做量,但軟件開發每每不僅是完成任務自己,更多時候任務還會涉及到其它相關的任務、系統。也有些任務可能涉及到團隊技術的盲點,須要必定的時間研究分析等。所以,咱們還須要結合任務的複雜度來進行工做量的評估。函數
關於任務複雜度,一樣能夠拆分出如下幾個等級。測試
級別 | 描述 |
---|---|
5 | 極其複雜,更多依賴於其它任務、系統或子系統,含有團隊中缺少的技術,或者一些重要的經驗,任務描述很不清晰,有許多未知因素,對外部任務、系統或子系統有很大的影響等 |
4 | 很是複雜,依賴於其它任務、系統或子系統,其中所涉及到的一些技術點、經驗在團隊中不是強項,任務描述不清晰,有些未知因素,須要極高的一些技術能力才能完成,對外部任務、系統或子系統有必定的影響等 |
3 | 中等程度複雜,有些依賴於其它任務、系統或子系統,完成任務不多或不須要研究,任務描述很清晰,未知因素基本沒有,只須要通常的技術能力就能夠完成,對外部任務、系統或子系統不多的影響等 |
2 | 簡單,不多依賴於其它任務、系統或子系統,其中所涉及到的一些技術點、經驗在團隊中曾經有過,任務描述基本清晰,未知因素較少,只須要通常的技術能力就能夠完成,對外部任務、系統或子系統基本沒有影響 |
1 | 較簡單,基本沒有未知因素,所涉及的技術、經驗都是團隊很是熟練的。只須要基本的編程能力就能夠完成,任務影響力僅涉及自身。 |
\[ 單個任務工做量(o)=SC \]優化
\[ 項目的總工做量(E)=\sum_{i=1}^n{(SC)}_i \]
這裏,咱們定義工做量的最小工做單位爲sp,單位時間一天的工做量。1sp即:咱們的標準工程師一天的工做量爲1sp(即:咱們的標準工程師理想中的開發速度爲1sp);spa
咱們的一個標準工程師理想中的開發速度就是一天能夠完成1sp的工做量。前提是標準程序員,但顯然咱們團隊中的程序員不可能都是標準工程師。所以理想中咱們的團隊開發速度爲:
\[ 團隊理想開發速度(V_t)=標準工程師開發速度(V_s)*團隊人員個數(R) \]htm
項目開發速度是一個很複雜的概念,很難準確的對其進行定義。考慮到不一樣團隊成員的能力不一樣,則開發速度也不相同,即便是同一團隊,其開發速度也不是一成不變的,會受到各類因素的影響。理想開發速度僅僅是沒有受到任何阻力影響時的速度。但在項目過程當中,總會遇到一些影響。其影響因素主要包括兩方面。肯定性因素以及突發性因素,在項目開始前,項目經理對如下兩種因素預估的越準確,那麼對開發時間的評估也越準確。blog
肯定性因素通常是項目客觀存在的,容易在開始前預測的。關於肯定性因素大體參考以下:開發
影響因子 | 影響因子分數(如下爲示例分數,具體分數可根據狀況自定義i>0,若穩定則爲1) |
---|---|
團隊組成 | 0.95 |
開發過程 | 1 |
需求清晰完整度 | 0.96 |
技術因素 | 0.97 |
團隊配合 | 1.05 |
其它因素 | 0.98 |
團隊組成:考慮到團隊成員不可能爲標準工程師。所以團隊人員的能力是影響團隊開發速度的一個很大因素。咱們能夠在團隊中找一個接近於標準工程師的人,獲得他的能力系數(SF)爲1sp(一天能夠完成1sp的工做量),則以他爲基準能夠獲得團隊全部人的能力系數。則團隊組成的影響因子分數(TF)計算公式爲:
\[ TF=\frac{\sum_{i=1}^N{(SF)}_i} {N} \]
開發過程:考慮到改進開發過程(採用敏捷,優化測試方法等)會對開發速度有影響,所以開發過程是影響因素之一。其值可大於1也能夠小於1,若穩定不變則爲1
需求清晰完成度:需求是否足夠清晰、完整也會對開發速度有影響。
技術因素:若完成該項目涉及到團隊中未知、不具有的技術知識也是風險之一。固然也可能爲正面因素。
團隊配合:一個配合好的團隊和配合差的團隊其開發速度也是明顯不一樣的。
說明:以上因素具體項目團隊可自行調整。
肯定性因素(FF)的綜合影響(FR)計算公式爲:
\[ FR=\prod_{i=0}^n(FF)_i \]
突發性因素每每是項目開始前哪一預測的。關於突發性因素大體參考以下
突發性因素\影響因子分數 | 高(+) | 中(+) | 低(+) | 穩定 | 低(-) | 中(-) | 高(-) |
---|---|---|---|---|---|---|---|
團隊變化 | 1.1 | 1.05 | 1.02 | 1 | 0.98 | 0.95 | 0.91 |
需求變化 | - | - | - | 1 | 0.99 | 0.98 | 0.97 |
團隊成員兼職 | - | - | - | 1 | 0.98 | 0.96 | 0.94 |
業務方失誤 | - | - | - | 1 | 0.97 | 0.95 | 0.92 |
開發環境變化 | 1.1 | 1.05 | 1.02 | 1 | 0.98 | 0.95 | 0.92 |
臨時增長減小任務 | 1.1 | 1.05 | 1.02 | 1 | 0.97 | 0.95 | 0.91 |
其它 | 1.1 | 1.05 | 1.02 | 1 | 0.99 | 0.97 | 0.96 |
團隊變化:團隊人員離職,新增成員等
需求變化:開發過程當中需求的變動
團隊成員兼職:團隊成員身兼數職,在其餘團隊也有工做。
業務方失誤:業務方提出錯誤的要求等
開發環境變化:項目開發過程當中開發環境發生變化
臨時增長減小任務:項目過程當中臨時性的新增或減小需求。
說明:以上因素具體項目團隊可自行調整。
突發性因素(VF)的綜合影響(DF)計算公式爲:
\[ DF=\prod_{i=0}^n(VF)_i \]
實際開發速度須要在理想開發速度的基礎上增長各類影響因子。其公式以下:
\[ V=V_t^{FR\times DF} \]
如上圖,由下往上分別爲3-8人的開發團隊開發速度與綜合影響因子分數的函數圖像(影響因子在0.8-1.2之間)。
2.3 開發時間評估
開發時間計算公式以下:
\[ T=\frac {E}{V}=\frac {\sum_{i=1}^n{(SC)}_i}{V_t^{FR\times DF}}(Days) \]
輸入:
輸出:
總工做量: 150
理想開發速度: 7
理想開發時間: 21.4天
固定性因素影響綜合值: 0.87
突發性因素影響值: 0.91
實際開發速度: 4.65
實際開發時間: 32.2天
以上僅我的針對咱們公司項目所制定的一種工做量評估模型。其具體實用程度,使用中存在的問題等,還有待時間與大量數據的支撐。也但願道友們能提供一些寶貴的意見。大家的團隊是如何進行工時與工做量的評估的。