如何評估后端程序開發的工作量
現在假設基於產品原型開發功能接口,前后端分離。
那么基於這個功能需求,設計出來總共 t 張表,每張表字段數量記為f(t)。
總共p個頁面,每一個頁面的Tab數量 記為 Ta(p),模塊數量為 M(p),模塊中最大的類型數量為 Max(type(p)),每種類型最大的子類型數量為 Max(subType(p)) 。
接口數量總共為m,參數個數Pa(m),每一個接口字段數量,Pr(m)。
因為數學不太好,不會表示。上述大致上是表示復雜程度。實際的量,可以是總和,也可以是乘積。
那么最終的表達式為:
接口里面還省略了接口的子接口,業務邏輯的方法調用,還忽略了對系統本身的變動,以及關聯的已經存在的數據表的關聯程度,例如用戶表,權限表等。
經常因為表少,字段少而低估了工作量。實際開發估計工作量,應該充分考慮 模塊,頁面,接口,字段等等方面的數量。
至於為什么用乘積,乘積更能反映復雜程度,因為每一個因子,因為數量增加1,其余模塊都跟着相應的增加,而不是簡單的工作量加一。
如果把程序想象成數據的流動,每一個接口,都要針對共同的參數進行處理。從Controller 流入 Service,從Service流入Repository,也就是數據庫。
每一個數據庫的 statement 都是對應所需要的字段,進行CRUD,全都是關聯起來的,接口數量,字段數量,表數量,都會直接導致DAO的復雜程度。
例子:
最近做的一個項目,有三個模塊,兩個主頁面,三個次要頁面,每一個頁面3個Tab。最大的一級類型3,最大的二級類型3。
兩張表,分別是 11個字段,20個字段。
核心接口個數:9x6個,9個interface,平均每一個接口6個method。
核心接口參數平均2個。接口參數字段平均5個。
那么最終的結果就是:
(11+20)x (2 x 3 x 3 x 3 x 3 + 3 x 1 x 1 x 1 x 1)x ( 9 x 6 x 2 x 5) = 2762100。
276萬多。
實際項目到完成的時候,代碼行數達到了14000 行。