本申请案与2009年9月25日申请的题为“并行测试方法实施方案的框架结构方法(A FRAMEWORK APPROACH TO CONCURRENT TEST METHODIMPLEMENTATION)”的第61/246,024号美国临时专利申请案有关且主张所述案的优先权。
具体实施方式
自动测试设备(ATE)工业已转向开发使并行测试实施方案(即,并行地测试装置中的一个以上功能块)容易的工具。关于个别测试的若干变量可在功能块之间配对在一起以实现并行执行,例如,数字定序器模式(digital sequencer pattern)、ATE模拟仪器设置、被测装置(DUT)接口板硬件、测试-执行定序及软件测试代码。并行测试可在不牺牲覆盖范围的情况下减少测试时间,且可减少产品的最终成本。
本文中所揭示的系统及方法可有助于克服在试图管理目标为并行测试实施方案的独立功能块的不同测试代码片段时出现的挑战。可应用本文中所揭示的系统及方法的平台的一个实例是惠瑞捷(Verigy)93K ATE平台。举例来说,SmarTest软件(Verigy的编程93K的接口)当前并未提供排定来自单独库的测试代码的执行顺序以用于并行性应用的方式。通常,为组合用于不同功能块的测试代码,可需要手动工作来封装同一函数调用下的所有代码片段。还可能需要修改接口(例如,“测试流(TestFlow)”接口)以考虑并行实施方案可能需要的测试参数的组合集合。此方法决非通用的,且需要重复用于给定程序可呈现的测试的不同组合,从而导致跨越覆盖并行测试的每一可能集合所需的所有不同函数调用的代码的复制。此方法还使得在试图隔离问题或使数据相关时难以在并行执行与独立执行之间切换。管理实施并行性的测试程序接着变成耗时的工作,这是因为每当测试程序归因于产率学习而需要修改时,分组的并行测试的集合可改变,从而需要覆盖新近所需测试配对的额外函数的译码。
为克服所提及的问题,本文中所揭示的系统及方法提供编程框架结构,其管理以允许并行测试执行的顺序方式将来自不同测试的个别代码片段放在一起。所述框架结构可在程序运行阶段(run-time)期间动态地进行此操作,且可组合来自不同库(例如,“测试方法(TestMethod)”库)的任何数目个测试(例如,多达指定的硬译码限制),而无需程序设计者预先定义每一可能组合。连同所述框架结构引出一准则集合,每一个别测试必需遵循所述准则集合以结构化其代码。此结构遵循阶层式类方法,在所述方法中,个别测试经译码为概述每一个别测试必须定义的函数的最小集合的基本类的衍生类。这些函数可包含(例如)典型测试可遵循以设置仪器、测量及后处理数据的不同步骤的分解版本,其允许所述通用框架结构以同步的方式针对既定用于并行执行的每一测试顺序地调用这些“步骤”中的每一者。假定个别测试遵循这些准则,则同一代码集合可再用于独立执行或与其它测试的并行执行。这需要代码执行并假定测试的其它方面已准备好用于并行执行(例如,数字定序器模式、ATE模拟仪器设置、DUT接口板硬件等)。还已定义用以排定执行顺序的程序(例如,在TestFlow接口中)以允许通过减少的工作来在独立测试实施方案与并行测试实施方案之间进行容易的转变。
本文中所揭示的系统及方法存在许多益处。举例来说,本文中所揭示的系统及方法可减少从开发阶段转变到生产阶段所需的时间及工作,从而允许在无代码修改的情况下在独立测试模式与并行测试模式之间来回移动,且通过模块化函数及避免针对并行测试的每一不同组合而手动组合代码的需要来增加代码再使用。此外,本文中所揭示的系统及方法可促进经由阶层式类结构在相关测试间共享共同函数及存储空间。此情形可允许再使用单一接口(例如,“TestFlow”接口)以在独立模式或并行模式下执行测试,其可允许通过定义准则集合及结构以译码个别测试而使跨越库的测试代码开发标准化,且可通过具有一框架结构而允许跨越功能块启用一致且统一的程序行为,所述框架结构不管被测块如何均以同一方式排定代码执行的顺序。
旨在并行测试的先前程序代码解决方案由建置具有函数的新库(例如,TestMethod库)组成,所述函数混合来自目标是并行执行的各种测试的个别代码片段。对于预期用于并行执行的每一测试集合,将接着存在用以执行所述测试的新函数。如果给定测试包括于一个以上并行测试集合中,则用于所述测试的代码将在与包括所述测试的不同集合一样多的函数中进行复制。代码复制在此方案中按指数规律增长,当需要对测试进行修改时变得难以维护,且在将来自不同测试的代码片段手动地防在一起时易于出错。
解决问题的较高效方案将会将个别测试分解成较小子函数,其中所述子函数中的每一者处理待执行的特定任务。并行测试代码将针对既定用于并行执行的测试中的每一者调用较小子函数。仍将需要一些手动再设计(re-engineering)以允许所述测试一起共存并选择将允许这些测试并行地执行的适当ATE命令。虽然在所述方案中大大减少了代码复制,但仍存在建置并行函数调用所需的大量手动工作。此外,对于并行测试的每一不同组合,需要新的函数调用集合。依据一接口(例如,TestFlow接口),两种解决方案均需要建立具有个别测试的参数的组合的新方法(例如,TestMethod)定义。由于无法使用同一程序退回到独立测试,因此还需要完全重建构程序设置及接口(例如,TestFlow)以允许独立到并行的转变。
本文中所揭示的改进的系统及方法可使用程序设计类(例如,C++类)的概念。这些结构可用以按使得可通过通用框架结构处置并行测试执行的方式来分解并构造(architect)测试代码。此情形允许使用确切相同的代码用于独立执行或并行执行,而不管配对在一起的测试的数目或性质如何。所揭示的系统及方法使用类(例如,C++类)与通用框架结构的组合。本文中所揭示的系统及方法的一个实例是关于使用阶层式类在Verigy 93K ATE中的并行TestMethod实施方案、管理测试代码执行的通用框架结构及交错的TestFlow定序方法的基于C++类的方法。
本文中所揭示的系统及方法的更特定及技术实例提供如下。虽然可使用Verigy 93KATE及C++编程语言应用本文中所揭示的系统及方法,但本文中所揭示的系统及方法可使用其它平台及/或语言来应用且不应限于以下实例中所说明的实施方案。最初说明的概念是从实际实施方案简化而来且具有示范及解释所揭示的系统及方法的目的。举例来说,出于清楚及理解起见,可使用无严密语法的C++伪码。
Verigy 93K ATE的软件接口(SmarTest)提供支持将测试译码成单独库的开发环境。每一库可含有若干不同TestMethod,其为程序在执行期间调用的主函数且依据其执行每一个别测试。在TestFlow中指定这些TestMethod中的每一者需要的参数,TestFlow是SmarTest用以定义不同测试执行的顺序的图形表示。TestFlow含有称为测试套件(TestSuite)的个别块,TestSuite含有可用以执行测试的设置(例如,电平、时序、模式及模拟仪器定义)的群组以及TestMethod及可用于测试的相关联参数。
到最近的可用SmarTest版本(例如,6.1.5、6.3.5及6.5.2)为止,不存在容易地组合不同TestSuite以用于并行测试执行的工具或方式。也不存在结构化及选取两个或两个以上TestMethod函数以使得可并行地执行相关测试(例如,假定相关测试使用可并行运行的独立ATE资源或仪器)的方式。
举例来说,假定存在给定程序可并行地运行以节省测试时间的三个独立TestMethod。所述三个独立TestMethod中的每一者针对被测装置(DUT)中的一不同块执行测试。假定所述块称为块A、B及C。进一步假定所述TestMethod中的每一者分别采用表示为PA1、PB1及PC1的参数集合。用于块A、B及C的TestMethod代码的一实例可类似于表1中所说明的代码。
表1
在表1中,每一集合_xxx、_yyy及_zzz表示执行测试所需的特定任务的多个代码行,且_exec描绘以信号通知硬件实际上开始执行测试的通用ATE命令的集合。在此配置中,可根据测试所需的ATE资源的类型由程序设计者来挑选_exec。举例来说,可将_xxx及_yyy集合视为用于每一测试的设置及初始化代码,而_zzz可与数据后处理相关以确定测试的实际结果。
现在,假定需要并行地执行以下测试集合:块A测试1+块B测试1、块A测试1+块C测试1及块A测试1+块B测试1+块C测试1。结构化代码的常规方法建议应建立三个不同的TestMethod函数,其各自含有与个别相关联测试相关的代码。遵循此方法将产生类似于表2中所说明的代码的代码结构。
表2
由于来自个别函数的代码的集合在测试执行之前及之后执行需要以特定次序来排定顺序的任务以与ATE硬件通信,因此不同函数的代码可交错。使所有块A代码之后紧跟块B代码将导致串行测试执行而非并行测试执行。这主要归因于围绕与ATE硬件通信的通用指令集(此处为简单起见在单行中以_exec集合来描绘)的所需代码定序。
使用此方法或架构可出现若干问题且所述问题描述如下。代码可经复制。更具体来说,可跨越不同函数反复地重复确切相同的代码行,使得难以维护代码及在需要时应用修改。
可需要再设计代码。尽管代码复制在多数情况下是简单的,但特定测试组合可能需要花费一些时间在再设计测试上以使来自不同独立TestMethod的代码兼容。举例来说,_exec指令集(而非个别测试代码的换位)将通常证明是对于并行群组中的所有测试兼容的新指令集。如果变量名称及函数名称跨越单独的TestMethod而重复,则其可能还需要加以修改。如果代码行不支持由其它TestMethod使用的结构,则可能还需要修改代码行自身的顺序,其中所述结构与其它TestMethod分组在一起。
可能需要新的TestMethod。测试的组合可导致每一不同的并行测试集合建立单独的TestMethod函数。这可潜在地意味着:较大且较复杂的程序将导致需要管理及维护的极大量不同的TestMethod。可能需要新的TestFlow接口。举例来说,每一TestSuite可链接到一特定TestMethod函数。并行测试的不同可能组合的每一集合需要一单独TestMethod来剖析参数及调用测试代码的事实意味着:每当测试或其并行分组的列表被修改(在再设计阶段期间,或归因于产率学习而稍后在生产阶段中)时,TestFlow必须经受较大改变以适应每一TestSuite与新建立的并行测试分组所需的相关联TestMethod函数的链接。
当不使用本文中所揭示的系统及方法时,可能难以在独立(例如,串行)测试与并行测试之间进行转变。在独立测试与并行测试之间来回移动暗示维护两个单独TestFlow,这是因为针对每一状况需要使用不同TestMethod。此外,跨越TestMethod的代码的手动复制易于出错,且正是因为存在于与同一测试相关的不同TestMethod函数中的代码缺乏同步,所以可导致不同测试行为。
可能需要预先知晓并行分组。由于并行测试的每一组合需要不同的TestMethod函数及接口,因此代码库并未完成直到知晓并行测试的所有不同的可能集合为止。此事实还使得难以具有测试列表或配对改变的动态程序方案,这是因为这可导致并行测试集合,对于所述并行测试集合,不存在用以处置特定组合的可用TestMethod函数。随着不同并行测试组合的可能数目增加,这些问题伴随大且复杂的程序按指数规律增长。
已使用实施并行测试代码的较佳方式,其在某种程度上解决了所描述的问题。此方法将测试代码模块化为个别函数,紧记执行测试时所需的代码定序。接着,可建立单独函数(例如,_xxx()、_yyy()及_zzz())且从相关联TestMethod调用所述函数。表3中说明个别测试代码可看似为何内容的实例。在表3中,列表示针对不同块的测试且行表示用于测试的不同函数或方法。
表3
尽管此方法可解决一些前述问题,但仍需要新的TestMethod来处置不同并行测试的组合。然而,通过使这些TestMethod调用集中式函数(其中驻留代码的核心)而大大减少代码复制,从而允许修改传播到与个别测试有关的所有TestMethod。
用于三个样本并行测试的TestMethod可接着类似于表4中所说明的代码。第一列说明针对块A及B的并行测试,第二列说明针对块A及C的并行测试,且第三列说明针对块A、B及C的并行测试。
表4
虽然此方法解决代码复制问题,且在某种程度上解决代码再设计问题(假定函数分解遵循严格的规则集合;但_exec集合仍需要由程序设计者手动地确定以用于每一TestMethod),但常规方法所提及的所有其它复杂因素仍影响此方法或架构。
本文所揭示的改进的系统及方法可使用基于类及通用框架结构方法。此方法解决上文关于TestMethod译码所描述的所有问题。举例来说,假设建立通用类ConcTest,其宣告纯虚拟函数_xxx()、_yyy()及_zzz()。其还宣告类成员exec_mode,其值将指示由测试所利用的硬件资源的类型。下文在列表1中说明ConcTest类。
列表1
还建立单独类ConcQueue,其含有指向ConcTest对象的指针阵列。此类的实例将充当用于待同时并行执行的不同测试的容器(container)。此类另外定义允许将ConcTest对象添加到容器阵列并执行存在于容器中的所有对象的代码的成员函数。由于添加功能性允许将对象保持存储于容器中直到执行为止,因此所述容器充当预期用于并行执行的测试的队列或集区。此类可另外定义其它专用成员函数及变量以执行内部任务。在列表2中说明ConcTest类。
列表2
将个别测试的代码封装于从ConcTest基本类衍生或依据ConcTest基本类衍生的类的内部。由于ConcTest类将其成员函数宣告为纯虚拟的,因此衍生类必须定义这些函数中的每一者。这迫使所有新建立的测试类具有结构依从性(structure compliance)。接着减少用于个别测试的TestMethod以执行以下任务:建立目标测试类的实例,根据TestMethod参数初始化其成员变量,将新建立的对象添加到ConcQueue容器,及给予ConcQueue类对代码执行的控制。表5中说明此结构的实例。
表5
GLOBAL_EXEC是以信号通知是立即执行测试还是仅将对象保持于队列中并等待稍后与其它经排入队列的测试一起并行地执行的旗标。具有经定义为TestFlow旗标的此GLOBAL_EXEC旗标允许在并行测试执行与独立(例如,串行)测试执行之间容易来回转变。其还允许“混合”TestFlow,其中通过在程序执行期间改变此旗标而使用两种方案。处置此旗标的逻辑可任选地整合于ConcQueue类中,但为说明简单起见此处以不同方式展示。
可建立迫使存在于ConcQueue容器中的所有测试对象执行的额外TestMethod。在列表3中说明此代码。
Exec_Conc_TM()
{
ConcQueue.exec(1)
}
列表3
此代码架构可与交错的TestFlow格式组合以排定并行测试执行的顺序,同时通过修改GLOBAL_EXEC旗标仍允许在同一TestFlow中切换回到独立方案。下文给出关于此TestFlow格式的更多细节。
本文中所描述的系统及方法如下所述解决上文所提及的不同问题中的每一者。代码复制:将代码集中于测试类定义内部的单一位置中。从该处,代码对于通用框架结构或需要存取其的任何其它编程架构为可存取的。此外,基于类的方法允许定义具有为相关测试类的子集所共同的函数的“父”类,从而增加代码再利用。使用ConcQueue框架结构还集中代码结构,且ConcTest类准许定义所有衍生类可存取的函数或变量。
代码再设计:遵循准则集合及预定义格式以将测试分解成较小函数允许标准化测试类。此情形使得ConcQueue框架结构可组合并无缝地执行并行测试的任何组合(例如,假定ATE设置经适当地结构化且DUT提供对执行中的各种功能块的存取)。接着将组合测试的再设计函数推入(push)到框架结构且所有逻辑及考虑事项可实施于该处。
需要新的TestMethod:在此方案下,将TestMethod用作初始化测试对象并将其排入队列的仅有接口。每一并行测试集合无需额外TestMethod定义。在并行测试已经由TestMethod接口初始化之后,单一TestMethod(例如,Exec_Conc_TM()TestMethod)足以执行并行测试的任何集合。
需要新的TestFlow接口:由于此方法不改变TestMethod参数,因此无论何时引入新的并行测试集合均无需建立新的TestSuite接口。仅需要Exec_Conc_TM()TestSuite来迫使执行经排入队列的测试。
独立测试与并行测试之间的困难转变:通过使用早先所论述的GLOBAL_EXECTestFlow旗标方法,可“就地”执行个别测试而不必等待到达Exec_Conc_TM()TestSuite,从而允许在同一TestFlow中在独立执行与并行执行之间进行容易转变。换句话说,本文中所揭示的系统及方法在不进行实质再译码的情况下使测试能够串行地(一个接一个)或并行地执行。这可在用户的选项下执行。举例来说,可在不重写代码的情况下串行地执行及/或并行地执行队列中的测试(例如,测试对象)。
无需预先知晓并行分组,这是因为框架结构排定经排入队列的测试对象的所有及任何集合的代码执行的顺序。因此,测试的选择可动态地改变而不必预先提供代码以控制每一不同组合。
通常,初始测试程序开发可在块中执行,其中不同人员针对同一装置的独立块开展工作。当需要测试程序时,“整合”工程师将个别片段合并在一起且提出针对不同块的测试的串行顺序。可在室内及海外测试装置,且当产率学习前进或新要求出现时,修改所述程序。并行测试指代并行地测试装置的两个或两个以上块的动作。在一些配置中,并行测试可使用多个仪器及数据处理代码例程。如本文中所使用的术语“并行”及其其它变体可意味着至少两个操作或测试的执行可在时间上彼此重叠。举例来说,当第一块及第二块的测试在时间上重叠时可并行地测试第一块及第二块。并行及其其它变体可任选地意味着至少两个操作在同一时间或同时开始。此外,并行及其其它变体可任选地意味着至少两个操作正同步地执行。
并行测试可假定一装置测试模式能够同时存取单独块,ATE具有足够仪器来并行地执行测试且ATE软件允许同时运行独立测试。并行测试可较好地接近装置的最终应用,这是因为块在装置上同时运行。并行测试可减少测试时间,测试时间可影响最终成本。
某一自动测试设备(ATE)可允许并行测试。举例来说,Verigy 93K ATE可具有“多端口”结构以并行地执行独立模式且可具有并行地运行单独仪器的能力。然而,可能不存在并行地执行独立TestMethod代码的装置,不存在使仪器的设置与跨越独立测试的执行任务同步的方式,且不存在选择多个现行串行测试以将其切换到并行执行的接口。举例来说,应注意,SmartCalc II(在版本6.5.2中引入)并非为并行性解决方案。其目的是允许代码执行与下一测试的俘获并行。
大体来说,每一TestSuite可链接到单一TestMethod且含有其测试参数。在程序开发期间,每一TestMethod可含有特定用于特定块(例如,装置块)的单一测试的代码。
用于TestMethod并行性的一些现有的暂时解决方案由建立具有用于两个或两个以上块的测试的代码的新的“组合(combo)”TestMethod组成。这可主要包括通过需要的某一再设计而进行的代码复制。在此方法中,当建立一新TestMethod时,TestFlow需要改变以链接到所述新TestMethod。因此,通过使用此方法,串行及并行TestMethod不再兼容。使用此方法的一些问题可包括代码复制、代码再设计、需要新TestMethod定义、需要新TestFlow、串行测试与并行测试之间的困难转变,及需要预先知晓并行分组。
已使用另一“增强的”临时解决方案。通过使用此方法,用于每一测试的代码集中于一库中且分成较小函数以用于通常执行的不同任务(例如,仪器设置、数据后处理等)。此外,TestMethod控制着定序且针对给定测试调用库函数。又,并行TestMethod定义可按次序从其对应库调用用于多个块的代码。此方法很大程度上解决了代码复制及再设计问题。然而,其它列出的问题仍然存在(例如,需要新TestMethod定义、需要新TestFlow、串行测试与并行测试之间转变困难及需要预先知晓并行分组)。
然而,根据本文中所揭示的系统及方法,用于每一测试的代码可集中于一类中且分成所有测试所共用的较小成员函数(例如,仪器设置、数据后处理等)。通过使用此方法,TestMethod建立所要类的新实例且将其添加到“队列”对象中。队列对象累积所调用测试类的实例。当迫使队列执行时,以顺序方式调用用于所累积的每一测试类实例的成员函数。TestFlow旗标控制队列是应立即(例如,串行地)执行还是应累积(例如,用于并行执行)。本文中所揭示的系统及方法减轻了以下前述问题:无用以并行地执行独立TestMethod代码的装置,无用以使仪器的设置与跨越独立测试的执行任务同步的方式,及无用以选择多个现行串行测试以将其切换到并行执行的接口。
此外,本文中所揭示的系统及方法减轻了代码维护问题,例如代码复制、代码再设计、需要新TestMethod定义、需要新TestFlow、串行测试与并行测试之间转变困难,及需要预先知晓并行分组。
本文中所揭示的系统及方法的一些额外特征可包括TMLimits及统一数据记录支持(包括相关因子)、TMLimits文件自动产生、多区间(multi-bin)支持、多位点支持,及任务测试支持(针对参数测量单元(PMU)、串行参数测量单元(SPMU)及装置电源(DPS))。应注意,术语“函数”及“方法”在本文中可互换地使用。
现参看图式描述各种配置,在图中相似参考数字可指示功能类似的元件。如本文在图中大体描述及说明的系统及方法可以多种不同配置来布置及设计。因此,如图中所表示的对若干配置的以下较详细描述既定不限制所主张的范围,而仅表示系统及方法。
图1为说明用于启用并行测试的计算装置102的一个配置的框图。计算装置102的实例包括桌上型计算机、工作站、膝上型计算机或包括处理器及存储器的其它电子装置。计算装置102可与自动测试设备(ATE)106通信。ATE 106可为与一个或一个以上被测装置(DUT)108通信及/或测试所述DUT 108的装置。ATE 106可包括用以产生用于测试DUT 108的信号、指令及/或其它信息的一个或一个以上仪器。举例来说,ATE 106可将指令、信号及/或其它消息发送到DUT 108,以便测试DUT 108上的一个或一个以上功能块110。ATE 106可接收来自DUT 108的消息、测试结果及/或测量。
DUT 108为可由ATE 106测试的装置。DUT 108的实例包括集成电路、电路晶片、电子装置、无线通信装置(例如,蜂窝式电话、智能电话等)及/或可被测试的其它装置、组件及/或电路。举例来说,DUT 108可为需要被并行测试的对象,例如可以有益方式被并行测试的集成电路或集成电路的群组。更具体来说,DUT 108可(例如)为集成电路。DUT 108可包括一个或一个以上功能块110。功能块110可为DUT 108的组件。举例来说,功能块110可包含将某一功能性提供到DUT 108的硬件及/或软件。块110的一个实例是用于蜂窝式电话的接收器电路。应注意,块110可另外或替代地包含一个或一个以上集成电路。
ATE 106可能够并行地测试多个功能块110。举例来说,ATE 106可包括能够独立地测试多个功能块110的一个或一个以上仪器。举例来说,ATE 106可将指令及/或信号并行地发送到多个功能块110及/或ATE 106可并行地接收来自多个功能块110的测试结果、消息或其它信息。ATE 106可并行地测试多个功能块110。举例来说,执行一个测试的时间范围可与执行另一测试的时间范围重叠。在一些配置中,多个测试可同时开始。
计算装置102可启用并行测试。计算装置102可包括并行测试模块104。并行测试模块104可使用软件、硬件或两者的组合来实施。举例来说,并行测试模块104可提供用于产生ATE 106可并行地运行的测试(例如,测试对象)的框架结构及/或基于类的结构。举例来说,并行测试模块104可产生个别地对应于多个功能块110的多个测试对象。可使用基于基本测试类的衍生测试类产生这些测试对象中的每一者。这些测试对象可置放于队列中以用于并行执行。举例来说,计算装置102可将基于测试对象的信息(例如,消息、指令等)发送到ATE 106。此信息可向ATE 106指示(例如)所述功能块110中的哪些将被测试、在测试中使用何测试信号及/或模式等。计算装置102可接着使ATE 106开始并行测试。举例来说,计算装置102将一消息发送到ATE 106,所述消息指示ATE106开始并行测试(例如,针对相关功能块110中的每一者)。可执行或并行执行的测试可包括(例如)数字、混合信号、射频(RF)及直流(DC)测试中的任一者。
图2为说明并行测试模块204的一个配置的框图。并行测试模块204可提供用于并行测试的框架结构。并行测试模块204可包括基本测试类212。基本测试类212可包括一个或一个以上基本类变量214及/或一个或一个以上基本类函数(或“方法”)216。一个或一个以上衍生测试类218可从基本测试类212继承基本类变量214及/或基本类函数216。换句话说,所述一个或一个以上衍生测试类218可基于基本测试类212。在一些配置中,基本测试类212可为“抽象”类。
衍生测试类218中的每一者可对应于DUT 108上的特定块110。举例来说,衍生测试类218中的每一者可包括可用以测试DUT 108上的块110的变量220及/或函数222。举例来说,变量220及/或函数222中的一者或一者以上可特定地应用于块110。在一些配置中,对特定块110特定的这些变量220及/或函数222可包括于从基本测试类212继承及/或基于基本类函数216的函数222中。更具体来说,函数222中的一些可基于基本类函数216且提供一结构,对特定块110特定的函数222插入到所述结构中。举例来说,衍生测试类218可包括用以初始化用于测试特定块110的ATE 106上的仪器的若干函数222及/或变量220。这些函数222及/或变量218可置放于从基本测试类212继承及/或基于基本类初始化函数216的初始化函数222中。
所述一个或一个以上衍生测试类218可将基本类变量214中的一者或一者以上用作变量220。举例来说,所述一个或一个以上衍生测试类218可继承基于基本类变量214的变量220及/或使用变量220来操作。基本类变量214可包括由每一衍生测试类218使用的变量。衍生测试类218还可包括及/或使用并非从基本测试类212继承及/或并非基于基本类变量214的其它变量220。
所述一个或一个以上衍生测试类218可另外或替代地包括从基本测试类212继承及/或基于基本类函数216的一个或一个以上函数222。举例来说,在一个配置中,基本测试类212可包括为“纯虚拟函数”的一个或一个以上基本类函数216。举例来说,可需要所述一个或一个以上衍生测试类218将一个或一个以上“纯虚拟”基本类函数216实施于其一个或一个以上函数222中(例如,为一个或一个以上“纯虚拟”基本类函数216提供操作码)。此方法可为有益的,原因在于其可需要衍生测试类218遵照特定结构。衍生测试类218可包括并非从基本测试类212继承及/或并非基于基本类函数216的一个或一个以上函数222。
衍生测试类218中的每一者可经实例化或建构到测试对象226中。举例来说,计算装置102可基于一个或一个以上衍生测试类218而产生一个或一个以上测试对象226。可将测试对象226中的每一者添加到队列对象224。队列对象224可基于“队列”类(例如,类似于上文所描述的ConcQueue类)。所述类可为“容器”类或充当容器。换句话说,队列对象224可保持一个或一个以上测试对象226。测试对象226可由队列对象224保持以用于并行测试。举例来说,测试对象226可在其产生时置放于队列对象224中。可接着并行地执行基于队列对象224中的测试对象226的测试。举例来说,并行测试模块204可将一个或一个以上测试消息228(例如,基于队列对象224中的测试对象226的信息)发送到ATE 106,以便基于测试对象226并行地运行测试。举例来说,所述一个或一个以上测试消息228可包括命令、函数调用、指令、数据及/或其它信息。在一个配置中,队列类还可包括控制并行执行的函数或方法。举例来说,当调用队列类的exec()函数时,计算装置102可使ATE 106基于队列228中的所有测试对象226而并行地运行测试。
在一个配置中,可使用C++编程语言来实施基本测试类212、衍生测试类218及队列对象224。为解释及理解清楚起见,下文中给出关于C++编程语言的更多细节。然而,本文中所揭示的系统及方法无需使用C++,而是可使用某一其它编程语言。因此,本发明的范围应不限于C++编程语言。
在C++中,宣告并定义函数及变量。宣告是对变量或函数可对其操作的数据类型的描述。定义对此变量或函数的实际实施进行译码。将宣告及定义分成两个独立区段可为良好实践。此方法提供对用于代码模块中的所有变量及函数的顶层概述。
在C++中,标头文件(具有.h扩展名)用以封装由模块使用的函数及变量的宣告。可在源文件(具有.cpp扩展名)中单独地定义所述变量及函数中的每一者的实际实施方案。当程序设计者选取使用具有其代码的模块时,其可仅需要查看标头文件以简要了解模块提供的所有功能性。
以井字号(#)起始的指令是仅在编译时间处理的编译器指示词(compiler directive)。宣告范围指代变量或函数经辨识且可使用的代码块。宣告变量或函数的位置确定其范围。举例来说,在其它函数或类外部定义全局范围(global scope),而可在加括号函数内部定义局部范围(local scope)。
类可为分组在一起作为单一实体且可与共同任务或数据集合相关的函数、变量及常数(称为类成员)的集合。类名称可用作新数据类型。对象是类的实例。可使用单一类定义来建立许多对象。每一对象可含有经宣告用于其所属类的所有成员的其自有独立副本。
所有类通常含有至少两个函数:建构函数及解构函数。无论何时建立(例如,宣告)及损毁(例如,当程序到达对象范围的结尾或经明确删除时)对象,均调用这些函数。这些函数采用与类相同的名称且将波状符号(~)加在解构函数之前。
在标头文件中宣告类且在单独源文件中定义其类成员可为良好实践。宣告具有相同名称但具有不同类型或不同数目的参数的两个函数使函数过载。
跨越所述类的所有对象来共享静态类成员,因此不存在每一对象的这些成员的独立副本。可将这些成员认为具有“全局”范围。静态函数不能对非静态类成员操作。
衍生类是基于现有基本类宣告所建立的那些类。衍生类继承基本类的所有宣告成员的定义(例如,除建构函数及解构函数外)。可按以下顺序在衍生类的建构函数及解构函数之上执行基本类的建构函数及解构函数:基本类建构函数、衍生类建构函数、对象的存留期(life span)、衍生类解构函数及基本类解构函数。
成员函数可在其经宣告为虚拟函数的情况下经重新定义以取代基本类的行为。可在抽象基本类中宣告纯虚拟函数,从而迫使所有衍生类定义这些函数。类成员可经指派一不同范围等级(例如,公用、受保护或专用)。此确定类成员是否可从类外部存取。
图3为说明衍生测试类318的一个配置的框图。在此配置中,衍生测试类318包含来自标头文件330及源文件336的信息。标头文件330可包括变量宣告332及/或函数宣告334。源文件336可包括变量定义A 320a及/或函数定义A 322a。衍生测试类318可使用来自标头文件330及/或源文件336的信息。举例来说,衍生测试类318可并入有来自标头文件330及/或源文件336的变量宣告332、函数宣告334、变量定义A 320a及/或函数定义A 322a以用于衍生测试类318的变量定义B 320b及/或函数定义B 322b。举例来说,在C++中,标头文件330可为.h文件且源文件336可为.cpp文件。因此,衍生测试类318可包含来自标头文件330及/或源文件336的信息。
图4为说明用于启用并行测试的方法400的一个配置的流程图。计算装置102可使用基于基本测试类212的衍生测试类218产生(402)多个测试对象226。所述多个测试对象226中的每一者可对应于DUT 108中的单独块110。如上文所描述,并行测试模块204可包括基于基本测试类212的若干衍生测试类218。计算装置102可通过使衍生测试类218实例化而产生(402)这些测试对象226。
计算装置102可将多个测试对象226添加(404)到队列(对象)224。举例来说,计算装置102可产生及/或包括可保持或包括一个或一个以上测试对象226的队列对象224。当产生(402)所述多个测试对象226时,可将其添加(404)到此队列对象224。
计算装置102可将基于所述多个测试对象226的信息发送(406)到ATE 106。举例来说,计算装置102可发送(406)基于测试对象226的一个或一个以上测试消息228。举例来说,计算装置102可将基于测试对象226的一个或一个以上函数调用、指令、变量值、数据及/或其它信息发送(406)到ATE 106。在一个配置中,计算装置102可将测试对象226发送(406)到ATE 106。所述测试消息228及/或测试对象226可经格式化以供传输。举例来说,计算装置102可格式化信息以供使用传输控制协议(TCP)、因特网协议(IP)、用户数据报协议(UDP)、以太网、通用串行总线(USB)及/或其它协议来传输,且相应地发送(406)所述信息。应注意,计算装置102与ATE 106之间的通信可使用有线及/或无线通信技术,例如,以太网、USB、红外线、电气电子工程师学会(IEEE)802.11(“Wi-Fi”)、IEEE 802.16(“WiMAX”)及/或第3代合作伙伴计划(3GPP)技术等。
计算装置102可使(408)ATE 106使用所述多个测试对象226并行地测试DUT 108中的单独块110。举例来说,计算装置102可将命令及/或函数调用发送到ATE 106,以便开始对DUT 108的块110的并行测试。这可使(408)ATE 106基于测试对象226而并行地测试单独块110。举例来说,ATE 106可接收使(408)ATE 106并行地测试多个块110的命令,所述并行测试是通过将测试信号及/或通信发送到DUT 108及/或通过接收来自DUT 108的测试结果或数据而进行。这些并行测试可根据测试对象226来完成。举例来说,ATE 106可根据基于测试对象226的指令来测试对应于测试对象226的那些块110。
图5为说明用于启用并行测试的方法500的较详细配置的流程图。计算装置102可使用基于基本测试类212的衍生测试类218产生(502)多个测试对象226。举例来说,计算装置102可使多个衍生测试类218实例化。当产生(502)测试对象226时,可初始化由并行测试模块204使用的参数。如上文所描述,所述多个测试对象226中的每一者可对应于DUT 108中的单独块110。
计算装置102可将所述多个测试对象226添加(504)到队列(对象)224。举例来说,计算装置102可产生及/或包括可保持或包括一个或一个以上测试对象226的队列对象224。当产生(502)所述多个测试对象226时,可将其添加(504)到此队列对象224。
计算装置102可将基于多个测试对象226的信息发送(506)到ATE 106。举例来说,计算装置102可发送(506)基于测试对象226的一个或一个以上测试消息228。举例来说,计算装置102可将基于测试对象226的一个或一个以上函数调用、指令、变量值、数据及/或其它信息发送(506)到ATE 106。在一个配置中,计算装置102可将测试对象226发送(506)到ATE 106。所述测试消息228及/或测试对象226可经格式化以供传输。应注意,将基于测试对象226的信息发送(506)到ATE 106可独立地及/或作为以下方法500的步骤中的一些的部分来执行。
计算装置102可初始化(508)测试变量及/或ATE仪器。举例来说,计算装置102可设定变量值,以便执行测试。计算装置102可另外或替代地初始化一个或一个以上ATE仪器以用于执行测试。举例来说,计算装置102可将信息发送到ATE 106,所述信息使ATE 106将其仪器中的一者或一者以上准备好用于测试。此信息可包括函数调用、变量值及/或其它数据。
计算装置102可确定(510)多个测试对象226的兼容执行模式。举例来说,不同测试对象226(例如,用于不同测试及/或块110)可使用特定执行模式。为了使并行测试适当地起作用,计算装置102可确定(510)与待并行执行的测试中的每一者兼容的执行模式。
举例来说,计算装置102(例如,框架结构)可使用列表1中所描绘并由所有衍生测试类218继承的“exec_mode”成员变量来确定(510)将执行的单一命令,所述命令将允许队列224中的所有测试的兼容执行。每一测试类218可在程序试图执行列表2中所说明的ConcQueue.exec()函数之前取代给予此成员变量的默认值0。
在一个配置中,例如,C++应用程序编程接口(API)的Verigy 93K集合具有将触发起始测试执行的不同命令。这些命令中的每一者具有稍微不同的行为。视给定测试所需的仪器及待执行的测量的类型而定,可需要选择不同命令。可定义两个基本命令模式:封锁及非封锁。
封锁类型的命令将停止程序执行直到数字定序器及模拟定序器已完成运行其经编程任务(例如,已完全执行数字模式,数字化器已俘获所有所请求的数据,任意波形产生器(AWG)已将经编程波形驱动到装置等)。当随后的代码打算对所俘获的数据起作用(例如,后处理)时需要此类型的命令,因此需要所有仪器在继续进行之前完成执行。
非封锁类型的命令将快速起始数字定序器及模拟仪器,且即使这些仪器仍忙于执行经编程任务,程序执行仍将在快速起始之后继续。当在测试起始(例如,在程序执行中控制的软件触发顺序)之后将一些特殊命令发送到仪器时或当测试效率可能通过在ATE仪器忙碌时在后台中运行处理例程而受益时,可需要此行为。
Verigy 93K中的实际命令的一些实例如下。EXECUTE_TEST()起始数字定序器且使模拟仪器准备好用于测试执行;此命令为封锁类型的命令。START_TEST()与EXECUTE_TEST()相同,但具有“非封锁”行为。DIGITAL_CAPTURE_TEST()与EXECUTE_TEST相同,但另外使ATE准备好俘获来自DUT的数字数据流。NB_DIGITAL_CAPTURE_TEST()为DIGITAL_CAPTURE_TEST()命令的非封锁版本。EXECUTE_GROUP()为将起始数字定序器并执行软件触发程序以控制射频(RF)及模拟仪器的封锁类型的命令。TASK.execute()执行直流(DC)测量的预编程集合。
计算装置102可使(512)ATE 106开始使用多个测试对象226并行地测试DUT 108中的单独块110。举例来说,计算装置102可将一个或一个以上命令及/或函数调用发送到ATE 106,以便开始对DUT 108的块110的并行测试。这可使(512)ATE 106基于测试对象226而并行地测试单独块110。举例来说,ATE 106可接收使(512)其并行地测试多个块110的命令,所述并行测试是通过将测试信号及/或通信发送到DUT 108及/或通过接收或测量来自DUT 108的测试结果或数据而进行。这些并行测试可根据测试对象226来完成。举例来说,ATE 106可根据基于测试对象226的指令来测试对应于测试对象226的那些块110。
计算装置102可执行(514)测试清除。在一个配置中,计算装置102可通过停用触发器及恢复ATE仪器的原始状态而执行(514)测试清除。举例来说,计算装置102可发送使ATE 106将其仪器恢复回到其在测试前的原始状态的消息、命令、函数调用、指令、数据及/或其它信息。
举例来说,ATE仪器可特征化触发器线路以控制由仪器执行的任务并排定所述任务的顺序。当在DUT 108与仪器之间需要同步时这是特别有帮助的。举例来说,数字定序器将发送数字模式到DUT 108以将其编程到一特定模式中。如果以此顺序过早地(例如,在DUT 108完全经编程之前)俘获来自DUT 108的信号,则对其执行的模拟测量可能无效。典型测试可接着包括呈数字模式的触发器信号,其驱动连接到给定ATE仪器上的触发器通道的迹线,使得此信号可在已编程DUT 108之后以适当顺序在数字模式内“被引发”。复杂测试可甚至需要每一仪器一个以上触发器,或用于不同仪器的多个触发器。
当在发出执行命令(例如,上文描述的命令中的一者)之前设置测试时,仪器可能需要经编程以接受触发器信号(例如,硬件(HW)触发),或仅等待来自程序代码的触发程序(例如,软件(SW)触发)。当待执行硬件触发(一旦测试完成)时,停用硬件触发器直到另一测试再次需要其为止可为良好实践。此实践防止仪器归因于触发器通道线路中的噪声而错误触发。此硬件触发停用可为上文描述的“清除”函数的一个实例。
其它清除函数可与将给定仪器编程回到“默认”状态有关。给定测试可能需要直流(DC)通道来驱动特定电压。然而,一旦测试完成,恢复此DC通道的原始电平可为良好实践。这可为清除类任务的另一实例。
计算装置102可接收(516)来自ATE 106的测试数据。举例来说,计算装置102可接收来自ATE 106的关于所执行的测试的测试测量、数据、消息及/或其它信息。举例来说,ATE 106可发送信号测量(例如,振幅、相位、频率、电压、电流、延迟、样本等)、块输出、消息(例如,数字消息、输出、失败等)及/或其它测量或测试结果。这些数据可由计算装置102接收(516)。
计算装置102可执行(518)后处理。举例来说,计算装置102可使用所接收(516)的测试数据来执行运算或计算。举例来说,计算装置102可使用电压测量来计算增益或衰减,使用信号样本来确定相位差,或使用处理延迟及/或失败消息来确定失败率等。可根据多个测试对象226来执行(518)后处理。举例来说,测试对象226可包括用以对所接收(516)的测试数据进行后处理(例如,运算、计算等)以确定或获得所要信息的一个或一个以上函数。
计算装置102可执行(520)数据记录功能。举例来说,计算装置102可存储所接收(516)的测试数据及/或后处理的数据或信息。举例来说,计算装置102可组织并存储测试结果及/或数据。
在一个配置中,每一测量或测试产生旨在确定DUT 108是否起作用的结果。此结果可以二进制形式(例如,通过或失败)或以与下限及上限比较的参数值形式出现。ATE 106可提供将程序执行的所有结果记录到外部文件中的方式。这通常称为“数据记录”。数据记录可(例如)允许产品工程师分析装置性能并检测关于硅或装配工艺的偏差。由于数据记录可通过程序代码内的典型指令集来执行,因此计算装置102(例如,框架结构)可提供纯虚拟定义以封装此任务,因此迫使所有衍生类218定义所述纯虚拟定义。计算装置102(例如,框架结构)还可关注以适当顺序调用此数据记录函数并标准化数据借以存储于数据记录中的格式。
计算装置102可弃置(522)所述多个测试对象。举例来说,计算装置102可针对多个测试对象226调用解构函数。这可有助于释放之前用于测试的计算装置102的资源。或者或另外,计算装置102可(例如)将使ATE 106将其仪器与DUT 108断开的消息(例如,命令、函数调用、信息等)发送到ATE 106。
图6为说明用于启用并行测试的方法600的更特定配置的一个实例的流程图。计算装置102可使用基于基本测试类212的衍生测试类218产生(602)多个测试对象226。举例来说,计算装置102可使多个衍生测试类218实例化。当产生(602)测试对象226时,可初始化由并行测试模块204使用的参数。如上文所描述,多个测试对象226中的每一者可对应于DUT 108中的单独块110。
计算装置102可将多个测试对象226添加(604)到队列(对象)224。举例来说,计算装置102可产生及/或包括可保持或包括一个或一个以上测试对象226的队列对象224。当产生(602)多个测试对象226时,可将其添加(604)到此队列对象224。
计算装置102可调用(606)ON_FIRST_INVOCATION_BEGIN()函数。应注意,如本文中所使用的术语“调用”可包括将一消息发送到另一装置。举例来说,计算装置102可通过将一消息发送到ATE 106而“调用”一函数。调用(606)ON_FIRST_INVOCATION_BEGIN()函数可开始用于执行并行测试的程序。在调用(606)ON_FIRST_INVOCATION_BEGIN()函数时,计算装置102可调用其它函数。举例来说,计算装置可针对每一当前测试调用(608).init()函数。“当前”测试为待并行地及/或以群组执行的测试。在一个配置中,队列对象224可含有待对单独块110并行地执行的测试的群组。.init()函数可初始化由并行测试模块104使用的参数。其还可使ATE106将其仪器准备好用于测试。可针对每一当前测试对象226调用及/或执行此.init()函数。
计算装置102可任选地针对每一当前测试调用(610).pre_trigger()函数。.pre_trigger()函数可用于框架结构中最初未考虑的某些不同测试或测试模式。因此,.pre_trigger()函数可在被使用时进行调用(610)且可在不使用时不进行调用。
计算装置102可确定(612)多个测试对象226的兼容执行模式。举例来说,不同测试对象226(例如,用于不同测试及/或块110)可使用特定执行模式。为了使并行测试适当地起作用,计算装置102可确定(612)与待并行执行的测试中的每一者兼容的执行模式。
计算装置102可调用(614)START_TEST()函数。START_TEST()函数可使ATE 106开始测试。举例来说,计算装置102可通过将消息发送到ATE 106而调用(614)START_TEST()以开始并行地测试DUT 108的块110。
计算装置102可任选地针对每一当前测试调用(616).post_trigger()函数。.post_trigger()函数可用于框架结构中最初未考虑的某些不同测试或测试模式。因此,.post_trigger()函数可在被使用时进行调用(616)且可在不使用时不进行调用。
计算装置102可调用(618)WAIT_TEST_DONE()函数。WAIT_TEST_DONE()函数可监视ATE 106的测试状态。举例来说,WAIT_TEST_DONE()函数可暂时中止进一步代码执行直到计算装置102确定ATE 106已完成其当前测试为止。举例来说,WAIT_TEST_DONE()函数可周期性地向ATE 106请求状态更新及/或等待接收来自ATE106的消息以确定在继续进行之前当前测试已完成。
计算装置102可针对每一当前测试调用(620).cleanup()函数。.cleanup()函数可停用触发器及/或恢复ATE 106仪器的原始状态。计算装置102可通过将一消息到发送ATE 106而调用(620).cleanup()函数以恢复原始仪器状态。
计算装置102可调用(622)ON_FIRST_INVOCATION_END()函数。调用(622)ON_FIRST_INVOCATION_END()函数可引起调用或执行其它函数。举例来说,ON_FIRST_INVOCATION_END()函数可包括.calc()函数、.datalog()函数及/或解构函数。
计算装置102可针对每一当前测试调用(624).calc()函数。.calc()函数可执行后处理并产生测试结果。举例来说,.calc()函数可使用测试测量或数据来运算或计算测试结果。应注意,在一些配置中,未进行后处理的测试测量或数据可为测试结果。
计算装置102可调用(626).datalog()函数。.datalog()函数可执行数据记录功能。可在最后位点(site)执行之后调用.datalog()函数。举例来说,计算装置102可存储所接收的测试数据及/或后处理的数据或信息。举例来说,计算装置102可组织并存储(例如,“数据记录”)测试结果及/或数据。
应注意,单一程序执行可并行地测试一个以上装置。这可能需要可同时插入一个以上装置的ATE-DUT接口板。这些应用通常称为“多位点”。在此上下文中的术语“位点”可指代应用中的多个并行DUT 108或块110的此集合中的特定DUT 108或块110及与测试此特定DUT 108相关联的所有ATE仪器。举例来说,一应用可接着具有专用于测试“位点#1”处的DUT 108的ATE仪器通道,同时一不同通道用以测试“位点#2”处的DUT 108,从而允许跨越插入的装置并行地执行测试。
在一个配置中,Verigy 93K编程允许以每一位点为基础来确定特定命令的目标。以此方式,程序设计者可独立地控制每一位点上使用的ATE 106资源。
在多位点应用中,TestSuite中的每一TestMethod调用可有效地执行与经配置用于应用的位点一样多的次数(例如,关于四位点应用,BlockA_Test1_TM(PA1)TestMethod调用将顺序地执行四次)。通常,所有位点的实际测试执行可在第一次TestMethod调用期间并行地发生,而在后续调用中程序可仅提取结果,对结果进行后处理及进行数据记录。Verigy 93K提供称为ON_FIRST_INVOCATION()的API宏。由此宏包围的代码可仅在第一次TestMethod调用时经执行,而其它所有代码可在用于所述位点中的每一者的调用中执行(例如,在前文所提及的四位点实例中执行四次)。
ON_FIRST_INVOCATION可封装所有仪器配置及设置、执行API命令(START_TEST()、EXECUTE_TEST()等)及清除函数,其可仅被调用一次且针对所有作用中位点并行地执行其功能。“最后位点执行”表达可指代对给定TestSuite的相关联TestMethod的最后顺序调用(例如,在四位点的多位点应用中对TestMethod的第四次执行)。
计算装置102可针对每一测试调用(628)解构函数。举例来说,可针对每一测试对象226调用(628)解构函数以便弃置测试对象226并释放计算装置102的资源。计算装置102可清空(630)队列224。举例来说,当弃置测试对象226(例如,调用(628)解构函数)时,可从队列224中移除测试对象226。
计算装置102可确定(632)是否存在待执行的额外测试。举例来说,计算装置102可确定(632)是否存在待执行的额外测试、并行测试群组、测试系列及/或并行测试系列。举例来说,计算装置102可确定(632)是否存在经调度的任何剩余测试(例如,在“TestFlow”中)。如果计算装置102确定(632)存在额外测试,则计算装置102可返回以针对接下来的测试产生(602)一个或一个以上测试对象。如果计算装置102确定(632)不存在额外测试,则操作可结束(634)。
图7为说明可根据本文中所揭示的系统及方法执行的一些操作的一个配置的线程图。计算装置702可使用基于基本测试类212的衍生测试类218产生(738)多个测试对象226。举例来说,计算装置702可使多个衍生测试类218实例化。当产生(738)测试对象226时,可初始化由并行测试模块204使用的参数。如上文所描述,所述多个测试对象226中的每一者可对应于DUT 708中的单独块110。
计算装置702可将多个测试对象226添加(740)到队列(对象)224。举例来说,计算装置702可产生及/或包括可保持或包括一个或一个以上测试对象226的队列对象224。当产生(738)多个测试对象226时,可将其添加(740)到此队列对象224。
计算装置702可将测试对象信息(或基于多个测试对象226的信息)发送(742)到ATE 706。举例来说,计算装置702可发送(742)基于测试对象226的一个或一个以上测试消息228。举例来说,计算装置702可将基于测试对象226的一个或一个以上函数调用、指令、变量值、数据及/或其它信息发送(742)到ATE 706。在一个配置中,计算装置702可将测试对象226发送(742)到ATE 706。所述测试消息228及/或测试对象226可经格式化以供传输。应注意,将基于测试对象226的信息发送(742)到ATE706可独立地及/或作为图7中所说明的以下操作中的一些的部分来执行。
举例来说,计算装置702可通过将测试对象信息发送(742)到ATE而初始化测试变量及/或ATE仪器。举例来说,计算装置702可设定变量值,以便执行测试。计算装置702可另外或替代地初始化一个或一个以上ATE仪器以用于执行测试。举例来说,计算装置702可将信息发送(742)到ATE 706,所述信息使ATE 706将其(706)仪器中的一者或一者以上准备好用于测试。此信息可包括函数调用、变量值及/或其它数据。
计算装置702可确定(744)多个测试对象226的兼容执行模式。举例来说,不同测试对象226(例如,用于不同测试及/或块110)可使用特定执行模式。为了使并行测试适当地起作用,计算装置702可确定(744)与待并行执行的测试中的每一者兼容的执行模式。
计算装置702可使(746)ATE 706开始使用多个测试对象226来并行地测试DUT 708中的单独块110。举例来说,计算装置702可将起始消息(例如,一个或一个以上命令及/或函数调用)发送(748)到ATE 706,以便开始对DUT 708的块110的并行测试。这可使ATE 706基于测试对象226而并行地测试单独块110。举例来说,ATE 706可接收使ATE 706并行地测试多个块110的起始消息,所述并行测试是通过将信号及/或指令发送(750)到DUT 708以并行地测试多个块110而进行。ATE 706可测量(752)来自DUT 708的测试响应。举例来说,ATE 706可测量、探测及/或接收来自DUT 708的测试结果或数据。这些并行测试可根据测试对象226来完成。举例来说,ATE 706可根据基于测试对象226的指令来测试对应于测试对象226的那些块110。
计算装置702可执行(754)测试清除。在一种配置中,计算装置702可通过停用触发器及恢复ATE仪器的原始状态而执行(754)测试清除。举例来说,计算装置702可发送使ATE 706将其仪器恢复回到其在测试前的原始状态的消息、命令、函数调用、指令、数据及/或其它信息。
计算装置702可接收(756)来自ATE 706的测试数据。举例来说,计算装置702可接收(756)来自ATE 706的关于所执行测试的测试测量、数据、消息及/或其它信息。举例来说,ATE 706可发送信号测量(例如,振幅、相位、频率、电压、电流、延迟、样本等)、块输出、消息(例如,数字消息、输出、失败等)及/或其它测量或测试结果。这些可由计算装置702接收(756)。在一种配置中,计算装置702可以“隐藏”方式(例如,作为后台过程)接收(756)测试数据。下文给出更多细节。
计算装置702可执行(758)后处理。举例来说,计算装置702可使用所接收(756)的测试数据来执行运算或计算。举例来说,计算装置702可使用电压测量来计算增益或衰减,使用信号样本来确定相位差或使用处理延迟及/或失败消息来确定失败率等。可根据多个测试对象226来执行(758)后处理。举例来说,测试对象226可包括用以对所接收(756)的测试数据进行后处理(例如,运算、计算等)以确定或获得所要信息的一个或一个以上函数。
计算装置702可执行(760)数据记录功能。举例来说,计算装置702可存储所接收(756)的测试数据及/或后处理的数据或信息。举例来说,计算装置702可组织并存储测试结果及/或数据。
计算装置702可弃置(762)多个测试对象。举例来说,计算装置702可针对多个测试对象226调用解构函数。这可有助于释放之前用于测试的计算装置702的资源。或者或另外,计算装置702可(例如)将使ATE 706将其仪器与DUT 708断开的消息(例如,命令、函数调用、信息等)发送到ATE 706。
图8为说明基本测试类812及衍生测试类818的一个实例的框图。基本测试类812可包括基本类变量814及基本类函数816。在此实例中,基本类变量814包括debug(除错)864、ct_fail 868、execmode(执行模式)866及testsuite_name 870。下文中给出关于这些基本类变量814的更多细节。在此实例中,基本类函数816包括init()872、pre_trigger()874、post_trigger()876、基本类建构函数878、cleanup()880、calc()882、datalog()884及基本类解构函数886。下文中给出关于这些基本类函数816的更多细节。
一个或一个以上衍生测试类818可继承一个或一个以上基本类变量814及/或基本类函数816或基于基本测试类812。衍生测试类818可包括变量820及函数822。在此实例中,变量820包括可从基本测试类812继承的debug 888、ct_fail 892、execmode 890及testsuite_name 894。下文中给出关于变量820的更多细节。衍生测试类818可包括并非从基本测试类812继承的其它变量820。
函数822可包括init()896、pre_trigger()898、post_trigger()801、建构函数803(用于衍生测试类818)、cleanup()805、calc()807、datalog()809及解构函数811(用于衍生测试类818)。这些函数822中的一些(例如,init()896、pre_trigger()898、post_trigger()801、cleanup()805、calc()807及datalog()809)可从基本测试类812继承及/或可定义或实施于衍生测试类818中。建构函数803及解构函数811可不从基本测试类812继承。下文中给出关于函数822的更多细节。衍生测试类818可包括其它函数822。
“TestMethod”可为可用以测试DUT 108上的块110的函数或方法(或函数/方法的群组)。在一个配置中,可使用衍生测试类818来实施TestMethod。“TestFlow”可为显示及/或允许一个或一个以上测试的布置的接口(例如,图形用户接口或GUI)。“TestSuite”可链接到TestMethod且可表示为TestFlow上的矩形。
本文中所揭示的系统及方法可允许测试时间减少及并行地执行测试(例如,在装置测试模式及ATE仪器允许的情况下)。举例来说,一个配置描述TestMethod编程模型以促进独立测试(例如,在开发中)与并行测试(例如,在生产中)之间的转变。当不使用本文中所揭示的系统及方法时,整合工程师可能需要手动地合并用于并行测试的设置(例如,时序、电平、模拟集合)。
在一个配置中,并行TestFlow可利用组合块、延后执行及/或多区间化。多区间图标可用于所有基于TestMethod的TestSuite。可在TMLimits文件中指定区间指派。SmarTest可需要将所有区间定义于TestFlow文件中。在TMLimits与TestFlow之间区间化的硬件(HW)数目及软件(SW)数目可能需要匹配。
根据本文中的系统及方法,可使用C++类方法。可基于每一TestMethod执行的共同操作而将常规TestMethod分解成单独区段。可建立具有每一测试应执行的函数816的纯虚拟宣告的抽象基本类812(例如,“CTest”)。可将所有目标TestMethod转换成衍生类818,因此跨越从基本类(例如,“CTest”)812继承的不同函数822来分割代码。TestFlow可用作用以使不同衍生测试类的对象实例化及初始化的接口。特定类对象(例如,“CTests”)或队列可用以收集需要并行执行的所有不同测试对象。可接着顺序地执行所述测试中的每一者。
列表4中说明抽象基本类(例如,“CTest”)的一个实例。应注意,所说明的CTest类可类似于上文所描述的ConcTest类。
列表4
execMode 866、890列举或列举类型的一个实例如下说明于列表5中。
列表5
现给出列表4及列表5中所说明的实例的简单解释。CTest(基本)类812包括若干成员变量814。这些变量814中的若干者可用于衍生测试类818。debug 864、888是取决于TestFlow旗标debug_analog而自动初始化为0或1的变量。
testsuite_name 870、894可经自动地初始化为建立测试对象的TestSuite名称。execmode 866、890可经自动地初始化为EXM_INVALID。测试类818可根据所要执行模式而改变其值。一些选项可包括:EXM_NONE、EXM_DIGITAL_CAPTURE_TEST、EXM_NB_DIGITAL_CAPTURE_TEST、EXM_START_TEST及EXM_EXECUTE_TEST。
ct_fail[]868、892可为应根据使测试失败的位点数目而设定为1的共享静态数组。ct_fail[]868、892可在logdata()函数在并行性框架结构内部被调用时由logdata()函数自动地管理。
CTest(基本)类812还可包括成员函数816。这些函数816中的一些可通过测试类818定义。基本类建构函数878可初始化由并行性框架结构使用的参数(例如,execmode866)。可在ON_FIRST_INVOCATION函数之后调用基本类建构函数878。init()872、896可初始化测试变量并将ATE仪器设定为准备好执行测试。也可在ON_FIRST_INVOCATION函数之后调用init()872、896。可定义或可不定义pre_trigger()874、898。将其作为预留位置(place holder)而保留以用于框架结构中未考虑的特殊测试模式。也可在ON_FIRST_INVOCATION函数之后调用pre_trigger()874、898。可定义或可不定义post_trigger()876、801。也将其作为预留位置而保留以用于框架结构中未考虑的特殊测试模式。也可在ON_FIRST_INVOCATION函数之后调用post_trigger()876、801。cleanup()880、805停用触发器并恢复ATE仪器的原始状态。也可在ON_FIRST_INVOCATION函数之后调用cleanup()880、805。calc()882、807执行后处理并产生测试结果。可在单独线程中执行这些函数。datalog()884、809执行数据记录功能。解构函数(例如,~CTest())886清除全局变量或在测试期间建立的其它程序结构。其可为使仪器断开的安全位置。可在ON_FIRST_INVOCATION_END函数或宏(例如,与“ON_LAST_INVOCATION”有关)之后执行解构函数886。
应注意,可在代码中将ON_FIRST_INVOCATION区段辨识为包围在ON_FIRST_INVOCATION_BEGIN()与ON_FIRST_INVOCATION_END()宏之间的指令。可能不存在等效的ON_LAST_INVOCATION宏。更确切来说,可通过使用静态变量来对已调用给定TestMethod的次数进行计数及与经配置用于应用的位点的数目进行比较来以代码人工地仿真此功能性。
在一个配置中,可如列表6中所说明来进行CTest 812成员函数的执行顺序。
列表6
应注意,可定义或可不定义pre_trigger()874、898函数及/或post_trigger()876、801函数,且所述函数仅可在经定义的情况下执行。START_TEST()函数或其等效函数可在START_TEST()的位置中执行,START_TEST()可开始测试。解构函数886可仅在最后位点之后加以执行。
根据本文中的系统及方法,测试参数及/或结果可定义为类变量,使得其可用于所有类函数。不可将用于中间计算的变量宣告为类成员。可在衍生类818中宣告(及稍后定义)CTest类812的所有纯虚拟函数。可不宣告CTest pre_trigger()874及post_trigger()876虚拟函数,此可能不会引起编译问题。可宣告额外成员函数816。
在一个配置中,应注意,在将模拟仪器用于Verigy 93K中的测试中之前,应建立模拟定义(或模拟集合)。定义可主要含有待用于测试中的仪器的名称、用以配置其的参数(例如,端接类型、电压/功率范围、频率等)及具有指定测量的数目或来源寻找时间(sourcing time)的指令的定序器程序。
可在程序执行之前使用图形用户接口(GUI)或在程序代码内部使用纯C++代码来建立定义。在任一状况下,可需要在试图将仪器用于实际测试中之前完成定义。举例来说,RF_DEF()特定地指代涉及ATE 106射频(RF)仪器的模拟定义。DATA_DEF()为可用于RF_DEF()中以将值给予特定参数的子元素。举例来说,DATA_DEF可包括用以定义RF_DEF()内部的参数的变量。所述情形允许通过仅修改与RF_DEF()相关联的DATA_DEF()的值而动态地改变RF_DEF()上的参数。
DGT.trigger()及AWG.trigger()可为用于程序代码内部以触发仪器的命令。举例来说,所述触发称为软件(SW)触发,这是因为其是经由程序代码而执行及定序(例如,与硬件(HW)触发器相反,硬件(HW)触发器是经由多数时间由与DUT 108同步的数字模式所驱动的数字信号来控制)。EXECUTE_GROUP()可为一特殊类型的软件(SW)触发器,其将执行由用户依据触发器之间的秒数而预先定义的仪器触发顺序。
初等量(primary)(例如,时序、电平及模拟集合)可不在并行测试类内部改变。TestFlow中的TestSuite窗口可控制改变。这允许稍后在TestFlow中修改初等量以指向其(手动地)合并版本。可避免使用可在合并的模拟集合中改变的显式定义名称。可使用变量及DATA_DEF而非明确地改变用于给定RF DEF的参数。软件触发可不支持并行执行(例如,可不使用DGT.trigger()、AWG.trigger()及EXECUTE_GROUP())。实情为,可使用硬件触发。
logdata()函数可用于对照限制进行测试及进行数据记录。应注意,datalog()可为在父类(例如,并行性类)中宣告的纯虚拟函数,所有衍生测试类可定义所述虚拟函数以包括其数据记录命令。另一方面,logdata()可为在库(例如,并行性库)内定义的支持函数,其可在定义于每一测试类中的datalog()函数中进行调用以将结果以标准化格式掷回到数据记录中。
可将仅用于中间运算目的的变量引入到局部范围中。可将测试参数及结果定义为类成员。可使用硬件(HW)触发将需要一个以上START_TEST()的测试再设计到定序器程序中。
当从用于典型方法中的代码转换TestMethod代码时,TestMethod标头结构可无需作出经格式化以供基于类的方法使用的改变。TestMethod接口可使ON_FIRST_INVOCATION()函数内部的适当类的对象实例化。其可初始化参数(例如,类成员),将对象226添加到CTests队列224且使用TestFlow变量来控制并行执行。
CTests队列224可继续增长直到其exec()函数被调用为止。接着,CTest队列224可调用其累积的测试对象的所有成员函数。CTests.exec()函数可经由具备库的TestMethod接口来运行。虽然可串行地执行C++代码,但可并行地运行仪器,借此节省测试时间。基于类的方法促进在线程中的未来并行代码执行(例如,通过将每一测试对象指派到一线程)。
现给出关于logdata()函数884、809的进一步解释。当实施并行测试时,同时测试装置上的一个以上功能块。可使用多区间化,以便区分失败行为。多区间化允许在TestSuite失败时指定代码中失败硬件(HW)及/或软件(SW)区间数目。TMLimits提供用以维持每一测试的区间数目与测试限制两者的接口。logdata()函数884、809可在场景后处置多区间化及TMLimits。用于测试及数据记录的单一函数可标准化所有测试输出并促进实施方案的任何所需改变。
可在并行库内部定义logdata()函数884、809。然而,甚至在非并行(及/或非基于类的)TestMethod中仍可使用logdata()函数。当未指定TestSuite名称时,可使用使测试类对象实例化的TestSuite名称并将其串接到“testname(测试名称)”。OVERON旗标可默认地设定为1。可不打断TestMethod执行,使得所有并行测试可完成执行且Ctests队列224清空。
应注意,在TestFlow接口内,TestSuite可具有与其相关联的失败区间元素。此区间为可在DUT 108于所述TestSuite中执行的测试失败的情况下与DUT 108相关联的“标记”。当程序执行运行到失败区间中时,可假定装置有缺陷且终止对所述DUT 108的程序执行以继续测试其它装置。即使当装置运行进入到一区间中,失败区间上的OVERON旗标仍可允许程序执行继续。这对于特性化可尤其有用(当装置可能在给定测试中失败时),但其仍关注在此失败后保持运行程序以根据其它参数评估性能。
此以下段落给出对本文中所描述的系统及方法的一个配置的进一步解释。此外,虽然参考特定平台(例如,Verigy)及/或编程语言(例如,C++),但本文中所揭示的系统及方法可应用于许多不同平台且可使用许多不同编程语言。
此段落描述使用通用并行性TestMethod结构以按使稍后的并行测试实施容易的方式组织代码。此段落论述TestMethod代码结构及整合。模拟仪器设置整合是下文更详细覆盖的主题。
Verigy ATE平台允许用户使用C++语言来编写定制定义的测试的代码。此语言提供的最强力特征中的一者是对象导向式编程(OOP),其允许程序设计者定义与特定任务相关的自含式代码的独立块。这支持针对较大项目并行地开发小代码片段且支持代码可再用性。
对象可经由称为类的特定结构而定义,类可含有定制变量及使用这些变量操作的用户定义的函数。经良好结构化的类可含有与给定任务有关的所有变量及函数。程序设计者可接着定义这些变量及函数中的每一者的范围以定义是外部代码还是其它对象可直接地存取这些变量及函数。
通用编程可依赖的其它概念是继承及多形性(polymorphism)。这些概念允许程序设计者定义具有其自有变量及函数的基本类,所述基本类稍后可用作定义将继承所述相同属性且可宣告一些额外属性的衍生类的模板。还可覆写及重新定义继承函数,从而允许衍生类具有具相同名称但根据类特定的需要及目的以不同方式执行的函数。
已建立结构及准则集合以使不同代码片段易于整合成合并的并行TestMethod。此结构依赖于上文简要提及的概念。遵守这些准则有助于大大减少从一规则串行测试执行程序迁移到合并的并行程序所需的工作量。此段落描述一些准则并指出可用于特定实施方案中的一些重要概念。这与TestMethod编程结构有关;可单独地处理模拟仪器设置的合并。
为允许建立可处置针对任一块的任一种类的测试的调用的通用TestMethod,建立一通用模板基本类CTest(例如,“并行测试”)812,其将定义每一单一测试应执行的最常见任务及变量814。每一测试将是从此CTest基本类812衍生的类818,其将继承一些基本函数及变量结构。由于所述函数及变量结构的名称是所有衍生类818共有的,因此不管正执行的测试的特定种类如何,这些函数及变量结构一般均可从并行性TestMethod调用。
此方法可在必要时进一步进行扩展。一实施方案可引入一中间类,其封装给定块所共有的测试的集合。采用BBRx(例如,“基带接收”)函数作为实例:给定实施方案可定义基于父BBRx类的两个完全独立的测试:SNR(信噪比)及IRN(输入参考噪声)。这允许在BBRx父类中定义所有测试可能共有的全局函数(例如,unpack_data)。所述函数可由衍生测试类继承。对于全局变量,这可类似地发生。
可如下将每一测试分成多个任务或共同函数。myTest::myTest():此为建构函数803。其仅在第一次建立对象时执行一次。此函数可用以剖析测试参数并初始化常数及变量。在此代码片段中还可初始化一个或一个以上共同变量,使得其正确值在程序执行的其余部分期间可用。举例来说,共同变量可为继承到所有衍生测试类218的父类成员变量。这可类似于共同函数,共同函数指代成员函数。
myTest::init()896:此函数可用以设置将在测试期间使用的任何仪器。其还可用以针对测量/源仪器的特性(例如,点数目、频率、功率电平等)来查询或设定测量/源仪器。在执行此函数后,并行性TestMethod预期仪器准备好接收一触发程序并起始源/测量操作。在执行测试之前,此函数在ON_FIRST_INVOCATION块内部执行一次,但所有测试类成员将在不同位点的执行期间保存其值。
myTest::pre_trigger()898:此函数可用作用于特殊测试实施方案的预留位置。给出所述函数以提供以并行性TestMethod未预期的方式执行触发的方式。如果将不使用此函数,则无需在测试类818中明确地宣告所述函数。此函数在ON_FIRST_INVOCATION块内部执行一次,且在数字定序器设定为“RUN(运行)”模式之前执行。myTest::post_trigger()801:此函数可用作用于特殊测试实施方案的预留位置。给出所述函数以提供以并行性TestMethod未预期的方式执行触发的方式。如果将不使用此函数,则无需在测试类818中明确地宣告所述函数。此函数在ON_FIRST_INVOCATION块内部执行一次,且在数字定序器设定为“RUN”模式之后执行。
myTest::cleanup()805:此函数可用以停用触发器或复位测试期间使用的任何仪器。举例来说,此函数还可用以恢复可能已经由用于执行测试的固件(FW)命令改变的任何其它硬件状态(例如,除断开外)。举例来说,Verigy 93K将能够直接存取用以编程ATE 106及附接的仪器卡的多数低层级命令(例如,固件命令)的API提供到程序设计者。因此,cleanup()函数可用以恢复使用固件命令在ATE仪器中执行的任何低层级改变。断开可发生在解构函数811中。此函数在已执行测试之后在ON_FIRST_INVOCATION块内部执行一次。
myTest::calc()807:此函数可用以检索来自仪器的测试结果并运行后处理计算。在ON_FIRST_INVOCATION块外部调用此函数且因此在每一位点基础上执行此函数。测试类成员变量跨越位点执行将仍保存其值,因此应特别关注重新初始化在特定条件下可不会明确地重新运算的结果变量。同一TestSuite中的并行测试类的calc()函数807中的每一者可在适当时在单独线程中运行(以进一步改进并行性)。
myTest::datalog()809:可在此函数或其等效TMLimits调用内调用测试语句以测试并数据记录结果。此函数是在ON_FIRST_INVOCATION块外部调用且因此在每一位点基础上执行。
在一个配置中,TMLimits为单独API库,Verigy曾单独地散布所述库,但所述库现合并于最新SmarTest修订版本中且已重新命名为93KLimits。此API库管理由程序中的参数测试使用的测试限制。在较旧的常规SmarTest程序中,限制是存储于TestFlow文件中的TestSuite对象内部的数据元素。然而,使所有限制信息集中并存储于经由TestSuite名称链接到程序的单独文件上可更为便利。TMLimits库可为将此外部文件加载到存储器中的表中并使用TestSuite名称及测试参数名称作为查找键来存取这些限制的函数集合。这可为并行性所需要的,这是因为(如模型描述)实际测试及数据记录可取决于并行布置而发生在不同TestSuite上。因此,计算装置102(例如,框架结构)需要在常规方法具有的个别TestSuite范围限制外部的对限制信息的此动态存取。
TMLimits另外允许定义在给定测试失败的情况下使用的失败区间数目,从而还远离与特定测试套件相关联的常规区间。
myTest::~myTest():此为解构函数811。其仅在损毁对象226时执行一次。并行性TestMethod将在用于最后作用中位点的TestMethod执行结束时迫使解构函数调用。举例来说,所述函数可用以解除分配用于可在测试执行期间已建立的特殊动态变量的存储器,关闭任何打开的文件流或清除由执行代码建立的任何其它编程相关的成品。此函数可包括用于模拟仪器的断开例程。
每一测试可如下初始化继承的类成员变量。myTest::execmode 890:此为用以指示待执行的测试的类型且因此指示需要发出的所需测试命令(例如,START_TEST、DIGITAL_CAPTURE等)的预先定义的列举类型。此变量可采用以下预定义值:EXM_NONE、EXM_EXECUTE_TEST(封锁)、EXM_START_TEST(非封锁)、EXM_DIGITAL_CAPTURE_TEST(封锁)或EXM_NB_DIGITAL_CAPTURE_TEST(非封锁)。“封锁”执行语句将停止TestMethod代码执行直到所有测试仪器(例如,数字化器、任意波形产生器(AWG)、数字定序器等)已完成运行为止,而“非封锁”语句将快速起始仪器并继续代码执行。在一个配置中,AWG为可配置的数/模转换器(DAC)。如此处所论述,AWG可指代用以驱动模拟波形到DUT 108中的ATE仪器。
另外,每一测试自动地继承以下基本类变量:myTest::debug 864(例如,继承为myTest::debug 888):此变量基于TestFlow旗标debug_analog自动地以0或1填入。其可用作将数据打印到报告窗口或其它除错任务的旗标。MyTest::testsuite_name 870(例如,继承为MyTest::testsuite_name 894):此变量自动地以TestSuite名称填入。此变量允许测试对象能够存取最初建立所述对象的TestSuite名称(例如,其可不同于执行测试的TestSuite)。ct_fail 892也可从基本测试类812继承。
可针对测试定义更多类变量作为其接口(测试方法参数)的部分。这些变量可在使类实例化之后且在运行测试之前通过TestMethod接口而填入。
以下为可借以调用共同并行函数中的每一者的顺序次序的简要概述:ON_FIRST_INVOCATION_BEGIN、*class.Constructor、*class.init()、*class.pre_trigger()(如果定义)、START_TEST()(或等效函数)、*class.post_trigger()(如果定义)、WAIT_TEST_DONE()、*class.cleanup()、ON_FIRST_INVOCATION_END、*class.calc()、*class.datalog()及*class.Destructor()(其可仅在最后位点之后执行)。
下文中描述CTest并行执行模型。个别CTest对象226通过TestMethod实例化。这些TestMethod的接口可类似于旧版TestMethod。TestSuite接口的一个差别是添加一参数以任选地非并行地执行TestMethod。
TestMethod主体可分段成CTest类结构并经替换。所述主体可为将TestMethod接口转译成CTest接口的机制。TestMethod使一给定CTest类的对象226实例化,填入其参数并将其置放于“CTest”队列上以供执行。任选地,其执行经排入队列的对象。“执行”TestSuite及TestMethod允许修改及取代以并行地运行个别CTest且接着执行经排入队列的CTest。
函数logdata()809已在框架结构内部建立以促进TMLimits的适当使用,同时测试并数据记录参数。所述函数处置一些细节以从原始调用TestSuite而非执行所有经排入队列的测试的并行TestSuite适当地获取限制信息。所述函数还并入与CTests.exec()函数同步的多区间化支持。可需要所有并行测试将硬件(HW)及软件(SW)区间信息包括于TMLimits文件中。可在CTest衍生类818内或从与并行性完全无关的任何外部模块调用logdata()809。
此函数的两种实施方案是可用的。在logdata()884、809的一个实施方案中,当试图从TMLimits文件中获取数据时,所述函数将TestSuite名称及测试参数名称串接成单一字符串。此情形允许在观测使用并行程序产生的数据记录时追踪测试参数(例如,在原始TestSuite名称另外将丢失的情况下)。logdata()884、809的另一实施方案允许定义或指定在搜索TMLimits文件时使用何TestSuite名称及测试参数名称。
logdata()函数884、809可如下用于CTest衍生类内以实现并行性。举例来说,这些以下函数调用标头可用于CTest衍生类内:int CTest::logdata(std::string testName,double value,std::string pinName=″″);int CTest::logdata(std::string testSuiteName,std::string testName,double value,std::string pinName=″″)。pinName可为任选参数。其可包括或不包括于函数调用中。无论何时不包括此参数,则其将采用空字符串值。
举例来说,在许多状况下,函数可如下以其最简单的调用格式使用:logdata(″ch0_snr_i″,ch0_snr_i_dB)。测试的逻辑通过/失败结果还可存储于变量中:intpassed=logdata(″ch0_snr_i″,ch0_snr_i_dB)。可使用任选参数将引脚名称添加到数据记录:int passed=logdata(″ch0_snr_i″,ch0_snr_i_dB,″ATEST_BUS″)。(例如,“类型-1”实施方案的)所有这些函数调用均假定TMLimits文件含有类似于表6中所说明的条目的条目。
表6
应注意若干备注:从logdata()函数884、809输出的debug可由analog_debug旗标来控制。当在并行类内部调用所述函数时,用于测试语句中的overon旗标总是设定为1,以允许对所有并行执行的测试进行适当推断(例如,即使测试失败,代码仍可继续执行直到结束为止)。在并行测试执行中,用于第一失败测试的区间将用以使装置区间化(仍可完成并数据记录其它排入队列的测试)。然而,如果任何其它测试失败,则可丢弃其区间化信息。多区间元素可用于将执行并行测试的TestSuite的流中。用于TMLimits文件中的任何硬件(HW)及软件(SW)区间数目及描述可需要作为多区间化的一实际区间而存在于TestFlow中以适当地工作(例如,TMLimits文件可匹配流中的现有区间)。并行TestFlow可每一测试设置使用实际区间且包括用于并行TestSuite的多区间。
可在并行测试类818外部使用logdata()函数884、809。举例来说,还可在并行框架结构外部调用logdata()函数884、809,其中稍微不同的标头可如下用以存取此函数:int logdata(std::string testName,double value,std::string pinName=″″,int overon=1,int multibin=0);int logdata(std::string testSuiteName,std::string testName,double value,std::string pinName=″″,int overon=1,int multibin=0)。
针对logdata()函数884、809的CTest衍生实施方案所描述的几乎所有要点在此处也适用,其中以下所述例外:如果需要在第一失败测试时停止TestMethod代码执行,则现在可改变overon旗标,但如果在函数调用中未指定此旗标,则此旗标默认地设定为1。当在并行类外部调用函数时,未必预期多区间化,且多区间化默认地被停用。如果在并行测试外部需要多区间化,则其仍可通过在函数调用中明确地将多区间参数设定为1而启用。Concurrency_lib.h文件可包括于目标代码中。并行性库.so文件可在建置项目时链接(此对于在CTest衍生类下的使用也成立,但可为使用并行性的假定先决条件)。
图9为说明可实施用于启用并行测试的系统及方法的工作站902的一个实例的框图。工作站902的实例包括桌上型计算机、膝上型计算机、服务器或其它计算装置。工作站902与自动测试设备(ATE)906通信。ATE 906可与被测装置(DUT)908通信及/或测试被测装置(DUT)908。DUT 908可包括多个块910。在此实例中,DUT 908包括块A 910a、块B 910b及块C 910c。
工作站902可包括并行测试模块904。所述并行测试模块904可包括启用对DUT 908上的多个块910a到910c的并行测试的功能性。所述并行测试模块904可包括用户接口913。举例来说,用户接口913可为允许用户与工作站902互动的图形用户接口(GUI)。
用户接口913可包括及/或显示TestFlow 915。TestFlow 915可显示待使用ATE 906对DUT 908执行的一个或一个以上测试。在此实例中,TestFlow 915包括TestSuite A917a、TestSuite B 917b、TestSuite C 917c及执行TestSuite 921。TestSuite A 917a、TestSuiteB 917b、TestSuite C 917c及执行TestSuite 921可分别链接到TestMethod A 919a、TestMethod B 919b、TestMethod C 919c及执行TestMethod 923。TestMethod 919、923可提供用于与每一TestSuite 917、921相关联的测试的指令及/或代码。
在此实例中,TestSuite A 917a(及TestMethod A 919a)对应于块A 910a,TestSuite B917b(及TestMethod B 919b)对应于块B 910b且TestSuite C 917c(及TestMethod C 919c)对应于块C 910c。工作站902可依序执行TestSuite A 917a到TestSuite C 917c。根据本文中所揭示的系统及方法,对应于TestMethod A 919a到TestMethod C 919c的测试的实际执行可延后直到执行TestSuite 921及执行TestMethod 923(其可类似于上文所描述的Exec_Conc_TM())为止。举例来说,在执行TestSuite A 917a到TestSuite C 917c中的每一者时,使用对应TestMethod A 919a到TestMethod C 919c产生测试对象226。将这些测试对象226添加到队列224对象。
当执行到达执行TestSuite 921时,执行TestMethod 923执行队列224中的所有测试对象226。举例来说,将对应于测试对象224的指令、数据及/或其它信息发送到ATE 906,ATE 906并行地执行对应测试。因此,可并行地测试块A 910a、块B 910b及块C 910c。举例来说,对块A 910a到块C 910c执行的测试可在时间上重叠。所述测试可在一个配置中同时或大约同时开始。在同一或另一配置中,每一测试可在工作站902上的不同线程上运行。
图10为说明可实施用于启用并行测试的系统及方法的计算装置1002的另一配置的框图。计算装置1002可与ATE 1006通信,ATE 1006可与具有多个块1010的DUT 1008通信。计算装置1002可包括并行测试模块1004。并行测试模块1004可任选地包括隐藏下载模块1025、模拟集合产生模块1027、数字模式产生模块1029及/或并行直流(DC)测试执行模块1031。
隐藏下载模块1025可允许计算装置1002从ATE 1006下载俘获的模拟数据。下载可为“隐藏的”,意味着可作为后台过程在测试执行期间接收数据。在一个配置中,隐藏下载模块1025(或“隐藏上载模块”)利用由SmarTest散布的标准SmartCalc特征以将其应用于并行测试。SmartCalc允许数据的隐藏下载(或从仪器上载)及后处理。这意味着仪器可在其它测试或仪器正运行的同时在后台中将俘获的数据上载到计算装置102以供后处理。此模块允许并行框架结构使用此特征以具有无缝转变。
模拟集合产生模块1027可用以自动地产生用以执行并行模拟及射频(RF)测试的模拟集合。举例来说,模拟集合产生模块1027可产生ATE 1006可用以并行地执行模拟测试及RF测试的模拟集合信息。此模拟集合信息可发送到ATE 1006。在一个配置中,模拟集合产生模块(或“模拟建置器”)1027可允许将多个模拟定义合并成用于单一执行多俘获的一个定义。其可供并行性框架结构使用以整合用于经分组以并行地执行的单独测试中的模拟定义。举例来说,此可使用标准SmarTest模拟API译码来产生定义(而非常规GUI方法)。
到模拟集合产生模块1027的输入可为模拟指令集及队列224(例如,CTest队列)或队列内容。模拟集合产生模块1027可询问队列224内部的每一测试对象226以确定每一测试对象226的性质(例如,其是否为RF传输测试、RF接收测试、低频(LF)模拟测试(例如,基带(BB)测试)、DC测试、数字测试等)。基于对队列224的此调查,模拟集合产生模块1027可产生将发送到ATE 106的适当指令集。可串行地(一个接一个)堆栈具有相同性质的所有测试。可并行地堆栈具有不同性质的所有测试。列表7说明一个实例。
RF TX测试1→RF TX测试2→RF TX测试3
RF RX测试1→RF RX测试2→RF RX测试3
LF BB测试1→LF BB测试2→LF BB测试3
列表7
模拟集合产生模块1027可忽略DC及数字测试设置,这是因为所述设置与ATE 106的模拟指令集不相关。
数字模式产生模块1029可自动地产生用以执行并行测试的数字模式。举例来说,数字模式产生模块1029可用以产生数字测试模式,ATE 1006可使用所述数字测试模式并行地测试多个块1010。可将数字模式发送到ATE 1006。在一个配置中,数字模式产生模块1029可使用类似于模拟建置器但用于数字模式的概念。数字模式为基于每引脚而定义的数字数据流。模式用以经由ATE 106数字通道驱动(或俘获)数字数据,数字数据用以配置DUT 108并通过其传达。在常规TestFlow中,每一TestSuite具有相关联模式。此模块1029可允许采用多个测试的模式并将其合并成单一模式以并行地执行测试。模块1029可使用多端口突发模式,其为经定义用于精简引脚集合的模式的子集(对目标测试特定)。
到数字模式产生模块1029的输入可为数字模式的集合及由队列224(例如,CTest队列)中的每一测试对象226所确定的现有模式的阵列。数字模式产生模块1029可通过数字引脚分组询问每一测试对象的模式。如果引脚群组相同,则可串行地堆栈模式。如果引脚群组不同,则可并行地堆栈模式。
在一个配置中,多端口突发模式可如下实施。可在执行TestSuite中指定或定义多个变量。举例来说,可指定CTT_BurstLablelName字符串变量中的并行突发标签名称。此外,可设定autoGenCCTBurstLablel旗标。举例来说,如果第一次需要建立标签或需要重写现有CTT_BurstLablelName,则可将所述旗标设定为类型“1”。如果已经建立或定制CTT_BurstLablelName且CTT_BurstLablelName不需要修改,则可将所述旗标设定为类型“0”。
数字模式产生模块1029可组合来自个别测试套件突发标签(例如,类似于多端口突发工具)的“并行突发标签”。并行突发标签可描绘为个别突发标签的表。举例来说,并行突发标签可反映用于测试中的数字模式的结构。如果突发模式共享同一端口,则可将突发模式串行地添加到并行突发标签(例如,在单列中)。如果突发模式不共享同一端口,则可将突发模式并行地(例如,在不同列中)添加到并行突发标签。还可添加“哑(dumb)”或“等待”模式以对准特定突发。换句话说,数字模式产生模块1029可插入或调整哑模式或等待模式的长度以在成对的端口模式在时域中完成时完成。在一些例子中,还可准许用户调整模式。举例来说,用户可手动地添加哑模式或等待模式或移除向并行测试提供冗余功能性的模式。
并行DC测试执行模块1031可用以执行由并行测试模块1004所支持的并行DC测试。举例来说,DC测试可为Verigy 93K ATE 106中的特殊状况,这是因为其可使用由ATE 106使用的数字通道之后的仪器来驱动模式,而非使用单独的独立仪器来执行测量。因此,DC的并行性可需要此模块1031促进的特殊处理。
图11说明可用于计算装置1102中的各种组件。所说明的组件可位于同一物理结构中或可位于单独外壳或结构中。关于图1、7、9及10所论述的计算装置102、702、902(工作站)、1002可类似于计算装置1102而配置。计算装置1102包括处理器1139。处理器1139可为通用单芯片或多芯片微处理器(例如,ARM)、专用微处理器(例如,数字信号处理器(DSP))、微控制器、可编程门阵列等。处理器1139可称为中央处理单元(CPU)。虽然图11的计算装置1102中仅展示单一处理器1139,但在替代配置中,可使用处理器的组合(例如,ARM与DSP)。
计算装置1102还包括与处理器1139进行电子通信的存储器1133。即,处理器1139可从存储器1133读取信息及/或将信息写入到存储器1133。存储器1133可为能够存储电子信息的任何电子组件。存储器1133可为随机存取存储器(RAM)、只读存储器(ROM)、磁盘存储媒体、光学存储媒体、RAM中的快闪存储器装置、与处理器一起包括的板上存储器、可编程只读存储器(PROM)、可擦除可编程只读存储器(EPROM)、电可擦除PROM(EEPROM)、寄存器等(包括其组合)。
数据1137a及指令1135a可存储于存储器1133中。指令1135a可包括一个或一个以上程序、例程、子例程、函数、过程等。指令1135a可包括单一计算机可读语句或许多计算机可读语句。指令1135a可由处理器1139执行以实施上文所描述的方法400、500、600。执行指令1135a可涉及使用存储于存储器1133中的数据1137a。图11展示加载到处理器1139中的一些指令1135b及数据1137b。
计算装置1102还可包括用于与其它电子装置通信的一个或一个以上通信接口1141。通信接口1141可基于有线通信技术、无线通信技术或两者。不同类型的通信接口1141的实例包括串行端口、并行端口、通用串行总线(USB)、以太网适配器、IEEE 1394总线接口、小型计算机系统接口(SCSI)总线接口、红外线(IR)通信端口、蓝牙(Bluetooth)无线通信适配器等。
计算装置1102还可包括一个或一个以上输入装置1143及一个或一个以上输出装置1145。不同种类的输入装置1143的实例包括键盘、鼠标、麦克风、远程控制装置、按钮、操纵杆、轨迹球、触控板、光笔等。不同种类的输出装置1145的实例包括扬声器、打印机等。通常可包括于计算装置1102中的一个特定类型的输出装置为显示装置1147。供本文中所揭示的配置使用的显示装置1147可利用任何合适的图像投影技术,例如,阴极射线管(CRT)、液晶显示器(LCD)、发光二极管(LED)、气体等离子、电致发光或其类似者。还可提供显示器控制器1149,其用于将存储于存储器1133中的数据转换成在显示装置1147上展示的文字、图形及/或动态图像(在适当时)。
计算装置1102的各种组件可通过一个或一个以上总线耦合在一起,所述总线可包括电源总线、控制信号总线、状态信号总线、数据总线等。为简单起见,图11中将各种总线说明为总线系统1151。应注意,图11说明计算装置1102的仅一个可能配置。可利用各种其它架构及组件。
在以上描述中,参考数字有时已与各种术语结合使用。当术语与参考数字结合使用时,此可意味着指代在图中的一者或一者以上中展示的特定元件。当术语未与参考数字一起使用时,此可意味着在不限于任何特定图的情况下大体上指代所述术语。
术语“确定”涵盖多种动作,且因此“确定”可包括运算、计算、处理、导出、调查、查找(例如,在表、数据库或另一数据结构中查找)、查明及其类似动作。又,“确定”可包括接收(例如,接收信息)、存取(例如,存取存储器中的数据)及其类似动作。又,“确定”可包括解析、选择、挑选、建立及其类似动作。
除非另有明确指定,否则措词“基于”不意味着“仅基于”。换句话说,措词“基于”描述“仅基于”及“至少基于”两者。
本文中所描述的功能可作为一个或一个以上指令而存储于处理器可读媒体或计算机可读媒体上。术语“计算机可读媒体”指代可由计算机或处理器存取的任何可用媒体。通过实例而非限制,此媒体可包含RAM、ROM、EEPROM、快闪存储器、CD-ROM或其它光盘存储装置、磁盘存储装置或其它磁性存储装置,或可用以存储呈指令或数据结构形式的所要程序代码且可由计算机存取的任何其它媒体。如本文中所使用,磁盘及光盘包括压缩光盘(CD)、激光光盘、光学光盘、数字通用光盘(DVD)、软性磁盘及Blu-ray光盘,其中磁盘通常磁性地再现数据,而光盘通过激光光学地再现数据。应注意,计算机可读媒体可为有形且非暂时性的。术语“计算机程序产品”指代与可由计算装置或处理器执行、处理或计算的代码或指令(例如,“程序”)结合的计算装置或处理器。如本文中所使用,术语“代码”可指代可由计算装置或处理器执行的软件、指令、代码或数据。
软件或指令还可经由传输媒体传输。举例来说,如果使用同轴电缆、光纤缆线、双绞线、数字订户线(DSL),或例如红外线、无线电及微波的无线技术从网站、服务器或其它远程源传输软件,则同轴电缆、光纤缆线、双绞线、DSL,或例如红外线、无线电及微波的无线技术包括于传输媒体的定义中。
本文中所揭示的方法包含用于实现所描述方法的一个或一个以上步骤或动作。所述方法步骤及/或动作可在不脱离权利要求书的范围的情况下彼此互换。换句话说,除非需要步骤或动作的特定次序用于所描述的方法的适当操作,否则可在不脱离权利要求书的范围的情况下修改特定步骤及/或动作的次序及/或使用。
应理解权利要求书不限于上文所说明的精确配置及组件。在不脱离权利要求书的范围的情况下,可在本文中所描述的系统、方法及设备的布置、操作及细节方面进行各种修改、改变及变更。