本發(fā)明屬于計(jì)算機(jī)自動(dòng)化評(píng)估領(lǐng)域,涉及前端評(píng)估,人工智能,自動(dòng)化測(cè)試等方面,開發(fā)人員可使用本方法自動(dòng)化的進(jìn)行前端的評(píng)估判定,本發(fā)明方法主要基于神經(jīng)網(wǎng)絡(luò)進(jìn)行實(shí)現(xiàn)。
背景技術(shù):
1.人工神經(jīng)網(wǎng)絡(luò)
人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Networks,ANN)為機(jī)器學(xué)習(xí)開發(fā)者提供了一種普遍而實(shí)用的方法從樣例中學(xué)習(xí)值為實(shí)數(shù)、離散值或者向量的函數(shù)。它本質(zhì)上是一種模仿生物神經(jīng)網(wǎng)絡(luò)特征進(jìn)行信息處理的數(shù)學(xué)模型,他強(qiáng)大的計(jì)算能力主要來(lái)自于它的并行分布式結(jié)構(gòu)和他的學(xué)習(xí)能力和泛化能力。通過(guò)不斷的研究,人工神經(jīng)網(wǎng)絡(luò)技術(shù)已在多種領(lǐng)域取得了不錯(cuò)的應(yīng)用。
神經(jīng)網(wǎng)絡(luò)模型由大量的節(jié)點(diǎn)和節(jié)點(diǎn)之間的關(guān)聯(lián)組成,節(jié)點(diǎn)亦稱神經(jīng)元。每個(gè)節(jié)點(diǎn)代表一個(gè)特定的函數(shù),稱為激勵(lì)函數(shù);每?jī)蓚€(gè)節(jié)點(diǎn)間的連接都有對(duì)應(yīng)的加權(quán)值,稱為權(quán)重,這組成了神經(jīng)網(wǎng)絡(luò)的記憶。神經(jīng)網(wǎng)絡(luò)訓(xùn)練時(shí)使用訓(xùn)練樣本的數(shù)據(jù),通過(guò)相應(yīng)的算法,比如反向傳播算法,逆?zhèn)鞑ニ惴ǖ刃UW(wǎng)絡(luò)內(nèi)各節(jié)點(diǎn)間權(quán)重的值,實(shí)現(xiàn)對(duì)目標(biāo)關(guān)系的擬合。
神經(jīng)網(wǎng)絡(luò)多為分層結(jié)構(gòu),一般的來(lái)說(shuō)分為輸入層(Input Layer),隱藏層(Hidden Layer),輸出層(Output Layer)三層。其中輸入層用于接收訓(xùn)練信息;隱藏層可以包含多層,但一般會(huì)使用一層,用于模擬生物網(wǎng)絡(luò)分析學(xué)習(xí)數(shù)據(jù)關(guān)聯(lián),該層節(jié)點(diǎn)數(shù)目越多,結(jié)構(gòu)越復(fù)雜,越容易實(shí)現(xiàn)非線性關(guān)系的模擬;輸出層反饋計(jì)算后輸出的信息。但隨著技術(shù)的發(fā)展,以上結(jié)構(gòu)可能不再適合新型神經(jīng)網(wǎng)絡(luò)。
經(jīng)過(guò)多年的發(fā)展,神經(jīng)網(wǎng)絡(luò)技術(shù)日益成熟,市場(chǎng)上有多種神經(jīng)網(wǎng)絡(luò)算法框架,比如Joone,Neuroph等,但出于版權(quán)等各方面的考慮,希望有更多的技術(shù)選擇,本發(fā)明并沒(méi)有使用已有類庫(kù),而是根據(jù)神經(jīng)網(wǎng)絡(luò)算法原理使用Java語(yǔ)言自行實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)處理。
2.現(xiàn)有WEB測(cè)試的相關(guān)構(gòu)成和問(wèn)題
現(xiàn)有WEB測(cè)試任務(wù)大致分為如下階段:研發(fā)階段測(cè)試(接口測(cè)試、用戶界面測(cè)試),集成測(cè)試階段測(cè)試(業(yè)務(wù)流程測(cè)試),以及上線交付前測(cè)試(兼容性測(cè)試、安全測(cè)試)。
●接口測(cè)試:
接口測(cè)試是測(cè)試WEB上的數(shù)據(jù)接口(多為AJAX調(diào)用)對(duì)于給定的輸入?yún)?shù)和結(jié)果返回是否與預(yù)期的一致,此類測(cè)試一般為后端工程師編碼時(shí)所完成的單元測(cè)試用例所覆蓋,是進(jìn)入集成測(cè)試階段的前置條件。
一般會(huì)使用JUnit這類單元測(cè)試工具編寫和運(yùn)行,也可以使用POSTMAN等URL測(cè)試工具執(zhí)行。
接口測(cè)試的主要問(wèn)題在于,這類測(cè)試用例是后端工程師所編寫和直接使用的,而通常情況下,因?yàn)楦鞣N經(jīng)濟(jì)或者資源原因?qū)е卵邪l(fā)人員開發(fā)周期一般都較為緊張,所以往往只有時(shí)間完成比較基本的測(cè)試用例編寫,一般是正確數(shù)據(jù)和一些邊界條件,也有的項(xiàng)目完全依賴集成測(cè)試,自己不做單元測(cè)試,對(duì)于一般情況以及多個(gè)接口在業(yè)務(wù)中實(shí)際組合產(chǎn)生的情況一般不會(huì)編寫測(cè)試用例。
●用戶界面測(cè)試:
用戶界面測(cè)試用于測(cè)試WEB應(yīng)用單個(gè)界面顯示效果、用戶操作功能等,此類測(cè)試一般為前端工程師在頁(yè)面由美工圖轉(zhuǎn)置完成后,接入對(duì)應(yīng)頁(yè)面的數(shù)據(jù)接口后進(jìn)行,測(cè)試進(jìn)入集成測(cè)試階段的前置條件。
大量的用戶界面測(cè)試基于瀏覽器本身進(jìn)行,前端工程師打開對(duì)應(yīng)制成WEB頁(yè)面并觀察和原稿區(qū)別,然后再逐一觸發(fā)動(dòng)作,驗(yàn)證是否與期望一致。這種測(cè)試的問(wèn)題是難以自動(dòng)化,每一次改動(dòng)頁(yè)面或者是影響到頁(yè)面的組件都必須手工重新執(zhí)行一次,數(shù)量大時(shí)難免遺漏出錯(cuò)。
當(dāng)然也有類似于Selenium(PhantomJS或SlimerJS)這樣的測(cè)試框架,可以用其它編程語(yǔ)言(Java,C#,Ruby,Python)手工編寫前端測(cè)試用例,從而實(shí)現(xiàn)測(cè)試用例可重用,但是這里有個(gè)問(wèn)題為了與頁(yè)面中的可交互對(duì)象精確交互,測(cè)試工程師必須指定HTML元素選擇器以選中目標(biāo)交互對(duì)象,例如單擊某個(gè)按鈕同意合同約定后,才能選擇跳轉(zhuǎn)下一頁(yè),這樣就使得編寫測(cè)試用例變得更為復(fù)雜了。
為了避免以上問(wèn)題的出現(xiàn),以上的測(cè)試框架也可以把執(zhí)行到一定階段的頁(yè)面進(jìn)行截圖,然后再基于圖片比較來(lái)判斷變化率。所以這里的問(wèn)題是如果要精確判斷頁(yè)面正確性只能通過(guò)判斷HTLM元素構(gòu)成與預(yù)期是否一致,這樣有些太難了?;蛘呤潜容^之前人工認(rèn)定的正確截圖和本次截圖的差異以此判斷是否測(cè)試通過(guò),但是這樣又是不夠精確。
●業(yè)務(wù)流程測(cè)試:
業(yè)務(wù)流程測(cè)試也是WEB上的功能性測(cè)試,測(cè)試完整WEB應(yīng)用的多個(gè)業(yè)務(wù)需求是否能夠順暢完成,度量能達(dá)到多少業(yè)務(wù)目標(biāo),是集成測(cè)試階段的主要研究目標(biāo)。
業(yè)務(wù)流程測(cè)試總體方式與用戶界面測(cè)試一致,只是測(cè)試用例會(huì)跨越多個(gè)頁(yè)面。顯得更加復(fù)雜。因此以上的測(cè)試工具也都可以在此使用,不過(guò)編寫測(cè)試用例的成本隨著業(yè)務(wù)復(fù)雜度線性倍增。
●兼容性測(cè)試:
兼容性測(cè)試是測(cè)試能夠達(dá)到業(yè)務(wù)流程的系統(tǒng)是否能在不同的瀏覽器環(huán)境下正常的提供服務(wù)。
兼容性測(cè)試目前主要是指在更多的瀏覽器上執(zhí)行業(yè)務(wù),而后檢查結(jié)果是否與之前業(yè)務(wù)流程結(jié)果一致,界面顯示是否正常。將這部分業(yè)務(wù)自動(dòng)化主要是考慮用Selenium這樣的測(cè)試框架,通過(guò)WebDriver(可以使得測(cè)試用例在IE,Firefox,Chrome平臺(tái)運(yùn)行),問(wèn)題是為了實(shí)現(xiàn)自動(dòng)化,就必須像用戶界面測(cè)試中所描述的一樣,要寫大量的選擇HTML元素的代碼,實(shí)現(xiàn)在不同瀏覽器中執(zhí)行業(yè)務(wù)流程測(cè)試。
●安全測(cè)試:
安全測(cè)試是測(cè)試滿足業(yè)務(wù)需求,兼容性需求的系統(tǒng)是否有安全漏洞,是否可能造成信息泄露,管理權(quán)被奪取等問(wèn)題。
基本的安全性測(cè)試可以使用瀏覽器和POSTMAN工具模擬異常的請(qǐng)求給通過(guò)接口測(cè)試的接口完成。較為專業(yè)的安全測(cè)試可能要考慮使用SqlMap這類專業(yè)的SQL注入檢測(cè)工具進(jìn)行。這一塊的問(wèn)題類似于接口測(cè)試,但除了時(shí)間受限不會(huì)做很多以外,很多研發(fā)人員對(duì)于安全的問(wèn)題理解是安全測(cè)試的真正難點(diǎn)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明主要解決的問(wèn)題:目前互聯(lián)網(wǎng)企業(yè)普遍缺乏前端開發(fā)人員,相應(yīng)的,有足夠經(jīng)驗(yàn)可以進(jìn)行前端評(píng)估的開發(fā)工作者更為匱乏,少數(shù)開發(fā)人員承擔(dān)了大量繁重且單一的評(píng)估工作,這給他們帶來(lái)了較大的工作壓力;并且長(zhǎng)時(shí)間的工作勢(shì)必會(huì)降低評(píng)審的效率與質(zhì)量,影響之后的產(chǎn)品交付等環(huán)節(jié)。然而由于測(cè)試需求和方案復(fù)雜等原因,相關(guān)實(shí)現(xiàn)自動(dòng)化評(píng)估領(lǐng)域的研究較少,可行性不高,大部分互聯(lián)網(wǎng)企業(yè)仍在使用傳統(tǒng)的人工評(píng)審方式進(jìn)行前端評(píng)估。同時(shí),程序員/測(cè)試工程師、普通用戶的測(cè)試方式是不同的。程序員/測(cè)試工程師的測(cè)試方式主要是將自己所負(fù)責(zé)的功能模塊,按照設(shè)計(jì)流程逐一進(jìn)行觸發(fā),并驗(yàn)證響應(yīng)是否與預(yù)期一致。而用戶的習(xí)慣則是就頁(yè)面上感興趣的內(nèi)容進(jìn)行觸發(fā)和測(cè)試。雖然,經(jīng)過(guò)程序員的測(cè)試可以保證單個(gè)使用網(wǎng)站時(shí)的功能和性能需求得到滿足,但是,因?yàn)槿鄙僭诠_發(fā)布前的大批量普通用戶測(cè)試,將會(huì)給在生產(chǎn)狀態(tài)的網(wǎng)站留有較大的非功能性風(fēng)險(xiǎn),而這樣的測(cè)試需求是不可以被現(xiàn)有的自動(dòng)化測(cè)試工具所完成,比如,基于圖像識(shí)別、鍵盤鼠標(biāo)操作錄像的方式等,因此,本發(fā)明就此提出一種新的基于神經(jīng)網(wǎng)絡(luò)的前端自動(dòng)化評(píng)估方法。
本發(fā)明的技術(shù)方案為:一種基于神經(jīng)網(wǎng)絡(luò)的前端自動(dòng)化評(píng)估方法,使用神經(jīng)網(wǎng)絡(luò)算法對(duì)搜集來(lái)的數(shù)據(jù)進(jìn)行分析,計(jì)算出開發(fā)人員在進(jìn)行前端評(píng)估時(shí)可能注意的位置,這些位置為存在設(shè)計(jì)缺陷需要重新設(shè)計(jì)的部分,將開發(fā)人員的評(píng)估經(jīng)驗(yàn)以神經(jīng)網(wǎng)絡(luò)為介質(zhì)存儲(chǔ)下來(lái),并利用存儲(chǔ)的數(shù)據(jù)模擬開發(fā)人員進(jìn)行界面的測(cè)試,實(shí)現(xiàn)自動(dòng)化評(píng)估,包括兩個(gè)階段:
1).數(shù)據(jù)搜集處理階段:
搜集前端開發(fā)人員進(jìn)行前端評(píng)估時(shí)候的瀏覽動(dòng)作數(shù)據(jù),瀏覽動(dòng)作數(shù)據(jù)包括鼠標(biāo)動(dòng)作,根據(jù)這些數(shù)據(jù)分析出搜集數(shù)據(jù)時(shí)開發(fā)人員注意力集中位置,并將相應(yīng)截圖和計(jì)算結(jié)果保存,為下一步神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)做準(zhǔn)備;
其中將屏幕從水平和豎直方向均勻分割成多個(gè)區(qū)域,開發(fā)人員在訓(xùn)練時(shí)鼠標(biāo)在感興趣的區(qū)域停留,通過(guò)鼠標(biāo)在某一位置的停留時(shí)間標(biāo)注出開發(fā)人員注意力集中位置;
2).神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)階段:
利用神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)開發(fā)人員進(jìn)行前端評(píng)估時(shí)的經(jīng)驗(yàn)與習(xí)慣操作,之后使用訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)模擬開發(fā)人員進(jìn)行界面評(píng)估,完成缺陷位置預(yù)測(cè)的業(yè)務(wù)需求,訓(xùn)練時(shí)以相應(yīng)前端截圖和開發(fā)人員注意力集中位置作為訓(xùn)練集,當(dāng)網(wǎng)絡(luò)訓(xùn)練完畢后,將待評(píng)估的界面作為輸入,利用神經(jīng)網(wǎng)絡(luò)輸出開發(fā)人員可能的注意力集中位置。
數(shù)據(jù)搜集處理階段的數(shù)據(jù)搜集具體為:
通過(guò)監(jiān)聽(tīng)鼠標(biāo)移動(dòng)情況搜集開發(fā)人員的鼠標(biāo)的軌跡和停留時(shí)間信息,采用Chrome瀏覽器的監(jiān)聽(tīng)模塊content script中的相關(guān)代碼實(shí)現(xiàn),利用Javascript提供的監(jiān)聽(tīng)方法監(jiān)聽(tīng)鼠標(biāo)移動(dòng)情況,每當(dāng)開發(fā)人員鼠標(biāo)移動(dòng)時(shí)便進(jìn)行數(shù)據(jù)記錄,搜集數(shù)據(jù)時(shí)以屏幕為單位,即記錄當(dāng)前瀏覽器界面的可視內(nèi)容和開發(fā)人員在這片區(qū)域上的鼠標(biāo)操作,當(dāng)開發(fā)人員進(jìn)行鼠標(biāo)滾動(dòng)、縮放等影響屏幕顯示內(nèi)容的操作時(shí)便意味著此界面的操作收集完畢,監(jiān)聽(tīng)模塊便將數(shù)據(jù)交給搜集段后臺(tái)模塊background,搜集段后臺(tái)模塊將搜集到的信息與對(duì)應(yīng)界面截圖一起使用JQuery提供的AJAX組件進(jìn)行數(shù)據(jù)上傳,保存用于后續(xù)數(shù)據(jù)分析,并進(jìn)行數(shù)據(jù)清理準(zhǔn)備下一輪監(jiān)聽(tīng)。
進(jìn)一步的,同一時(shí)間只搜集當(dāng)前瀏覽界面鼠標(biāo)移動(dòng)數(shù)據(jù),非當(dāng)前界面的數(shù)據(jù)既不搜集,也不保留,搜集段后臺(tái)模塊在頁(yè)面刷新或者頁(yè)面創(chuàng)建時(shí)獲取當(dāng)前頁(yè)面的標(biāo)簽頁(yè)id,通過(guò)id命令當(dāng)前頁(yè)面監(jiān)聽(tīng)模塊進(jìn)行數(shù)據(jù)搜集操作,頁(yè)面切換時(shí)搜集段后臺(tái)模塊將當(dāng)前數(shù)據(jù)上傳,如果數(shù)據(jù)不夠則舍棄,保證操作數(shù)據(jù)和頁(yè)面截圖的匹配。
服務(wù)器收到收集段數(shù)據(jù)后,開始分析開發(fā)人員在相應(yīng)界面的注意力集中位置:設(shè)鼠標(biāo)所在位置就是開發(fā)人員的注意力集中位置,首先,遍歷所有的鼠標(biāo)位置數(shù)據(jù),根據(jù)鼠標(biāo)停留位置和停留時(shí)間計(jì)算界面各像素點(diǎn)權(quán)重,鼠標(biāo)在某點(diǎn)停留時(shí)間越長(zhǎng),則該點(diǎn)及附近的像素點(diǎn)的權(quán)重越高;隨后將頁(yè)面分割為多個(gè)區(qū)域,計(jì)算得出權(quán)重最高的區(qū)域,認(rèn)定這就是測(cè)試時(shí)開發(fā)人員的注意力集中區(qū)域。計(jì)算出注意力集中區(qū)域后,將結(jié)果和壓縮后的圖像存儲(chǔ),準(zhǔn)備接下來(lái)的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)。
作為優(yōu)選實(shí)施方式,本發(fā)明使用Java實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò),采用前饋神經(jīng)網(wǎng)絡(luò)類型,包括卷積神經(jīng)網(wǎng)絡(luò)和BP神經(jīng)網(wǎng)絡(luò)。
本發(fā)明將神經(jīng)網(wǎng)絡(luò)方法運(yùn)用于大規(guī)模WEB用戶行為模擬的過(guò)程中,有效的降低了采集訓(xùn)練數(shù)據(jù)的成本、提高了訓(xùn)練的效率,和保證了用戶行為訓(xùn)練成果的復(fù)用性:
1).本發(fā)明提供基于現(xiàn)有瀏覽器運(yùn)行的JavaScript插件,可以在不修改WEB站點(diǎn)原有實(shí)現(xiàn)的基礎(chǔ)上實(shí)現(xiàn)功能。
2).本發(fā)明通過(guò)神經(jīng)網(wǎng)絡(luò)方法建立用戶操作與被測(cè)試界面之間的對(duì)應(yīng)關(guān)系時(shí)使用更粗的捕獲區(qū)域來(lái)代替像素有效的減少了訓(xùn)練樣本集數(shù)量,提高了訓(xùn)練效率;
4).本發(fā)明的最終成果可以由支持發(fā)送鼠標(biāo)/觸摸代碼觸發(fā)的定制瀏覽器執(zhí)行,同時(shí)支持多個(gè)測(cè)試任務(wù)/多個(gè)測(cè)試用戶訓(xùn)練集并發(fā)執(zhí)行,由于是基于神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn),在新的頁(yè)面上應(yīng)用時(shí)不需要重新進(jìn)行調(diào)整就可以直接進(jìn)行,確保用戶行為訓(xùn)練成果的復(fù)用性。
附圖說(shuō)明
圖1為本發(fā)明方法的模塊結(jié)構(gòu)示意圖。
圖2為本發(fā)明方法中數(shù)據(jù)搜集用例時(shí)序圖。
圖3為本發(fā)明方法的數(shù)據(jù)搜集方法示意圖。
圖4為神經(jīng)元示意圖。
圖5為本發(fā)明方法前饋神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)示意圖。
圖6為BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)類圖。
圖7為SGD時(shí)序圖。
圖8為卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)類圖。
具體實(shí)施方式
本發(fā)明的目標(biāo)是:自動(dòng)化地進(jìn)行前端評(píng)估,判斷前端界面可能存在缺陷的位置以及驗(yàn)證界面開發(fā)是否符合開發(fā)要求。發(fā)明的大概實(shí)現(xiàn)是:使用數(shù)據(jù)搜集工具搜集開發(fā)人員進(jìn)行前端瀏覽時(shí)的動(dòng)作數(shù)據(jù),之后使用神經(jīng)網(wǎng)絡(luò)算法對(duì)搜集到的數(shù)據(jù)進(jìn)行分析學(xué)習(xí),最終使用訓(xùn)練完畢的神經(jīng)網(wǎng)絡(luò)模擬開發(fā)人員進(jìn)行自動(dòng)化前端評(píng)估。
本發(fā)明提出了一種基于神經(jīng)網(wǎng)絡(luò)的前端自動(dòng)化評(píng)估方法,使用神經(jīng)網(wǎng)絡(luò)算法對(duì)搜集來(lái)的數(shù)據(jù)進(jìn)行分析,模擬開發(fā)人員對(duì)前端界面的評(píng)估,實(shí)現(xiàn)自動(dòng)化評(píng)估,包括兩個(gè)階段:
1).數(shù)據(jù)搜集處理階段:
搜集開發(fā)人員日常進(jìn)行前端評(píng)估時(shí)候的瀏覽動(dòng)作數(shù)據(jù),瀏覽動(dòng)作數(shù)據(jù)包括鼠標(biāo)動(dòng)作,根據(jù)這些數(shù)據(jù)分析出搜集數(shù)據(jù)時(shí)開發(fā)人員注意力集中位置,并將相應(yīng)截圖和計(jì)算結(jié)果保存,為下一步神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)做準(zhǔn)備;
其中將屏幕從水平和豎直方向均勻分割成多個(gè)區(qū)域,要求開發(fā)人員在訓(xùn)練時(shí)用鼠標(biāo)標(biāo)注出他們感興趣的內(nèi)容,并讓鼠標(biāo)在感興趣的區(qū)域較長(zhǎng)時(shí)間的停留,通過(guò)鼠標(biāo)在某一位置的停留時(shí)間標(biāo)注出開發(fā)人員注意力集中位置;
2).神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)階段:
利用神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)開發(fā)人員進(jìn)行前端評(píng)估時(shí)的經(jīng)驗(yàn)與習(xí)慣操作,之后使用訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)模擬開發(fā)人員進(jìn)行界面評(píng)估,完成缺陷位置預(yù)測(cè)的業(yè)務(wù)需求,訓(xùn)練時(shí)以相應(yīng)前端截圖和開發(fā)人員注意力集中位置作為訓(xùn)練集,當(dāng)網(wǎng)絡(luò)訓(xùn)練完畢后,將待評(píng)估的界面作為輸入,利用神經(jīng)網(wǎng)絡(luò)輸出開發(fā)人員可能的注意力集中位置,
其中在神經(jīng)網(wǎng)絡(luò)的類型上,使用卷積神經(jīng)網(wǎng)絡(luò)。
下面來(lái)說(shuō)明本發(fā)明的具體實(shí)施,以下說(shuō)明僅用于更加清楚地描述本發(fā)明的技術(shù)方案,不能以此限制本發(fā)明的保護(hù)范圍。本發(fā)明方法的實(shí)現(xiàn)使用了管道-過(guò)濾器結(jié)構(gòu),分為數(shù)據(jù)搜集模塊,數(shù)據(jù)分析模塊和神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)模塊,數(shù)據(jù)搜集模塊和數(shù)據(jù)分析模塊對(duì)應(yīng)所述的數(shù)據(jù)搜集處理階段的工作,而神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)模塊則負(fù)責(zé)神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)階段的工作任務(wù)。系統(tǒng)結(jié)構(gòu)如圖1所示,下文將依次介紹這三個(gè)模塊的關(guān)鍵實(shí)現(xiàn):
數(shù)據(jù)搜集模塊
數(shù)據(jù)搜集模塊的關(guān)鍵用例便是數(shù)據(jù)搜集。數(shù)據(jù)搜集用例的主要內(nèi)容是搜集開發(fā)人員在進(jìn)行評(píng)估操作時(shí)的動(dòng)作信息,主要是鼠標(biāo)動(dòng)作,即搜集開發(fā)人員的鼠標(biāo)的軌跡和停留時(shí)間信息。當(dāng)信息搜集完畢后,搜集到的信息將與界面截圖一起傳到數(shù)據(jù)分析模塊。本模塊中數(shù)據(jù)搜集部分主要由監(jiān)聽(tīng)模塊(content_script)中的相關(guān)代碼實(shí)現(xiàn),我們利用Javascript提供的監(jiān)聽(tīng)方法監(jiān)聽(tīng)鼠標(biāo)移動(dòng)情況,每當(dāng)開發(fā)人員鼠標(biāo)移動(dòng)時(shí)便進(jìn)行數(shù)據(jù)記錄。當(dāng)開發(fā)人員進(jìn)行鼠標(biāo)滾動(dòng)等操作時(shí)便意味著此界面的操作收集完畢,監(jiān)聽(tīng)模塊便將數(shù)據(jù)交給搜集段后臺(tái)模塊(background),搜集段后臺(tái)模塊利用ChromeAPI進(jìn)行截圖,并使用JQuery提供的AJAX組件進(jìn)行數(shù)據(jù)上傳。
數(shù)據(jù)搜集模塊在搜集數(shù)據(jù)時(shí)以屏幕為單位,即我們記錄當(dāng)前瀏覽器界面的可視內(nèi)容和開發(fā)人員在這片區(qū)域上的鼠標(biāo)操作。當(dāng)開發(fā)人員在進(jìn)行一定操作后,插件根據(jù)定義的規(guī)則判定需要進(jìn)行數(shù)據(jù)記錄,并通知搜集段后臺(tái)模塊進(jìn)行屏幕截取;當(dāng)檢測(cè)到滾動(dòng)、縮放等影響屏幕顯示內(nèi)容的操作時(shí),插件便會(huì)上傳數(shù)據(jù),并進(jìn)行數(shù)據(jù)清理準(zhǔn)備下一輪監(jiān)聽(tīng)。
除了滾動(dòng)操作,當(dāng)檢測(cè)到標(biāo)簽頁(yè)切換或者刷新動(dòng)作時(shí)也會(huì)進(jìn)行數(shù)據(jù)上傳。這是由于搜集段后臺(tái)模塊是由系統(tǒng)維護(hù)的,是單例的。為了防止多個(gè)監(jiān)聽(tīng)模塊搜集的數(shù)據(jù)和頁(yè)面截圖不匹配,我們采取同一時(shí)間只搜集當(dāng)前瀏覽界面鼠標(biāo)移動(dòng)數(shù)據(jù)的策略,非當(dāng)前界面的數(shù)據(jù)既不搜集,也不保留。搜集段后臺(tái)模塊在頁(yè)面刷新或者頁(yè)面創(chuàng)建時(shí)獲取當(dāng)前頁(yè)面的標(biāo)簽頁(yè)id,通過(guò)id命令當(dāng)前頁(yè)面監(jiān)聽(tīng)模塊進(jìn)行數(shù)據(jù)搜集操作,頁(yè)面切換時(shí)搜集段后臺(tái)模塊會(huì)將當(dāng)前數(shù)據(jù)上傳,如果數(shù)據(jù)不夠則舍棄,保證操作數(shù)據(jù)和頁(yè)面截圖的匹配。
下面簡(jiǎn)要描述數(shù)據(jù)搜集的動(dòng)作序列,時(shí)序圖如圖2所示
主流:
1).開發(fā)人員開啟新標(biāo)簽頁(yè),或者通過(guò)輸入網(wǎng)址或點(diǎn)擊超鏈接跳轉(zhuǎn)到新的頁(yè)面;
2).Chrome檢測(cè)到相應(yīng)操作,并調(diào)用搜集段后臺(tái)模塊中注冊(cè)的監(jiān)聽(tīng)方法tabChange(監(jiān)聽(tīng)標(biāo)簽頁(yè)變更)或tabUpdate(監(jiān)聽(tīng)頁(yè)面刷新).;
3).搜集段后臺(tái)模塊通過(guò)Chrome提供的信息傳遞方法向當(dāng)前標(biāo)簽頁(yè)傳遞開啟監(jiān)聽(tīng)信號(hào);
4).監(jiān)聽(tīng)模塊接收到相關(guān)信號(hào)后開啟鼠標(biāo)事件監(jiān)聽(tīng),記錄鼠標(biāo)位置信息和停留時(shí)間信息;
5).監(jiān)聽(tīng)模塊搜集到足夠的數(shù)據(jù)后認(rèn)定本頁(yè)面數(shù)據(jù)有意義,要求搜集段后臺(tái)模塊進(jìn)行頁(yè)面截圖;
6).監(jiān)聽(tīng)模塊繼續(xù)監(jiān)聽(tīng)開發(fā)人員鼠標(biāo)操作,直到檢測(cè)到頁(yè)面滾動(dòng)操作或頁(yè)面縮放操作;
7).監(jiān)聽(tīng)模塊將搜集到的數(shù)據(jù)傳送到搜集段后臺(tái)模塊;
8).搜集段后臺(tái)模塊將鼠標(biāo)數(shù)據(jù)與編碼完畢的屏幕截圖一起整合發(fā)送到數(shù)據(jù)分析模塊。
異常流:
5a).開發(fā)人員在插件沒(méi)有搜集足夠數(shù)據(jù)的情況下進(jìn)行進(jìn)行窗口縮放或頁(yè)面滾動(dòng)等影響頁(yè)面顯示內(nèi)容操作;
6).停止本次監(jiān)聽(tīng),清理數(shù)據(jù),從4)開始進(jìn)行下一次監(jiān)聽(tīng)。
數(shù)據(jù)分析模塊
數(shù)據(jù)分析的關(guān)鍵用例是分析開發(fā)人員在相應(yīng)界面的注意力集中位置。我們假定鼠標(biāo)所在位置就是開發(fā)人員的注意力集中位置,我們?cè)O(shè)計(jì)了以下算法計(jì)算注意力集中位置:首先,算法遍歷所有的鼠標(biāo)位置數(shù)據(jù),根據(jù)鼠標(biāo)停留位置和停留時(shí)間計(jì)算界面各像素點(diǎn)權(quán)重,鼠標(biāo)在某點(diǎn)停留時(shí)間越長(zhǎng),則該點(diǎn)及附近的像素點(diǎn)的權(quán)重越高;隨后我們將頁(yè)面分割為多個(gè)區(qū)域,計(jì)算得出權(quán)重最高的區(qū)域,我們認(rèn)定這就是測(cè)試時(shí)測(cè)試人員的注意力集中區(qū)域。計(jì)算出注意力集中區(qū)域后,我們將結(jié)果和壓縮后的圖像存儲(chǔ),準(zhǔn)備接下來(lái)的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)。
在處理數(shù)據(jù)時(shí),我們根據(jù)屏幕截圖的大小構(gòu)建等大的數(shù)組,記錄屏幕上每個(gè)像素點(diǎn)的權(quán)重,之后依次處理接收到的鼠標(biāo)信息。我們假定鼠標(biāo)所在位置便是當(dāng)時(shí)開發(fā)人員的注意力集中位置,但這個(gè)位置通常是有一小部分偏差的,因此鼠標(biāo)位置記錄會(huì)增加鼠標(biāo)所在位置和距離所在位置較近的像素點(diǎn)的權(quán)重。我們?cè)O(shè)計(jì)的算法是增加距離鼠標(biāo)所在位置一定距離內(nèi)所有像素的權(quán)重,增加的大小由離鼠標(biāo)精確位置的距離而定。因?yàn)橛?jì)算精確距離需要消耗較大的計(jì)算資源,我們使用近似替代的方式,如圖3所示,將像素點(diǎn)與鼠標(biāo)位置的水平、豎直距離之和視為與鼠標(biāo)位置的距離,此外考慮到鼠標(biāo)停留時(shí)間的影響,因此我們將上述兩個(gè)變量相乘作為最終的權(quán)重增量,具體描述如下:
1).定義輻射范圍l;
2).處理數(shù)據(jù):假定接收到如下的一條數(shù)據(jù):鼠標(biāo)在屏幕上(x,y)點(diǎn)停留了時(shí)間t;
3).設(shè)定權(quán)重更新范圍:更新范圍為橫坐標(biāo)在[x-l,x+l],縱坐標(biāo)在[y-l,y+l]內(nèi)的所有像素點(diǎn);
4).更新更新范圍內(nèi)點(diǎn)的權(quán)重:對(duì)于該數(shù)據(jù)輻射范圍內(nèi)的點(diǎn)(m,n),該點(diǎn)的權(quán)重的增量為(|m-x|+|n-y|)*t。
神經(jīng)網(wǎng)絡(luò)分析模塊
這一部分我們主要用Java實(shí)現(xiàn)了卷積神經(jīng)網(wǎng)絡(luò),并基于這種神經(jīng)網(wǎng)絡(luò)模型搭建適當(dāng)?shù)纳窠?jīng)網(wǎng)絡(luò)。然后使用我們采集到的訓(xùn)練集對(duì)神經(jīng)網(wǎng)絡(luò)中的參數(shù)進(jìn)行訓(xùn)練,最終使用訓(xùn)練好的參數(shù)完成對(duì)界面的自動(dòng)化評(píng)估。
前面已經(jīng)提及過(guò),神經(jīng)網(wǎng)絡(luò)是通過(guò)大量神經(jīng)元相互構(gòu)連而成。如圖4所示,神經(jīng)元接受一組輸入,與對(duì)應(yīng)的權(quán)值w加權(quán)求和后加上一個(gè)偏置項(xiàng)b最后經(jīng)過(guò)激活函數(shù)激活后輸出。其中神經(jīng)元的權(quán)值w和偏置值b為可以訓(xùn)練的參數(shù),相當(dāng)于神經(jīng)元的記憶,而激活函數(shù)則是為了引入非線性因素,彌補(bǔ)線性模型表達(dá)能力差的缺陷。
神經(jīng)網(wǎng)絡(luò)根據(jù)神經(jīng)元的互聯(lián)方式一般可以分為3種,分別為前饋神經(jīng)網(wǎng)絡(luò)、反饋神經(jīng)網(wǎng)絡(luò)以及自組織網(wǎng)絡(luò),我們本次實(shí)現(xiàn)的兩種神經(jīng)網(wǎng)絡(luò)模型都屬于前饋神經(jīng)網(wǎng)絡(luò)的類別。如圖5所示,前饋神經(jīng)網(wǎng)絡(luò)包括一個(gè)輸入層、一個(gè)輸出層和若干隱藏層,其中除輸入層除外,其余各層的每個(gè)神經(jīng)元都接受前一層的所有神經(jīng)元的輸出作為輸入,經(jīng)行加權(quán)求和激活后輸出給下一層,如此循環(huán)直到輸出最后結(jié)果。前饋型神經(jīng)網(wǎng)絡(luò)的特點(diǎn)是數(shù)據(jù)在網(wǎng)絡(luò)中傳送過(guò)程中只能向前傳送,直到達(dá)到輸出層,層間沒(méi)有向后的反饋信號(hào)。
圖6所示的是BP神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)類圖,我們選擇以神經(jīng)網(wǎng)絡(luò)中的“一層”為基礎(chǔ)對(duì)象來(lái)構(gòu)建我們的BP神經(jīng)網(wǎng)絡(luò)。抽象類Layer為BP神經(jīng)網(wǎng)絡(luò)中3種層模型:輸入層(InputLayer)、隱藏層(HiddenLayer)和輸出層(OutputLayer)的父類,Layer類定義了一組參數(shù),其中weights和biases兩個(gè)參數(shù)是對(duì)Layer中所有的神經(jīng)元中參數(shù)的抽象,使用矩陣(DMatrix:double類型矩陣)來(lái)表示所有神經(jīng)元的連接權(quán)值和偏置,這使得神經(jīng)網(wǎng)絡(luò)的所有操作都是以矩陣運(yùn)算為基礎(chǔ),包括對(duì)輸入輸出的矩陣化規(guī)定。另外,抽象類Layer還規(guī)定了四個(gè)抽象方法,分別是init(用于該層網(wǎng)絡(luò)的參數(shù)初始化操作)、feedforward(通過(guò)前向傳遞來(lái)結(jié)算每層的激活值a)、backpropagation(通過(guò)誤差逆向傳播計(jì)算每層網(wǎng)絡(luò)的誤差)、update(通過(guò)每層網(wǎng)絡(luò)的誤差來(lái)更新網(wǎng)絡(luò)中的權(quán)值和偏置值)??紤]到激活函數(shù)(activation function)和代價(jià)函數(shù)(cost function)可能會(huì)有多種實(shí)現(xiàn),我們抽象出了相應(yīng)的接口:ActivationFunction和CostFunction,并將給出多種實(shí)現(xiàn)。而類BPNetwork是對(duì)BP神經(jīng)網(wǎng)絡(luò)的高層抽象,負(fù)責(zé)接收訓(xùn)練集和測(cè)試集以及一組超參數(shù)(super parameter)來(lái)訓(xùn)練網(wǎng)絡(luò),其中accuracy方法是計(jì)算指定樣本集的識(shí)別準(zhǔn)確率,recognize是識(shí)別具體的驗(yàn)證碼輸入,而SGD是最重要的方法,通過(guò)隨機(jī)梯度下降(stochastic gradient descent)來(lái)訓(xùn)練BP神經(jīng)網(wǎng)絡(luò),具體的訓(xùn)練過(guò)程如圖7所示。
圖8所示的是卷積神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)類圖,卷積神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)和上文的BP神經(jīng)網(wǎng)絡(luò)在整體架構(gòu)上是一致的。但是相比于BP神經(jīng)網(wǎng)絡(luò),卷積神經(jīng)網(wǎng)絡(luò)以特征圖(feature map)作為處理的對(duì)象,且由于多核卷積的存在可能會(huì)輸出多個(gè)特征圖。如果把每個(gè)特征圖用矩陣表示的話,卷積神經(jīng)網(wǎng)絡(luò)可能需要處理多個(gè)矩陣,故而抽象類Layer中多出了兩個(gè)以矩陣數(shù)組為輸入的接口。另外,卷積神經(jīng)網(wǎng)絡(luò)多出了卷積層(ConvLayer)、采樣層(MaxPoolLayer)以及全連接層(FullConLayer)的定義。關(guān)于卷積神經(jīng)網(wǎng)絡(luò)的抽象(ConvNetwork)以及訓(xùn)練過(guò)程的設(shè)計(jì)和BP神經(jīng)網(wǎng)絡(luò)基本一致,只是具體實(shí)現(xiàn)存在區(qū)別而已。
我們?cè)趯?shí)現(xiàn)好神經(jīng)網(wǎng)絡(luò)模型后就可以使用神經(jīng)網(wǎng)絡(luò)來(lái)進(jìn)行對(duì)前端頁(yè)面的自動(dòng)化評(píng)估。在使用神經(jīng)網(wǎng)絡(luò)對(duì)訓(xùn)練集進(jìn)行訓(xùn)練時(shí),有以下幾點(diǎn)需要注意:
1).BP神經(jīng)網(wǎng)絡(luò)中隱藏層的數(shù)目并不是越多越好,一般單隱層BP神經(jīng)網(wǎng)絡(luò)就已經(jīng)具有很好的學(xué)習(xí)能力。
2).我們采用BP算法(誤差逆?zhèn)鞑ニ惴?來(lái)實(shí)現(xiàn)對(duì)神經(jīng)網(wǎng)絡(luò)中參數(shù)的調(diào)整,在使用BP算法時(shí),我們需要設(shè)置參數(shù)每次調(diào)整的速度,即學(xué)習(xí)速度lr(learning rate)。lr一般設(shè)置為0.01到0.1之間,并需要根據(jù)訓(xùn)練過(guò)程逐步調(diào)整。
3).卷積神經(jīng)網(wǎng)絡(luò)相比BP神經(jīng)網(wǎng)絡(luò)具有更大的學(xué)習(xí)能力,但是卷積神經(jīng)網(wǎng)絡(luò)一般層數(shù)較多并且卷積過(guò)程比較復(fù)雜,需要更大的計(jì)算開銷。
以上僅是本發(fā)明的優(yōu)選實(shí)施方案,在不脫離本發(fā)明技術(shù)原理的前提下進(jìn)行的改進(jìn)與變種應(yīng)當(dāng)也視為本發(fā)明的保護(hù)范圍。