43

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

我能回忆起的是单元测试和集成测试。特别是单元测试被提到了很多。究竟什么是单​​元测试?什么是集成测试?我还应该注意哪些其他重要的测试技术?

编程不是我的职业,但我希望有一天能成为;关于生产等的东西也很受欢迎。

4

9 回答 9

36

在我的头顶上:

  • “测试应用程序的最小可隔离单元”意义上的单元测试;这通常是一个方法或一个类,具体取决于规模。
  • 集成测试
  • 功能测试:这可能跨越单元,是 TDD 的重点。
  • 黑盒测试:只测试公共接口,不知道它是如何工作的。
  • 玻璃盒测试:在完全了解其工作原理的情况下测试事物的所有部分。
  • 回归测试:为重现错误而构建的测试用例,以确保它们以后不会再次出现。
  • 毫无意义的测试:以不止一种方式测试相同的基本案例,或者测试非常琐碎的事情以至于它们真的不需要测试(如自动生成的 getter 和 setter)
于 2009-01-13T03:48:45.273 回答
26

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

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

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

还有更多:

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

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

于 2009-01-13T04:10:39.143 回答
16

MSDN:单元测试

单元测试的主要目标是获取应用程序中最小的可测试软件,将其与代码的其余部分隔离,并确定它的行为是否完全符合您的预期。每个单元在集成到模块之前单独测试,以测试模块之间的接口。单元测试已经证明了它的价值,因为在它的使用过程中发现了很大比例的缺陷。

MSDN:集成测试

集成测试是单元测试的逻辑扩展。最简单的形式是将两个已经测试过的单元组合成一个组件,并测试它们之间的接口。从这个意义上说,组件是指多个单元的集成集合。在现实场景中,许多单元被组合成组件,这些组件又被聚合成程序的更大部分。这个想法是测试各个部分的组合,并最终扩展该过程以与其他组的模块一起测试您的模块。最终,组成一个过程的所有模块都一起测试。除此之外,如果程序由多个进程组成,则应成对测试它们而不是同时测试所有进程。

检查网站以获取更多信息。除了 Microsoft 之外,还有大量信息来自其他来源。

于 2009-01-13T03:49:28.843 回答
8

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

在你的项目变大之前尽早开始积累你的回归套件,否则你会后悔的。我肯定有!

于 2009-01-13T06:12:52.267 回答
6

根据您在软件开发生命周期中所处的阶段,有不同级别的测试。最高层是需求分析,最低层是解决方案的实施。

什么是单元测试?

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

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

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

什么是集成测试?

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

其他级别的测试包括:

  1. 回归测试

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

    • 通过这个测试,我们根据所提供的要求评估软件,基本上我们看看我们生产的软件是否满足我们给出的要求。
    • 这通常是软件开发活动序列中完成的最后一种测试。因此,这种类型的测试是在单元测试和集成测试之后完成的。
于 2014-02-26T04:10:28.107 回答
3

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

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

它基本上是使用已知输入调用您的函数并验证输出是否完全符合您的预期。

于 2009-01-13T03:49:47.983 回答
2

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

我认为最相关的那些。见这里

于 2009-01-13T06:13:31.563 回答
2

这是我写的一个条目:不同类型的自动化测试

于 2009-01-13T06:33:37.827 回答
1

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

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

回归测试:测试应用程序以验证修改没有造成意外影响。

冒烟测试:冒烟测试验证构建是否可测试。

于 2013-12-13T10:50:06.630 回答