欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go中的新增對(duì)模糊測(cè)試的支持

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

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

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

什么是模糊測(cè)試?

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

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

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

Go 中的軟件測(cè)試

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

考慮如下代碼:

func Add(num1, num2 int) int {
}

在 add_test.go 文件中,你可能有如下測(cè)試代碼:

import "testing"
func TestAdd(t *testing.T) {
}

運(yùn)行測(cè)試:

$ go test

新增對(duì)模糊測(cè)試的支持

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

在 add_test.go 文件中:

func FuzzAdd(f *testing.F) {
}

執(zhí)行以下代碼:

$ go test -fuzz

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

安裝 gotip 來(lái)獲取最新的功能

如果你極度渴望在正式發(fā)布之前嘗試這些功能,你可以使用 gotip 來(lái)測(cè)試即將正式發(fā)布的 Go 功能并反饋給他們。你可以使用下面的命令來(lái)安裝 gotip。安裝之后,你可以用 gotip 程序代替以前的 go 程序來(lái)編譯和運(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ū)對(duì)于模糊測(cè)試的觀點(diǎn)

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

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

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

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

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

Filo Sottile

現(xiàn)實(shí)中的模糊測(cè)試

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

AFL 也是比較流行的模糊測(cè)試工具,用來(lái)測(cè)試 C/C++ 寫的程序。

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

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

為什么在 Go 中新增對(duì)模糊測(cè)試的原生支持

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

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

模糊測(cè)試工具

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

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

以上就是Go中的新增對(duì)模糊測(cè)試的支持的詳細(xì)內(nèi)容,更多關(guān)于Go中模糊測(cè)試的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Golang使用Zookeeper實(shí)現(xiàn)分布式鎖

    Golang使用Zookeeper實(shí)現(xiàn)分布式鎖

    分布式鎖是一種在分布式系統(tǒng)中用于控制并發(fā)訪問的機(jī)制,ZooKeeper?和?Redis?都是常用的實(shí)現(xiàn)分布式鎖的工具,本文就來(lái)使用Zookeeper實(shí)現(xiàn)分布式鎖,希望對(duì)大家有所幫助
    2024-02-02
  • 解決老版本goland無(wú)法調(diào)試新版本go的問題

    解決老版本goland無(wú)法調(diào)試新版本go的問題

    這篇文章主要給大家介紹了如何解決老版本goland無(wú)法調(diào)試新版本go的問題,文中通過(guò)代碼示例給大家講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-11-11
  • Go?WaitGroup及Cond底層實(shí)現(xiàn)原理

    Go?WaitGroup及Cond底層實(shí)現(xiàn)原理

    這篇文章主要為大家介紹了Go?WaitGroup及Cond底層實(shí)現(xiàn)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Go實(shí)現(xiàn)文件上傳和下載

    Go實(shí)現(xiàn)文件上傳和下載

    這篇文章主要為大家詳細(xì)介紹了Go實(shí)現(xiàn)文件上傳和下載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 初識(shí)Golang?Mutex互斥鎖的使用

    初識(shí)Golang?Mutex互斥鎖的使用

    在學(xué)習(xí)操作系統(tǒng)的時(shí)候,我們應(yīng)該都學(xué)習(xí)過(guò)臨界區(qū)、互斥鎖這些概念,用于在并發(fā)環(huán)境下保證狀態(tài)的正確性。在?Go語(yǔ)言?里面互斥鎖是?sync.Mutex?,我們本篇文章就來(lái)學(xué)習(xí)下為什么要使用互斥鎖、如何使用互斥鎖,以及使用時(shí)的常見問題
    2022-10-10
  • Go使用sync.Map來(lái)解決map的并發(fā)操作問題

    Go使用sync.Map來(lái)解決map的并發(fā)操作問題

    在 Golang 中 map 不是并發(fā)安全的,sync.Map 的引入確實(shí)解決了 map 的并發(fā)安全問題,本文就詳細(xì)的介紹一下如何使用,感興趣的可以了解一下
    2021-10-10
  • Go語(yǔ)言開發(fā)k8s之ConfigMap操作解析

    Go語(yǔ)言開發(fā)k8s之ConfigMap操作解析

    這篇文章主要為大家介紹了Go語(yǔ)言開發(fā)k8s之ConfigMap操作示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Nunu快速構(gòu)建高效可靠Go應(yīng)用腳手架使用詳解

    Nunu快速構(gòu)建高效可靠Go應(yīng)用腳手架使用詳解

    這篇文章主要為大家介紹了如何使用Nunu快速構(gòu)建高效可靠Go應(yīng)用腳手架詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Go測(cè)試之.golden文件使用示例詳解

    Go測(cè)試之.golden文件使用示例詳解

    這篇文章主要為大家介紹了Go測(cè)試之.golden文件使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Golang http請(qǐng)求封裝的代碼示例

    Golang http請(qǐng)求封裝的代碼示例

    http請(qǐng)求封裝在項(xiàng)目中非常普遍,下面筆者封裝了http post請(qǐng)求傳json、form 和get請(qǐng)求,以備將來(lái)使用,文中代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06

最新評(píng)論