简介:《车载软件的OTA方案需求确认内容》面向车载软件、车联网OTA研发、测试及需求分析人员,聚焦升级方案落地前的需求确认与风险排查。压缩包内为1个docx文档,约15KB,围绕升级包制作、云平台存储、云平台与IVI交互、APS与IVI交互以及完整升级流程组织内容。文档逐项覆盖账户权限、加解密规则、校验算法、推送与传输时序、非法访问处理,以及预编程、主编程、后编程中的状态检查、安全访问、完整性校验、依赖性校验和各类异常处理策略。已有185人学习下载,可作为OTA需求评审清单、方案设计参考和异常场景补漏材料,帮助读者梳理端到端升级链路并减少关键环节遗漏。
1. 车载OTA升级方案确认:先锁边界,再谈功能
车载OTA升级方案的需求确认,最怕的不是功能没做,而是边界没写。升级包谁有权制作、云端校验失败后是重传还是隔离、IVI下载到一半断网怎么续传、APS写入失败后界面停在哪个状态,这些问题不提前落到需求表里,开发阶段就会变成反复扯皮。这份资源把OTA升级拆成升级包制作、云平台存储、云平台与IVI交互、APS与IVI交互、预编程/主编程/后编程几段,每一段都列了正常时序和异常处理,适合正在做方案评审的车机软件、云端开发和测试人员,也适合新手拿来对照自己项目查漏。它不是科普材料,是一张能直接改写成评审检查表的底稿。
2. 升级包制作与云端入库:AES/RSA加密链路和5个时序点
升级包制作这一步,很多团队会把它当成“打包上传”四个字,真到联调才发现权限、签名对象、上传时机、失败回滚全没定义。需求确认要先把制作端当成一条有状态流水线:谁可以建包、谁可以审、谁可以发、包长什么样、失败后停在哪一步。下面按账户权限、加密签名、推送时序三块拆开,每块都给可落表的确认项。
2.1 账户权限与制作规则:先把“谁能发版”写死
账户权限不要只写“管理员可操作”,要落到角色和动作。常见做法是按RBAC拆成制作、审核、发布、审计四类角色:制作角色只能生成候选包,审核角色只能看产物和校验报告,发布角色才能把包推到云平台正式区,审计角色只读日志。关键约束是制作和发布不能是同一个账号,已发布版本不能被覆盖,只能新增版本号。需求里要明确“越权制作”和“旧包覆盖”这两个异常的处置:越权直接拒绝并记审计日志,旧包覆盖返回冲突错误码,不允许静默替换。
制作规则要写清楚版本命名、目标硬件、依赖关系、回滚包策略。命名不能只靠软件版本号,常见做法是“项目标识-硬件版本-软件版本-构建号-签名标识”,这样云端和IVI都能从包名和元数据里判断是否匹配当前车辆。依赖关系要写“先装哪个、后装哪个、哪个包不能和哪个包同批”。回滚包不是每次都必须带,但需求要定义哪些升级必须保留上一版可回滚产物,以及保留多久。下面这张表可以直接改成评审表的一页。
| 确认项 | 建议规则 | 异常处理 | 验收证据 |
|---|---|---|---|
| 账户权限 | 制作、审核、发布、审计分离,制作与发布不同账号 | 越权返回拒绝码并记审计日志 | 权限矩阵和一条越权测试记录 |
| 版本命名 | 项目-硬件-软件-构建号-签名标识,全局唯一 | 重复版本拒绝入库 | 云端唯一键校验日志 |
| 已发布包 | 禁止覆盖,只允许新增版本 | 覆盖请求返回冲突 | 冲突错误码截图或日志 |
| 依赖关系 | 元数据写清前置包、硬件版本、互斥包 | 依赖不满足不进入下载 | 依赖校验失败记录 |
| 回滚策略 | 定义必须保留回滚包的升级类型和保留期 | 回滚包缺失时阻断发布 | 回滚包清单和审批记录 |
这张表的价值在于把“权限”和“规则”变成可测试项。比如权限矩阵不是画完就结束,要有一条越权测试记录;版本唯一不是口头约定,要有云端唯一键校验日志。制作流水线一般会经历“拉代码/产物→生成候选包→计算摘要→签名→加密→生成元数据→内部校验→提交审核”,每一步都要有失败出口,不能一路往下冲。
2.2 加密与解密链路:AES管内容,RSA/ECDSA管身份
升级包安全常见误区是“加密了就等于安全”。加密解决机密性,签名解决来源和完整性,两件事不能互相替代。常见做法是:制作端先生成最终下发的二进制包,对同一个二进制对象计算SHA-256摘要,再用私钥对摘要签名;然后对“包体+签名+元数据”做对称加密,或者只加密包体、签名和元数据明文放封装头。IVI侧先验签,再解密,再算摘要比对。顺序不要反,先解密再验签会让攻击面变大。
算法选型上,对称加密可用AES-256-GCM,GCM自带完整性校验,但不要因此省掉签名;如果历史系统用AES-CBC,就要配HMAC,避免只加密不认证。非对称签名可用RSA-2048/3072或ECDSA P-256,具体看车端算力和证书体系。密钥管理要写清楚:根密钥离线保存,工作密钥有版本号,IVI能识别密钥版本,密钥轮换后旧包还能按旧版本验。需求里要定义“解密失败”“签名失败”“密钥版本不匹配”三类错误码,不能只报一个“升级包非法”。
| 阶段 | 输入 | 输出 | 校验点 | 失败处理 |
|---|---|---|---|---|
| 生成最终包 | 构建产物 | 唯一二进制包 | 包内版本与元数据一致 | 不一致退回构建 |
| 计算摘要 | 最终二进制包 | SHA-256摘要 | 摘要对象是最终下发文件 | 对象不一致阻断 |
| 签名 | 摘要+私钥 | 签名值 | 私钥权限和证书有效期 | 签名失败不上传 |
| 加密 | 包体+签名+元数据 | 加密升级包 | 密钥版本写入封装头 | 加密失败隔离 |
| 云端复核 | 加密升级包 | 入库记录 | 云端重算摘要并验签 | 失败转隔离区 |
这里最容易被忽略的是“签名对象”。制作端对压缩包签名,云端对解压后的文件算摘要,IVI又对下载文件验签,三个对象不一致,联调就会出现“云端说包没问题,车端说签名不匹配”的翻车现场。需求确认时要把“最终下发的那个二进制文件”写死,制作、云端、IVI三方共用一份校验说明,联调先用小包把摘要和签名链路跑通,再上真实包。
2.3 推送云平台时机与时序:五个节点和失败回滚
升级包什么时候推到云平台,不是“做完就传”。需求里要定义五个节点:本地构建完成、内部校验通过、上传对象存储、云端校验通过、发布可用。每个节点对应不同状态,云端不能把“上传完成”当成“可下载”。常见做法是内部校验通过后进入待发布区,云端校验通过后进入正式区,发布动作单独审批。业务低峰窗口可以作为上传时机的参考,但不要写死某个时间点,需求要写“允许上传的窗口和禁止发布的条件”。
上传时序一般按“认证→申请上传会话→分片上传→合并→云端重算摘要→验签→入库→通知”走。每个步骤要有超时、重试和幂等键。分片上传的幂等键建议用“包唯一标识+分片号”,合并接口用“包唯一标识+上传会话ID”,这样网络抖动导致重复上传时不会生成两个包。异常处理要覆盖上传中断、分片丢失、合并失败、云端校验失败、重复上传。校验失败的包不能留在正式区,要转隔离区并通知制作人,不能靠人工记住。
| 时序节点 | 动作 | 失败处理 | 幂等/回滚 |
|---|---|---|---|
| 认证 | 制作端获取上传凭证 | 凭证过期重新申请 | 凭证短时效 |
| 申请会话 | 云端返回上传会话ID | 会话冲突拒绝 | 包标识唯一 |
| 分片上传 | 按分片上传并记录偏移 | 失败重传该分片 | 包标识+分片号 |
| 合并 | 云端合并分片 | 合并失败清理临时分片 | 会话ID幂等 |
| 云端校验 | 重算摘要、验签、查元数据 | 失败转隔离区 | 不进入正式区 |
| 发布 | 审批后进入可下载状态 | 审批拒绝退回待发布 | 发布记录留痕 |
这张表要落到的验收证据是“一次断网重传”和“一次重复上传”的日志。很多方案正常流程写得漂亮,一到弱网就出现重复包、半包、正式区出现未校验包。需求确认时把“上传会话”和“隔离区”写进去,后面云端开发会少很多补丁。
3. 云平台存储与校验:SHA-256、访问控制和推送触发
云平台这一层不只是“找个对象存储放包”。它要接住制作端的上传,守住校验关,管住谁能读、谁能推,还要在存储区域异常时保住已发布版本。需求确认要把校验算法、存储规则、访问逻辑、推送机制分开写,因为它们的失败模式不一样:校验失败是包的问题,访问失败是权限的问题,推送失败是状态同步的问题。
3.1 校验算法选型:SHA-256做完整性,签名做来源
完整性校验不建议再用MD5,倒不是MD5算得慢,而是它不适合用来证明“这个包没被换过”。常见做法是SHA-256做摘要,配合签名做来源认证。校验时机至少有三个:上传完成后云端重算一次,发布前再确认一次,IVI下载前云端返回的元数据里带摘要和签名。校验频率不要写成“定期校验所有包”,那样存储和算力都吃不消;应写“上传后强校验、发布前强校验、下载前按需校验、存量包按批次抽检”。
下面这段命令适合在制作端和云端做最小联调,先确认两边对同一个文件算出的摘要一致,再去看签名和证书链。注意它只解决完整性比对,不解决来源认证,真正防篡改还要验签。
# 对最终下发的升级包计算SHA-256摘要,输出到摘要文件 sha256sum ota_package.bin > ota_package.sha256 # 云端或IVI侧重新计算并比对,返回非0说明文件已变化 sha256sum -c ota_package.sha256sha256sum的第一个参数是最终下发的二进制包路径,实际项目里换成自己的包名;-c会读取摘要文件里的记录并重新计算比对。这个动作要在“签名之前”和“解密之后”各做一次,但两次的对象必须是同一个二进制文件。摘要文件本身也要被签名或放在受保护的元数据里,否则别人改包的同时也能改摘要。联调时先拿小包跑,确认制作端、云端、IVI三方的摘要值打印一致,再进入真实包,不然错误日志里只会看到“校验失败”四个字。
3.2 存储规则与区域异常:命名、容量水位、隔离区
云平台存储要分区,不要把所有包扔一个桶里。常见做法是分待发布区、正式区、隔离区、回滚区:待发布区放刚上传还没审批的包,正式区只放校验和审批都通过的包,隔离区放校验失败或疑似异常的包,回滚区放上一版可回滚产物。每个区域的写入权限不同,正式区只允许发布服务写,制作端只能读;隔离区允许校验服务写,制作端只读。命名规则要和制作端一致,云端再用“包唯一标识+版本元数据”做索引,不要只靠文件名。
容量水位要写成可执行的阈值。常见起点是70%预警、85%限制新上传、95%停止上传并清理临时分片,但具体值要按存储类型和清理速度调。存储区域异常要覆盖空间不足、对象存储读写失败、跨区复制延迟、清理任务失败。处理策略不是“告警了事”,要定义“上传前预检剩余空间”“失败转隔离区”“正式区读取失败时是否允许回退到回滚区”。下面这张表可以直接拿去对云平台存储规则。
| 存储区域 | 用途 | 写入权限 | 清理策略 | 异常处理 |
|---|---|---|---|---|
| 待发布区 | 上传后待审批 | 制作服务写 | 超过保留期转隔离或删除 | 上传中断清理分片 |
| 正式区 | 可下载版本 | 发布服务写 | 按版本保留策略 | 读取失败回退回滚区 |
| 隔离区 | 校验失败/可疑包 | 校验服务写 | 人工确认后删除 | 禁止被IVI下载 |
| 回滚区 | 上一版可回滚产物 | 发布服务写 | 按回滚保留期 | 缺失时阻断发布 |
区域异常里最麻烦的是“正式区写成功但索引没更新”。用户看到发布成功,IVI却下载不到。需求里要写“对象写入和索引更新的一致性策略”,常见做法是先写临时对象,索引更新成功后再切正式标记,失败则回滚标记。这个细节不写,后面排查会变成黑匣子。
3.3 访问控制与非法访问处理:最小权限和审计闭环
云平台访问逻辑要区分人、服务、车端。人走审批后台,服务走服务账号和短时令牌,车端走设备身份认证。不要让人账号直接调用对象存储下载接口,也不要让车端拿长期密钥。常见做法是车端先换短时下载凭证,凭证绑定VIN、目标版本和有效期,下载地址带过期时间。权限粒度要细到“只能下载分配给该车辆的版本”,不能只要拿到链接就能下全量包。
非法访问处理要覆盖认证失败、越权下载、异常高频下载、过期链接重放。处理策略可以分级:认证失败直接拒绝并记日志;越权下载返回统一错误码,不暴露包是否存在;高频下载触发限流;过期链接拒绝并记录设备标识。审计日志要能串起来:谁在什么时间、用什么身份、访问了哪个包、结果如何。需求确认时不要把“防火墙”写成唯一手段,应用层权限和审计闭环才是能验证的部分。
3.4 推送机制:触发条件、幂等和灰度
推送不是“发一条消息”就完事。需求要定义触发条件:手动审批触发、定时任务触发、事件触发分别适用于什么场景;推送内容包含版本元数据、下载地址、摘要、签名、有效期;推送状态要能区分“已推送”“已下载”“已安装”“已回读”。很多团队把“推送成功”当成“升级成功”,结果同一辆车反复收到同一版本。幂等键建议用“VIN+目标版本+硬件版本”,没有回执的车辆走拉取补偿,不要靠反复广播。
灰度推送要写清楚分批依据和停止条件。常见做法是按VIN哈希分批,先小批观察下载成功率、验签失败率、安装回读成功率,任何一项超过阈值就暂停。暂停后要能回滚推送任务,不是回滚车辆软件,而是停止继续推送并清理未下载的推送消息。推送机制和云平台存储、IVI下载是一条链路,需求评审时要把“推送成功但IVI没收到”“IVI下载了但没回执”“回执了但版本没变”三种情况分开定义。
4. IVI与APS交互及三段式升级:下载校验、双分区和预编程/主编程/后编程
车端这一段最容易写成“IVI下载、APS安装”两句空话。实际需求确认要落到下载分片、合法性校验、存储区域、传输时序、预编程检查、主编程校验、后编程回读。IVI和APS之间的分工也要写清楚:谁负责下载、谁负责验签、谁负责写目标分区、谁负责回读版本。下面按下载校验、APS存储与传输、三段式流程拆开。
4.1 IVI下载APS升级包:分片、断点续传和带宽约束
IVI下载升级包要先鉴权再取元数据,不能拿到URL就闷头下。常见时序是:车端身份认证→云端返回目标版本元数据和下载凭证→IVI检查本地临时区剩余空间→按分片下载到临时区→每片或整包校验→校验通过后转正式存储区→通知APS。分片大小建议从1–4 MB起步,弱网降到512 KB;连接超时5–10秒,单分片超时30–60秒;重试3次指数退避,超过次数转下次或人工。具体值要按实测调,但需求里要有这些参数项,不能只写“支持断点续传”。
下载异常要分“可恢复”和“不可恢复”。网络中断、分片超时、临时区写失败属于可恢复,走断点续传和重试;摘要不一致、签名失败、目标硬件不匹配属于不可恢复,删除临时文件、记错误码、上报云端、不进入安装。IVI存储APS升级包的区域要独立于用户数据和日志区,预留空间要按“包大小+解压/解密临时空间+回滚包空间”算,不能只按包大小算。空间不足时要在下载前拦截,不要下到一半才发现。
4.2 合法性校验与APS存储:先验签再解密,双分区原子切换
合法性校验链要写死顺序:云端签名→IVI用公钥验签→解密→SHA-256比对→检查目标硬件版本和依赖关系→检查证书有效期和密钥版本。验签失败、摘要不一致、硬件不匹配、依赖不满足,四类错误要分开报。失败处理统一为“隔离+上报+不安装”,临时文件删除或移入隔离区,不能留在正式区。证书过期和车端时钟错误要单独考虑,常见做法是允许一定时间窗,但超过窗口必须拒绝,不能为了升级成功把证书校验关掉。
APS存储设计建议用A/B双分区加临时区和回滚区。A/B分区用于原子切换,临时区用于接收传输中的包,回滚区保留上一版可启动产物。写入前检查坏块和剩余空间,写入后做分区校验和版本回读。异常处理要覆盖写入失败、掉电、坏块、切换失败。掉电是最容易翻车的场景,需求里要写“每个阶段落盘恢复标记”,恢复后先读标记再决定重试、回滚还是保持原分区启动。下面这张表把下载到安装的关键动作串起来。
| 阶段 | 关键动作 | 异常处理 | 验收证据 |
|---|---|---|---|
| 下载 | 鉴权、取元数据、分片下载 | 断点续传、超时重试 | 断网重连日志 |
| 校验 | 验签、解密、摘要比对 | 失败隔离、上报错误码 | 四类错误码记录 |
| 传输APS | 通知准备、传包、APS应答 | 会话ID幂等、超时重传 | 传输会话日志 |
| APS写入 | 检查空间坏块、写临时区 | 失败回滚、坏块标记 | 分区状态和坏块表 |
| 切换 | A/B分区原子切换 | 切换失败回滚原分区 | 回读版本记录 |
| 回读 | 版本号、分区校验、自检 | 不一致回滚或重试 | 后编程回读报告 |
这张表里“传输APS”经常被漏掉。IVI下载成功不等于APS能写,APS可能忙、空间不足、坏块多、版本不匹配。传输时序要定义“IVI通知APS准备→APS返回空间和状态→IVI传输→APS校验→APS应答→IVI记录”,每一步有超时和重试上限。传输会话ID要贯穿始终,重复传输同一会话要幂等,不能写两次。
4.3 预编程和主编程:车辆状态、环境检查和依赖校验
预编程不是走形式,它决定主编程能不能开始。车辆状态检查至少包括电量、挡位、驻车、车速、充电状态、故障码;环境检查包括网络质量、IVI存储、APS存储、云端可达性。通过条件要写成可判断的阈值,比如电量按“最坏升级耗时+功耗余量”算,不满足就提示充电;未驻车、车速非零直接阻断;关键故障码存在时转人工确认。异常处理要给出用户可执行的提示,不要只弹“条件不满足”。
主编程要覆盖安全访问、升级触发、包传输、完整性校验、依赖性校验、启动升级。安全访问常见做法是诊断会话→种子密钥→解锁,解锁失败要限次并记录;升级触发要等用户确认和条件满足同时成立;传输要分块并有流控;完整性校验用SHA-256和签名;依赖性校验检查硬件版本、前置包、互斥包。任何一项失败都要中止并给出回滚边界,不能“继续试试”。下面这张表适合放在主编程评审页。
| 步骤 | 动作 | 失败处理 | 验收证据 |
|---|---|---|---|
| 安全访问 | 会话、种子密钥、解锁 | 限次、记录、转人工 | 解锁失败日志 |
| 触发 | 用户确认+条件满足 | 条件不满足阻断 | 触发条件记录 |
| 传输 | 分块传输、流控 | 超时重传、会话幂等 | 传输进度和重传日志 |
| 完整性 | 摘要、签名、分区校验 | 失败中止、隔离 | 校验报告 |
| 依赖性 | 硬件、前置包、互斥包 | 不满足阻断 | 依赖校验结果 |
| 启动升级 | 切换分区、启动新版本 | 启动失败回滚 | 启动和回滚记录 |
主编程的“依赖性校验”不要只查版本号字符串。硬件版本、分区布局、 Bootloader兼容性、前置补丁都要查。常见翻车是软件版本对,但硬件小版本不匹配,升级后功能异常。需求里要写“依赖不满足时的用户提示和后台告警”,不能静默失败。
4.4 后编程:完成条件判断、回读和后续操作
后编程要定义“升级完成”的判定条件,不是安装脚本返回0就算完成。完成条件至少包括:目标分区校验通过、版本号回读一致、关键故障码清除、功能自检通过、云端收到回执。后续操作包括重启IVI/APS、上报云端、清理临时包、保留回滚包一段时间。回读版本不一致要触发回滚或重试,功能自检失败要保留日志并阻断“升级成功”状态。清理临时包要在回执成功之后,不能先清后报,否则失败后没有现场。
异常处理要写“回滚边界”:哪些错误只重试当前步骤,哪些错误回滚整个包,哪些错误保持原版本并转人工。掉电恢复、存储写入失败、回读不一致、自检失败是四类高频异常。后编程的验收证据建议是“回读报告+自检报告+云端回执”,三份缺一不可。到这里,升级流程才形成闭环。
5. 避坑排查:上线前必须压测的4个异常场景
需求确认表写得再全,真正上车容易翻车的还是异常分支。我一般会把下面四类场景单独拉出来压测,每条都按“现象→原因→解决”记录,不把正常流程当验收。下面四条不是理论推演,是方案评审里最容易被追问、也最容易在联调阶段暴露的坑。
5.1 四条踩坑记录
第一条:云端说包没问题,IVI验签失败。现象是上传成功、云端校验通过,IVI下载后只报“签名不匹配”,日志里看不出哪一步对象不一致。原因通常是制作端对压缩包签名,云端对解压后的文件算摘要,IVI又对下载文件验签,三个对象不是同一个二进制文件;也有可能是签名后又被重新打包,签名值没跟着更新。解决是把“签名和摘要的对象是最终下发的二进制包”写进需求,制作、云端、IVI共用一份校验说明;联调先用空包和1 MB小包各跑一遍,确认三方打印的摘要值一致;错误码拆成“摘要不一致/签名不匹配/证书过期/密钥版本不匹配”,不要只报一个“非法包”。验收时看三方日志里的摘要值,不看“成功”两个字。
第二条:预编程通过,主编程掉电后版本没变但界面显示完成。现象是车辆电量显示够,预编程通过,主编程中途掉电,恢复后车机显示升级完成,回读版本还是旧版。原因是预编程只检查了静态电量,没有按最坏升级耗时和功耗算余量;主编程没有落盘恢复标记,后编程只看安装脚本返回值,没有回读版本号。解决是预编程电量阈值按“最坏耗时+功耗余量”设,主编程每个阶段写恢复标记,后编程必须回读版本号和分区校验;掉电恢复先读标记,再决定重试当前阶段还是回滚。这个坑的验收证据是“掉电恢复后的状态日志+回读报告”,不是用户界面提示。
第三条:IVI空间够,APS写入一半失败,界面卡死。现象是IVI下载区剩余空间充足,传输到APS写入一半失败,升级界面停在“安装中”不动。原因是只检查了IVI下载区,没检查APS临时区和目标分区;双分区切换没有原子提交,写入失败后状态机没有回滚分支。解决是下载前让APS上报可用空间和坏块状态,传输会话带ID做幂等,写入失败走回滚区,界面状态机区分“下载失败/校验失败/写入失败/切换失败”。需求里要写“APS忙”和“空间不足”的返回码,不能一律超时。验收时人为把APS临时区调小,跑一次失败路径,看界面能不能退出。
第四条:灰度推送后同一辆车反复收到同一版本。现象是推送任务显示成功,部分车辆反复收到同一版本通知,已经安装过的车也收到。原因是推送侧把“发送成功”当成“升级成功”,幂等键只用了VIN没带目标版本;车辆回执状态没有闭环,未回执的车辆走广播补偿。解决是幂等键用“VIN+目标版本+硬件版本”,状态机区分已推送、已下载、已安装、已回读,未回执的走拉取补偿而不是重复广播。验收时看推送任务的状态分布,不能只看发送量。
5.2 压测顺序和记录方法
压测不要一上来就全链路。常见顺序是单点异常→链路异常→灰度异常:先测云端上传断网、摘要不一致、验签失败;再测IVI下载断网、APS写入失败、掉电恢复;最后测推送重复、未回执、版本错配。每个场景记录四样东西:错误码、时间戳、会话ID、版本回执。没有这四样,后面排查只能靠猜。下面这张表可以直接当压测记录模板。
| 压测场景 | 注入方式 | 观察指标 | 通过标准 |
|---|---|---|---|
| 上传断网 | 上传中切断网络 | 分片重传、会话幂等 | 不产生重复包 |
| 摘要不一致 | 篡改包体 | 云端/IVI错误码 | 转隔离区、不安装 |
| 下载断网 | 下载中切断网络 | 断点续传、临时区 | 恢复后继续或干净失败 |
| APS写入失败 | 缩小临时区 | 回滚分支、界面状态 | 不卡死、可重试 |
| 掉电恢复 | 主编程中断电 | 恢复标记、回读版本 | 重试或回滚可判定 |
| 重复推送 | 重复触发同版本 | 幂等键、回执状态 | 同一车辆不重复安装 |
这张表的作用是把“异常处理策略”从文字变成可复现动作。每条通过标准都要有日志或截图,不能只写“正常”。压测完成后,把失败项反写回需求确认表,缺哪项补哪项,这比在评审会上争论“应该没问题”有用得多。
6. 上线前验收技巧:把需求确认表变成可执行的回归清单
上线前验收不要按功能模块走,要按“时序节点”走。模块视角容易漏掉跨系统状态,时序视角能逼着你看“谁在什么时候等谁”。我一般把需求确认表里的每一行改写成“动作+观察点+通过标准+证据”,没有证据的项不算验收。比如“IVI校验合法性”要拆成验签、解密、摘要比对、硬件匹配四个观察点,每个点有错误码和日志;“后编程完成”要拆成回读版本、自检、云端回执三个证据。下面这张表是回归清单的骨架,实际项目按自己的云平台和IVI架构裁剪。
| 需求项 | 验收动作 | 通过标准 | 证据 |
|---|---|---|---|
| 制作权限 | 用制作账号尝试发布 | 被拒绝并记审计 | 审计日志 |
| 加密签名 | 篡改包体后上传 | 云端校验失败转隔离 | 隔离区记录 |
| 云端存储 | 把待发布区写满 | 上传被限流、不丢正式包 | 容量告警日志 |
| IVI下载 | 下载中断再恢复 | 续传或干净失败 | 断点日志 |
| APS写入 | 人为制造写入失败 | 回滚原分区、界面可退出 | 回滚记录 |
| 预编程 | 低电量/未驻车 | 阻断并给出可执行提示 | 状态机日志 |
| 主编程 | 依赖不满足 | 阻断、不启动升级 | 依赖校验结果 |
| 后编程 | 回读版本不一致 | 回滚或重试,不报成功 | 回读报告 |
这份需求确认内容我平时就是当评审底稿用的,按项目裁剪后再进开发;需要原稿的按标题取用,先拿第5章四个场景对一遍,缺哪项补哪项。从那以后我每次评审OTA升级方案,都强制把异常时序单独拉一页过一遍,不把正常流程当验收。希望帮到你。
本文还有配套的精品资源,点击获取