首先,声明一下本文不代表所有嵌入式软件的发布流程都一样,该文主要是针对汽车电子行业。
新版本软件的发布是公司非常重要的事情,一般只有团队Leader才有权限发布软件。
幸运的是,我们团队的leader去国外,我才能够获得这来之不易的机会,虽说中途出了一点小意外,但总体比较顺利。
有些读者可能不理解软件发布有什么复杂的,认为我小题大做。但是,很负责的告诉大家,汽车行业中软件发布就是这么复杂,这都是为了保证软件的可靠与安全。
接下来,介绍一下我所经历的软件发布流程:
在发布新版本软件之前,团队leader需要将该版本测出的所有bug全部fix掉。如果有些bug短时间内无法解决,团队leader需要与OEM协商,请求下个版本解决。
在此之后,团队leader需要在发布版本前三天将代码冻结。之后,各工程师针对不同车型的软件进行回归测试,而Safety工程师对软件做Safety测试,确保该版本的软件未发生功能回退,且安全性满足要求。
上述测试结束并且报告上传后,团队leader需要将最新版软件pull到本地编译。编译结束后,leader需要在git上给软件打tag,打tag类似于人的身份证号码,这标志该版本的软件已经生成,任何人都无法改动。
在此之后,leader需要将带有bootloader的hex文件、ulp文件、最新版的CAN matrix和CANoe工程打包发送给SVE(软件测试工程师)、SVE(系统测试工程师)和SQO(软件质量工程师)。
你以为这就结束了吗?No, 还有很多事情没有做呢。
软件发出后,团队leader需要在SQO(软件质量工程师)面前将最新版本的代码pull到本地编译。然后,对比发出的hex文件与本地编译的hex文件,SQO确保无误后,你才能走接下来的流程。
这个过程是公司强制执行的,哪怕发出的hex文件是刚刚编译的,你仍然要在SQO面前重新做一遍。虽说这个过程浪费时间,但其实是为了保证发送给客户的软件版本是完全正确的,也算是一种防呆措施。
之后,需要测试CPU负载和内存占用率,公司对于这两项指标也有标准。接下来,leader需要整理改版本软件解决多少bug,拒绝多少bug,更改多少需求等。
做完之后,leader需要与SQO一起检查从上个版本到这个版本之间上传代码的所有历史记录,一条一条的过。这个过程非常耗费时间,通常不同版本之间相隔两个月,有上百次的代码上传。
确保代码没问题后,SQO需要检查代码的QAC报告,即代码静态检查报告,确保所有的代码符合命名规范。
之后,SQO会针对编译器的warning询问leader为何没有消除掉。如果你是学生,那么你可能对warning没概念。如果你是程序员,相信都做过消除编译器warning的工作。毕竟,有些warning真的是未发现的bug。
最后,SQO会检查所有的回归测试、Safety测试报告是否正确,是否每一条bug都对应有测试用例。
如果上述工作都做的非常好,那么软件发布这个事情一天能够结束。但如果做的不仔细,那么发布一个版本有可能需要两到三天。
由于行业原因,汽车行业发布软件比较慢。但这也是为了保证软件的安全和可靠性,将用户的生命安全放在第一位,无论多么麻烦都是合理的。
**题外话:**这周写的文章太过细化,对部分读者可能没什么用。我也是写完之后才发现这个问题。以后会在写文章时注意这个问题,为大家带来优质文章,望大家这次莫见怪。