測試已死?我看未必!
作者|孫遠、孟憲偉
編輯|小智
「測試已死」的觀點在業內仍然存在著爭議,很多公司縮減了測試人員,開發測試比屢創新高。本文旨在通過介紹軟體測試的新趨勢和新技術來展示軟體測試行業面臨的機遇與挑戰,為軟體測試工程師的職業規劃提供參考。
安全測試
從孟加拉國銀行 8100 萬美元被黑客成功盜取到美國民主黨郵件泄露事件可以看出,網路安全事件已經被推到了風口浪尖。隨著物聯網逐步普及,智能家居、汽車電子等設備的網路化水平大幅提升。但物聯網的安全卻不容樂觀,很多中小企業往往忽視安全防護。開源軟體的源代碼公開,黑客可以通過閱讀源代碼更容易的分析出軟體的安全漏洞,使得網路安全迎來了新的挑戰。當開源社區中發布出 cve 漏洞時,需要廠商及時的合入補丁,否則將給黑客入侵敞開大門。
新的編程語言的出現在提高了編碼效率的同時,也為軟體產品增添了安全挑戰,需要安全廠商儘快推出相應的安全工具和安全加固方案。隨著 SaaS 的普及,相信會有更多的安全工具問世。滲透測試需要測試工程師閱讀源碼來找出漏洞,與安全合規測試相比,需要更高的技術水平。在未來相當長的一段時間內滲透測試工程師將有很大的缺口。
人工智慧測試
近年來,人工智慧(AI)被越來越多的應用在 IT 行業,如智能汽車、智能家居和機器人等。尤其是 2016 年 AlphaGo 在圍棋領域掀起一股熱潮之後,AI 更多地成為人們熱議的焦點。人工智慧是一個新的領域,對於人工智慧本身的測試方案和測試工具還有待完善。
對於人工智慧在軟體測試領域的應用,即利用人工智慧來優化其他軟體的測試,目前已經取得了一定的進展。人工神經網路是軟體測試領域使用相對廣泛的 AI 技術之一。神經網路是基於生物學中神經網路的基本原理,在理解和抽象了人腦結構和外界刺激響應機制後,以網路拓撲知識為理論基礎,模擬人腦的神經系統對複雜信息的處理機制的一種數學模型。目前在 OCR,語音識別,醫學診斷等方面已經取得了很大的成功。在軟體測試中,它非常適合 GUI 測試、內存使用測試及分散式系統功能驗證等場景。
遺傳演算法是另一個軟體測試中用到的 AI 技術。它是模仿生物遺傳和進化機制的一種最優化方法,它把類似於遺傳基因的一些行為,如交叉重組、變異、選擇和淘汰等引入到演算法求解的改進過程中。遺傳演算法的特點之一是,它同時保留著若干局部最優解,通過交叉重組或者解的變異來尋求更好的解。在軟體單元測試中,已知輸入的參數的範圍,求解哪些參數的組合能夠達到最大的代碼覆蓋率(也有些研究是能達到最大的路徑覆蓋 / 分支覆蓋)。因此,遺傳演算法可以用於選擇最優的單元測試用例,也就是單元測試的最優輸入集。同時利用人工智慧還可以優化測試工具,將軟體測試的上下文與測試用例結合起來,選擇最優的測試用例集進行測試。
靜態分析與符號執行
軟體可靠性是對軟體在設計、開發以及所預定的環境下既有能力的置信度的一個度量,是衡量軟體質量的主要參數之一。而軟體測試則是保證軟體質量、提高軟體可靠性的最重要手段。靜態分析工具可以直接對源碼進行掃描,但其誤報率的問題有待改善。
大量可靠性問題隱藏在未知場景和不熟悉的開源代碼中,有必要通過程序行為分析工具來遍歷各種異常分支、代碼的所有路徑。符號執行技術是精確的路徑遍歷,是隨機測試、FUZZ 測試的有益補充。
符號執行代表工具 KLEE,在第一次學術使用(2008)便發現了 unix 系統中最常用的程序的多個問題,有的問題已經存在超過 15 年。符號執行技術在之前沒有得到大規模應用,主要原因是技術本身需要大量的計算資源(路徑爆炸)。隨著軟硬體技術的發展,平均計算成本比之前降低了很多,為符號執行的發展和推廣提供了有利的客觀條件。目前符號執行技術已應用在許多公司的產品測試當中,如 HP、微軟等公司都已經有 10 年以上的符號執行探索經驗。當前基於 KLEE 的二次開發工具已經大量應用在軟體可靠性測試中,如 Mayhem 已發現了 DebianOS 的上千個 crash 問題,以及 Linux 和 Windows 系統的幾十個可利用漏洞。
精準測試
在當前敏捷測試的時代,版本發布日趨頻繁,快速發布高質量的軟體是很多企業的目標。對於急於發布的軟體版本,全量運行所有的用例往往需要花費較長的時間,已經不能滿足產品發布的節奏。如何避免過度測試並在時間、質量、成本中找到最佳的平衡?
精準測試可讓軟體測試過程可量化衡量、可追溯,清楚的展示出測試用例運行的路徑,並可以實現測試用例與代碼的雙向追蹤。對於代碼量較大的系統的軟體,通過精準測試可以獲取到曾經執行過某段代碼的測試用例,當這部分代碼進行修改後,只需執行對應的用例即可,大大縮短了測試的時間,加快了產品上線速度。因此精準測試成為了近期軟體測試技術的新方向之一。精準測試的實施對測試人員的代碼開發、測試設計、需求理解、架構理解、自動化測試能力均有較高的要求。
雲測試
雲計算是一種按需提供計算資源的技術,它可以減少用戶基礎設施投入並降低管理成本。然而,雲平台在近年來不斷出現大面積宕機的情況,這為雲計算測試技術提出了新的挑戰。需要測試人員深入理解雲平台底層、中間層和上層技術,構建符合雲平台質量要求的測試工程能力和質量保障方案。
很多測試服務提供商已經將測試服務部署到雲上,這種方式有很多的優勢。首先,它可以按需提供服務,用戶可以根據需求靈活的佔用雲端資源,避免了傳統測試中的資源浪費。例如手機應用提供商可以把應用程序通過雲平台進行主流手機的兼容性測試,而不必直接購買各品牌的手機。其次,雲平台可以提供較為全面的測試環境和測試工具,免去了部署環境和工具的時間,使測試工程師可以將更多的精力投入到業務中。再次,當雲平台和容器技術結合起來時,可以快速構建可擴展可伸縮的測試環境,並行執行測試用例,從而減少測試執行時間。
物聯網測試
IoT 是一個包含大量網路設備、感測器和計算基礎設施的龐大系統。IoT 的應用覆蓋了軍事、家庭、醫療、零售等多個領域。其使用場景複雜,解決方案多元化,使得 IoT 設備以及解決方案的測試面臨很大的挑戰。下面筆者提出了一些觀點和思路供大家參考。
模擬
基於效率和成本的考慮,測試人員無法針對所有的 IoT 設備、連接協議以及服務節點進行全面覆蓋。依靠 IoT 場景模擬能力,測試人員可以在少量可用的物理設備上創建各類虛擬設備並建立不同協議的虛擬連接,從而模擬出真實應用場景,達到全面測試覆蓋的目的。不僅能夠節約時間和成本,還具有更好的靈活性和擴展性。
安全
當前 IoT 發展的重點是技術的創新、推廣和應用,安全問題沒有受到足夠的重視。相對傳統移動互聯網,IoT 的規模、應用和服務都更加龐大複雜,安全問題無疑具有極大的挑戰性。
自動化
在 IoT 領域,目前自動化測試工具和系統的發展還處於比較初級的階段。在測試執行、場景構建、性能度量及狀態監控等各個方面都需要有強有力的工具、框架和規範的出現,來支撐複雜的 IoT 自動化測試。
開源測試
開源軟體本著「不要重複造輪子」的原則,與商業軟體相比,擁有使用成本低、可定製性高等特點。目前開源測試工具種類繁多,涵蓋測試管理、缺陷管理、持續集成、功能測試、性能測試、測試框架、測試設計、安全測試等類別。下面列舉了這些分類中一些典型的測試工具。而針對我們自身的業務需求,可以通過修改源代碼來適配自己的業務,從而實現工具定製化。
測試管理: TestLink、Testopia
缺陷管理:Redmine、Bugzilla、Mantis
持續集成:Jenkins、Buildbot
功能測試:Selenium、LTP
性能測試:lmbench、Sysbench、Iperf、Fio
測試框架:JUnit、Autotest
測試設計:Xmind、StarUML、UML Designer
安全測試:Metasploit、Nessus、AppScan
為了減少研發成本,很多公司都制定了基於開源軟體進行二次開發的策略。在重點測試自研特性的同時,面對大量的開源代碼,測試工程師需要與開源社區互動,及時將發現的問題提交給社區並同步社區的問題單和 cve 補丁。
然而,當前很多開源社區中的測試並不到位,很多特性在發布之後長時間沒有對應的文檔和測試用例。以 kernel 社區的 user namespace 內核特性為例,其是在 2013 年 2 月 18 日隨內核 3.8 版本正式發布的,然而直到 2015 年 5 月 21 日,社區才擁有第一個該特性的測試用例。二者時間間隔在兩年以上,版本的質量保證令人堪憂。對於這部分特性,需要測試工程師根據業務需要自行補充測試。測試工程師同時還要注意構建社區影響力,以保證與自己平台相關的測試用例能夠順利的被社區接收,從而減少測試代碼維護成本。感興趣的讀者可以閱讀 《讓我們成為開源軟體測試者》。
容器化 /Devops/ 微服務
容器為開發、測試、運維三個團隊提供一致的環境,避免因為環境不統一產生的缺陷誤報。同時使開發人員可以很容易的通過容器鏡像復現測試人員和客戶報來的缺陷。利用容器還可以避免環境污染和批量快速的啟動多個測試環境並行測試來提高測試效率。微服務將軟體細分為多個子模塊,各模塊間相對獨立,便於測試進行遷移以便及早的發現缺陷。Devops 通過成熟的自動化解決方案,同時配合容器、微服務技術,打通了開發、測試、運維團隊的壁壘。隨著容器、微服務時代的到來,配置基於 CI/CD 的 Devops 流程成為了測試人員必備的技能。感興趣的讀者可以閱讀 《Docker 引領測試革新》。
敏捷測試
傳統的軟體測試方法將開發和測試視作兩個團隊的兩種不同的工作模式,團隊之間溝通比較有限,團隊壁壘較為明顯。在這種開發模式下,軟體缺陷通常在項目後期才逐步被發現。近年來,在客戶需求頻繁變化、高強度的外部競爭壓力和軟體交付迭代頻繁的大環境下,傳統的軟體測試方式已經不能滿足需求。
敏捷測試強調從客戶的角度進行測試,重點關注持續迭代地測試新開發的功能,而不再強調傳統測試過程中嚴格的測試階段,同時提倡儘早開始測試。它強調開發和測試團隊在合作、透明、靈活的環境下協同工作,以測試前移、持續集成、自動化等方式為優化手段,可以很好的適應快速、需求變更頻繁的軟體交付。
目前敏捷測試已經受到了行業內的認可,相信會有更多的公司將會進行敏捷轉型,敏捷教練的薪水也會水漲船高。
大數據測試
當前全球信息數據量增長迅猛,據市場調研機構 IDC 預測,到 2020 年,全球數據總量將達到 40ZB,相當於每人擁有一千張 DVD 光碟以上的信息量。如此大量的數據為測試數據的備份和管理帶來了挑戰,測試人員需要確認數據完整性,保證數據質量。面對大量而動態變化的數據和有限的測試時間,需要制定出行之有效的測試策略,開發出適用的測試工具,並完善自動化測試。
隨著大數據應用的快速增長,我們需要更快速的完成數據處理。大數據挖掘的目的是找出數據與數據的關聯關係,與傳統軟體相比,很多大數據場景中的輸出是無法直接確定的,同時數據又具有多樣性,需要測試人員具備更多的發散思維;面對爆炸式的數據服務,測試時需要搭建可擴展伸縮的測試平台模擬大量的測試客戶端。而面對大數據中很多場景下程序輸出的不確定性、大數據結構多樣化、定位數據因果關係困難等問題為測試工程師帶來了新的挑戰。
自動化測試
傳統的自動化測試需要測試工程師直接編寫測試程序,而這樣的程序往往可維護性不強,當開發代碼變更時往往需要重新適配自動化測試程序。測試驅動開發是軟體工程中的一個里程碑,即開發在提交開發代碼修改時同時要提交測試代碼,但這種方式仍然需要較多的人力投入到測試代碼的編寫中。而一些程序可以通過錄製或符號執行等方法自動生成自動化代碼,免去了手工編寫的不便。另外通過埋點、mock 等技術還可以輔助自動化測試。隨著測試業務日趨多樣化,需要不斷開發新的自動化測試框架、測試平台來滿足業務需求。當自動化測試與雲平台相結合時,可以方便的進行任務遷移、回滾、故障自動修復等功能。
移動互聯網測試
隨著智能移動設備的普及,測試範疇也從智能手機、智能平板擴展延伸至包含了運動手環、車載聯網應用、共享單車、無人機等事物。移動平台也呈現多樣化趨勢,而每個平台的版本升級速度非常快。移動應用種類繁多,從社交到遊戲、教育、辦公、旅行、工具等類別。為滿足用戶需求,熱門應用的迭代更新非常頻繁。面對眾多的移動設備硬體型號、多個終端平台版本、繁多的移動應用、各應用的不同版本號,測試人員不得不制定新的測試策略和方案來應對業務。即使應用沒有新的特性引入,但自動化測試不得不根據新的平台進行適配工作。而多種組合的測試為測試人員、測試工程能力、自動化測試提出了更高的要求。
目前已經出現了針對移動測試的自動化設備和 SAAS 平台。測試設備可以模擬出用戶真實的終端操作的方式。在 SAAS 平台中,使用者可以將應用提交到平台中進行全量的自動化測試,來確保應用的多個版本可以適配到不同的平台和硬體中。此外,領域中的專項測試,如性能測試、功耗測試、安全測試、兼容性測試、跨地域跨時區測試、老化測試,也將產生很大的測試需求。
寫在最後
當前很多公司已經將基本的功能測試任務交由開發團隊負責,測試人員主要專註於自動化測試開發、安全測試、測試建模、精準測試、性能測試、可靠性測試等專項測試中。這部分測試任務能夠很好的體現測試人員的價值。雖然「測試已死」的爭論還在繼續,但只要把握好軟體測試發展的趨勢並憑藉自身的努力,相信測試人員是能夠在行業中受到認可的。
作者簡介
孟憲偉,華為中央軟體院資深工程師,碩士畢業,軟體行業 10 年以上從業經驗。目前從事華為雲計算產品虛擬化平台的測試以及相關測試工具的開發工作。加入華為前供職於 IBM,Thomson Reuters 以及 VMware 等多家公司,期間曾從事軟體開發,項目管理,軟體測試等各類工作。
今日薦文
點擊展開全文
※騰訊遊戲容器雲平台的技術演進之路
※FreeWheel前後端分離改造實踐
※1小時上手 TensorFlow 深度學習應用
※智能泊車、環境控制……這些開發者作品會是未來「智慧社會」的藍本嗎?
※變身智能運維,你應該這樣做
TAG:InfoQ |
※心理測試:4雙耳環,你最想扔掉哪雙?測你是越長越難看還是耐看
※一場檢驗你是否為人類的測試,你敢接受嗎?
※測試 | 如果你死掉了,是否會死而復生呢?
※我們應該善意的看待無人車測試!而不是碰瓷!
※測試 | 測你是自卑還是自戀?沒想到我竟然是…
※測試未來誰會是你的情感歸宿呢?
※測試:楊冪邀你測試,你適合長發還是短髮?很准哦!
※測試丨敢測測么?你們擁有,幾世姻緣?
※測試|一條關於安全感的測試,沒想到我竟如此……
※心理測試:餓了你最想吃下圖哪種面?測你未來是什麼命?
※春節帶娃「保命」測試題,答對一半算你贏!看看你能得幾分?
※【測試】你們到底該做戀人還是朋友?來測測吧!
※你的眼睛好使嗎?這份眼力測試題,看看你能過幾關?
※心理測試:4個女神手機殼,你會扔掉哪個?測你會越長越難看還是耐看?
※心理測試:4種動物,你想抱走哪只?測你能在今年遇到真愛嗎!
※「裝死」測試愛貓!他躺了幾分鐘就受不了,傻眼看著它的反應問:你是認真的嗎?
※心理測試:你的直覺怎樣?看看你的第六感如何吧!
※心理測試:4隻貓你喜歡哪只?測試未來3個月你是否有意外之財?
※心理測試:看到哪只小狗你最想笑?測你是不是一個逗比?准!
※測試:怎樣做才能讓你更搶手!看過來咯!