研究!皇家化学学会:用于调试的差异覆盖

主要观点:介绍了用于调试的差异覆盖技术,通过比较成功测试和失败测试的代码覆盖来定位可能有问题的代码。
关键信息

  • 可以使用go test命令收集成功和失败的测试覆盖文件,如go test -coverprofile=c1.prof -skip='TestAddSub$'go test -coverprofile=c2.prof -run='TestAddSub$'
  • diff命令比较两个覆盖文件,提取出失败测试独有的部分,如(head -1 c1.prof; diff c[12].prof | sed -n 's/^> //p') >c3.prof
  • 差异覆盖技术能快速定位可能的问题代码,如在math/big的例子中,定位到natmul.go中的问题代码。
  • 该技术并非完全可靠,可能存在数据依赖等情况导致误判,但在很多情况下能节省调试时间。
    重要细节
  • 差异覆盖计算和显示成本低,在超过 15000 行代码中能定位到 10 个相关代码块,包括上述例子中的两个。
  • 还可以查看单个失败测试的基本覆盖文件来指导调试,如明确哪些代码在测试中运行,哪些未运行。
  • 差异覆盖也适用于通过的测试,如在net/http中查找特定功能的代码。
阅读 8
0 条评论