深夜十一点某嵌入式系统第三方测试机构的实验室里工程师小李盯着屏幕上密密麻麻的调试信息揉了揉发酸的眼睛。明天上午就要提交产品的测试报告可今天下午刚送来一套全新的被测件——接口变了协议变了测试逻辑也得从头梳理。插线、配置、调试、写测试程序、报错、再调试……他已经在这里耗了六个小时。“要是有一个工具能让我用自己最熟悉的脚本语言把测试逻辑快速写清楚然后自动跑起来就好了。”小李叹了口气继续埋头敲着键盘。这个场景在过去二十年的嵌入式系统软件第三方测试机构里每一天都在上演。01当“多样性”成为第三方测试机构的最大难题嵌入式软件测试是嵌入式产品质量的最后一道防线。一颗卫星的上天一架战机的起飞背后是千万行代码的精密协作。而第三方测试机构就是这道防线的守护者。可这道防线曾经有两个巨大的“阿喀琉斯之踵”——被测件的多样性以及对研制单位测试工装的严重依赖。每一套送测的产品都有自己的“脾气”。RS232/422/485、1553B、CAN、ARINC429、Ethernet……不同的总线接口对应着成百上千种通信协议。有些是公开的行业标准更多的则是厂商私有的协议——帧结构由自己定义编码方式自己设计有的甚至写在二十年前的内部文档里如今早已无人能详。而比协议多样性更让第三方测试机构头疼的是他们手里往往没有自己的测试工具。多少年来嵌入式软件第三方测试机构一直依赖研制单位提供的调试用工装来开展测试。这些工装是研制单位为了开发调试自己做的能跑、能用但有一个致命的问题——它们是给研制单位自己用的不是给第三方测试机构设计的。当第三方测试机构拿到一套新被测系统第一件事往往是找研制单位借工装。工装到了才能开始搭环境工装没到项目就得停摆。更糟糕的是有些研制单位不愿提供工装的核心控制权有些工装只能测“正常流程”测不了“异常注入”和“极限边界”——毕竟它们是为调试设计的不是为测试设计的。没有工装第三方测试机构就变得无能为力。第三方测试机构的工程师们把大量时间耗在了三件事上等工装、借工装、适应工装。有人统计过一个中等复杂度的嵌入式系统测试项目仅工装协调、协议适配和环境搭建的时间就占到了整个测试周期的50%以上。更可怕的是每次更换被测件一切从头再来。这是行业的痛点也是凯云团队创业之初亲眼目睹的现实。02破局者的理想——让第三方测试机构拥有自己的“测试主权”2014年北京中关村一间狭小的办公室里凯云的创始人提出两个问题第一个问题“我们能不能创造一种‘语言’让工程师用这套语言来描述任何私有协议无论它定义得多复杂、多多样然后由工具自动生成测试代码让第三方测试机构从此不再依赖研制单位的工装”第二个问题“我们能不能让工程师用自己最熟悉的方式——一种贴近测试思维的脚本语言像写测试用例一样写测试逻辑——来描述测试程序然后由工具自动把这些‘脚本’变成可执行的测试程序”这就是ETest的最初构想——用一套协议描述语言解决通信协议尤其是私有协议的定义多样性难题让第三方测试机构拥有自己的测试能力用一套贴近测试工程师思维习惯的脚本化描述方式解决测试逻辑的复杂性难题让懂测试的人不用变成C/C高手也能把测试做好。那时的市场不是没有测试工具。国外的产品功能强大但价格昂贵且对国产CPU和操作系统“水土不服”。更关键的是——它们是为“软件工程师”设计的需要用户像写应用程序一样写复杂的测试代码而中国第三方测试机构需要的是为“测试工程师”设计的工具让懂测试的人用自己熟悉的脚本化方式快速把测试想法变成可运行的测试程序让第三方测试机构不再看研制单位的脸色行事。凯云的选择是不走别人的老路。他们跑遍了航空航天院所采访了上百位一线测试工程师把大家吐槽最多的“痛点”一条条记下来依赖工装、私有协议太多太杂、配置太复杂、C/C写测试太费劲、调试效率低、不能支持国产平台……然后他们做出了一个大胆的决定从零开始设计一套全新的“协议描述语言”能够描述任何千奇百怪的私有协议同时创造一套让测试工程师一看就懂、一写就熟的“脚本化测试描述语言”——让第三方测试机构拥有自己的“测试主权”。03ETest诞生——让第三方测试机构不再无能为力经过数年的潜心研发2016年ETest半实物仿真测试集成开发环境正式推向市场。它不是对国外产品的简单模仿而是为中国嵌入式软件第三方测试机构量身定制的破局之作。它的核心灵魂正是那套独创的协议描述语言以及那套贴近测试思维的脚本化测试描述语言。有了ETest第三方测试机构终于可以挺直腰杆说一句话“不再依赖研制单位的工装我们自己能测。”一、“用语言定义协议”——自己掌握主动权在ETest的世界里任何私有协议都可以被“描述”而不是被“编码”。工程师只需要用ETest的协议描述语言告诉工具帧头是什么、数据域有多长、校验方式是什么、每个字段的含义……剩下的ETest自动生成对应的协议解析代码。无论是哪个年代、哪种风格的私有协议无论研制单位给不给工装、给不给协议文档只要第三方测试机构自己能读懂协议就能自己生成测试环境。工装不再是门槛主动权回到第三方测试机构手中。二、“用测试工程师的方式描述测试逻辑”——自己定义怎么测这是ETest最懂第三方测试机构的地方。在ETest里工程师不需要写一行C/C代码。他们可以用一种专门为测试工程师设计的脚本语言来描述“我想怎么测”。这套脚本语言的语法设计源自凯云团队对数百位一线测试工程师工作习惯的深度观察自然直观脚本语言的 keyword 设计贴近测试术语send、receive、expect、loop、if...then...else测试工程师看到就能懂写过测试用例就能写脚本。面向测试内置了丰富的测试专用函数库协议编码/解码、定时器控制、数据比对、异常注入……都是测试中最常用的功能一行脚本就能搞定过去需要几十行C代码才能完成的工作。灵活可控支持变量、表达式、条件判断、循环嵌套复杂的测试逻辑也能清晰表达。工程师可以像写测试用例提纲一样把测试步骤一步步写下来剩下的交给ETest去执行。python# 这是一段真实的ETest测试脚本# 测试场景发送查询指令等待响应判断数据有效性send(1553B, RT1, SA5, data[0x55, 0xAA, cmd_ID])wait(50) # 等待50msresponse receive(1553B, RT1, SA5, length10)if response.status OK:if response.data[0]0xAA and response.data[9] checksum(response.data[0:9]):log(测试通过响应数据正确)else:log(测试失败数据校验错误)else:log(测试失败未收到响应)测试思路用脚本写出来就像写测试用例一样自然。不再被C/C的语法细节牵着鼻子走。三、“全接口”的集成能力——什么设备都能测RS232/422/485、1553B、CAN、ARINC429、Ethernet……ETest几乎支持所有主流总线接口。无论是老旧的专用装备还是最新的工业控制系统都能在一套平台上完成测试。一套ETest替代N种工装。四、“脚本驱动”的环境搭建——从几天到几小时基于协议描述语言生成的协议栈加上脚本化的测试逻辑让整个测试准备过程变得前所未有的高效。写几行协议定义写几十行测试脚本一套复杂的测试环境就搭建完成。以前等工装等到项目延期现在自己写脚本当天开工。五、“自动化”的测试执行——把人从重复劳动中解放出来测试脚本写好后ETest可以反复执行、批量执行、定时执行。从测试激励发送到响应采集分析再到测试报告输出ETest实现了全流程自动化。工程师只需要关注“脚本写得对不对”剩下的由工具自动跑、自动判、自动出报告。把工程师的时间还给测试设计而不是耗在重复执行和手工比对数据上。六、“国产化”的底层支撑——自主可控的最后一道防线这是ETest最独特的优势——全面支持飞腾、龙芯、瑞芯微等国产CPU以及麒麟、统信等国产操作系统。在自主可控成为国家战略的今天这是国外产品永远无法企及的高度。不仅是测试工具的自主可控更是第三方测试机构能力的自主可控。04来自一线的回响ETest推向市场后第一个大客户是一家军工测控系统第三方测试机构。那里的工程师们曾经被“等工装”和“写C代码”这两件事折磨了十几年。一个项目下来一半的时间耗在协调研制单位、等待工装到位、适应工装的局限性上另一半时间耗在用C语言写测试程序、调试编译错误、排查内存泄漏上。遇到紧急任务明明被测系统已经送到门口工装却还在研制单位手里项目只能干等着——那种“无能为力”的感觉憋屈了整整一代人。引入ETest后他们做了一个简单的对比测试同样一套带有复杂私有协议的老旧被测件用传统方式——等工装、借工装、搭环境、用C语言写测试程序——耗时一周其中光是等工装就花了三天写测试程序又花了两天用ETest工程师花了两个小时用协议描述语言定义协议又花了三个小时用脚本语言写完所有测试用例——从拿到被测件到跑通全部测试用例只用了五个小时全程不依赖研制单位任何支持。“以前我们是追着研制单位要工装追得人家烦我们也憋屈。写测试程序更是噩梦明明是测试工程师却要跟指针、内存、编译错误死磕。现在好了我们用自己熟悉的脚本语言写测试想什么时候测就什么时候测想怎么测就怎么测。”那位项目负责人的这句话后来成了ETest产品手册的扉页语。到今天ETest已经服务了超过500家客户覆盖航空航天、武器装备、汽车电子、轨道交通、工业控制等关键领域。在某型国产战机的测试车间在某飞控计算机的测试台前在无数个深夜的实验室里ETest正在默默守护着每一次“起飞”。而更重要的是在这些地方第三方测试机构的工程师们终于不再为“没有工装”而发愁不再为“C语言太难”而头疼。他们拥有了属于自己的测试能力拥有了属于自己的“测试主权”。05让工程师回归工程师让第三方测试机构回归第三方测试机构ETest的故事本质上是一个关于解放和“主权”的故事。解放工程师让他们从繁杂的协议适配、环境搭建和C语言编程中脱身回到测试设计本身——那里才是创造力的源泉才是质量保障的核心。解放第三方测试机构让他们从“等工装、借工装、依赖研制单位”的被动局面中突围拥有应对“千机千面”的底气拥有不再无能为力的尊严。解放中国装备让每一行代码都能在自主可控的“考场”里接受最严苛的检验——不再因为工装不到位而漏测不再因为工具不自主而留隐患。今天当第三方测试机构的工程师们打开ETest用那套优雅的协议描述语言轻轻写下几行协议定义用那套熟悉的脚本语言写下几十行测试脚本点击“运行”按钮看着测试自动跑起来的时候他们或许不知道这款工具背后的故事。但他们一定知道一件事从今天起不再需要追着研制单位借工装。从今天起不再需要跟C语言的指针和内存死磕。从今天起协议不再是障碍脚本不再是门槛环境搭建不再是难题。从今天起自己说了算。这就是ETest。时长09:05让每一行代码都有最可靠的“考场”。让每一位工程师都能用自己的方式定义最可靠的测试。让每一个第三方测试机构都拥有属于自己的“测试主权”。