我和我的朋友一直在努力准确地对什么是集成测试进行分类。
现在,在回家的路上,我才意识到,每当我尝试给出一个真实的集成测试示例时,它实际上就是一个验收测试,即。业务人员会大声说出要指定系统应该提供的内容。
我检查了Ruby on Rails文档中对这些测试类型的分类,现在完全把我扔了。
您能否以一个真实的例子为我提供关于集成测试的简短学术描述?
我和我的朋友一直在努力准确地对什么是集成测试进行分类。
现在,在回家的路上,我才意识到,每当我尝试给出一个真实的集成测试示例时,它实际上就是一个验收测试,即。业务人员会大声说出要指定系统应该提供的内容。
我检查了Ruby on Rails文档中对这些测试类型的分类,现在完全把我扔了。
您能否以一个真实的例子为我提供关于集成测试的简短学术描述?
Answers:
目前,我喜欢这样的说法:Gojko Adzic在本文中提出的“它的重要性并不重要,但它的作用” 。
您确实需要与谈论测试的人员一起指定要测试的内容。
根据角色的不同,很多人有不同的看法。
对于测试人员,TMap是荷兰公认的测试方法。TMap有以下区别。
他们具有可以在上述测试中执行的更具体的测试类型。查看此Word文档以获取概述。
维基百科也有很好的概述。
在本书的务实程序员说:
着眼于这些不同的来源,并提出一些自己的经验和观点,我将首先按三个类别进行区分
测试的目的是什么
我上面的列表只是一个开始和建议,但我确实认为:“您所说的并不重要,但它的作用”
希望这可以帮助。
2016年10月26日编辑:最近在YouTube 单元测试与集成测试上做了一个非常不错的介绍-MPJ的Musings-FunFunFunction#55
集成测试,结果证明是验收测试
明显。
这两个几乎是同一回事。但是测试定义的维度有些不同。
集成==系统整体。
接受==整个系统。
唯一的区别-这是微妙的-是测试用例的定义。
集成==测试用例,用于测试集成的深度和程度。它适用于所有边缘情况和拐角情况吗?测试用例往往是技术性的,由设计师和编码人员编写。
验收==测试用例仅使用针对最终用户的功能集的80%。并非所有的边缘和角落情况。测试用例往往是非技术性的,由最终用户编写。
当系统的每个组件都是真实的,没有模拟对象时,我个人喜欢将集成测试视为功能测试。
真实的存储库,真实的数据库,真实的UI。在系统完全组装好之后,就像在部署时一样,您应该测试特定的功能。
在我(我承认)的一点经验中,我了解到集成一词确实会造成误解:确实,很难在系统中找到完全孤立的事物,某些元素肯定需要进行集成。
因此,我习惯于进行以下区分:
在集成测试定义中,外部是指超出我的开发范围的系统:出于任何原因,我都无法立即更改它们的行为方式。它可能是一个库,一个无法更改的系统组件(即与公司中的其他项目共享),一个dbms等。对于这些测试,我需要设置与实际环境非常相似的东西将在以下环境中工作:必须初始化外部系统并将其设置为特定状态;真实数据必须在数据库中注册;等等
相反,当我进行验收测试时,我会伪造一些东西:我在做不同的事情,我在研究系统的规格,而不是它与外部实体协作的能力。
与KeesDijk先前描述的相比,这实际上是一个狭窄的视图,但是我认为到目前为止我从事的项目很小,足以让我简化。
一个集成测试验证一个复杂的系统(如软件,飞机,动力装置)的组件一起工作的设计。
假设我们正在谈论一架飞机(使用软件则更加抽象,并且很难有所作为)。集成测试包括:
在集成测试解决一个技术问题,即该系统工作,尽管其细分成组件。在软件中,组件可以是用例,模块,功能,接口,库等。
在验收试验证明产品是符合目的。它们原则上由客户执行。以飞机为例,它们包括验证以下内容:
在验收测试解决更多的是责任问题。在客户/供应商关系中,这可能是合同责任(符合所有要求)。但是在任何情况下,使用组织都有责任确保他们的职责可以在系统中继续执行,并审慎地防止任何不可预见的问题(例如,像这家铁路公司在验收测试中发现他们必须缩短准点,因为新的旅行车太大了5厘米-别开玩笑了!)。
结论:集成和验收测试是重叠的。他们俩都打算表明该系统作为一个整体起作用。但是,“整体”对于客户而言可能更大(因为该系统本身可能是更大的组织系统的一部分),而对于系统集成商而言,则更具技术性:
集成测试的一个实际定义是:任何需要与进程外交互的测试。
例如:
您的流程与外部世界之间存在某种合同,并且最小程度地验证该合同应该是集成测试的目标。也就是说,它只需要验证合同即可。如果是这样,那么您正在朝系统/端对端空间移动。
单元测试能够测试过程边界内的所有逻辑,并且由于不依赖于慢速/脆弱/复杂的“外部世界” ,因此它们可以轻松地精确地进行测试。
尽管有集成测试,但此定义并未涵盖(因此,为什么将其称为实际定义),我认为它们的通用性/实用性要差得多。
注意严格来说,是的,该定义也将涵盖系统/端对端测试。在我的哲学中,它们是“极限”集成测试的一种形式,因此,为什么它们的名称强调另一个方面。在另一个方向上,单元测试可以视为零组件的集成测试,即所有测试都可以视为位于积分谱中的某个位置,在0-n个组件之间进行积分 :-)