1.2 自动化测试系统
自动化测试由自动化测试系统(Automated Test System)来实施。自动化测试系统是这样一个实体,它负责执行一部分或全部的与测试相关的任务,而在这些任务的执行过程中很少或几乎没有人工干预。通过减少人工干预,自动化测试系统显著提升了测试速度,并且测试结果的一致性得到了很大的改善,这在产线大批量生产测试中尤为明显。现代工业的快速发展,促进了工业和制造业往高度自动化方向迈进。在许多先进企业的工厂,机械手逐步取代了人工操作,机器视觉和运动控制广泛用于自动化产线中。这些企业在进一步降低成本的同时,大大提高了产能,产品一致性也得到很好的控制,这已经成为一种不可逆转的趋势。而作为新产品开发过程中极其重要的一个环节——测试,自然转向自动化测试的方向。
一件事物如果你不能测试它,就无法改进它。
——开尔文《论测试的重要性》
一个完整的自动化测试系统由测试站、仪器设备、测试软件三个部分组成。
测试站用于运行测试软件,连接仪器设备,并提供人机交互界面。它通常是一台PC、工控机或基于标准总线的硬件平台,如P XI、VXI。测试站通过不同的接口和仪器设备相连接,如GP IB、以太网、USB、串口、P XI、VXI。测试站可以独立运行,但通常情况下会把它接入局域网,这样可以和局域网内的其他测试站进行通信,而如果企业有内部数据库,测试站可以将测试结果实时记录到数据库中。借助于网络,测试软件的更新和部署也变得更简单。
仪器设备种类繁多,系统中使用什么设备,取决于实际项目。通常将仪器设备和待测件(Unit Under Test,UUT)进行连接,测量UUT的输出。有些系统还会利用仪器给UUT提供激励信号,如使用信号发生器输出正弦激励信号、使用数字输出设备驱动继电器开关等。
测试软件是自动化测试系统中最灵活、最核心的部分。在着手搭建自动化测试系统的过程中,需要确定测试站的配置、仪器设备的选型,这个过程其实并不复杂。根据自动化测试系统的复杂程度,研发团队可以决定采用多高配置的测试站;而UUT的测试规格书和需求文档则基本上定义了对仪器设备的性能要求。接下来要重点考虑的问题是如何设计测试软件——采用什么平台做开发,如何定义它的功能,如何设计它的用户界面,如何保证后期的扩展升级。对于自动化测试系统而言,很多时候会有多个测试站,它们都在测试同一类产品,测试软件需要考虑批量部署的问题;有些时候同一个测试站会用于测试不同的产品,这就要求测试软件针对不同的产品提供不同的测试程序。这里有必要把测试软件进一步细分为如下五个组成部分(如图1-2所示)。
图1-2 测试软件组成
用户界面:测试软件要给操作人员提供一个可视化的用户界面,它提示操作人员通过鼠标单击或键盘输入启动测试、追踪测试进度、测试完成时显示结果,操作人员可根据结果判断良品与次品。通常,用户界面会设计得比较通用,使它可以用于不同类型的产品。
测试程序:即针对某种特定类型UUT的测试序列,包含一系列的测试步骤。不同类型UUT的测试程序是不同的,开发人员可以使用不同的语言编写测试程序。
自动化测试框架:与测试程序相反,自动化测试框架则包含通用的代码,实现通用的功能,它适用于不同类型的UUT。自动化测试框架负责测试程序加载、用户界面更新、产品序列号追踪,甚至还接管一些和测试相关的任务,如生成报表、记录数据库、维护测试系统配置信息。在自动化测试框架内,通过编写不同的测试程序,可实现不同产品的测试。因此,对于不同产品之间自动化测试系统的开发,更多的时间将花费在测试程序上面,自动化测试框架可以最大程度地复用,缩短系统开发时间。
数据管理系统:数据管理系统用于实现数据的管理,其核心是存储数据的容器,并提供更新容器的方法,如添加数据、删除数据、查询数据。在自动化测试系统中,数据管理系统必不可少,所有的数据都需要汇总到数据管理系统。
数据分析系统:数据分析系统从数据管理系统中提取数据,然后对结果进行分析。如产品的不良率高、一致性差,可以借助于数据分析系统来查找原因。
测试软件由多个子系统构成,分别在自动化测试中定义了四种不同的角色,即操作员、技术员、程序开发者、架构师,每种角色分别负责不同的子系统,如图1-3所示。
图1-3 自动化测试系统中的不同角色
操作员负责产品测试。在用户界面中,操作员单击“开始”按钮启动测试,根据测试结果对UUT分类,按照用户界面提示放置UUT于测试夹具中,测试完成时取出UUT。操作员不需要了解测试项和技术问题,只负责执行测试。
技术员负责对UUT测试过程中出现的问题进行初步的诊断。例如,UUT输出信号异常时尝试用手动工具进行诊断,仪器通信失败时尝试检查仪器端口是否正常,大批量产品不良时尝试检查测试夹具和产品是否接触良好,系统初始化失败时尝试检查系统配置参数是否正确。如果问题不能解决,技术员将诊断的结果反馈给程序开发者。技术员需要对UUT的测试项有一定的了解,但对于测试项的原理和更多的技术细节并不清楚。
程序开发者负责开发测试程序,并根据技术员反馈的信息,调试并修改测试程序。程序开发者需要完成整个测试程序的开发(包括每个具体测试项的代码编写工作),并依据产品规格设置测试项的上、下限。程序开发者需要了解产品的每个技术细节。测试程序的开发会在某个自动化测试框架内进行,而这个框架由架构师负责设计。
架构师负责自动化测试框架的设计工作。自动化测试框架应该非常通用,这样才可以提供给不同的程序开发者使用。程序开发者无须考虑如何设计用户界面更新、产品序列号追踪、报表生成、数据库记录这些由框架所定义的通用功能,而只需要专注于测试程序的开发。架构师必须对自动化测试本身有非常深的理解和技术积累,并熟练使用一种或多种语言来编写用户界面和开发测试工具,需要充分考虑框架的扩展、升级和性能优化。不要求架构师对特定产品非常熟悉,但他对产品所在行业要有很好的整体了解和把握,同时需要考虑数据管理系统和数据分析系统的设计。