白盒自動化平臺日記6:開發第二個子模塊-用例生成-下游底層算法-之後的計劃

上回書說到我們需要把源碼解析成這個格式:[ {“method”:"",“code”:"",“number”:"",child:[]} ]
1.其中method是所屬類型,我們預期有while,for,if,elif,else,break,return,exit,raise,continue 這幾種,但是其中某些代碼行 可能包含一對多的關係,甚至python還有很多簡寫,比如三元操作符,所以我們之後要做的事增加一條:對更特殊的單行包括多種類型進行解析。
2.在解析之後,我們需要對代入到一套公式裏,語句覆蓋一套,路徑覆蓋一套,條件覆蓋一套,分支覆蓋一淘,條件分支覆蓋一套。具體每套的公式是什麼,這是要區分語言類型的,在這之前的構思都是適用於大部分語言,然後公式出的結果就是每個特殊代碼行需要爲真還是假,此時所需的結果需要是這樣子的:
舉例語句覆蓋:[ [ {“code”:"",“TF”:“T”},{“code”:“TF”:“F”} ],[],[],[] ] (列表意思是語句或其他覆蓋率算法,都不僅僅一條用例即可,應該是很多條的,代入公式得到的結果應該是列表。
每個用例本身也是一個列表,這個列表內包含很多個代碼行真假,也就是 {“code”:"",“TF”:“T”},這裏要知道的是每個表達式,到底應該是真還是假:T真F假)
3.我們之前忽略了一個問題,就是普通不需要我們注意的代碼行,它們雖然無法影響執行方向,但是它們可能是賦值代碼,而且這個值恰好就是之後的特殊代碼行表達式的變量,比如:

def xxx(a):
	c=a+2
	if c>5:
		print ''

這裏我們雖然拿到了c>5 這個等式,但是卻根本不知道c是什麼,從哪來,如何操作傳參數,才能讓c>5 ==5 <5. 所以我們要再最開始的時候,把=號的代碼行單獨拿出來已備後續代入使用。也就是把c=a if c>5: 整合成爲 if (a+2) > 5: 這樣才能接下來照常進行。我管這部操作叫做—整合

等到我們把上述步驟都完成後,就剩下最後一步:把代入公式後的結果進行—賦值。
比如[{“code”:“a>5”,“TF”:“T”},{“code”:“a<3”,“TF”:“F”},{“code”:“a==5”,“TF”:“F”}]這條用例
我們需要給它當中的變量a進行賦值,讓其每個子字典都符合自己的"TF",這條用例中,a = 10就完全符合了。這個過程是需要我們計算的,這裏也涉及到一個算法,具體算法內容之後繼續研究。
但是這裏解析中會發現一個問題,就是有可能 這個用例壓根就不可能實現,比如[{“code”:“a>5”,“TF”:“T”},{“code”:“a<2”,“TF”:“T”}] ,需要既讓a大於5 同時也要a<2,這是不可能的,所以這種用例我們需要給它一個最終結果就是:“不可實現”
這個過程我叫它—清洗

到此我們已經梳理了大部分思路,按照時間線展示出來是:

從前端用戶保存內容中-拿到源碼—整合等號—解析成特殊代碼行—代入覆蓋率公式—對結果賦值和清洗—最終展示到前端頁面上

好了,今天就到這裏了。歡迎繼續跟進和提出寶貴建議:

最後,點擊這裏返回到目錄:
python白盒單元自動化算法,自動生成語句覆蓋/路徑覆蓋等邏輯覆蓋用例-持續更新中

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章