<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Go 團隊接受了新增對模糊測試的支援的提議。
Go 的應用越來越廣泛。現在它是雲原生軟體、容器軟體、命令列工具和資料庫等等的首選語言。Go 很早之前就已經有了內建的 對測試的支援。這使得寫測試程式碼和執行都相當簡單。
模糊測試fuzz testing(fuzzing)是指向你的軟體輸入非預期的資料。理想情況下,這種測試會讓你的應用程式崩潰或有非預期的表現。拋開最終的結果,從程式對非預期的輸入資料的處理結果中你可以得到很多資訊,這樣你就可以增加一些合適的錯誤處理。
任何一個軟體都有對不同來源的輸入或資料的接收說明,軟體會對這些資料進行處理並返回適當的結果。軟體開發後,測試工程師團隊對其進行測試,找出軟體中的錯誤,給出測試報告,並(由開發者)修復。通常測試的目的是驗證軟體的行為是否符合預期。測試又可以細分為不同的型別,如功能測試、整合測試、效能測試等等。每種測試方法關注軟體功能的某一個方面,以便發現錯誤或者提升可靠性或效能。
模糊測試在這一測試過程上更進一步,嘗試向軟體程式輸入一些“無效”或“隨機”的資料。這種輸入是故意的,期望得到的結果就是程式崩潰或輸出異常,這樣就可以暴露程式中的錯誤以便由開發者來修復它們。與其他測試類似,很少需要手動進行模糊測試,業界有大量的模糊測試工具可以將這個過程自動化。
舉個例子,假如你想測試 add.go
中的 Add()
函數,你可以在 add_test.go
中匯入 testing
包並把測試體寫在以 TestXXX()
開頭的函數內。
考慮如下程式碼:
func Add(num1, num2 int) int { }
在 add_test.go
檔案中,你可能有如下測試程式碼:
import "testing" func TestAdd(t *testing.T) { }
執行測試:
$ go test
Go 團隊已經接受了 新增對模糊測試的支援的提議,以進一步推動這項工作。這涉及到新增一個 testing.F
型別,在 _test.go
檔案中新增 FuzzXXX()
函數,在 Go 工具中會新增一個 -fuzz
選項來執行這些測試。
在 add_test.go
檔案中:
func FuzzAdd(f *testing.F) { }
執行以下程式碼:
$ go test -fuzz
在本文編寫時,這個 功能還是試驗性的,但是應該會在 1.18 釋出版本中包含。(LCTT 譯註:Go 1.18 剛剛釋出,已經包含了對模糊測試的支援)目前很多功能如 -keepfuzzing
、-race
等也還沒有支援。Go 團隊最近釋出了一篇 模糊測試教學,值得讀一下。
如果你極度渴望在正式釋出之前嘗試這些功能,你可以使用 gotip
來測試即將正式釋出的 Go 功能並反饋給他們。你可以使用下面的命令來安裝 gotip
。安裝之後,你可以用 gotip
程式代替以前的 go
程式來編譯和執行程式。
$ 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
軟體社群中經常會討論模糊測試,不同的人對模糊測試有不同的看法。有些人認為這是一種有用的技術,可以找到錯誤,尤其是在安全方面。然而考慮到模糊測試所需要的資源(CPU、記憶體),有人就認為這是一種浪費,而他們更願意用其他的測試方法。即使在 Go 團隊內部,意見也不統一。我們可以看到 Go 的聯合創始人 Rob Pike 對模糊測試的使用和在 Go 中的實現是持輕微的懷疑態度的。
...雖然模糊測試有助於發現某類錯誤,但是它會佔用大量的 CPU 和儲存資源,並且效益成本比率也不明確。我擔心為了寫模糊測試浪費精力,或者 git 倉庫中充斥大量無用的測試資料Rob Pike
然而,Go 安全團隊的另一個成員,Filo Sottile,似乎對 Go 新增支援模糊測試很樂觀,舉了很多例子來支援,也希望模糊測試能成為開發過程中的一部分。
我想說模糊測試可以發現極端情況下的錯誤。這是我們作為安全團隊對其感興趣的原因:在極端情況下發現的錯誤可以避免在生產環境中成為弱點。
我們希望模糊測試能成為開發的一部分 —— 不只是構建或安全方面 —— 而是整個開發過程:它能提升相關程式碼的質量...
對我而言,模糊測試在發現錯誤以及讓系統變得更安全和更有彈性方面似乎非常有效。舉個例子,Linux 核心也會使用名為 syzkaller 的工具進行模糊測試,這個工具已經發現了 大量 錯誤。
AFL 也是比較流行的模糊測試工具,用來測試 C/C++ 寫的程式。
之前也有對 Go 程式進行模糊測試的觀點,其中之一就是 Filo 在 GitHub 評論中提到的 go-fuzz。
go-fuzz 的記錄提供了相當驚人的證據,證明模糊處理能很好地找到人類沒有發現的錯誤。根據我的經驗,我們只需要消耗一點點 CPU 的時間就可以得到極端情況下非常高效的測試結果。
如果我們的需求是對 Go 程式進行模糊測試,之前的工具像 go-fuzz
就可以完成,那麼為什麼要在這種語言中增加原生支援呢?Go 模糊測試設計草案 中說明了這樣做的一些根本原因。設計的思路是讓開發過程更簡單,因為前面說的工具增加了開發者的工作量,還有功能缺失。如果你沒有接觸過模糊測試,那麼我建議你讀一下設計草案檔案。
開發者可以使用諸如 go-fuzz
或 fzgo
(基於 go-fuzz
)來解決某些需求。然而,已有的每種解決方案都需要在典型的 Go 測試上做更多的事,而且還缺少關鍵的功能。相比於其他的 Go 測試(如基準測試和單元測試),模糊測試不應該比它們複雜,功能也不應該比它們少。已有的解決方案增加了額外的開銷,比如自定義命令列工具。
在大家期望 Go 語言新增功能的列表中,模糊測試是其中很受歡迎的一項。雖然現在還是試驗性的,但在將要到來的釋出版本中會變得更強大。這給了我們足夠的時間去嘗試它以及探索它的使用場景。我們不應該把它視為一種開銷,如果使用得當它會是一種發現錯誤非常高效的測試工具。使用 Go 的團隊應該推動它的使用,開發者可以寫簡單的模糊測試,測試團隊去慢慢擴充套件以此來使用它全部的能力。
via: https://opensource.com/article/22/1/native-go-fuzz-testing
以上就是Go中的新增對模糊測試的支援的詳細內容,更多關於Go中模糊測試的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45