Unit testing 在研究算法时,选择特定类型的覆盖率标准背后的基本原理是什么?

Unit testing 在研究算法时,选择特定类型的覆盖率标准背后的基本原理是什么?,unit-testing,testing,Unit Testing,Testing,因此,我不确定du-path覆盖率(或任何数据流覆盖率标准)与谓词标准或分支/节点标准的优缺点 我可以看出,在某些情况下,一种保险对另一种保险有明显的好处。例如,如果我的许多算法包含类似的内容,那么下一个示例 void m(); void n(); void method(boolean b) { if (b) { m(); } else { n(); } } 显然,使用任何类型的数据流覆盖标准都会让很多逻辑未经测试(这是我们希望避免的

因此,我不确定
du-path
覆盖率(或任何数据流覆盖率标准)与谓词标准或分支/节点标准的优缺点

我可以看出,在某些情况下,一种保险对另一种保险有明显的好处。例如,如果我的许多算法包含类似的内容,那么下一个示例

void m();
void n();

void method(boolean b) {
    if (b) {
        m();
    } else {
        n();
    }
}
显然,使用任何类型的数据流覆盖标准都会让很多逻辑未经测试(这是我们希望避免的)。对于给定的情况,使用谓词/子句标准会更好

现在,我想知道的是,对于一般情况,在决定要遵循哪种覆盖率标准时,在

  • 图表
  • 数据流
  • 逻辑
  • 输入
  • 语法
各种覆盖率标准(基本上是中的标准)。也就是说,对于一般情况,我基本上是在寻找一般的启发式方法


谢谢

不可否认,我在这方面没有做太多研究,也不一定完全关注你(主要是因为我在这方面缺乏经验)。但希望这不会太离谱

我对代码覆盖率的理解一直是,您希望覆盖所有可能的执行路径。现在我知道有些路径比其他路径重要得多(例如:“快乐路径”比设置某些属性的模糊路径重要得多),但不管天气如何,你至少要意识到它们的存在,并有意识地选择要覆盖什么和不覆盖什么(通过单元测试或手动)

您可以先查看方法和编写测试用例,但这很快就会变得不可靠,因为无论算法类型如何,您都无法看到所有可能的执行路径。即使是非常小的程序也会产生无法解释的错误,因为测试人员没有想到用这种方式“尝试”

您真正需要的是一个代码覆盖工具,它可以告诉您哪些执行路径被单元测试覆盖,哪些没有。在这一点上,您可以根据天气做出逻辑决定,或者不覆盖那些缺失的情况(因为并非所有情况都值得您花时间).如果没有这样一个工具,我想你会花无数的工时逐行跟踪测试用例覆盖了什么…即使这个工具花费几百美元(甚至几千美元),我想你会很快收回节省下来的资金

所以我给你们的一般启发是使用这样一个工具来跟踪你们的测试覆盖率,并根据结果决定覆盖还是不覆盖

一些代码覆盖工具(不全面):

  • .NET-
  • PHP-
  • 爪哇-
  • 红宝石
  • JavaScript-

我感谢您的回答,但如前所述,我想您完全超出了预期答案的范围(与不同的测试标准有关,如《软件测试导论》中所述).但是,哦,好吧,似乎没有人知道怎么回答。我想我应该试一试,因为没有人试过……当这个问题上唯一的专家是“你”的时候,这很难:)也许你可以试着联系作者。祝你好运找到你的答案!