1. 工具產(chǎn)生的背景
導(dǎo)航對(duì)人們的生活起著越來(lái)越重要的作用,由于公司一直在做導(dǎo)航產(chǎn)品,所以為了從深度上保證產(chǎn)品的質(zhì)量(已經(jīng)通過(guò)大量的case從廣度上來(lái)保證產(chǎn)品質(zhì)量),做為Routing的測(cè)試負(fù)責(zé)人,我對(duì)導(dǎo)航算法進(jìn)行了深入的研究。
在做Map Data的Regression時(shí),我們是基于導(dǎo)航對(duì)底層的數(shù)據(jù)進(jìn)行測(cè)試,而MapData是經(jīng)過(guò)Tools Team 轉(zhuǎn)換的,所以原始數(shù)據(jù)的改動(dòng)、Tools的改動(dòng)都會(huì)引起導(dǎo)航的變化,而這兩層對(duì)從上層測(cè)試的我們來(lái)說(shuō)都是blackbox。測(cè)試時(shí),用自動(dòng)化工具找出difference很容易,但check起來(lái)相當(dāng)困難,因?yàn)槲覀儾还庑枰缆肪€變了,而且需要知道它是怎么變的,否則你不知道你的模型是不斷優(yōu)化的。當(dāng)時(shí)一天也就check十幾條路線變化的case,對(duì)于五六千條case的一輪Regression,測(cè)試工作量是呈指數(shù)增長(zhǎng)的,已經(jīng)不是增加一兩個(gè)人就能解決問(wèn)題的。
導(dǎo)航,本身就是機(jī)器學(xué)習(xí)的過(guò)程,所以用傳統(tǒng)的功能測(cè)試抽取case覆蓋各個(gè)feature的方法在這種情況下不是完全適用:一是因?yàn)橐粭l規(guī)劃的路線會(huì)涉及到幾百、甚至上萬(wàn)條link,每條link又有多個(gè)影響因子,如果有一個(gè)或幾個(gè)因子變化,都可能引起導(dǎo)航路徑的變化,更何況是這么多個(gè)可變因子,而且以前設(shè)計(jì)的覆蓋Feature的case,可能會(huì)因?yàn)閿?shù)據(jù)變了就cover不到了;二是因?yàn)闄C(jī)器學(xué)習(xí)本身就是通過(guò)大量的數(shù)據(jù),對(duì)原型不斷進(jìn)行訓(xùn)練、不斷優(yōu)化的過(guò)程,所以減少case進(jìn)行測(cè)試,很可能會(huì)使模型陷入局部最優(yōu)。所以作為數(shù)學(xué)系的我,認(rèn)為機(jī)器學(xué)習(xí)的原型用機(jī)器學(xué)習(xí)的方法測(cè)試才是最好的解決方案,于是想到了神經(jīng)網(wǎng)絡(luò)。
在這個(gè)時(shí)期飽受折磨的不光是我們team的QA,ToolsTeam的dev也被要求用我們的Regression工具check case,要知道他們對(duì)導(dǎo)航的邏輯不了解,check起來(lái)難度多大(即使知道導(dǎo)航變了,但為什么變,你得知道)。這使我深刻意識(shí)到自動(dòng)化工具的思想,比自動(dòng)化工具的開(kāi)發(fā)要重要得多,Tools Team的lead曾經(jīng)說(shuō)過(guò)一句話:只要你有想法,我們就能把工具做出來(lái)。所以經(jīng)過(guò)大概兩周的折磨,在凌晨四點(diǎn)的睡夢(mèng)中終于有了solution,而不是idea,當(dāng)時(shí)那叫一個(gè)興奮啊JJ
第二天,跟mgr討論了之后,他同意了我的solution,于是找到ToolsTeam的一個(gè)牛人,僅用了幾天時(shí)間,就把工具生成出來(lái)了。
2. 人工神經(jīng)網(wǎng)絡(luò)ANN (Artificial Neural Network)
主要類型:
· 前向神經(jīng)網(wǎng)絡(luò)
· 反饋網(wǎng)絡(luò)
· 自組織網(wǎng)絡(luò)
· 相互結(jié)合型網(wǎng)絡(luò)
為了使模型相對(duì)簡(jiǎn)單、準(zhǔn)確,我們采用三層前向神經(jīng)網(wǎng)絡(luò)(即含一個(gè)隱含層)
3. 實(shí)現(xiàn)的思想
· 抽取difference
采用第三方工具(diff.exe)將新舊地圖的difference進(jìn)行對(duì)比(類似Beyond Compare的功能)并且輸出。
· 使用神經(jīng)網(wǎng)絡(luò)模型
輸入層:diff.exe的output。
隱含層:內(nèi)部處理邏輯
輸出層:分類的結(jié)果和變化的cost
輸入層到隱含層的權(quán)重:w(ih)
隱含層到輸出層的權(quán)重:w(ho)
· 實(shí)現(xiàn)分類
根據(jù)feature 進(jìn)行分類,通過(guò)config.xml手動(dòng)配置來(lái)定義分類的優(yōu)先級(jí):
· 計(jì)算從輸入層到隱含層的權(quán)重w(ih)
將priority 轉(zhuǎn)換成 [0, 1]之間的數(shù)(當(dāng)時(shí)就卡在了這個(gè)轉(zhuǎn)換過(guò)程上,想到了神經(jīng)網(wǎng)絡(luò),但就是不知道怎么將現(xiàn)有的輸入和期望的輸出轉(zhuǎn)換成數(shù)學(xué)模型):
F1 = (1/2)^1
F2= (1/2)^2
F3 =(1/2)^3
F4 = (1/2)^4
F5 =(1/2)^5
F6 = (1/2)^6
F7=(1/2)^7
…
Notes:
1) Fn:代表第n個(gè)feature
2) 根據(jù)等比數(shù)列1/2^n給每個(gè)分類因素定義權(quán)重,這樣做的目的是為了使每個(gè)weight最后加起來(lái)的值無(wú)限接近但<1,即使所有的expectedresult全變化了,大值不會(huì)超過(guò)1
3)分類的順序可以根據(jù)每次的改動(dòng)調(diào)整
4)Config.xml的格式可修改為:
<priority>
<pr name="F1"value=1/>
<pr name="F2"value=2/>
<pr name="F3" value=3/>
<pr name="F4"value=4/>
<prname="F5"value=5/>
<pr name="F6" value=6/>
<pr name="F7" value=7/>
…
<pr name="Fn" value=0/>
</priority>
因此每個(gè)分類的weight=(1/2)^value
(對(duì)于不需要check的difference,不用計(jì)算,value設(shè)為0)
4. 定義隱含層到輸出層的權(quán)重w(ho):
對(duì)于每個(gè)feature,可能不止一處發(fā)生變化,根據(jù)經(jīng)驗(yàn),設(shè)置可能變化的大個(gè)數(shù)(config.xml里配置,可手動(dòng)修改)
Config.xml可定義為
<hidden_output>
<f1weight="1/5"/>
<f3 weight="1/10"/>
<f4weight ="1/3"/>
<f5weight="1/10"/>
…
</hidden_output >
· 由于之前把主要的精力放到了check路線變化的case上,既慢又發(fā)現(xiàn)不了什么問(wèn)題,后來(lái)經(jīng)過(guò)經(jīng)驗(yàn)和簡(jiǎn)單利用了下統(tǒng)計(jì)的原理,證明了引起長(zhǎng)路徑的變化的主要因子是路的等級(jí)和速度(通常這兩個(gè)因子會(huì)引起一些列l(wèi)ink都變),所以根據(jù)路線變化的段數(shù)計(jì)算cost,而非長(zhǎng)路徑導(dǎo)航。
· 這里比較麻煩的地方是Maneuver,因?yàn)槊總€(gè)Maneuver的提示(左轉(zhuǎn)、右轉(zhuǎn)、上高速等等)還有另外一整套邏輯,是分類工具比較復(fù)雜的地方。
· 權(quán)重的計(jì)算思想為:通過(guò)對(duì)Tools調(diào)研,知道Tools對(duì)哪些屬性進(jìn)行了處理(因?yàn)門(mén)ools的復(fù)雜度較高,了解詳細(xì)的邏輯cost非常大,所以只是通過(guò)代碼復(fù)雜度和邏輯復(fù)雜度知道個(gè)大概的情況)。根據(jù)line by line的讀導(dǎo)航的 code,知道Maneuver的產(chǎn)生條件,并計(jì)算出Tools處理過(guò)的屬性占每個(gè)maneuver的cost;根據(jù)Tools的代碼復(fù)雜度和邏輯復(fù)雜度(復(fù)雜度越高,bug可能越多)以及客戶(Customer bug is very important)報(bào)的bug類型,計(jì)算出每類maneuver的cost, 根據(jù)這兩個(gè)cost,計(jì)算出Tools的影響和客戶發(fā)現(xiàn)的bug占每個(gè)maneuver的cost;最后進(jìn)行歸一化處理。即:從導(dǎo)航的邏輯、客戶、Tools的改動(dòng),以及最后的表現(xiàn)形式上計(jì)算cost。
· config.xml可定義為:
<all_maneuvers>
<amname="NC." weight=0.XX/>
<amname="CO." weight=0.XX/>
<amname="KP." weight=0.XX/>
<amname="KP.L" weight=0.XX/>
…
</all_maneuvers>
5. 計(jì)算從輸入層到輸出層的cost:
· F1: cost = w(ih)(F1)*(1/2+n*w(ho)(F1))=(1/2)^1*(1/2+1/2*n*1/5)
· F2: cost = w(ih)(F2)*(1/2+each w(ho)(F2))=(1/2)^2*(1/2+ 1/2*each maneuver weightfrom hidden layer to output layer)
· F3: cost = w(ih)(F3)*(1/2+n*w(ho)(F3))=(1/2)^3*(1/2+1/2*n*1/10)
· F4: cost = w(ih)( F4)*(1/2+n*w(ho)( F4))=(1/2)^4*(1/2+1/2*n*1/3)
· Fm: cost = w(ih)( Fm)*(1/2+n*w(ho)( Fm))=(1/2)^9*(1/2+1/2*n*1/30)
(n 代表每類feature的變化數(shù)量)
Notes:
1) 由此可見(jiàn),F(xiàn)1的取值范圍應(yīng)該是[1/4, 1/2],F2的取值范圍是[1/8, 1/4], F3的取值范圍是[1/16, 1/8], …
2) 由于一條case里,可能既含有F1的,又含有F2, 所以F1的權(quán)重應(yīng)該在[1/4,1],同理類推F2分類里權(quán)重的總和應(yīng)該在[1/8, 1/2],,…(在已經(jīng)正確分類的基礎(chǔ)上,即使F2的cost比F1的大,也不會(huì)影響case的選?。?/p>
6. 用聚類分析方法根據(jù)最終的cost大小抽取指定數(shù)量的case。
7. 優(yōu)點(diǎn):
1. 在不減少Test Scope的情況下,可以合理的抽取case;在有限的時(shí)間內(nèi),check變化大的case。
2. 通過(guò)了解Tools的改動(dòng),手動(dòng)配置測(cè)試范圍和優(yōu)先級(jí),來(lái)保證產(chǎn)品質(zhì)量。
3. 由于人工check結(jié)果時(shí)會(huì)把difference里的所有變化全check,所以此工具也是在模擬人的操作。
8. 缺點(diǎn):
1.由于Case的output是基于Maneuver的,而非Routing,所以計(jì)算時(shí)存在分類錯(cuò)誤,但考慮到改動(dòng)開(kāi)發(fā)的code cost比較高,只能根據(jù)現(xiàn)有的結(jié)果和經(jīng)驗(yàn)進(jìn)行優(yōu)化。
2.神經(jīng)網(wǎng)絡(luò)本身可能陷入局部最優(yōu),所以即使權(quán)重調(diào)整再大,期望結(jié)果也可能會(huì)很小。
網(wǎng)站題目:神經(jīng)網(wǎng)絡(luò)在測(cè)試抽樣中的應(yīng)用-創(chuàng)新互聯(lián)
文章出自:http://chinadenli.net/article24/jgcje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、網(wǎng)站改版、App開(kāi)發(fā)、云服務(wù)器、建站公司、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容