軟件測試工作量估算之功能點(diǎn)估算法
從上個(gè)世紀70年代開(kāi)始,一些軟件企業(yè)就開(kāi)始引入“功能點(diǎn)分析算法”,來(lái)評估軟件功能的規模,然后便可以對軟件開(kāi)發(fā)的成本和工期,進(jìn)行精確的度量,也可以對開(kāi)發(fā)團隊的生產(chǎn)率進(jìn)行考核評估。半個(gè)世紀以來(lái),很多種不同的功能點(diǎn)算法模型被建立起來(lái),Mk II功能點(diǎn)算法是其中一種比較常用的模型。
隨著(zhù)淘寶網(wǎng)站的高速發(fā)展,淘寶開(kāi)發(fā)團隊規模也不斷增大,于是必然要面對管理問(wèn)題。人數的增多必然帶來(lái)管理層級的增多,這樣很容易出現管理結構的臃腫,管理成本增高。如果我們引入一種簡(jiǎn)單而且科學(xué)的工作度量模型,讓每個(gè)人每個(gè)團隊的工作質(zhì)量和效率用數字來(lái)說(shuō)話(huà),便可以促進(jìn)管理結構的扁平,簡(jiǎn)化管理過(guò)程,每個(gè)管理者可以管理更多的人,并且對下屬的工作了如指掌。
功能點(diǎn)算法就是為了解決如何度量工作效率的問(wèn)題,而工作質(zhì)量主要是依靠分析各種Bug數據,我們在別的文章里討論。
首先我們講一下MVC模型,這是目前WEB開(kāi)發(fā)的一種非常流行的軟件架構模式。它把WEB應用程序定義為3個(gè)部分,每個(gè)部分負責完成特定的任務(wù):
Model 模型
View 視圖
Controller 控制器
Model主要與數據庫交互,把數據表轉換成對象,并且實(shí)現基本的數據讀寫(xiě)邏輯,比如在淘寶網(wǎng),商品就是一個(gè)Model。View負責實(shí)現界面的設計,我們?yōu)g覽網(wǎng)頁(yè)看到的WEB界面控件,比如按鈕、文本框、GRID都是在View中定義的,設計View主要是用Html和JS。用戶(hù)在View層進(jìn)行的各種操作(比如點(diǎn)擊按鈕),就會(huì )啟動(dòng)Controller里的函數,主要的業(yè)務(wù)邏輯代碼,都寫(xiě)在Controller里了,其實(shí)也就是對各種Model進(jìn)行增刪改查,比如購買(mǎi)一個(gè)商品。
關(guān)于MVC的更多詳細說(shuō)明請參考維基百科。
接下來(lái)我們介紹MkII功能點(diǎn)算法,淘寶測試選擇MkII的主要原因是,它的算法和MVC模式非常的吻合,可以說(shuō)是黃金搭檔。
MkII功能點(diǎn)算法是這樣:先要給各個(gè)功能模塊劃分邏輯事務(wù),然后針對每個(gè)邏輯事務(wù),分析輸入DET(Data Element Type)和輸出DET的數量,以及關(guān)聯(lián)的實(shí)體類(lèi)型數量,再根據一個(gè)算法公式,計算出功能點(diǎn)指數:
功能點(diǎn)=輸入DET×0.58+實(shí)體類(lèi)型×1.66+輸出DET×0.26
邏輯事務(wù)指用戶(hù)在WEB應用程序中的原子操作。很多開(kāi)發(fā)團隊都會(huì )設計UseCase,一般來(lái)說(shuō)一個(gè)UC對應一個(gè)邏輯事務(wù)。注意:邏輯事務(wù)一定是記錄用戶(hù)行為的,而不是程序內部的處理邏輯。不過(guò)在實(shí)際的分析中,我們發(fā)現邏輯事務(wù)的個(gè)數,往往要大于UC的個(gè)數,這是正常的,主要因為很多UC包含的信息很多。
我們用淘寶的“購買(mǎi)商品”來(lái)舉例說(shuō)明怎么劃分邏輯事務(wù),先來(lái)看購買(mǎi)商品的頁(yè)面:

在這個(gè)頁(yè)面中,左邊一塊是顯示商品的簡(jiǎn)要信息,這是一個(gè)邏輯事務(wù):“查看商品信息”,右邊最上面一個(gè)收貨地址的radio button,也是一個(gè):“展示我所有的收貨地址”,右邊下面一組文本輸入框加一個(gè)按鈕,是一個(gè):“為當前商品創(chuàng )建一個(gè)訂單”。
在MVC中,邏輯事務(wù)對應Controller,每個(gè)邏輯事務(wù)都可以在Controller里面找到一個(gè)public函數。
再講一下輸入DET和輸出DET。比如剛才的“為當前商品創(chuàng )建一個(gè)訂單”這個(gè)事務(wù),頁(yè)面上輸入信息的控件,都是輸入DET,比如文本框、按鈕,都是輸入DET。這個(gè)事務(wù)大約有10個(gè)輸入DET:“收貨地址”、“購買(mǎi)數量”、“運送方式”等等。輸出DET指應用程序給用戶(hù)提供的所有的提示信息,以文字提示的方式知會(huì )用戶(hù)。比如“購買(mǎi)成功”、“您沒(méi)有綁定支付寶,不能購買(mǎi)”、“商品庫存不足,無(wú)法購買(mǎi)”、“購買(mǎi)數量必須輸入整數”等等。這個(gè)事務(wù)的輸出DET數量大約是20個(gè)。
在MVC中,輸入DET和輸出DET對應View。每個(gè)輸入DET和輸出DET都能在View中找到對應控件。
最后講引用實(shí)體,在創(chuàng )建訂單事務(wù)里,引用的實(shí)體有很多。訂單成功后要扣減商品庫存,因此商品算1個(gè);訂單本身是1個(gè);訂單需要同步生成支付寶交易,支付寶算1個(gè);還有物流記錄算1個(gè),等等,大約是5個(gè)實(shí)體以上。
在MVC中,引用實(shí)體對應Model。
到此為止這個(gè)邏輯事務(wù)的數據收集完整,代入公式計算得出結果:
10×0.58+5×1.66+20×0.26=19.3
當然這只是一個(gè)DEMO,數字都是估算的,實(shí)際情況肯定比這個(gè)要復雜,算出的功能點(diǎn)指數就會(huì )多一些。需要注意的是,使用MkII算法計算出的功能點(diǎn)指數,只是一個(gè)數值,代表應用程序的功能規模,和我們平時(shí)聽(tīng)到開(kāi)發(fā)說(shuō)的“我修改了一個(gè)功能點(diǎn)”,概念上是不同的。所以我們用“功能點(diǎn)指數”這個(gè)概念,不過(guò)為了溝通起來(lái)方便,還是簡(jiǎn)化成“功能點(diǎn)”了。
MkII功能點(diǎn)算法是非常適合于淘寶這樣的互聯(lián)網(wǎng)公司的。不過(guò)由于WEB應用程序的交互日趨復雜,JS被大量使用,因此在實(shí)踐中,如何劃分邏輯事務(wù),如何統計輸入輸出,還需要進(jìn)一步的研究。
文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/