最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go中的新增對模糊測試的支持

 更新時間:2022年03月22日 16:29:47   作者:Gaurav Kamathe  
這篇文章主要為大家介紹了Go中的新增對模糊測試的支持,文中還包含了一些功能實驗性測試分析有需要的朋友可以借鑒參考下,希望能夠有所幫助

Go 團隊接受了新增對模糊測試的支持的提議。

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

什么是模糊測試?

模糊測試fuzz testing(fuzzing)是指向你的軟件輸入非預期的數據。理想情況下,這種測試會讓你的應用程序崩潰或有非預期的表現。拋開最終的結果,從程序對非預期的輸入數據的處理結果中你可以得到很多信息,這樣你就可以增加一些合適的錯誤處理。

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

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

Go 中的軟件測試

舉個例子,假如你想測試 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 選項來執(zhí)行這些測試。

在 add_test.go 文件中:

func FuzzAdd(f *testing.F) {
}

執(zhí)行以下代碼:

$ go test -fuzz

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

安裝 gotip 來獲取最新的功能

如果你極度渴望在正式發(fā)布之前嘗試這些功能,你可以使用 gotip 來測試即將正式發(fā)布的 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

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

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

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

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

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

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

Filo Sottile

現實中的模糊測試

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

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

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

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

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

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

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

模糊測試工具

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

via: https://opensource.com/article/22/1/native-go-fuzz-testing

以上就是Go中的新增對模糊測試的支持的詳細內容,更多關于Go中模糊測試的資料請關注腳本之家其它相關文章!

相關文章

  • Go語言超時退出的三種實現方式總結

    Go語言超時退出的三種實現方式總結

    這篇文章主要為大家詳細介紹了Go語言中超時退出的三種實現方式,文中的示例代碼簡潔易懂,對我們深入了解Go語言有一定的幫助,需要的可以了解一下
    2023-06-06
  • Golang如何將日志以Json格式輸出到Kafka

    Golang如何將日志以Json格式輸出到Kafka

    這篇文章主要介紹了Golang將日志以Json格式輸出到Kafka的方法,這篇文章還會提供一種輸出Json格式日志的方法,本文結合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • 詳解Golang語言HTTP客戶端實踐

    詳解Golang語言HTTP客戶端實踐

    本文主要介紹了Golang語言HTTP客戶端實踐,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Go高級特性探究之信號處理詳解

    Go高級特性探究之信號處理詳解

    信號是在Unix和類Unix操作系統(tǒng)中用于通知進程發(fā)生了事件或異常的通信機制,本文主要來介紹一下Go中的信號處理的方法,需要的可以參考一下
    2023-06-06
  • Go1.18?新特性之多模塊Multi-Module工作區(qū)模式

    Go1.18?新特性之多模塊Multi-Module工作區(qū)模式

    這篇文章主要介紹了Go1.18?新特性之多模塊Multi-Module工作區(qū)模式,在 Go 1.18之前,建議使用依賴模塊中的 replace 指令來處理這個問題,從 Go 1.18開始引入了一種同時處理多個模塊的新方法,通過案例給大家詳細介紹,感興趣的朋友一起看看吧
    2022-04-04
  • Golang中函數的使用方法詳解

    Golang中函數的使用方法詳解

    這篇文章主要詳細介紹了Golang中函數的使用方法,文中有詳細的示例代碼,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2023-05-05
  • 深入了解Golang中占位符的使用

    深入了解Golang中占位符的使用

    在寫?golang?的時候,也是有對應的格式控制符,也叫做占位符,寫這個占位符,需要有對應的數據與之對應,不能瞎搞。本文就來和大家聊聊Golang中占位符的使用,希望對大家有所幫助
    2023-03-03
  • GORM框架實現分頁的示例代碼

    GORM框架實現分頁的示例代碼

    本文主要介紹了GORM框架實現分頁的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-03-03
  • Go Java算法之二叉樹的所有路徑示例詳解

    Go Java算法之二叉樹的所有路徑示例詳解

    這篇文章主要為大家介紹了Go Java算法之二叉樹的所有路徑示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • golang開發(fā)中channel使用

    golang開發(fā)中channel使用

    channel[通道]是golang的一種重要特性,正是因為channel的存在才使得golang不同于其它語言。這篇文章主要介紹了golang開發(fā)中channel使用,需要的朋友可以參考下
    2020-09-09

最新評論

大邑县| 黔南| 开封市| 北宁市| 双峰县| 荃湾区| 商水县| 凭祥市| 静海县| 宾川县| 石城县| 湖口县| 黄山市| 南康市| 洪洞县| 阳东县| 镇赉县| 峨边| 台东县| 凤山县| 邻水| 原阳县| 内黄县| 永平县| 丹东市| 平湖市| 广德县| 同江市| 东乌珠穆沁旗| 大荔县| 江源县| 广安市| 土默特右旗| 博白县| 阿克陶县| 中西区| 富阳市| 武定县| 林西县| 武宁县| 甘洛县|