基于人工智能的用例生成方法研究(Web)

【目標(biāo)】:讓機(jī)器像人一樣去測(cè)試未知的web頁(yè)面。(這里變換一下思路,其實(shí)是研究基于人工智能的用例生成系統(tǒng))

【涉及到的問(wèn)題】:驅(qū)動(dòng)機(jī)器去測(cè)試的一些列動(dòng)作邏輯從何而來(lái)?每個(gè)動(dòng)作所攜帶的數(shù)據(jù)入口在哪兒?

【涉及到的難點(diǎn)】:如何讓機(jī)器像人一樣去理解新頁(yè)面,如何讓機(jī)器使用動(dòng)作邏輯+數(shù)據(jù)對(duì)頁(yè)面進(jìn)行測(cè)試?斷言該怎么引入?

【探索的方向】:????1.? ? 基于前端埋點(diǎn)的數(shù)據(jù)大量收集整理???? 2. 模型驅(qū)動(dòng)方法? ? 3.監(jiān)督學(xué)習(xí)下的圖像識(shí)別分析方法 ...(如有不同見解請(qǐng)留下寶貴意見)


下面結(jié)合問(wèn)題、難點(diǎn)對(duì)探索方向做進(jìn)一步的分析:

埋點(diǎn)+大數(shù)據(jù)歸類分析

該方法的大前提是在線上環(huán)境的源碼中“插樁”,植入一段js,將用戶操作時(shí)的一系列動(dòng)作軌跡和結(jié)果信息保存下來(lái),回傳給數(shù)據(jù)庫(kù),這樣做最終問(wèn)題留給了數(shù)據(jù)分析,期望從一堆雜亂的數(shù)據(jù)中去抽取大概率的路徑覆蓋,這樣做的結(jié)果會(huì)有3方面問(wèn)題:

1.? ? 源碼插樁,開發(fā)會(huì)考慮性能問(wèn)題;屬于強(qiáng)行介入式的,簡(jiǎn)單粗暴;不易達(dá)成共識(shí);

2.? ? 用戶尚若發(fā)現(xiàn)自己的操作持續(xù)被窺探中,后果將不堪設(shè)想;信息外泄事情就更大了;因此這個(gè)方案看似簡(jiǎn)單,實(shí)則考慮甚廣;

3.? ? 一堆雜亂的使用數(shù)據(jù)沒有先后順序,諸如先干啥后干啥此類信息不明;全為并列關(guān)系;

4.? ? 最核心的問(wèn)題來(lái)了,即使是大量用戶使用也無(wú)法做到功能的全覆蓋,換句話說(shuō),用戶只是使用了自己認(rèn)為最常用的那些功能,而沒用到的功能或者沒有走過(guò)的路徑不敢保證其沒有問(wèn)題;漏測(cè)。

模型驅(qū)動(dòng)

模型的目的就是用來(lái)為構(gòu)造測(cè)試用例而進(jìn)行的被測(cè)系統(tǒng)描述。一個(gè)測(cè)試模型可以由箭頭和節(jié)點(diǎn)組成如下圖所示:

一個(gè)箭頭,代表了一次測(cè)試動(dòng)作;一個(gè)節(jié)點(diǎn),代表一次測(cè)試驗(yàn)證

Start頂點(diǎn):? ? start頂點(diǎn)不是必需的。如果使用,則必須有1個(gè)(且只有1個(gè))頂點(diǎn)名稱為:start.

從start頂點(diǎn)出發(fā)只能有1個(gè)邊。start頂點(diǎn)不會(huì)包括在任何生成的測(cè)試路徑中,它只表示一個(gè)開始位。

頂點(diǎn)或邊的名字(name):? ? 名稱是第一個(gè)單詞,位于標(biāo)簽中邊或頂點(diǎn)的第一行。

標(biāo)簽(Lable):? ? 標(biāo)簽是點(diǎn)或邊上的所有文字描述。

