Dynamic Analysis
动态分析是在一个真实或者模拟的运行环境中执行给定的程序,确认或发现程序的性质。
动态方法效率高,错误定位准确,但应用场合受限,它必须要求具有程序能运行起来的环境。 而且,其最大的问题在于,动态方法不能覆盖程序的所有输入和全部的执行路径,故只能证明在已有的输入下,被测试所覆盖的部分程序没有问题,而不能证明整个程序不存在错误。
Mannual Test
显然,这是最常用的方法。给定输入,看输出是否符合预期。常用的有单元测试和集成测试。
Fuzz Testing
模糊测试,其核心思想是将自动或半自动生成的随机数据输入到一个程序中,并监视程序异常,如崩溃,断言(assertion)失败,以发现可能的程序错误,比如内存泄漏。模糊测试常常用于检测软件或计算机系统的安全漏洞。
关键的点
- 如何确定程序发生了异常? e.g. Address Sanitizer
- 如何对输入进行有效变异?
AFL
AFL 是谷歌开发的模糊测试框架。
- 自动化的在无穷输入空间寻找有限的输入,触发漏洞。
- 使用遗传算法来有效提高测试用例的代码覆盖率。以此为指导进行输入的变异。
Diff Testing
感觉对实现同一标准的不同软件特别好使。