前言
刚进NI(National Instruments)公司的时候,部门就安排了一次为期5天的TestStand内部课程培训,由资深应用工程师授课。那时候笔者还不太了解TestStand,但对它的广泛应用已有所体会,以电子行业为例,在全球顶级的15家电子产品制造商中,就有14家使用了TestStand,并且它几乎每年都会推出新版本,足见其生命力之强。
最初,一些敏锐的科学家和工程师发现,在开发自动化测试系统时,随着系统复杂程度的增加,测试项增多,管理这些测试项变得非常困难。如果中间插入测试项,或者需要调整测试项顺序,必须对测试代码做很大的改动;当频繁进行这些操作时,工作量变得非常大且异常烦琐,从而造成维护上的困难。而且,自动化测试系统往往是一个混合平台,需要用到不同仪器厂商的设备,基于不同语言编写的硬件驱动程序,要求软件具备统一接口,以调用使用不同语言编写的代码模块。另外,当产品升级或设计全新产品时,相应测试系统的大部分代码需要重写,而这其中包含序列号追踪、用户管理、测试流程控制、报表生成、数据存储、用户界面更新、系统配置、弹出提示窗口等一些非常通用的操作,若将这些通用部分提取出来作为框架模板,然后用户在这个模板上进行开发,无疑会节省很多的开发时间。再者,在产品测试过程中,需要将每项测试结果和产品规格的上/下限做对比,随着测试项增多,相应的规格上/下限也急剧增多,管理它们就变得非常重要,有时甚至需要在某个关键测试项不合格时,立即停止对产品的测试,这就涉及测试的管理策略问题。随着开发经验日益丰富,工程师不再满足于现有系统的测试效率,因此自然会想到引入多个产品的并行测试。然而,引入并行测试需要考虑的问题有很多,包括线程的管理追踪、线程安全、线程之间的通信、数据空间等,要做到这些并不简单。总之,TestStand在这样的背景下诞生了。
TestStand是一个现成可用的自动化测试管理软件,用于从组织自动化原型创建、控制设计认证到执行生产测试的整个过程。它与LabVIEW、LabWindows/CVI、Visual Basic和Visual C等所有主流测试编程环境兼容,且能调用任何编译过的动态链接库(DLLs)、ActiveX自动化服务器、EXE可执行程序,甚至传统开发语言,如HTBasic和HP-VEE。利用TestStand强大的兼容性,可以非常方便地在一个系统中将传统和现代测试编程环境结合起来。由于TestStand与LabVIEW、LabWindows/CVI编程语言完全兼容,开发人员可以更加方便地在TestStand中对程序进行调试、修改或设置断点。此外,TestStand具有极其开放的架构,为满足特定需求,用户可自行对其功能进行修改,例如自定义用户界面和报表生成格式,或者根据不同的测试需求自行定义执行顺序。TestStand建立在高速、多线程执行引擎基础上,其性能可满足最严格的测试吞吐量要求。TestStand可以使工程师将精力集中在更重要的任务上(如考虑如何为产品建立测试策略,以及如何利用这个策略开发出应用程序等),而相对简单通用的工作(如运行序列、执行、报表生成和数据库记录等)均由TestStand来完成。TestStand在提高自动化测试开发效率、加快测试速度、降低测试系统整体成本方面具有非常显著的优势。
笔者曾主导或参与了TestStand方面一些大型项目的开发,深深体会到TestStand的强大和用户需求的多样性,并且很幸运地结识了许多非常优秀的工程师,有机会和他们进行交流,探讨TestStand的开发技巧、资源使用效率、并行测试等话题。在此摘录一些:
“TestStand提供了成熟的框架、快速的开发模式,从过程模型、操作界面到用户管理、报表生成、数据库记录等,在着手新项目开发时,我只需要关注产品测试项本身,其他都可以复用,这极大地节省了开发时间。”
——黄华勇vivo移动通信工程测试经理
“TestStand的调试功能比较突出,设置的测试模式丰富,使调试工作变得轻松。尤其是定位一些产品功能性的问题,因为公司产品功能相对复杂,测试项非常多。”
——陈中梁 华为终端资深测试装备开发工程师
“TestStand有助于功能模块标准化、平台化,减少重复开发工作量。在其框架的基础上,我们能通过一定程度的自定制,最终开发出适合公司使用的通用自动化测试平台。”
——袁秋 迈瑞生命信息与支持事业部装备开发技术经理
“在TestStand中进行测试管理是一件非常轻松的事情,它对测试序列的调度能力可以让使用者非常方便地编辑测试序列。此外,TestStand的多线程管理能力很强,稳定性非常高。”
——林晓斌 亚马逊资深测试工程师
“TestStand自带的并行测试模型大大简化了多线程管理的工作,通过优化策略可以提高资源利用率,进而显著缩短测试时间,满足产能要求,而且其内在同步机制很好地解决了并行测试中竞争、资源冲突、死锁等问题。”
——郭恒章 Bose中国测试经理
编写本书的动力
在一个硬件趋于同质化的时代,如何提高核心竞争力?由于摩尔定律推动而带来的飞速发展,硬件的性能越来越强大,这种势头导致不同厂家之间硬件的性能趋于同质化,而真正体现差异性的方面则在于软件及其带来的用户体验。这种现象普遍存在于各个行业,如消费电子、无线终端、半导体、汽车、仪器仪表等。以仪器仪表行业为例,各种硬件指标,如带宽、频率范围、采样率、绝对精度,在不同厂家的同级别仪器之间差别并不是很大,将这些仪器用于搭建自动化测试系统时,真正影响测试效率、系统开发周期、系统更新升级成本以及系统可靠性的是测试开发软件。在这个以软件为核心的时代,TestStand正是自动化测试领域非常重要的一个软件平台,它具备加速自动化测试系统的开发及完善产品的原型验证、开发测试、系统级测试并最终缩短产品上市周期等独特的优势,近年来得到了广泛的应用,而对其系统性介绍资料的需求也越来越突出。
笔者刚进入NI公司时,作为应用工程师,一部分工作是通过电话或电子邮件解决客户的技术问题,并接手一些项目验证。有些项目难题无法直接解决,需要查阅用户手册和内部数据库,而内部数据库的知识点往往是回答某个具体问题,并没有归纳整体项目案例或整理一系列有代表性的问题,经常花费相当长的时间才找到有价值的资料。在部门经理的支持下,笔者和另一位同事设想将平时所做的项目验证和比较系统的技术问题以文档的形式记录下来,供部门内部参考,以节省大家的时间,并把这项工作命名为Knowledge Sharing(以下简称为KS)。作为KS的第一任编辑,笔者向部门的全体同事征稿,题材不限。出乎意料的是,我们在短时间内就收到了很多文章,这些文档还引起了广泛讨论甚至争辩,大家都觉得从这种文档式的知识分享中受益良多。由于KS最初的目的是在应用工程部门内部实现知识分享,因此许多文章在写作时没有介绍基础知识,并省略了一些较粗浅的细节。这对于内部交流没有影响,但是对于大部分客户,则跳跃性太大,无法参考。另外,我们对KS进行归类时发现,TestStand方面的文章很多,这一方面反映了国内使用TestStand的机会非常多,另一方面则体现出TestStand的功能非常强大,即使是NI工程师也无法了解其所有的功能,只能在遇到某个问题时查阅技术文档将某项功能开发出来。经常有客户抱怨阅读英文帮助文档非常浪费时间,而且不知道如何与实际项目相结合,询问是否有TestStand方面的中文专业书籍,然而让笔者很意外的是,在市场上竟没有找到一本系统性的相关书籍。编写本书的初衷很简单,就是结合笔者多年的项目经验和学习心得,对TestStand常用功能进行系统的归纳和总结,并希望将面对具体项目时如何建立框架的思想传递给读者。有时因为一个很简单的理由,就会选择坚持下来去做一件事。希望本书能够给应用工程部门的同事作为参考,更重要的是让数以千万计的TestStand开发工程师受益。
本书的特点
在笔者看来,最详细的TestStand资料莫过于其帮助文档,它涵盖了TestStand所有的知识点,所有操作细节都可以在帮助文档中找到相应的说明,因此本书只在一些重要的地方加以注释,提示读者某个知识点的更多细节可以在帮助文档中查阅到。笔者曾是NI公司官方TestStand高级课程的讲师,在多次授课的过程中,有幸与学员进行直接沟通,从他们的反馈中得以评估TestStand课程内容的选择、难易程度的控制、课程内容对客户实际项目的即时帮助、课程时间的安排等。培训课程中,原理介绍较多,实际案例偏少。以上都对笔者把握本书内容起到了很重要的指导作用。在本书编写过程中,笔者结合了近些年在项目开发过程中积累的经验,将各知识点的理论原理讲述与项目实际应用相结合,有相当大的篇幅是介绍项目开发中遇到的技术问题,以及推荐的解决方法,以帮助读者有效避开典型的问题,节约开发时间。同时,为了更好地说明某些较复杂的问题,书中附上了大量的例程,这些例程都经过精心设计和验证且不随意发散,以便读者更好地吸收和消化。在讲解重点章节时,对开发人员重点关心的一些内容,本书力求提供可供实际工程项目借鉴的范例和模型,这些范例和模型非常便于移植,如报表的自定制、自定义用户界面、混合系统并行测试模型、TestStand语言本地化、常见回调序列的使用、过程模型自定制、系统部署、性能优化等。本书分为基础入门和高级进阶两部分:基础入门部分主要通过系统的讲解来引导TestStand初学者入门,并对TestStand有一个较完整的认识,从而将TestStand运用于实际项目中;而高级进阶部分更多地介绍自定制方面的知识、TestStand面向对象模型、编程技巧和优化策略、深入理解TestStand开放式架构,从而使读者成长为团队的核心开发人员,并逐步从测试管理架构师的角度对项目的复杂度和需求进行评估。
本书的目标
本书的目标在于帮助读者快速掌握TestStand并最终成为TestStand开发专家。在通读本书后,读者能熟练掌握以下内容:
创建TestStand测试序列;
编写代码模块供TestStand调用;
修改常用TestStand配置;
在TestStand中进行调试;
执行并行测试;
合理实施用户管理策略;
根据项目需求自定制步骤;
熟练掌握回调序列的使用,深入理解过程模型;
开发自定义用户界面;
TestStand报表自定制;
将开发程序部署到目标系统;
优化测试系统,提高系统运行效率。
本书的编写说明
符号 将引导读者进入嵌套菜单项或通过一系列单击操作到达对话框的最终项。
粗体字 粗体字表示序列名称、步骤名称、参数名称、菜单项。
斜体字 斜体字表示变量、强调、对关键术语或概念的介绍,或者是占位符,必须输入的内容。
等宽字体 等宽字体表示使用键盘输入的文字和字符,如代码片断、语法示例。
注意 提醒读者需要注意细节的地方。
提示 一些操作技巧,可以使操作更有效。
警告 提醒读者特别留意,一些操作可能引起错误、数据丢失或系统崩溃。
TestStand版本和安装说明
笔者在编写本书时使用的是TestStand 2013版本,但书中大部分内容同样适用于更早期的TestStand版本。虽然在本书出版时,TestStand已经有了更新的版本,但是书中的思想、所使用的开发技巧基本是通用的,若TestStand内核有重大的改动,笔者将考虑对本书进行修订。在TestStand平台下可调用多种语言编写的代码模块组成测试序列,本书主要使用LabVIEW 2013、LabWindows/CVI 2013编写的代码模块,一个是图形化的平台,另一个是传统的文本编程开发平台。读者可以到NI公司官方网站下载TestStand、LabVIEW和LabWindows/CVI 2013软件。为了保证书中所有的示例都能正常运行,建议读者在个人计算机上安装上述开发环境。如果读者安装的软件是评估版(仅提供45天的试用期),试用期结束后将会失效,读者可以联系NI公司获取许可证。此外,读者可以到华信教育资源网(https://www.hxedu.com.cn/)下载书中涉及的示例和练习(范例资源,按章节分类)。
插图和示例
本书的示例和插图都是使用TestStand 2013版本完成的,运行的操作系统是Windows 7。
由于笔者水平有限,书中难免有疏漏之处,希望读者能够指正,也欢迎对书中的任何内容做评论。笔者更希望看到的是,通过本书搭起一座桥梁,在本书给读者提供参考的同时,通过读者相互之间的讨论激发对TestStand的交流热情,而这些讨论得到的收获能更好地应用于各自的项目之中,并从中受益。
编著者