什么是单元测试和集成测试,以及我应该了解的其他类型的测试?

时间:2009-01-13 03:43:31

标签: unit-testing testing integration-testing

我见过其他人在Stack Overflow上提到了几种类型的测试。

我记得的是单元测试和集成测试。特别是单元测试被提到了很多。什么是单元测试?什么是集成测试?我应该注意哪些其他重要的测试技术?

编程不是我的专业,但我希望它能在某一天;关于制作等的东西也受到欢迎。

9 个答案:

答案 0 :(得分:32)

脱离我的头顶:

  • 单元测试,意为“测试应用程序中最小的可隔离单元”;这通常是一种方法或类,具体取决于规模。
  • 集成测试
  • 功能测试:这可能跨越单位,是TDD的重点。
  • 黑盒测试:仅测试公共界面,不知道该如何工作。
  • 玻璃盒测试:测试物品的所有部分,并充分了解其工作原理。
  • 回归测试:构建用于重现错误的测试用例,以确保它们不会再次出现。
  • 毫无意义的测试:不止一种方式测试相同的基本情况,或测试的东西如此微不足道,以至于它们确实不需要进行测试(如自动生成的getter和setter)

答案 1 :(得分:24)

  

我应该知道我的代码的任何其他重要测试吗?

根据软件生命周期的不同阶段,这些是一些不同类型的测试:

  • 单元测试:这段代码有用吗?
  • 单元测试套件:许多单元测试的序列(针对许多小部分代码)
  • 集成测试:测试两个组件在组合(或“集成”)时是否一起工作
  • 系统测试:测试所有组件在组合(或“集成”)时是否协同工作
  • 验收测试:客户如何决定他是否愿意向您付款(系统测试发现该软件是否按设计运行...验收测试发现“按设计”是否是客户想要的)

还有更多:

  • 可用性测试
  • 性能测试
  • 负载测试
  • 压力测试

而且,更多......测试软件几乎与编写软件一样广泛。

答案 2 :(得分:16)

MSDN: Unit Testing

  

单元测试的主要目标是   拿最小的一块可测试的   应用程序中的软件,隔离   它来自代码的其余部分,以及   确定它是否完全正常   如你所料。每个单元都经过测试   在整合之前单独进行   到模块中测试接口   模块之间。单元测试有   证明了它的价值在于它   确定缺陷百分比   在使用过程中。

MSDN: Integration Testing

  

集成测试是合乎逻辑的   扩展单元测试。在其中   最简单的形式,有两个单位   已经过测试的结合成了   一个组件和它之间的接口   他们经过测试。一个组件,在此   感觉,是指一体化   总计不止一个单位。在一个   现实场景,很多单位都是   组合成组件   把聚合成更大的部分   该计划。想法是测试   最终的组合   扩展过程来测试你的   模块与其他组的模块。   最终所有模块组成了一个   过程一起测试。外   如果程序由...组成   他们应该是不止一个过程   成对测试而不是全部测试   一次。

检查网站以获取更多信息。除了微软之外,还有大量的信息来源。

答案 3 :(得分:8)

另一项重要技术是回归测试。在这种技术中,您需要维护一套测试(称为回归套件),这些测试通常在每晚以及每次签入之前运行。每次修复错误时,都会向套件添加一个或多个测试。目的是阻止您重新引入已修复的旧错误。 (问题非常普遍!)

在项目变大之前开始累积回归套件,否则你会后悔。我当然有!

答案 4 :(得分:6)

对于软件开发生命周期中的阶段,有不同级别的测试。最高级别是需求分析,最低级别是解决方案的实施。

什么是单元测试?

  • 单元测试评估软件的实现。
  • 我们专注于测试程序的单元(即单个方法),并忽略谁调用/使用这些单元。因此,我们基本上将每个单元视为独立单元。
  • 有许多单元测试工具,其中最受欢迎的是JUnit。

  • 执行单元测试时,我们希望构建一个满足特定覆盖标准的测试集(测试用例集)。这可能是一些结构覆盖标准(NC,EC,PPC等)或数据流标准(ADC,AUC,ADUPC等)

  • 请注意,单元测试是最低级别的测试,因为它会评估实现后生成的实际代码单元。这种类型的测试是在集成测试之前完成的。
  • 高效的单元测试有助于确保集成测试不会很痛苦,因为在进行单元测试时发现和修复错误更便宜,更容易

什么是集成测试?

  • 需要进行集成测试,以确保在组合两个或多个组件时我们的软件仍能正常工作。
  • 您可以在系统完成之前执行集成测试。
  • 类集成测试顺序(CITO)问题与集成测试相关联。 CITO与集成组件的策略有关。 CITO有许多提议的解决方案,例如自上而下的集成,自下而上的集成等。主要目标是以一种能够实现高效测试和最少量存根的方式集成组件,因为编写代码存根并不总是很容易并且需要时间。请注意,这仍然是一个活跃的研究领域!
  • 集成测试在单元测试后完成。
  • 通常情况下,各个组件都能正常工作,但是当所有内容组合在一起时,我们会突然看到由于接口不兼容/问题而出现的错误。

其他级别的测试包括:

  1. 回归测试

    • 这种类型的测试非常重要,因为开发人员通常会经常更改软件,因此我们希望确保这些更改不会引入错误。
    • 有效回归测试的关键是限制回归测试的大小,以便完成测试不会花费太长时间,否则测试集将无法在下次提交之前完成运行。我们还必须选择不会错过错误的有效测试用例。
    • 此类测试应该是自动化的。
    • 重要的是要注意,我们可以继续添加更多的机器,以抵消越来越多的回归测试,但在某些时候,权衡是不值得的。
  2. 验收测试

    • 通过此测试,我们评估与所提供的要求相关的软件,基本上我们看看我们生产的软件是否符合我们给出的要求。
    • 这通常是在软件开发活动序列中完成的最后一种测试。因此,在单元测试和集成测试之后进行这种类型的测试。

答案 5 :(得分:3)

单元测试只是编写(希望)小块代码来测试应用程序的独立部分的想法。

例如,您可能有一个计算器应用程序,您需要确保添加功能有效。为此,您需要编写一个单独的应用程序,直接调用添加功能。然后,您的测试函数将评估结果,看它是否符合您的预期。

它基本上用已知输入调用你的函数,并验证输出正是你所期望的。

答案 6 :(得分:2)

google上的前两个搜索结果“测试类型”看起来很全面

我认为最相关的。 See here

答案 7 :(得分:2)

这是我写的一个条目:Different Types of Automated Tests

答案 8 :(得分:1)

单元测试:对单元或最小软件进行的测试。完成验证它是否满足其功能规范或其预期的设计结构。

集成测试:一起测试相关模块的组合功能。

回归测试:测试应用程序以验证修改未导致意外影响。

冒烟测试:验证冒烟测试是否可以测试版本。