數據流測試 1、數據流分析
從數據流視角:程序是一個程序元素對數據訪問的過程;
數據流關系:數據的【定義——使用】對;
出發點:對數據的不正確處理;
使用程序圖來描述數據【定義——使用】對。
數據流測試:指關注變量接受值的點 和使用(或引用)這些值的點 的 結構性測試形式。
2、數據流測試
數據流測試按照程序中的變量定義和使用的位置來選擇程序的測試路徑;
數據流測試關注變量接收值的點和使用這些值的點;
一種簡單的數據流測試策略是要求覆蓋每個定義-使用路徑一次;
數據流測試用做路徑測試的“真實性檢查”。
數據流分析—程序控制流圖
G(P ) :程序圖
構造方式同前,語句片段代表節點,邊代表節點序列
單入口,單出口,且不允許從某個節點到其自身的邊
P:程序
V:一組程序變量
DD-路徑
DD路徑:決策對決策路徑(Miller)。從決策語句的“出路”開始,到下一個決策語句的“入路”結束。
DD鏈:有向圖中一條起始和終止節點不同點路徑。
由一個節點組成,內度=0;
由一個節點組成,外度=0;
由一個節點組成,內度〉=2或外度〉=2;
由一個節點組成,內度=1并且外度=1;
長度〉=1的最大練
DD-路徑圖
DD-Path graph是一張帶有標簽的有向圖,圖中的節點表示程序圖的DD路徑,而邊表示路徑的控制流。
對于給定的程序,可以構造多種不同的程序圖,所有這些程序圖,都可以簡化為唯一的DD-路徑圖。
對100行以內的程序生成DD路徑是可行的,如果超過這個規模,一般需要有分析工具的支持。
控制流圖最簡化也就是DD路徑了。可以理解為 DD屬于控制流圖。
3、定義/使用測試 定義節點
節點n∈G(P)是變量v ∈V的定義節點,記做DEF(v,n),當且僅當變量的值由對應節點n的語句片斷處定義。
定義節點語句:
使用節點
節點n∈G(P)是變量v ∈V的使用節點,記做USE(v,n),當且僅當變量v的值在對應節點n的語句片斷處使用。
使用節點語句:
謂詞使用、計算使用
使用節點USE(v,n)是一個謂詞使用(記做P-use),當且僅當語句n是謂詞語句;否則,USE(v,n)是計算使用(記做C-use)
定義-使用路徑
定義-使用路徑(記做du-path):是PATHS(P)中的路徑,使得對某個v ∈V,存在定義和使用節點DEF(v,m)和USE(v,n),使得m和n是該路徑的最初和最終節點。
就是以定義節點開頭,使用節點結尾。
定義清除路徑
定義清除路徑(記做dc-path):是具有最初和最終節點DEF(v,m)和USE(v,n)的PATHS(P)中的路徑,使得該路徑中沒有其他節點是v的定義節點。
以定義節點開頭,使用節點結尾,且路徑途中沒有其他(該變量的)定義節點。
4、覆蓋指標 定義-使用路徑測試覆蓋指標
數據流指標假設所有程序變量都標識了定義節點和使用節點,且關于各變量都表示了定義-使用路徑
T:擁有變量集合V的程序P的程序圖G§中的一個路徑集合
全定義準則
集合T滿足程序P的全定義準則,當且僅當所有變量 ,T包含從v的每個定義節點到v的一個使用的定義清除路徑。(這ppt里定義的是真的拗口。)
可以理解為:T是一個路徑集合,包含了(所有變量)變量v的所有定義節點到任意一個使用節點的dc-path。
有一說一,我思索了半天還是懵的。百度相關內容又太少!
【這里先放下】
圖中標亮部分。
def(U,3),use(x,3),use(y,3);
use(U,5),use(U,14),use(U,15);
按照當時老師講的:n3分別到n5、n14、n15的路徑集合就是U的全覆蓋。
我:???
全使用準則
集合T滿足程序P的全使用準則,當且僅當所有變量 ,T包含從v的每個定義節點到v的所有使用以及到所有USE(v,n)后續節點的定義清除路徑。
全謂詞使用/部分計算使用準則
集合T滿足程序P的全謂詞使用/部分計算使用準則,當且僅當所有變量,T包含從v的每個定義節點到v的所有謂詞使用的定義清除路徑,且若v的一個定義沒有謂詞使用,則定義清除路徑導致至少一個計算使用。
全計算使用/部分謂詞使用準則
集合T滿足程序P的全計算使用/部分謂詞使用準則,當且僅當所有變量,T包含從v的每個定義節點到v的所有計算使用的定義清除路徑,且若v的一個定義沒有計算使用,則定義清除路徑導致至少一個謂詞使用。
全定義-使用路徑準則
集合T滿足程序P的全定義-使用路徑準則,當且僅當所有變量 ,T包含從v的每個定義節點到v的所有使用,以及到所有USE(v,n)后續節點的定義清除路徑,且這些路徑要么有一次的環經過,要么沒有環路。
這定義看的我是真的腦殼子暈。
其他白盒測試方法 黑盒白盒比較:
黑盒測試:漏洞和冗余,而且不能被發現。
白盒測試的基路徑測試方法:用有向圖表示代碼和程序路徑公式化,掩蓋了代碼中的重要信息,即可行路徑和不可行路徑的區別。
5、測試的效率 什么時候測試可以停止?多少是足夠的測試?
當時間用完時——缺少標準
當繼續測試沒有產生新失效時
當繼續測試沒有發現新缺陷時
當無法考慮新測試用例時—原因?
當回報很小時—基于分析的方法
當達到所要求的覆蓋時—結構化測試的指標
當所有缺陷都已經清除時—難以實現
相關內容可以參考這位大佬的博客。很清楚。
另外,學了這么多,感覺脈絡有點雜亂,最后會整理一下。
THE END
*請認真填寫需求信息,我們會在24小時內與您取得聯系。