守衛(wèi)(Guards)僅用于Edge:? ? 守衛(wèi)guard是一種只與邊相關(guān)的機(jī)制。他們的角色與if語(yǔ)句相同,并且使邊有資格或者沒有資格被訪問(wèn)。守衛(wèi)guard是一個(gè)用方括號(hào)括起來(lái)的JavaScript條件表達(dá)式只有一個(gè)。[loggedIn == true]上面意味著如果屬性loggedIn等于true,則邊是可訪問(wèn)的。

操作(Action)僅用于Edge:? ? 動(dòng)作是僅與邊相關(guān)聯(lián)的機(jī)制。這是我們要在模型中執(zhí)行的JavaScript代碼。它放在正斜杠之后。Action可以有多個(gè),每個(gè)語(yǔ)句必須以分號(hào)結(jié)尾。/loggedIn=false; rememberMe=true; action是動(dòng)作代碼,它的執(zhí)行結(jié)果將作為數(shù)據(jù)傳遞給守衛(wèi)。

路徑生成器:? ??生成器是決定如何遍歷模型的算法。不同的生成器將生成不同的測(cè)試序列,并且它們將以不同的方式遍歷模型。多個(gè)發(fā)生器可以串聯(lián)。

random( some stop condition(s) )

以完全隨機(jī)的方式瀏覽模型。也稱為“醉漢走路”或“隨機(jī)步行”。該算法通過(guò)隨機(jī)從頂點(diǎn)選擇出邊,并且在下一個(gè)頂點(diǎn)時(shí)重復(fù)此過(guò)程。

quick_random( some stop condition(s) )

嘗試運(yùn)行通過(guò)模型的最短路徑,但以快速的方式。這是算法的工作原理:

1.????選擇一個(gè)尚未被隨機(jī)訪問(wèn)的邊。

2.????使用Dijkstra算法選擇到該邊緣的最短路徑

3.????走該路徑,并將所有執(zhí)行的邊標(biāo)記為已訪問(wèn)。

4.????當(dāng)在步驟1中達(dá)到選定的邊緣時(shí),從頭開始,重復(fù)步驟1-> 4。

該算法對(duì)于非常大的模型工作良好,并且生成合理的短序列。缺點(diǎn)是當(dāng)與EFSM結(jié)合使用時(shí)。該算法可以選擇被守衛(wèi)block的路徑。

a_star( a stop condition that names a vertex or an edge )

將生成到特定頂點(diǎn)或邊的最短路徑。

shortest_all_paths ==> (Not released yet)

將計(jì)算并生成通過(guò)模型的最短路徑。每個(gè)邊緣的成本設(shè)置為1. 不建議使用此算法,因?yàn)閷?duì)于較大的模型,并且使用模型(EFSM)中的數(shù)據(jù),將需要相當(dāng)長(zhǎng)的時(shí)間來(lái)計(jì)算。

看起來(lái),模型驅(qū)動(dòng)的本事很大,可以從圖像中分析出邊和節(jié)點(diǎn)的關(guān)系,形成測(cè)試路線, 疊加數(shù)據(jù)形成測(cè)試用例;但是實(shí)操起來(lái),該中方式依然存在兩個(gè)方面的問(wèn)題:

1.? ? 測(cè)試人員不得不去先畫這個(gè)測(cè)試邏輯+數(shù)據(jù)的關(guān)系圖,而隨著頁(yè)面復(fù)雜度的提高,最終這個(gè)圖表也會(huì)面臨維護(hù)難度大的問(wèn)題

2.? ? 畫圖耗費(fèi)了大量的前期人力,而且測(cè)試本身沒有測(cè)重,沒有優(yōu)先級(jí),沒有重點(diǎn),不利于策略模式下的定制化測(cè)試;最終的結(jié)果是一種策略,一副邏輯圖,重復(fù)造了輪子。

監(jiān)督學(xué)習(xí)下的圖像識(shí)別分析方法

