簡化功能點系列之一:什麼是功能點
這是簡化功能點系列的第一篇。
目標
功能點的目標,是估算工作量,進而估算成本和造價。
俗話說:“店大欺客,客大欺店”,銀行這麼大的客遇上IBM這麼大的店,會發生什麼呢?那就是功能點。
大約在1979年左右,IBM釋出了對功能點的基本定義,後來隨著業界的發展,逐漸成為當前唯一被廣泛認可的軟體規模度量標準。
功能點最大的特點,就是它和工作量的比例關係很好(應該是,功能點就是為了這個目標而設定的,因此這個不是偶然)。
什麼是功能點
和我們平時說的“功能點”不同的是,標準功能點(Function Point)是一個被嚴格定義的概念,不會因為估算人員差異產生顯著差別。
下面的圖展示了功能點中的“計數單元”,就是可以被數為功能點的東西。
內部邏輯檔案ILF,就是使用者的業務資料,類似於UML中的Entity,或者業務類Business Class,或者資料庫中的某些“主表”。
外部介面檔案EIF,就是要訪問的外部資料(注意不是外部系統,而是外部系統中的一個ILF)。
外部輸入EI,主要目的是使ILF資料變化的一種操作,簡單說增刪改都是EI;還有一種“使行為發生變化”的EI,如“開始防毒”。
外部查詢EQ,主要目的是檢視原始資料,比如檢視流水帳,檢視餘額。
外部輸出輸出,主要目的是檢視計算和派生的資料,比如檢視年度報表;還有一種是“穿越系統介面”的,比如列印。
這些功能點的定義,核心是“客戶可以理解並識別”,比如圖中灰色的那些“資料”和“操作”,是客戶看不到的,因此不能計算為功能點。
在計數過程中,各種功能點標準都做了一些細節定義,防止出現錯誤估算的情況。比如:
1. “查詢”有很多條件,算幾個?
2. 輸出之前要先輸入(輸入查詢日期範圍),算幾個?
3. 有的複雜有的簡單,怎麼數?
……等等,總之各種一望而知的和想都想不到的問題,都能找到依據(但有的依據很難掌握)。
IFPUG曾有報告指出,若兩個人經過了標準功能點的培訓,那麼這兩個獨立計數相差不到10%。
功能點標準
現在世界上有5個功能點的ISO標準(值得注意的是,除了功能點,沒有任何其他比如程式碼行、故事點、用例點……形成標準),分別是 (下面是俗稱):
IFPUG(澳大利亞,最大的功能點組織),NESMA(荷蘭,世界第二大功能點組織,代表歐洲),MarkII,COSMIC(能用到嵌入式),FiSMA(芬蘭)。
功能點有各種簡化方法,但基本上都“與功能點相容”,就是說借用了功能點的定義和數值。
各種組織、諮詢公司收集的功能點專案資料在5萬左右(其中一家就達到2萬多),粗略估計企業內部的功能點資料可能超過50萬。
每年還能看到各種功能點的對比資料報告,這個也是其他估算方法所不能比擬的。
標準功能點的侷限性
儘管功能點是一種“與技術無關”的“只需要需求就能數的”東西,但卻很難在某些場景中應用,比如:1. 功能點的複雜度依賴於某些細節,無法早期獲得。具體包括欄位數DETs、影響到的表的數量FTRs、欄位的排列組合情況RETs等資訊,而這些資訊只有在很詳細的介面設計和資料庫設計出現後,才能計算清楚。比如那個RETs,我本人現在還搞不懂。我可是不但聽過功能點課程,還翻譯過國外的課程(PPT加口譯,還仔細查閱了英文原文中的定義),還和外國講師額外請教了很多,搭上了去頤和園划船的時間,還是不能給出嚴格區分的方法。2. 功能點的很多概念與日常需求分析和描述差別很大
一個資深產品經理,本來需求寫的好好的,也足以給測試人員寫用例,給設計人員寫設計,做出來的產品客戶也很滿意,就差一個估算和度量不太懂,於是他就參加標準功能點培訓……突然,他就像小學生誤入微積分課堂一樣,聽到一大堆完全陌生的詞彙、定義和判斷準則,感覺自己完全像一個基礎為零的菜鳥一樣。
實際上,需求分析資深人士和外行學功能點的速度一樣快……或者說,一樣慢,因為前面的積累幾乎用不上。
之後的幾篇部落格,將會介紹如何以一種無為而治的方法,對已有的需求描述方法略作改進,就能從中自動計數功能點。
一篇看似平淡無奇的Word文件(甚至裡邊全是標題不需要文字),可以在幾秒鐘後算出功能點數值;而多數專案(2人年以下的),幾個小時就能做完。