這些年,自動駕駛的概念很火。編程
美國汽車工程師協會提出了六級(L0-L5)分層模型,用來衡量自動駕駛的能力和水平。許多人對這個分類模型耳熟能詳。oracle
自動化測試和自動化駕駛同樣,也是人類的夢想。如何衡量自動化測試的水平呢?機器學習
有人就參考自動駕駛的分層方法,對自動化測試也進行了相似的分級(參見《人工智能測試的六個層次》、《測試工程師不懂AI,還有將來嗎?》等文章)。編程語言
仔細看完具體的分類內容後,我發現這些分級方法存在模仿過分的問題。工具
因爲忽視了軟件測試的本質,因爲脫離了自動化測試的實際,而劃分出在我看來有些錯亂的類型。 例如,將難度最高的測試檢查點自動化劃分爲L1層次。學習
給自動化測試分等級,不能偏離測試的基本原理。軟件測試是構造測試輸入,做用於被測軟件,而後觀察其實際輸出並與指望輸出進行比較的過程。測試
軟件測試依賴於(1) 測試輸入和(2) 指望輸出。其中測試輸入與測試數據、測試步驟、測試操做序列等概念等價。人工智能
在已知測試輸入和指望輸出的狀況下,自動化測試成爲一個編程問題。無數通用或專用編程語言,例如Python、Java、Robot Framework等,可以幫助咱們解決這個問題。spa
編程須要人工。編程以後,測試就能夠實現自動化執行。相比徹底手動的L0,這個層次的自動化測試是L1。這也是自動化測試領域當今的主流水平。設計
在L1基礎上,要想更進一步,須要突破測試輸入和指望輸出的自動生成。這是兩個問題。
1,自動生成測試輸入
在進行軟件測試時,測試人員須要精心構造測試數據和測試步驟,以期實現更高的覆蓋,發現更多的bug。
業界嘗試了許多方法,來自動生成測試數據和步驟。例如隨機方法、Fuzzing方法、基於搜索的方法、基於模型的方法、基於機器學習的方法等。
這些方法或多或少存在如下問題:(1) 生成的用例數量過多,(2) 生成的用例長度過長,(2) 產生的誤報率太高,(4) 測試的覆蓋率太低等。除了有成本低的優點以外,它們與人工設計相比,質量還相差甚遠。
測試輸入的生成處於研究階段,可落地成果還較少。假若突破了測試輸入的自動生成,那麼咱們能夠達到L2級的自動化測試。
2,指望輸出自動生成
寫過測試用例的人都知道,用例的至關篇幅是關於檢查點的。爲了一個個檢查點,咱們須要對說明文檔摳字眼,須要與用戶、與產品經理、與開發人員反覆覈對。即便這樣,有時候用例失敗報bug,結果因爲咱們的檢查點不合理而被打回。
這些現象從側面反映了測試結果斷定的難度。結果斷定難,關鍵在於軟件的指望輸出獲取難。這個難題又叫作oracle難題。這裏oracle的意思是預言、神諭。能夠說,作預言有多難,生成指望輸出就有多難。人工都難,自動化就更難了。
oracle自動化之難,難於上青天。
過去幾十年的研究代表,你們對測試oracle自動化基本還沒多少辦法。假若突破了oracle生成的自動化,那麼咱們就能夠實現L3級別的自動化測試。
只有用例生成、用例執行和結果斷定都自動化了,軟件測試纔可以實現端到端、一站式的自動化。這是自動化測試的終極目標,是測試之巔,是真正的「解放」。
這張圖就是我認爲的自動化測試等級模型。這個模型很簡單,也比較符合實際。說它符合實際,是由於自動化測試的現狀就是:用例執行自動化80分,用例生成自動化20分,oracle自動化5分。
基於這個實際,任何的新技術、新工具,例如機器學習、人工智能,只有解決了測試真正的瓶頸問題(用例生成和oracle生成),才能算明顯地推進了測試的進步。
若是你處於想學Python自動化或者正在學習Python自動化,Python自動化的教程很多了吧,可是是最新的嗎?說不定你學了多是一年前人家就學過的內容。
乾貨分享一波:2020最新的Python教程。獲取方式:加入愛碼小哥(主頁獲取加入方式)乾貨羣,私信管理員語嫣獲取。