為什么使用監(jiān)督學(xué)習(xí)?因?yàn)闄C(jī)器學(xué)習(xí)的能力尚不穩(wěn)定,沒有結(jié)合已知知識(shí)體系自我思考的過(guò)程,在學(xué)習(xí)過(guò)程中時(shí)常會(huì)引入不必要的錯(cuò)誤數(shù)據(jù)(系統(tǒng)誤差數(shù)據(jù)),因此必須清晰劃定界限給予明確分類標(biāo)準(zhǔn)以減少系統(tǒng)誤差。

使用圖像識(shí)別的考慮是在不完全依賴于網(wǎng)站源碼的基礎(chǔ)上,能結(jié)合人工智能,在N個(gè)網(wǎng)頁(yè)中學(xué)習(xí)出一套模糊的知識(shí)體系,能用于第N+1個(gè)未知網(wǎng)頁(yè)的模糊匹配,得出一個(gè)概率隊(duì)列,根據(jù)設(shè)置的權(quán)重參數(shù),最后能得出準(zhǔn)確的結(jié)論;由于不同公司的前端開發(fā)風(fēng)格不同,因此無(wú)法從源碼上直接下手。

該方法面臨的挑戰(zhàn):

1.? ? 思考如何獲取到動(dòng)作邏輯

2.? ? 動(dòng)作數(shù)據(jù)從何而來(lái)

3.? ? 若以VUE為前端框架寫的站點(diǎn),源碼如何獲?。浚ㄋ伎迹篎irePath的侵入方式)

先寫到這里,等后面徹底解決上述問(wèn)題之后再來(lái)豐富,目前暫時(shí)只能突破到這里了?。g迎探討)

訓(xùn)練集合測(cè)試集
圖像處理,信息分類
數(shù)據(jù)分析舉例
最終得出匹配度最接近的單元

時(shí)隔1周,在之前遺留問(wèn)題的基礎(chǔ)上重點(diǎn)解決【動(dòng)作邏輯】和【操作數(shù)據(jù)】問(wèn)題,如今有了新的突破,先來(lái)看測(cè)試實(shí)時(shí)日志:

人工智能用例生成系統(tǒng)(功能塊)
人工智能用例生成系統(tǒng)日志(版權(quán)所有,請(qǐng)勿轉(zhuǎn)載)

通過(guò)“數(shù)據(jù)字典”和“行為軌跡”的建立,能夠1.創(chuàng)建出指導(dǎo)機(jī)器行為的一系列“動(dòng)作”(當(dāng)然,包括先后順序關(guān)系)2.綁定“數(shù)據(jù)”到動(dòng)作上(例如:一個(gè)【輸入】動(dòng)作,攜帶一個(gè)【參數(shù)】)

上述問(wèn)題解決后,系統(tǒng)全覆蓋模擬生成一系列的【測(cè)試用例】,交由“回放系統(tǒng)”進(jìn)行回放,實(shí)時(shí)記錄操作日志;注意:全程不用人寫測(cè)試用例,也不用畫邏輯圖,機(jī)器只負(fù)責(zé)學(xué)習(xí)然后測(cè)試。大家可能會(huì)問(wèn)個(gè)問(wèn)題,機(jī)器究竟學(xué)了什么?可以告訴大家,兩個(gè)方面:

1.? ? 學(xué)習(xí)頁(yè)面,機(jī)器自己熟悉新頁(yè)面的構(gòu)造(圖像識(shí)別)

2.? ? 學(xué)習(xí)過(guò)去的自動(dòng)化用例(大數(shù)據(jù)分析),這里有些許壁壘,如果沒有特定的用例中間層,這個(gè)大數(shù)據(jù)分析可能得不到想要的東西。至于什么是“特定的用例中間層”,請(qǐng)大家翻看我之前的文章【W(wǎng)eb端自動(dòng)化】所介紹的錄制工具;“中間層”由這款錄制工具得來(lái)。

接下來(lái)做什么?

準(zhǔn)備使用樸素貝葉斯機(jī)器學(xué)習(xí)對(duì)生成的這些用例逐個(gè)求一個(gè)準(zhǔn)確率,最終衡量一下這套理論的可行性!謝謝大家閱讀,歡迎討論!

附錄:

系統(tǒng)切面圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容