测试和验证之间有什么区别?


15

我看过的每本教科书都充分说明了测试验证是两个不同的概念。然而,它们都没有一个清晰的(最后对我来说不够清晰)的区别。

为了提供一些背景信息,我对使用硬件设计语言(HDL)验证数字硬件设计感兴趣。

我已经看到了一些解释,这些解释诉诸于“物理”或“有形”差异:如果是关于制造的设备,那么它就是测试。这是整个故事吗?如果是这样,为什么在验证中经常出现“测试”一词(尤其是在功能验证中,我们谈论的是测试用例,测试平台,DUT(被测设备),定向测试,随机测试等。)

Answers:


21

是高通公司的ASIC设计验证工程师。用最简单的方式我可以解释一下:

测试:创建产品后,确保产品正常运行(请考虑进行质量检查)。

验证:在创建产品之前,请确保其能够正常工作。

他们都在测试,只是验证更加复杂,因为您必须找到一种在产品存在之前对其进行测试的方法,并且必须能够确保产品按设计工作并在实际推出时进行规格说明。

例如,英特尔正在设计他们的下一个处理器,它们具有规格,原理图和仿真。他们花费了10亿美元进行制造和制造。然后芯片返回,他们进行了测试,发现它不起作用。他们只是从窗外扔了很多钱。

进行验证。验证工程师创建模拟芯片行为的模型,并创建测试平台以测试那些特定模型。他们得到这些模型的结果,然后将其与RTL(用硬件设计语言编写的电路模型)结果进行比较。如果它们匹配,则一切正常。

验证过程有很多不同的方法,一种流行的方法通用验证方法(UVM)

该领域有很多深度,人们可以在其中度过整个职业。

另一个随机的信息:通常您需要3位验证工程师才能为1位设计工程师提供帮助。无论如何,这就是该领域每个人所说的。

编辑:很多人认为验证是一种测试角色,但事实并非如此。它本身就是设计角色,因为您必须像设计人员一样了解IC的所有复杂性,然后您必须知道如何设计模型,测试台以及涵盖IC所有功能的所有测试用例,并尝试按RTL代码的每一行查找所有可能的位组合。请记住,由于制造工艺允许越来越小(现在为14nm),当今的处理器具有数十亿个晶体管。

而且,在诸如英特尔,AMD,高通等大型公司中,设计人员实际上并未设计芯片。通常,架构师将定义所有规格,布置需要组合在一起才能获得具有特定要求(例如速度,分辨率等)的特定功能的零件类型,然后设计人员会将其编码为RTL。这绝不是一件容易的事,它只是不像许多来自学校的工程师认为的那样设计。每个人都想成为一名建筑师,但是要达到这一点需要大量的教育和经验。许多建筑师都有博士学位,并且在该领域有15-20年的设计经验。这些才华横溢的人(有时甚至是疯子)应该做自己正在做的事情,并且他们很擅长。我研究的第一个芯片的架构师有点笨拙,并没有真正遵循一些社会规范,但是他可以解决您在芯片方面遇到的任何问题,有时他会在头脑中解决它并告诉您看到一个信号,您会想,“他到底是怎么做到的?”。然后,您让他解释一下,他做到了,事情就超出您的范围了。实际上,即使我已经毕业,但仍然启发了我阅读教科书。


+1感谢您的最后发言,这有助于我们看到该领域确实很重要(尽管我认为RTL和设计工程对大多数工程师来说更具吸引力)
VHDL Addict

为了完整性,您介意添加一个测试用例吗?
VHDL成瘾者2014年

由于您对设计角色更具吸引力的第一句话,我添加了一个有关验证实际上是什么的提示。他们都是好角色,只是取决于您的喜好。至于测试用例,像Snapdragon这样的SoC可能有数以万计的测试用例,甚至数以万计的测试用例。简而言之:您要应用一组输入位,并且要通过许多模块进行更改,然后才能得到一些输出位,并将其与模型的结果进行比较。就像测试手机上显示的图片一样简单的事情就可以...
PGT

