用代碼復雜度分析風險
一些測試技術,比如邊界值分析和結對測試,可以有效的幫助我們在盡量少的增加風險的同時,減少測試用例的數目。然而常見的問題在于產品的缺陷并不是 平均分布在代碼里面的。在一些典型的軟件項目中,總有一些組件比其他組件存在更多的缺陷,軟件測試一個非常必要的環節就是預測那個項目區域存在更多的缺 陷,并有針對行的投入測試力量。
1、風險行業
基于風險的測試就是基于緩解產品中潛在風險的測試方法。該方法傾向于把可用的測試資源集中在最需要的區域。無法做到“面面俱到”的測試,我們就需要基于一系列的標準,有選擇地集中投入測試力量。
基于風險測試的方法是嘗試歸類出部分產品組建擁有更普及的用戶場景,從而投入更多的測試力量。但這種測試方法的風險依賴于對測試重點的精確選擇,從而忽略了一個事實,還是有用戶會使用那些20%以為的功能和代碼的。
對最有可能產生缺陷的產品部分編寫更多的測試用例是基于風險測試的另一種應用。
2、復雜問題
我們用一種尋找高復雜度代碼的方法來預測缺陷出現的地方,代碼審查。
作粗略的代碼審查時評感覺和主觀衡量代碼復雜度有時就足夠了。
最簡單的代碼復雜度測量方式可能是代碼行數(LOC),行數越多,復雜度就越高。但是判斷行數,沒有統一的標準,個人有個人判斷的方法,我傾向于只計算語句(C語言為例,只計入以分號結束的行)。你只需挑選你喜歡的即可以。
3、測試回路復雜度
所謂回路也就是程序中選擇和判斷的語句。回路復雜度度量方法,即辨別函數中線性獨立路徑(或判斷)數目的度量方法。一個沒有包含條件判斷操作(比如條件語句,循環等)的函數在整個程序中只有一條線性獨立的路徑。
計算McCabe復雜度=邊-節點+2,還有一個最簡單的方法:將條件(判斷)語句的數量加1.
3.1 Halstead度量
Halstead度量是一套完全不同的復雜度度量,基于程序中語法要素以下4個度量:
● 獨特算子的數量(n1)
● 獨特算域的數據(n2)
● 所有算子出現的總數(N1)
● 所有算域出現的總數(N2)
代碼長度值=N1+N2;難度度量=(n1/2)*(N2/n2);
void HalsteadSample(int value) { if (value != 0) { if (value < 0 ) value + = 1; else { if (value == 99) value = 0; else value - = 1; } } } |
算子 數量 算域 數量
!= 1 value 6
< 1 0 3
+= 1 1 2
== 1 999 1
= 3
-= 1
總計:n1=6,N1=8,n2=4,N2=12
函數長度量=(N1+N2)=18,難度系數(n1/2)*(N2/n2))=9
運用這種度量只要是用來標識可能需要返工或是額外分析的代碼
3.2 面向對象的度量
面向對象的度量是各種語言中類和類結構相關的度量(Java、C++、C#),該方法即度量。該方法包含以下內容:
1)每個類的權重方法(WMC)。一個類中方法的數目。
2)繼承樹的深度(DIT)。一個類所繼承的類的數目。
3)對象類之間的耦合(CBO)。一個類引用其他類的方法或是實例變量的數目。
在面向對象的編程中,扇入和扇出度量分別用來計算有多少類調用到某一特定的類,有多少類被某一特定的類調用。例如一個類包含的方法被其他5個類調 用,但是這個方法同時調用了其他10個類,那么它的扇入就是5,扇出就是10。那么也就是說,如果修改了扇出中的某個類,同時就要測試扇入5個類的地方(這樣說不是很確切,但意思就是這么回事)。
4、如何利用復雜度度量
同時使用集中方法檢查函數的復雜度,通過結合和權衡這些數據來減少誤診
函數名 | 回路復雜度 | 調入函數的數量 | 代碼行數 |
OperAccount | 21 | 3 | 42 |
CloseAccount | 9 | 24 | 35 |
updatepassword | 17 | 18 | 113 |
從中可以看出,OperAccount函數回路復雜度很高,但調入函數卻很少(扇入),代碼函數也很少,所有這個函數只需通過減少回路復雜度(分支語句)即可。
CloseAccount函數,回路復雜度很低,調入函數很高,代碼行數很少,只需減少調入函數的個數。
updatepassword函數,是相對危險的,測試需要重點測試的,回路復雜度、調入函數、代碼行數,都比較高。
代碼復雜度是識別應用程序中可能存在缺陷的一種基本度量,對于識別代碼維護性的問題也具有同等價值,復雜度是容易誤用的度量,所以重要的是如何聰明 的使用這個度量,并且監視度量的變化,以保證該度量所指示的情況正是你所期望的它能發現的。高度的復雜度只能告訴你這段代碼可能會有很多缺陷,但仍需要額 外的調查來證實這個結果。
版權聲明:本文出自 shadowwalker 的51Testing軟件測試博客:http://www.51testing.com/?622454
原創作品,轉載時請務必以超鏈接形式標明本文原始出處、作者信息和本聲明,否則將追究法律責任。
posted on 2013-04-24 13:49 順其自然EVO 閱讀(401) 評論(0) 編輯 收藏 所屬分類: 測試學習專欄