乘着汽车智能化的浪潮,“汽车人”的职业方向选择(三)
前面两篇文章分别介绍了嵌入式软件开发和系统工程师的工作内容和所需要的技术栈。系统工程师确定产品需求,软件开发工程师实现产品的软件需求。
按照 V 开发模型,产品接下来需要进行严格测试才能最终 SOP。今天,我们就来聊聊测试的相关岗位。
关于测试岗,我按照 V 开发模型将其分为软件测试和系统测试。现实情况下,这两个岗位的工作职责会有一些重叠,但其实方向还是有所差别的。
软件测试工程师。顾名思义,这个岗位是专门进行软件测试的岗位。但不同的公司对于软件测试的定位不同,比如,有些公司的软件测试负责白盒和黑盒测试;有些公司的白盒测试交由开发来做,而软件测试则只进行黑盒测试。
今天,我们聊的是后一种,即只做黑盒测试的软件测试工程师。我通常把这种工程师称为功能测试工程师,因为他们无法接触到软件源码,且不关注软件的具体细节。他们编写的测试用例都是根据软件需求文档编写的,即给产品固定的输入,观察产品的输出是否符合需求。
一旦输出异常,则与开发同事沟通,要么测试用例编写有问题,要么软件产生了 bug。这是软件测试工程师的基本工作内容,编写测试用例和完成软件测试。
此外,由于汽车供应商提供的是 ECU,并非单纯的软件,因此汽车电子行业的软件测试工程师还要求具备制作工具的能力,这里的工具包括硬件和软件工具。
硬件工具比如开关制作、台架设备的制作与搭建,ECU 产品的修复与改造。以测试 TBOX 以太网通信为例,软件工程师需要使用交换机或者树莓派模拟 IVI、网关等其他网络通讯节点,这时就要求工程师采购相关产品,并将其搭建成可用的台架。在搭建台架的过程中,工程师们需要根据实际情况对电气连接进行合理改造,确保以太网通信正常。
软件工具比如开发自动化测试脚本、搭建上层测试平台等。以 CANoe 开发为例,软件测试工程师需要根据产品需求,开发出可视化界面,并通过编写 CAPL 脚本实现 CANoe 设备与 ECU 进行 CAN 通信、软件刷写、诊断测试等等各种类型的控制。
除了具备上述基本能力外,更高阶的软件测试工程师是能够搭建和开发自动化测试系统的。虽说他们被称为测试工程师,但从事的工作基本全是开发工作。唯一不同的是,他们的产品是用于 ECU 测试的。
与开发工程师不同,自动化测试系统使用的编程语言通常是 python,因为自动化测试系统主要是为了快速实现测试的自动化,而软件的运行速度和性能并不是重点。因此,python 作为“胶水语言”,在测试行业使用的极其广泛。就我个人看来,是否会使用 python 编写自动化测试脚本是区分测试工程师水平的重要标准。
当然,对于软件测试工程师也需要掌握一些基本知识,比如 CANoe 使用、CAPL 编程、CAN 通信协议、python、VBA 编程等。此外,根据产品的不同也会要求掌握不同的知识,比如,TBOX 要求懂得以太网通信和 4G 通信、PEPS 要求懂得钥匙与 ECU 之间的通信等等。
系统测试工程师。系统测试是 V 开发模型的最后一个环节,ECU 完成系统测试是 SOP 的前提。为了完成这个环节,多数供应商会专门设立系统测试工程师的岗位。这个岗位是站在产品的角度进行测试,其测试用例根据系统需求文档编写。为了完成系统测试,系统工程师往往需要进行搭建台架或者实车测试。
与软件测试工程师不同,系统测试不仅仅关注软件,而且要站在产品的层级来完成相关测试,包括系统需求、软件和硬件,有时甚至是整车。一旦出现问题,他们需要对接多个团队,已明确出现问题的环节,并助力问题的解决。因此,这也要求系统测试工程师具备庞杂的知识,且需要具备一定的工作经验和沟通能力。
此外,系统测试工程师的工作节奏与软件测试也很不相同。上面提到软件测试工程师是在每次软件发布后忙碌,而系统测试工程师是发布正式软件后才开始忙碌。这两者有什么不同呢?
在 ECU 软件开发过程中,OEM 会根据新车型的开发节点,与供应商制定 ECU 的发布时间。在 ECU 开发过程中,硬件几乎是不改动的,因此只需要软件开发配合发布时间即可。供应商为了保证自家产品的质量,会在每次正式发布软件版本前,制定若干内部版本的迭代计划。软件测试工程师需要在每次小版本发布后完成软件测试,而系统测试工程师则只需要在软件大版本发布后完成测试即可。
虽说测试节奏比不上软件测试工程师,但系统测试工程师也并不轻松。这是因为整车 ECU 数目很多,一旦进行系统测试,则每家 ECU 或多或少都会出现 bug。一旦测试出现 bug,则测试不得不终止,直到 bug 解决完毕,这极大地拉长了测试周期。
除了完成日常测试工作外,系统测试工程师也承担了一些驻场工程师的工作,即去现场完成产品的系统测试。这是因为系统测试工程师的能力和经验要强于驻场工程师,而一旦 ECU 在实车测试产生了不明原因的 bug,此时就需要系统测试工程师实地抓取 log、排查问题。因此,在每次正式版本发布后,他们都会频繁长时间去 OEM 那里出差,完成产品的系统测试工作。
今天和大家聊了聊软件测试和系统测试这两个岗位。虽说这两个岗位都是测试岗,但他们也是有区别的。软件测试工程师是站在产品的角度来测试软件是否正常,系统测试工程师是站在整车角度测试产品是否正常。
通过观察,我发现这两个岗位的技术性远低于软件开发,也是比较适合转行的岗位。另外,根据周围同事跳槽的经历来看,测试岗在 OEM、零部件厂商和新造车势力中的招聘需求都是比较旺盛的。就我所见,从供应商跳槽到 OEM 的朋友很少从事软件开发,而软件测试的倒不少。
然而,测试岗的薪资相比于同等级的系统工程师和软件开发工程师要低一些,且比较容易触碰到职场天花板。如果没太多编程经验,但又想跳出传统汽车行业的朋友可以了解一些测试岗位,这是从传统汽车行业切换到新兴汽车行业的一个比较容易的方向。
作者:程序猿司晨
文章来源:上汽零束 SOA 开发者论坛
原文链接:https://bbs.z-onesoft.com/omp/community/front/api/page/mainTz?articleId=7505
评论