成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

你需要了解的 Go 中的模糊測試

開發(fā) 后端
在大家期望 Go 語言新增功能的列表中,模糊測試是其中很受歡迎的一項。雖然現(xiàn)在還是試驗性的,但在將要到來的發(fā)布版本中會變得更強(qiáng)大。


Go 團(tuán)隊接受了新增對模糊測試的支持的提議。


Go 的應(yīng)用越來越廣泛。現(xiàn)在它是云原生軟件、容器軟件、命令行工具和數(shù)據(jù)庫等等的首選語言。Go 很早之前就已經(jīng)有了內(nèi)建的 對測試的支持。這使得寫測試代碼和運(yùn)行都相當(dāng)簡單。

什么是模糊測試?

模糊測試fuzz testing(fuzzing)是指向你的軟件輸入非預(yù)期的數(shù)據(jù)。理想情況下,這種測試會讓你的應(yīng)用程序崩潰或有非預(yù)期的表現(xiàn)。拋開最終的結(jié)果,從程序?qū)Ψ穷A(yù)期的輸入數(shù)據(jù)的處理結(jié)果中你可以得到很多信息,這樣你就可以增加一些合適的錯誤處理。

任何一個軟件都有對不同來源的輸入或數(shù)據(jù)的接收說明,軟件會對這些數(shù)據(jù)進(jìn)行處理并返回適當(dāng)?shù)慕Y(jié)果。軟件開發(fā)后,測試工程師團(tuán)隊對其進(jìn)行測試,找出軟件中的錯誤,給出測試報告,并(由開發(fā)者)修復(fù)。通常測試的目的是驗證軟件的行為是否符合預(yù)期。測試又可以細(xì)分為不同的類型,如功能測試、集成測試、性能測試等等。每種測試方法關(guān)注軟件功能的某一個方面,以便發(fā)現(xiàn)錯誤或者提升可靠性或性能。

模糊測試在這一測試過程上更進(jìn)一步,嘗試向軟件程序輸入一些“無效”或“隨機(jī)”的數(shù)據(jù)。這種輸入是故意的,期望得到的結(jié)果就是程序崩潰或輸出異常,這樣就可以暴露程序中的錯誤以便由開發(fā)者來修復(fù)它們。與其他測試類似,很少需要手動進(jìn)行模糊測試,業(yè)界有大量的模糊測試工具可以將這個過程自動化。

Go 中的軟件測試

舉個例子,假如你想測試 ??add.go?? 中的 ??Add()?? 函數(shù),你可以在 ??add_test.go?? 中導(dǎo)入 ??testing?? 包并把測試體寫在以 ??TestXXX()?? 開頭的函數(shù)內(nèi)。

考慮如下代碼:

func Add(num1, num2 int) int {
}

在 ??add_test.go?? 文件中,你可能有如下測試代碼:

import "testing"

func TestAdd(t *testing.T) {
}

運(yùn)行測試:

$ go test

新增對模糊測試的支持

Go 團(tuán)隊已經(jīng)接受了 新增對模糊測試的支持的提議,以進(jìn)一步推動這項工作。這涉及到新增一個 ??testing.F?? 類型,在 ??_test.go?? 文件中新增 ??FuzzXXX()?? 函數(shù),在 Go 工具中會新增一個 ??-fuzz?? 選項來執(zhí)行這些測試。

在 ??add_test.go?? 文件中:

func FuzzAdd(f *testing.F) {
}

執(zhí)行以下代碼:

$ go test -fuzz

在本文編寫時,這個 ??功能還是試驗性的??,但是應(yīng)該會在 1.18 發(fā)布版本中包含。(LCTT 譯注:Go 1.18 剛剛發(fā)布,已經(jīng)包含了對模糊測試的支持)目前很多功能如 ??-keepfuzzing??、??-race?? 等也還沒有支持。Go 團(tuán)隊最近發(fā)布了一篇 模糊測試教程,值得讀一下。

安裝 gotip 來獲取最新的功能

如果你極度渴望在正式發(fā)布之前嘗試這些功能,你可以使用 ??gotip?? 來測試即將正式發(fā)布的 Go 功能并反饋給他們。你可以使用下面的命令來安裝 ??gotip??。安裝之后,你可以用 ??gotip?? 程序代替以前的 ??go?? 程序來編譯和運(yùn)行程序。

$ go install golang.org/dl/gotip@latest
$ gotip download

$ gotip version
go version devel go1.18-f009910 Thu Jan 6 16:22:21 2022 +0000 linux/amd64

社區(qū)對于模糊測試的觀點

軟件社區(qū)中經(jīng)常會討論模糊測試,不同的人對模糊測試有不同的看法。有些人認(rèn)為這是一種有用的技術(shù),可以找到錯誤,尤其是在安全方面。然而考慮到模糊測試所需要的資源(CPU、內(nèi)存),有人就認(rèn)為這是一種浪費,而他們更愿意用其他的測試方法。即使在 Go 團(tuán)隊內(nèi)部,意見也不統(tǒng)一。我們可以看到 Go 的聯(lián)合創(chuàng)始人 Rob Pike 對模糊測試的使用和在 Go 中的實現(xiàn)是持輕微的懷疑態(tài)度的。


...雖然模糊測試有助于發(fā)現(xiàn)某類錯誤,但是它會占用大量的 CPU 和存儲資源,并且效益成本比率也不明確。我擔(dān)心為了寫模糊測試?yán)速M精力,或者 git 倉庫中充斥大量無用的測試數(shù)據(jù)

~Rob Pike


然而,Go 安全團(tuán)隊的另一個成員,F(xiàn)ilo Sottile,似乎對 Go 新增支持模糊測試很樂觀,舉了很多例子來支持,也希望模糊測試能成為開發(fā)過程中的一部分。


