- Go語言精進(jìn)之路:從新手到高手的編程思想、方法和技巧(2)
- 白明
- 741字
- 2022-01-04 17:42:23
第45條
使用模糊測試讓潛在bug無處遁形
在Go 1.5版本發(fā)布的同時,前英特爾黑帶級工程師、現(xiàn)谷歌工程師Dmitry Vyukov發(fā)布了Go語言模糊測試工具go-fuzz。在GopherCon 2015技術(shù)大會上,Dmitry Vyukov在其名為“Go Dynamic Tools”的主題演講中著重介紹了go-fuzz。
對于模糊測試(fuzz testing),想必很多Gopher比較陌生,當(dāng)初筆者也不例外,至少在接觸go-fuzz之前,筆者從未在Go或其他編程語言中使用過類似的測試工具。根據(jù)維基百科的定義,模糊測試就是指半自動或自動地為程序提供非法的、非預(yù)期、隨機(jī)的數(shù)據(jù),并監(jiān)控程序在這些輸入數(shù)據(jù)下是否會出現(xiàn)崩潰、內(nèi)置斷言失敗、內(nèi)存泄露、安全漏洞等情況(見圖45-1)。

圖45-1 模糊測試的定義
模糊測試始于1988年Barton Miller所做的一項有關(guān)Unix隨機(jī)測試的項目。到目前為止,已經(jīng)有許多有關(guān)模糊測試的理論支撐,并且越來越多的編程語言開始提供對模糊測試的支持,比如在編譯器層面原生提供模糊測試支持的LLVM fuzzer項目libfuzzer、歷史最悠久的面向安全的fuzzer方案afl-fuzz、谷歌開源的面向可伸縮模糊測試基礎(chǔ)設(shè)施的ClusterFuzz等。
傳統(tǒng)軟件測試技術(shù)越來越無法滿足現(xiàn)代軟件日益增長的規(guī)模、復(fù)雜性以及對開發(fā)速度的要求。傳統(tǒng)軟件測試一般會針對被測目標(biāo)的特性進(jìn)行人工測試設(shè)計。在設(shè)計一些異常測試用例的時候,測試用例質(zhì)量好壞往往取決于測試設(shè)計人員對被測系統(tǒng)的理解程度及其個人能力。即便測試設(shè)計人員個人能力很強(qiáng),對被測系統(tǒng)也有較深入的理解,他也很難在有限的時間內(nèi)想到所有可能的異常組合和異常輸入,尤其是面對龐大的分布式系統(tǒng)的時候。系統(tǒng)涉及的自身服務(wù)組件、中間件、第三方系統(tǒng)等多且復(fù)雜,這些系統(tǒng)中的潛在bug或者組合后形成的潛在bug是我們無法預(yù)知的。而將隨機(jī)測試、邊界測試、試探性攻擊等測試技術(shù)集于一身的模糊測試對于上述傳統(tǒng)測試技術(shù)存在的問題是一個很好的補(bǔ)充和解決方案。
在本條中,我們就來看看如何在Go中為被測代碼建立起模糊測試,讓那些潛在bug無處遁形。
- Mastering NetBeans
- 國際大學(xué)生程序設(shè)計競賽中山大學(xué)內(nèi)部選拔真題解(二)
- C# Programming Cookbook
- Learning RxJava
- Python Deep Learning
- 高級C/C++編譯技術(shù)(典藏版)
- Python機(jī)器學(xué)習(xí)經(jīng)典實例
- Building Minecraft Server Modifications
- QGIS By Example
- 高級語言程序設(shè)計(C語言版):基于計算思維能力培養(yǎng)
- Test-Driven JavaScript Development
- ArcGIS for Desktop Cookbook
- Vue.js應(yīng)用測試
- Red Hat Enterprise Linux Troubleshooting Guide
- Python函數(shù)式編程(第2版)