美文网首页我爱编程
模糊测试对单元测试应用

模糊测试对单元测试应用

作者: 老余2017 | 来源:发表于2017-12-18 12:12 被阅读0次

    大纲

    -测试总领
    -模糊测试基本介绍
    -模糊测试案例---OpenSSLbug_心脏出血
    -模糊测试工具-go-fuzz介绍
    -模糊测试go-fuzz应用案例

    测试总领

    • image.png

    模糊测试—简单而不平凡

    -概念:一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。
    -技巧:自动模糊测试不去猜测哪个数据会导致破坏(就像人工测试员那样),而是将尽可能多而杂乱数据投入程序中。去验证程序对失败模式处理情况通常对程序员来说是个彻底的震撼,因为任何按逻辑思考的人都不会想到这种失败。
    -运行时间:24 小时对程序进行模糊测试而其依然无事,那么随后同种类型的攻击就不大可能再危及到它。增加了程序健壮性及抵御意外输入的安全性的自信心
    -应用:单元测试、接口测试、集成测试
    -测试工具: Spike,Bunny,teenage mutant ninja turtles,sulley,oss-fuzz, jFuzz(java) go-fuzz(go)
    -常见问题:内存分配错误及缓冲器溢出的结果。

    模糊测试案例---OpenSSLbug_心脏出血

    • image.png
      image.png

    Go-fuzz 原理介绍—流程

    • -> 生成随机数据
      -> 输入给程序
      -> 观察是否有crash
      -> 如果发现crash,则获益
      之后开发者根据crash的结果,尝试fix bug,并
      添加针对这个bug的单元测试case。

    Go-fuzz 原理介绍—遗传算法生成数据策略

    -* Insert/remove/duplicate/copy a random range of random bytes.
    -* Bit flip.
    -* Swap 2 bytes.
    -* Set a byte to a random value.
    -* Add/subtract from a byte/uint16/uint32/uint64 (le/be).
    -* Replace a byte/uint16/uint32 with an interesting value (le/be).
    -* Replace an ascii digit/number with another digit/number.
    -* Splice another input.
    -* Insert a part of another input.
    -* Insert a string/int literal.
    -* Replace with string/int literal.

    Go-fuzz

    -https://github.com/dvyukov/go-fuzz/

    image.png

    它是一个函数

    - image.png

    它是一个BUG

    - image.png

    写单元测试用例

    - image.png

    单元测试用例执行

    - image.png

    它是一个BUG

    - image.png

    Go-fuzz应用---Bug_fuzz.go

    - image.png

    Go-fuzz应用---执行过程

    image.png
    image.png
    image.png
    image.png

    它是一个BUG

    - image.png

    测试工具支持分布式

    image.png

    会用测试工具程序员是好的程序员

    相关文章

      网友评论

        本文标题:模糊测试对单元测试应用

        本文链接:https://www.haomeiwen.com/subject/ganpwxtx.html