TICA 2019 基于人工智能的模型驱动测试设计
阿里QA導讀:面對被測系統發生重大的變化,過去的資產如何維護?如何通過人工智能驅動,設計測試自動化解決方案?本次分享將從模型驅動設計,AI如何優化測試用例等維度,介紹一種AI在軟件測試領域的實踐方案。 |
大家好,我是靳超,我今天給大家匯報的主題是,基于AI的模型驅動軟件測試設計。
我們這個團隊是從上個世紀一直做軟件測試,今天上午也有老師聊到過在上個世紀有很多不同的軟件,我們做這個行業的時候,當時有殺毒軟件王江民,KV2000。當年做過一兩年的MIS系統,從1999年開始我們一直做軟件測試,從嵌入式系統測試,白盒測試,到代碼安全測試,最近四年來我們一直關注于黑盒測試。我們專注于把國外最新的,成熟的產品和技術引入到國內來,服務于國內的軟件開發組織。
在黑盒測試技術領域,我們目前關注于以上四個方面。
第一個方面,如何通過模塊化去提高測試資產的可復用性。關于這個問題,實際上,對于有一段測試自動化歷史,或者有些測試資產的用戶,會有體驗。在軟件自動化測試當中有一個很大的挑戰,就是當我們的被測系統發生變更時,我們對已有的測試自動化資產如何維護和復用。測試自動化資產維護的難度,會導致很多公司放棄自動化測試,回歸到手動測試。我們一直帶著這個問題去看目前黑盒測試領域的各項領先技術。目前來看,整個業界對于這個問題,沒有一個按鈕的解決方案,基本上各個廠家都是通過模塊化,框架化,做到更好的測試資產維護。而在這個方向上,我們提供了一種無需腳本的,自帶框架的模塊化解決方案,更易于黑盒測試自動化的實現,提高可維護性和復用性。
第二個方面,完全基于圖像識別,實現測試執行自動化。過去二十年當中,黑盒測試多采用對象識別作為基礎,實現測試行為的自動化,腳本化。但是在這個過程當中,有很多的對象識別的方面的困難,或者對被測系統底層實現技術的相關性,造成自動化測試實現過程中的困難。后來,我們發現,在國外,早已有成熟的,完全基于圖像識別,驅動整個測試流程自動化的平臺。所以我們把這項技術引入到國內來,在過去的三年,我們的一批客戶,使用我們的這項技術,將之前有賴于人工測試的繁瑣的測試工作,實現了自動化。
第三個方面,是關于人工智能在測試領域中的應用。?這也是今天我們所專注的話題。我們都知道,以前的測試自動化,更多關注與測試執行的自動化。實際上,整個測試實現,前面有測試的設計工作,后面有測試數據的分析。我們今天匯報的,是基于人工智能的算法,如何服務于測試設計的自動化,關注于前面這個部分的工作,即怎樣用人工智能的算法,結合模型驅動測試設計技術,幫助大家自動測試用例的設計和生成,更好的提升測試覆蓋率,高效的發現缺陷。這個話題會展開講,是今天主要的話題。
第四個方面,通過搭建DevOps環境中,不同專業領域工具間的數據總線,實現敏捷溝通。如果大家有印象的話,若干年前,IBM Rational團隊曾經推出Jazz平臺,希望完成類似的工作,幫助軟件組織在整個軟件生命周期中,幫助各個不同的專業團隊,例如需求、設計、運維等不同團隊之間使用的不同工具之間,實現的數據互聯互通,達成高效敏捷的團隊協作。而上述這個技術方向,就是我們離開IBM之后,發現的一個成熟的技術平臺,實現這一需求,就引入國內,提供本地的技術服務工作。我們目前主要關注和提供以上四個方向的技術平臺和服務,并將不斷將國外最新的一些相關技術,引入到國內,來服務于各位。
今天,我們重點介紹的,是AI在軟件測試設計領域的實踐。主要是來自于英國的Eggplant。
近年來,Eggplant已經成為功能測試領域的頭部企業,并獲得了相關第三方評估機構的認可。作為最新的SIIA CODiE科迪獎的獲得者,Eggplant被譽為最佳DevOps工具。在Gartner和Forrester的功能測試年度評估報告中,Eggplant也名列前茅。
其實我們回顧一下過去的十年,功能測試領域真的發生巨大的變化。傳統上面的頂級玩家,現在慢慢地轉向了一些更好的,有更加豐厚利潤的市場方向。而在功能測試技術的演變和革新中,一些全新的公司,更加專注的投入到這個領域,站在業界的第一排。之前的一些問題和體現,在新的技術能力下,值得大家重新關注一下新的這些能力和技術。
我們可以看到,將AI技術應用于測試實踐,是Eggplant獲得第三方評估機構和市場關注和認可的原因之一。可見,近年來,整個業界,對如何使用人工智能的技術來變革軟件測試的方式方法,非常的關注。
談到人工智能,我們會想起,上世紀60年代,有一部電影,叫2001太空漫游,其中描述了人工智能機器為完成任務威脅到宇航員的生命。你就知道,人工智能不是一個新鮮的話題,只不過在過去的幾十年中,對這項技術的關注,有幾個波峰波谷而已。那時人們描述的人工智能,充滿幻想,是兼具感情和邏輯的一種實現。事實上,當前我們應用中的人工智能,更直接的說,其包含的機器學習,例如神經網絡算法等這類技術,更多實現了邏輯層面的一些工作,暫時還沒有確定能產生類似人類情感的機制。而邏輯的實現,可以是使用機器學習算法,也可以使用更傳統的,基于規則的系統實現,甚至有業界人士會聊到,機器學習算法的本質,依然是基于規則。
機器學習算法實質,是實現了一種模式匹配。算法可以根據各種各樣的輸入,通過算法中參數的自我調整,擬合出一種有時連人類都無法察覺的,辨識輸入和特定輸出之間的關聯關系。這種模式匹配的能力,應用到各個行業,包括我們熟知的圖像識別,自動駕駛,垃圾郵件分類等。
這種方法,同樣適用于我們來優選測試中的不同的測試步驟組合,這就形成了不同的測試用例。這些不同的測試步驟的特征,作為算法的輸入,和期望的特定的輸出,例如在軟件測試領域,我們將組織預期的功能測試覆蓋率和盡可能多的發現缺陷作為期望達到的輸出,我們去擬合出這種輸入和輸出之間的關聯關系,實現機器幫助人類設計和優化測試用例組合,自動探索高價值的測試場景系列。今天我們匯報的重點,將放在技術達成的效果和為組織帶來的價值上。
當我們接觸一項新的技術時,總是希望,能了解這項技術是如何實現的?最近看了一篇TED的演講,關于人工智能算法用于識別狼和狗的照片。演講者描述,當時人工智能的專家們發現,算法識別的效果并不理想,并不像人們期望中的,像識別貓和狗的照片那樣敏感。其實整個過程中,更糟糕的問題是,算法工程師,實際上也搞不清楚算法是如何具體實現這一識別過程的。以至于,他們最后發現,造成識別偏差的原因,和算法過于關注圖片的局部,例如圖片中背景中雪的圖像,導致將背景中的雪,和認為圖片中的動物更象是一只狼發生了傾向性的關聯。這是一個算法缺陷。而且在發現這種傾向之前,算法工程師和編碼人員,沒有人知道兩者之間的作用機制!人工智能算法的復雜性,帶來了某些不可預知性,甚至對人工智能技術的某種擔憂。
好吧,所以,今天,我作為一個普通的測試自動化人員,我的重點將不是探究工具算法的細節,例如,“利用Adam算法優化動量和指數加權移動平均法計算值, 使算法可以避免過于關注局部特征。”Eggplant是使用了怎樣的算法來優化測試用例設計的?而是更關注于作為我們普通的測試人員,幫助我們做真正的軟件測試設計,給企業帶來更多的投資回報。
所以,大概分成這么幾個部分,第一個是模型驅動測試設計的由來的必要性;第二是在模型驅動過程當中,AI優化測試用例是怎么起到幫助,最后是應用實踐,我們結合客戶的實際應用的情況,介紹工具使用中一些相關的問題。
我們簡單的回顧一下功能測試自動化發展的歷史。
最早的自動化測試,我們使用捕捉回放,實現了一個測試行為線性的自動化腳本。很快我們發現這種線性腳本書寫的效率,更關鍵的,是可維護性,都有很大的問題,自然而然我們追求腳本模塊化,提高可維護性。后來我們發現僅僅做腳本的模塊化也不理想,因為在我們測試過程中,有很多專業的,業務背景的測試人員,我們不是來自于IT專業,不喜歡直接使用代碼和腳本,進而我們封裝腳本,實現關鍵字驅動測試,將測試邏輯和測試數據分離,測試開發和測試執行分離,支持具有專業業務能力的人員,方便的設計測試場景,避免了編碼的困擾。
但是,即使在這種方式下,大家發現仍然有一個問題。很多客戶問我們,這樣的包含若干測試步驟的用例依然由人來定的,我們如何保證人的思維能覆蓋盡可能多的業務場景,包括異常操作,是不是有更好的方法。正是基于以上的提問,我們才引入了所謂的基于模型的這種測試用例生成方法,以滿足用戶提出的問題。
比如說,在一個類似于攜程的旅行輔助軟件中,如果我們采用我們推薦的建模方式之一,基于界面建模,我們使用模型,描述界面,即上圖中藍色的方框,我們稱之為狀態,和界面中所具有的各種功能,即上圖中藍色的方框中的灰色方框,我們稱之為活動,以及活動和狀態之間的關系,即上圖中棕色的連接線。我們也可以采用基于行為的建模方式,我們回頭再看。基于界面建模時,簡單易用是最直觀的感受。我們幾乎不需要太多訓練,就可以開始建模工作。工具隨后將基于AI算法去覆蓋各種各樣的操作的可能性,包括測試人員能夠想到的,同時也包括測試人員沒有想到,但軟件的最終用戶可能使用軟件的某種方式,也就是通常功能測試當中,測試設計人員設想的正向的路徑,還有更多的異常的路徑,缺陷就包含在這些測試路徑中。這些路徑,按照不同的,業務允許的方式,組合測試步驟,實現測試用例。
在這樣一個環境下面,AI起到一個什么樣的作用呢,這張圖很好地解釋了AI是怎么樣參與這個工作。
通過模型,工具可以幫助我們產品大量的,具有業務邏輯的測試步驟組合,即測試用例。AI的作用,通過算法對潛在的,海量的測試用例系列進行優選,優先去執行高價值的測試用例。優選的依據,主要是兩個目標,覆蓋率和缺陷發現。人工智能的算法幫助大家分析這個模型,看看怎么樣在有效的時間里。去優先執行哪些測試路徑,能夠更好幫助大家快速地提升覆蓋率和發現缺陷。
實踐中,我們感受到,這種新的方法,也改變了我們傳統的,對功能測試自動化的理解。這種方式下面的功能測試變成動態的測試,之前基于腳本的測試是靜態的。基于腳本的自動化功能測試,無論測試腳本執行多少次,腳本所驗證的測試點,運行的路徑,都是完全一樣的。但是,在基于人工智能優化下的模型驅動測試,每次的測試都的測試的路徑都是根據上一次測試的數據結果決定的。
我們剛才談到算法所需要考慮的輸入項,大概分成五個類別。
業務權重
回歸測試用例
特征值
覆蓋率
已發現缺陷
這些輸入項,會影響不同可選的測試步驟的權重,進而影響測試中,下一步測試步驟的選擇的可能性。其中,業務權重和回歸測試用例是容易為大家理解的。就是,重要的業務步驟,和我們人為確定需要執行的測試用例集合,這些輸入項,都將影響模型驅動的測試,增加執行這些業務和路徑的傾向。
從下面后臺算法權重的展示界面中,大家也可以看到,已經執行的路徑改變的覆蓋率指標,和已經發現的缺陷,這些因素,都將影響測試路徑選擇時,每一步測試步驟最新的權重值得變化,進而及時調整測試的路徑。
例如,根據之前做過的測試,曾經發現過缺陷的模塊,或已經覆蓋到的模塊,它們的顏色被標示。相應的你會發現,在當前的測試步驟的選擇時,算法將計算出下一步幾個可能的測試步驟的相對權重,系統會選擇權重最高的步驟去執行,這樣會導致更多命中你從來沒有測試過的模塊或者是路徑,或者去優先執行更有可能發現缺陷的測試用例。
除了基于界面和功能的這種直觀,易于使用的建模方式之外,工具的模型可以提供其他的建模思路。例如面向行為的建模,可以給大家提供另外一種業務描述的可能性。
我們給大家總結了一下,人工智能給大家帶來的好處,對于測試設計人員,工具幫助我們快速增加功能測試的覆蓋率,幫助我們構建更多可能發現缺陷的測試場景,自動化生成測試用例。與此同時,使整個自動化測試更加易于維護,我們不會直接維護腳本,而是在模型層次上實現更加直觀方便的維護。同時,腳本的編寫量也極大的下降。因為模型實現測試邏輯,所需編寫的代碼只完成原子性測試步驟中和界面交互的部分。同時,基于模型的方式,對于覆蓋率的提升和度量也非常有幫助。
下面是一個實際的用戶應用測試場景。在這個案例中,客戶最初期望我們完成兩個測試用例。
購物結算,核算商品金額。
修改操作員頭像。
實際通過模型構建的測試場景,通過自動化探索,可以覆蓋各種潛在的,用戶操作的可能性。實踐中,這個模型在運行過程當中發現了另外一個客戶沒有要求的測試用例中,退出到登錄界面時,上一個用戶登錄密碼保持在密碼輸入框中的意外問題。這個工具構造的測試場景,可以幫助用戶發現這個異常現象,進而需要用戶分析是否是一個軟件缺陷,是否需要修正。
上圖有我的聯系方式,如果大家對我剛才的介紹的內容,有哪些疑問,可以加微信,進一步討論。
前面,我們介紹了講的是測試設計自動化,但是在設計自動化的背后,我們依然需要有跟界面交互的手段。模型可以直接集成自帶的,基于圖像的自動化交互腳本語言。同時,通過這個腳本語言,模型可以集成幾乎所有測試自動化交互方式和語言,包括Selenium、Java、Python、C#等。
Eggplant基于圖像識別,不需要依賴任何對象識別,就可以實現的功能測試自動化,其跨平臺,容易使用,無需開發背景的特點,在國內的用戶實踐中,廣為客戶贊譽。
工具具有專利的核心技術,圖像識別技術,實現了可靠性和魯棒性的平衡,在過去十幾年中,服務于近700家用戶,所以說,僅這一技術,值得大家關注和研究。
簡單來說,這種基于圖像識別的功能測試平臺,他幫助大家實現了一個軟件功能測試的萬能鑰匙,Eggplant的用戶,從來不用擔心您的應用是如何實現的,測試技術和被測對象的底層實現技術無關。它是您手里面的萬能鑰匙,可以使用單一技術,測試從移動平臺,到PC平臺,從B/S結構,到C/S結構,從Windows/Mac/Linux/Unix/System Z等等各類平臺上的軟件。
這就是我今天想要跟大家匯報的內容,大家有任何有興趣討論的話題,可以隨時和我們聯系。
謝謝大家。
總結
以上是生活随笔為你收集整理的TICA 2019 基于人工智能的模型驱动测试设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 社会学与计算机哪个考研容易,国内几所较热
- 下一篇: 【Unity3D】图片纹理压缩方式,干货