我想說模糊測試可以發(fā)現(xiàn)極端情況下的錯誤。這是我們作為安全團(tuán)隊對其感興趣的原因:在極端情況下發(fā)現(xiàn)的錯誤可以避免在生產(chǎn)環(huán)境中成為弱點。

我們希望模糊測試能成為開發(fā)的一部分 —— 不只是構(gòu)建或安全方面 —— 而是整個開發(fā)過程:它能提升相關(guān)代碼的質(zhì)量...

~Filo Sottile


現(xiàn)實中的模糊測試

對我而言,模糊測試在發(fā)現(xiàn)錯誤以及讓系統(tǒng)變得更安全和更有彈性方面似乎非常有效。舉個例子,Linux 內(nèi)核也會使用名為 syzkaller 的工具進(jìn)行模糊測試,這個工具已經(jīng)發(fā)現(xiàn)了 大量 錯誤。

AFL 也是比較流行的模糊測試工具,用來測試 C/C++ 寫的程序。

之前也有對 Go 程序進(jìn)行模糊測試的觀點,其中之一就是 Filo 在 GitHub 評論中提到的 go-fuzz。


go-fuzz 的記錄提供了相當(dāng)驚人的證據(jù),證明模糊處理能很好地找到人類沒有發(fā)現(xiàn)的錯誤。根據(jù)我的經(jīng)驗,我們只需要消耗一點點 CPU 的時間就可以得到極端情況下非常高效的測試結(jié)果。


為什么在 Go 中新增對模糊測試的原生支持

如果我們的需求是對 Go 程序進(jìn)行模糊測試,之前的工具像 ??go-fuzz?? 就可以完成,那么為什么要在這種語言中增加原生支持呢?Go 模糊測試設(shè)計草案 中說明了這樣做的一些根本原因。設(shè)計的思路是讓開發(fā)過程更簡單,因為前面說的工具增加了開發(fā)者的工作量,還有功能缺失。如果你沒有接觸過模糊測試,那么我建議你讀一下設(shè)計草案文檔。


開發(fā)者可以使用諸如 ??go-fuzz?? 或 ??fzgo??(基于 ??go-fuzz??)來解決某些需求。然而,已有的每種解決方案都需要在典型的 Go 測試上做更多的事,而且還缺少關(guān)鍵的功能。相比于其他的 Go 測試(如基準(zhǔn)測試和單元測試),模糊測試不應(yīng)該比它們復(fù)雜,功能也不應(yīng)該比它們少。已有的解決方案增加了額外的開銷,比如自定義命令行工具。


模糊測試工具

在大家期望 Go 語言新增功能的列表中,模糊測試是其中很受歡迎的一項。雖然現(xiàn)在還是試驗性的,但在將要到來的發(fā)布版本中會變得更強(qiáng)大。這給了我們足夠的時間去嘗試它以及探索它的使用場景。我們不應(yīng)該把它視為一種開銷,如果使用得當(dāng)它會是一種發(fā)現(xiàn)錯誤非常高效的測試工具。使用 Go 的團(tuán)隊?wèi)?yīng)該推動它的使用,開發(fā)者可以寫簡單的模糊測試,測試團(tuán)隊去慢慢擴(kuò)展以此來使用它全部的能力。

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2012-06-26 10:13:55

2011-04-01 11:16:06

hessian

2012-06-27 09:11:47

2015-09-17 09:36:46

Chrome改變

2020-04-09 10:49:19

VMware主機(jī)配置

2019-08-21 10:41:47

2022-01-04 19:28:05

VMware云端虛擬化

2020-10-13 06:56:19

JavaScript異常類型開發(fā)

2022-09-14 10:00:12

前端自動化測試

2011-12-08 09:16:12

2015-10-22 17:20:46

命令工具Linux

2019-07-18 12:57:21

大數(shù)據(jù)互聯(lián)網(wǎng)算法

2021-05-19 09:40:14

Android 12Android

2021-03-15 08:04:08

VMware虛擬機(jī)MSC認(rèn)證

2010-11-23 13:34:12

微軟Lync

2023-05-18 09:00:00

人工智能StarCoder編程語言

2021-09-07 14:36:53

DevSecOps開源項目

2021-08-09 14:40:02

物聯(lián)網(wǎng)IOT智能家居

2020-07-15 07:45:51

Python開發(fā)工具

2021-01-26 01:03:36

云原生工具云原生
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 99精品国产一区二区三区 | 免费的黄色片子 | 日韩久久久久 | 久久免费观看视频 | 一区二区三区日韩 | 午夜精品一区二区三区在线观看 | 亚洲欧美中文日韩在线v日本 | 偷拍第一页 | 91免费在线看 | 乱码av午夜噜噜噜噜动漫 | 日韩免费在线视频 | 91色在线视频 | www.国产 | 亚洲国产精品一区二区www | aa级毛片毛片免费观看久 | 波霸ol一区二区 | 天天天久久久 | 亚洲精品久久久一区二区三区 | 国产成人精品一区二区三区在线观看 | 免费在线成人 | 国产成视频在线观看 | 狠狠爱综合网 | 91美女在线观看 | 在线免费国产视频 | 国产剧情一区 | 伊人久久综合影院 | 亚洲喷水 | 三级在线观看 | 国产一区二区三区 | av黄色片在线观看 | 日韩av一区二区在线观看 | 欧美一区二区在线 | 亚洲逼院 | 中文字幕一区二区三区精彩视频 | 精品视频一区二区 | 97伦理 | 国产成人免费视频网站高清观看视频 | 99久久99热这里只有精品 | 国产精品国产三级国产aⅴ中文 | 国产91丝袜在线18 | 中文字幕亚洲精品 |