大量的测试用例。假设您要在手机屏幕上显示一个像素。场外人士会想到的是将1位用于白色,将0位用于黑色。在实际的移动世界中,该像素的大小,强度,旋转度,颜色格式(YUV ###,RGB ###等)可能会有所不同。您可能正在测试一组位中的1位,这些位将一起应用于输入。其他位可能因为黑色而为0,或者因为正在处理其他信息(例如如何处理传输模式,CLK,启用/禁用,触发器,类似此类的东西)而可能为1。
PGT

6

在我的书中,“验证”确保您设计的内容“可以完成”-即,您拥有“设备”需要执行的一系列操作,而验证则将那些内容从列表中剔除了。

不过,测试是确保“设备”所做的事情正确无误。您有一组功能,并且测试每个功能以确保该功能正确执行。

简而言之,Verification是检查设计,而Testing是检查产品。


我想我已经开始了解...请您分别提供一些示例吗?
VHDL成瘾者

这与验证计划如何吻合,后者规定了应实施的内容,以及如何知道功能是否正确?如果功能不起作用,则实现或取消功能几乎没有用。
VHDL Addict

@ Majenko-那么您写了一本关于验证的书吗?您是否会分享更多细节?
迈克尔·卡拉斯

4

来自ASIC(硬件)设计背景的三个重要术语:验证验证测试。较早的答案通常只讨论其中一个或两个术语,但并没有按照我的方式清楚地对比所有三个术语。这是我理解它们的方式:

  • 验证:规范(通常为C模型)是否满足市场或客户要求
  • 验证:实现(RTL,网表或GDS2)是否符合规范
  • 测试:制造的设备是否与实现相匹配

网表和GDS2模拟能否给出不同的结果?
Ciro Santilli新疆改造中心法轮功六四事件

1
@CiroSantilli巴拿马文件六四事件法轮功,我想你是在问门与晶体管的行为。对于正常的数字电压和波形,我会说它们会给出相同的结果。但是,理想的门可能不会考虑“模拟”效应,例如电源/接地变化或信号电荷共享。如果存在这些影响,那么理想的数字行为可能就不成立。
温斯顿·史密斯

1
@CiroSantilli新疆改造中心法轮功六四事件是的,他们可以给出明显不同的结果。在那里,犯了那个错误。
Elliot Alderson

1

测试旨在查看是否满足规范。验证是为了查看设备是否符合设计输入-即所有规格。我想还有更多的解释,但这就是我在FIA指导文档中所看到的。


我知道,我对措辞做了一些改动(从testtesting),以使两者都更清晰。我同意您的观点,对于单个测试,单词test是适当的(有时,我觉得我在用这些术语问题来重申显而易见的内容……):)
VHDL Addict

1

我们在验证测试和验证测试之间进行区分。假设您要设计一种风扇,以冷却某些设备。进行了验证测试,以确保风扇满足所有设计要求。因此,您可以测试气流,热循环,振动等。

验证测试可确保设计要求是正确的。我们为风扇提供的设计输入实际上是否为我们提供了所需的风扇?例如,您要确保风扇确实按预期冷却了设备。


这是我已阅读的有关软件工程的书如何理解这些术语的方式。验证=确保需求正确(与客户,法规等进行核对);验证=确保产品正确(根据规格进行测试)
Wouter van Ooijen 2014年

1

ISO9000谈论验证和确认。在ISO9000中,验证意味着测试原型设计以证明其符合功能和性能要求。验证意味着测试首次生产运行也符合设计期望。首先验证,然后验证是我记忆事物顺序的小方法。

几种软件标准颠倒了验证和确认的顺序,这确实可能引起混乱,因此请注意这一点。

最重要的是...您为什么要测试某些东西-它是原型设计-如果是这样,则质量标准倾向于称这种验证。如果您是第一次测试生产运行,那么硬件人员会将此验证称为“验证”。

只是我的个人经历。


0

通过阅读这些答复,我现在意识到对行业中的“测试”与“验证”有何不同没有固定的定义。

在使用硬件设计(“真正的”硬件设计,如PCB上的东西,而不是VHDL编程)时,我们会经历验证和确认阶段以及生产测试阶段(实际上只是自行设计生产测试并将其交付到生产现场)。-验证-(1)验证原型/大量生产的产品是否满足硬件要求(2)根据SYS要求验证硬件要求。-生产测试-烟气测试以及简化而快速的验证测试用例,适合于筛选出批量生产的缺陷,而不必为每年生产的500,000个单元进行整个验证过程。

因此,在特定的跨国公司中,“测试”是指生产测试,仅此而已。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.