首页 > 其他分享 >Go语言精进之路读书笔记第45条——使用模糊测试让潜在bug无处遁形

Go语言精进之路读书笔记第45条——使用模糊测试让潜在bug无处遁形

时间:2024-03-10 20:25:17浏览次数:25  
标签:遁形 读书笔记 45 Go fuzz && go data bug

模糊测试就是指半自动地为程序提供非法的、非预期、随机的数据,并监控程序在这些输入数据下是否会出现崩溃、内置断言失败、内存泄漏、安全漏洞等情况。

45.1 模糊测试在挖掘Go代码的潜在bug中的作用

Dmitry Vyukov 2015年使用go-fuzz在Go标准库中发现了137个bug。

45.2 go-fuzz的初步工作原理

工作流程:

  • 生成随机数据
  • 将上述数据作为输入传递给被测程序
  • 观察是否有崩溃记录(crash),如果发现崩溃记录,则说明找到了潜在的bug

45.3 go-fuzz使用方法

1.安装go-fuzz
2.带有模糊测试的项目组织
3.go-fuzz-build
4.执行go-fuzz

适用场景:

  • 处理复杂输入数据的程序
  • 比如文件格式解析、网络协议解析、人机交互界面入口等

45.4 使用go-fuzz建立模糊测试的示例

被测代码

func ParseComplex(data [] byte) bool {
    if len(data) == 5 {
        if data[0] == 'F' && data[1] == 'U' && data[2] == 'Z' && data[3] == 'Z' && data[4] == 'I' && data[5] == 'T' {
            return true
        }
    }
    return false
}

fuzz测试代码

// +build gofuzz

package parser

func Fuzz(data []byte) int {
    ParseComplex(data)
    return 0
}

45.5 让模糊测试成为“一等公民”

Go工具链还没有在原生上支持go-fuzz

标签:遁形,读书笔记,45,Go,fuzz,&&,go,data,bug
From: https://www.cnblogs.com/brynchen/p/18064718

相关文章

  • Go语言精进之路读书笔记第46条——为被测对象建立性能基准
    46.1性能基准测试在Go语言中是“一等公民”性能基准测试在Go语言中和普通的单元测试一样被原生支持的,得到的是“一等公民”的待遇。我们可以像对普通单元测试那样在*_test.go文件中创建被测对象的性能基准测试,每个以Benchmark前缀开头的函数都会被当作一个独立的性能基准测试。......
  • Go语言精进之路读书笔记第48条——使用expvar输出度量数据,辅助定位性能瓶颈点
    48.1expvar包的工作原理Go标准库中的expvar包提供了一种输出应用内部状态信息的标准化方案,这个方案标准化了以下三方面内容:数据输出接口形式输出数据的编码格式用户自定义性能指标的方法import(_"expvar""fmt""net/http")funcmain(){http.Hand......
  • Go语言精进之路读书笔记第47条——使用pprof对程序进行性能剖析
    47.1pprof的工作原理1.采样数据类型(1)CPU数据(2)堆内存分配数据(3)锁竞争数据(4)阻塞时间数据2.性能数据采集的方式(1)通过性能基准测试进行数据采集gotest-bench.xxx_test.go-cpuprofile=cpu.profgotest-bench.xxx_test.go-memprofile=mem.profgotes......
  • Go语言精进之路读书笔记第49条——使用Delve调试Go代码
    49.1关于调试,你首先应该知道的几件事1.调试前,首先做好心理准备2.预防bug的发生,降低bug的发生概率(1)充分的代码检查(2)为调试版添加断言(3)充分的单元测试(4)代码同级评审3.bug的原因定位和修正(1)收集“现场数据”(2)定位问题所在(3)修正并验证49.2Go调试工......
  • 455. 分发饼干c
    intcmp(constvoid*a,constvoid*b){return*(int*)a-*(int*)b;}intfindContentChildren(int*g,intgSize,int*s,intsSize){qsort(g,gSize,sizeof(int),cmp);qsort(s,sSize,sizeof(int),cmp);inti=0,j=0,n=0;while(i<gSize&am......
  • CF645F
    其实不会反演也可以做。首先显然要考虑给你每个数个数,怎么计数。最简单的方法是从大枚举到小,设\(c_i\)为\(i\)的个数,\(f_i\)为\(\gcd=i\)的\(k\)元组出现了多少次,则\(f_i=\binom{c_i}{k}-\sum_jf_{ij}\),就是\(\gcd\)为\(i\)或\(i\)的倍数减去\(\gcd\)为\(i\)......
  • P4542 [ZJOI2011] 营救皮卡丘
    P4542[ZJOI2011]营救皮卡丘注意到什么叫两面包夹芝士这个是最优解这个是最劣解这究竟是怎么一回事呢?请看下文挺有趣的这道题,我们先来分析一下限制最基础的就是每个点都需要经过这一点,并且要求总路程最小很容易想到的就是路径覆盖问题,进而可以尝试费用......
  • 读书笔记(2)《微精通》
    读书笔记(2)《微精通》背景:在学习如何有效读书的方法之后,想要更进一步的学习了解高效掌握一门技艺的方法。是的,还是带着无比功利性的目的挑选了这本书,希望能帮助自己在将来这段时间内充分利用全部精力和时间来稳步提升自我‍‍内容摘录:发觉兴趣+识别重心+立体学习+......
  • 450. 删除二叉搜索树中的节点c
    这题特别好,和递归删除链表里的元素有异曲同工之妙/***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/structTreeNode*leftleave(structTreeNode*root){root=r......
  • CSP认证2022.12 452分题解
    A、现值计算题解题目简单易懂,直接写就行了。importmathn,i=map(float,input().split())n=int(n)a=list(map(int,input().split()))ans=0.00forjinrange(n+1):ans=ans+math.pow(1+i,-j)*a[j]print(ans)B、训练计划题解显然是个......