Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 如果一个项目有100%的单元测试覆盖率,那么还需要集成测试吗?_Unit Testing - Fatal编程技术网

Unit testing 如果一个项目有100%的单元测试覆盖率,那么还需要集成测试吗?

Unit testing 如果一个项目有100%的单元测试覆盖率,那么还需要集成测试吗?,unit-testing,Unit Testing,如果一个项目有100%的单元测试覆盖率,那么还需要集成测试吗 我从来没有在一个100%单元测试覆盖率的项目上工作过,但是我想知道你的项目是否获得了这一点(或者90%),你的经验是否表明你仍然需要集成测试?(你需要少一点吗?) 我这样问是因为集成测试似乎很糟糕。它们通常是缓慢的、脆弱的(容易破碎)、不透明的(当破碎时,有人必须潜入所有层以找出错误),并导致我们的项目慢下来。。。我开始认为只有单元测试(也许还有少量冒烟测试)才是最好的选择 从长远来看,集成测试(以我的经验)的成本似乎比它们节省的多

如果一个项目有100%的单元测试覆盖率,那么还需要集成测试吗

我从来没有在一个100%单元测试覆盖率的项目上工作过,但是我想知道你的项目是否获得了这一点(或者90%),你的经验是否表明你仍然需要集成测试?(你需要少一点吗?)

我这样问是因为集成测试似乎很糟糕。它们通常是缓慢的、脆弱的(容易破碎)、不透明的(当破碎时,有人必须潜入所有层以找出错误),并导致我们的项目慢下来。。。我开始认为只有单元测试(也许还有少量冒烟测试)才是最好的选择

从长远来看,集成测试(以我的经验)的成本似乎比它们节省的多


谢谢您的考虑。

是的,此外还有几种不同类型的代码覆盖

  • 功能覆盖范围-程序中的每个功能是否都已执行
  • 语句覆盖率-是否执行了每行源代码
  • 决策覆盖率(也称为分支覆盖率)-每个控制结构(如if语句)的评估结果是否为真
  • 条件覆盖率-是否对每个布尔子表达式求值为true和false(这不一定意味着决策覆盖率)
  • 修改条件/决策覆盖率(MC/DC)-决策中的每个条件是否至少对所有可能的结果进行一次决策?是否已证明每种情况都会独立影响决策结果
  • 路径覆盖范围-是否已执行通过给定代码部分的所有可能路径
  • 进入/退出覆盖范围-是否执行了函数的所有可能调用和返回
例如,路径覆盖率,仅仅因为每个方法都已被调用,并不意味着如果您按给定顺序调用各种方法,就不会发生错误。


即使所有“单元”都完成了它们应该做的事情,也不能保证整个系统按设计工作。

单元测试不同于集成测试

只是想说明一点:如果我必须选择,我会转储单元测试并进行集成测试。经验告诉我们,单元测试有助于确保功能,并在开发周期的早期发现bug


集成测试是在产品外观接近最终用户外观的情况下完成的。这也很重要

单元测试通常都是关于单独测试类的。它们的设计应该确保在给定特定输入的情况下,您的类表现出可预测和预期的行为


集成测试通常都是关于测试类之间的组合以及使用这些类的“外部”程序。他们应该专注于确保当整个产品使用您的类时,它是以正确的方式使用的。

是的,因为您的软件的功能取决于它的交互方式。单元测试取决于您提供的输入和定义的预期输出。这样做并不能保证它能与系统的其余部分一起工作

是的,当您引入故意更改输出的代码更改时,集成测试是一个很难处理的问题。在我们的软件中,我们通过将集成测试的保存结果与保存的正确结果进行比较,来最大限度地减少这种情况


我们有一个工具,当我们确信我们正在产生正确的结果时可以使用。它将启动并加载旧的已保存的正确结果,并对其进行修改以使用新设置

首先,即使在单元测试级别,100%的单元测试覆盖率也是不够的:您只覆盖代码指令的100%。那么代码中的路径呢?输入或输出域呢

其次,您不知道发送器单元的输出是否与其接收器单元的输入兼容。这就是集成测试的目的


最后,单元测试可以在不同于生产环境的环境中执行。集成测试可能会发现差异。

“不透明(当出现故障时,必须有人深入所有层以找出问题所在)”--这正是进行集成测试的原因-否则,这些不透明的问题将在生产环境中出现。

我经常看到良好的集成测试会发现各种各样的问题-特别是如果您可以自动化一些集成测试的话

单元测试非常好,但是您可以在单元测试中实现100%的代码覆盖率,而不需要100%的相关性。你真的想测试不同的东西,对吗?在单元测试中,您通常会寻找特定函数的边缘情况,而集成测试会在所有这些函数交互时向您展示更高级别的问题

如果你在你的软件中构建了一个API,你可以用它来进行自动化集成测试——过去我从中获得了很多经验。我不知道我会说我会放弃单元测试而支持集成测试,但当它们做对了,它们真的是一个强大的补充。

Definitions 我认为在进行讨论之前定义术语是很重要的

单元测试单独测试单个单元。对我来说,这是一门课。单元测试将创建一个对象,调用一个方法,并检查结果。它回答了这样一个问题:“我的代码做了我想做的事情吗?”

集成测试测试系统中两个组件的组合。它关注的是组件之间的关系,而不是组件本身。它回答了“这些组件是否按预期协同工作”的问题

系统测试测试整个软件系统。它回答了这个问题