官术网_书友最值得收藏!

第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)

015-01

圖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無處遁形。

主站蜘蛛池模板: 馆陶县| 闽侯县| 台湾省| 米脂县| 常德市| 乌兰察布市| 江阴市| 虞城县| 三亚市| 澄城县| 辉南县| 高邮市| 常熟市| 柳林县| 垣曲县| 高邑县| 博客| 化德县| 通化县| 长白| 澄城县| 遵义市| 淮滨县| 靖江市| 大厂| 昆明市| 德昌县| 廉江市| 台州市| 武山县| 淅川县| 新宾| 门头沟区| 邵阳市| 边坝县| 平阳县| 婺源县| 喀喇沁旗| 永州市| 中西区| 睢宁县|