代码覆盖率与测试覆盖率比较

软件测试帮助我们确保代码正常工作,这使其成为开发过程的重要组成部分。在讨论测试时,可能会出现代码覆盖率和测试覆盖率等术语。尽管它们都代表了一种衡量代码库有效性的方法,但它们引用了不同的概念。因此,我们不应该互换使用它们。

在本教程中,我们将了解代码和测试覆盖率之间的差异,并讨论各自的含义。

代码覆盖率
代码覆盖率是一种衡量测试中覆盖的源代码部分的机制。它代表了白盒测试的一种形式,需要访问源代码并考虑实现细节和代码的内部结构。代码覆盖率主要由开发人员在单元测试中完成。

有多种方法可以衡量代码覆盖率:

  • 语句/行覆盖率检查测试期间至少执行一次的语句数。
  • 分支覆盖率计算决策过程中覆盖分支的百分比。
  • 条件/表达式覆盖确保每个条件至少被评估为真或假一次。
  • 函数覆盖率计算至少调用了一次的方法数​​量。

代码覆盖率结果通常以百分比显示,衡量测试覆盖源代码的比率。

此外,我们通常需要一个外部工具来测量代码覆盖率。对于基于 Java 的应用程序,我们可以使用JaCoCo或Cobertura等工具。这些可以帮助我们生成详细的报告,显示源代码的哪些部分被覆盖,哪些部分未被覆盖。

最常见的代码覆盖率类型是语句覆盖率,我们可以使用通用公式来计算:

Statement coverage = (Number of executed statements / Total number of statements) * 100
同样,我们可以计算其他代码覆盖率类型。

1.代码覆盖率优势
接下来,我们来看看代码覆盖率方面的优势。首先,它提供定量指标的结果。

  • 使用代码覆盖工具,我们可以识别测试未覆盖的部分源代码。
  • 此外,我们可以更容易地检测未使用的源代码,这使我们能够删除不必要的代码。

2.代码覆盖率的缺点
最后,让我们讨论一些代码覆盖率的缺点。

  • 如前所述,代码覆盖率仅计算整个自动化测试中执行的源代码量。它不能保证我们的测试有效且正确。
  • 我们可以在实现高代码覆盖率的同时编写糟糕的测试。考虑到这一点,100% 的代码覆盖率并不一定意味着我们的代码没有错误和问题。
  • 此外,强制 100% 覆盖率可能会导致仅仅为了增加代码覆盖率而编写无用的测试。

测试覆盖率
另一方面,测试覆盖率是我们用来描述测试覆盖应用程序功能的程度的指标。

测试覆盖率的主要目标是确定应用程序的测试情况,同时考虑用例、需求、功能、风险、不同环境和其他因素。有了这样的覆盖范围,我们就可以覆盖所有必要的功能、业务需求和边缘情况。

测试覆盖率由 QA 团队从最终用户的角度计算。它有助于确定应用程序的哪些部分已经过测试以及哪些部分可能仍需要我们的注意。尽管它可能考虑单元测试,但它还包含其他方面,包括功能测试、集成测试和验收测试。

此外,测试覆盖率可以与自动测试和手动测试相关。我们可以使用Selenium、Playwright或Cypress等工具进行自动化测试。这些工具可以帮助我们比手动测试更轻松地计算测试覆盖率。

与代码覆盖率不同,测试覆盖率的重点是确保我们已经覆盖了应用程序的功能。

有多种方法可以定义测试覆盖率:

  • 产品覆盖率检查测试是否涵盖整体产品功能。
  • 风险覆盖率检查测试覆盖应用程序的易受攻击部分(例如安全性)的程度。
  • 需求覆盖率确保测试涵盖所有需求和用例。
  • 兼容性覆盖率衡量应用程序在不同平台、浏览器和操作系统上的运行情况。
  • 边界值覆盖检查测试覆盖边缘情况的效率。

与代码覆盖率不同,测试覆盖率更定性而不是定量,这使得量化更具挑战性。但是,如果我们想计算需求覆盖率作为示例,我们可以使用以下公式:

Requirements coverage = (Number of covered requirements / Total number of requirements) * 100

请注意,该表达式类似于代码覆盖率测量,但测试覆盖率计算的输入可能更难量化。

1.测试覆盖率优势
让我们看看测试覆盖率的一些积极方面。

  • 首先,它确保应用程序的每个方面都经过检查并确定仍需要测试的功能。
  • 与代码覆盖率不同,它不一定需要技术知识,特别是当我们谈论手动测试时。因此,它更容易实施。
  • 它代表一种黑盒测试方法,测试人员无法访问源代码。它仅关注从给定输入检索的输出。
  • 此外,此类测试侧重于整体用户体验。

2.测试覆盖率的缺点
就像代码覆盖率一样,测试覆盖率并不能保证应用程序运行时不会出现问题。

  • 由于我们无法深入了解源代码,因此我们无法衡量某些方面,例如代码库质量。
  • 此外,我们无法通过测试覆盖率检测源代码中未使用的部分。

代码覆盖率和测试覆盖率的比较
总而言之,我们用一个比较表来展示代码和测试覆盖率之间的差异:

覆盖:

  • 代码覆盖率:测量测试覆盖的源代码的百分比。  
  •  测试覆盖率: 通过测试衡量覆盖的需求数量。

定量:

  • 代码覆盖率:定量测量。  
  •  测试覆盖率: 定量或定性测量。

完整:

  • 代码覆盖率:确保测试覆盖所有源代码。    
  •  测试覆盖率:确保测试涵盖所有应用程序的功能。

角色:

  • 代码覆盖率:由开发人员完成。    
  •  测试覆盖率:由质量检查完成。

方法:

  • 代码覆盖率:白盒测试方法。    
  •  测试覆盖率:黑盒测试方法。

测试:

  • 代码覆盖率:通常在单元测试中完成。    
  •  测试覆盖率:通常在验收测试中完成。