9.2 测试与验证


文档摘要

9.2 测试与验证 本节摘要:功能测试证明「做对了事」,验证还要证明「在承诺的时间内做对」——后者需要专门的用例设计、压力边界与可重复的测量手段。本节给出验证矩阵的搭法、压力边界的清单与自动化的要点,把「实验室跑过」升级为「最坏情况可证」。 别以为「功能全部测过、实验室跑了一周」就等于验证完成。功能测试天然偏向平均路径:测试者按正常流程操作,系统按正常节奏响应,一切绿灯。而实时系统的失守几乎从不发生在平均路径上——它藏在最坏路径里:全部定时器同时到期、缓冲恰好打满、中断风暴叠加日志落盘的那一刻。本节的任务就是给这些「不巧的时刻」建立系统性的围捕方法。 验证矩阵:从指标到用例 9.1 节的时间指标表在这里兑现价值:每一条指标至少对应一组验证用例,构成验证矩阵。

9.2 测试与验证

本节摘要:功能测试证明「做对了事」,验证还要证明「在承诺的时间内做对」——后者需要专门的用例设计、压力边界与可重复的测量手段。本节给出验证矩阵的搭法、压力边界的清单与自动化的要点,把「实验室跑过」升级为「最坏情况可证」。

别以为「功能全部测过、实验室跑了一周」就等于验证完成。功能测试天然偏向平均路径:测试者按正常流程操作,系统按正常节奏响应,一切绿灯。而实时系统的失守几乎从不发生在平均路径上——它藏在最坏路径里:全部定时器同时到期、缓冲恰好打满、中断风暴叠加日志落盘的那一刻。本节的任务就是给这些「不巧的时刻」建立系统性的围捕方法。

验证矩阵:从指标到用例

9.1 节的时间指标表在这里兑现价值:每一条指标至少对应一组验证用例,构成验证矩阵。用例设计的核心是逼近最坏情况:指标说「十毫秒内响应」,用例就要制造让响应最长的条件——全部高优先级任务同时就绪、临界区持锁最长的路径被踩中、中断以最高速率到达。用例记录三项:注入的负载、测得的响应、与指标的对照结论。矩阵的最后一列天然汇成给客户或审核的证据表。

需要澄清「测试」与「验证」在本书语境中的分工:测试是动作(跑用例、取数据),验证是论证(数据与指标的对照加分析)。有的指标无法靠跑用例穷尽(比如「任何调度序列下都不超期」),此时 3.2 节的数学分析本身就是验证手段,测试转为对分析假设的抽查——两者互补,缺一不可。

压力边界:围捕最坏情况的清单

边界用例按资源类型逐类设计,清单如下。处理器负载:所有周期任务按最短周期同时触发,叠加全部事件源的突发;验证手段是运行时统计确认处理器占用逼近设计值,同时各关键任务响应不超期。中断风暴:以设计上限的速率持续打中断,确认最高档延迟仍满足加法预算、低优先级任务饿死不误事。缓冲边界:队列逐一灌满(4.2 节的满策略生效验证)、静态池取空(耗尽策略生效)、堆压到历史最低(5.2 节的仪表读数)。同步压力:多任务高频争抢同一互斥量,长时间运行检查反转防线(继承或天花板)与锁顺序纪律。内存边界:栈按最深调用链加中断嵌套的场景压测,水印读数对照预算。

边界清单的用法是进评审:设计文档承诺过的每个策略(丢弃、覆盖、耗尽、降级),矩阵里必须有让它实际发生并检验后果的用例——策略没有被触发过的系统,等于带着未引爆的装置出厂。

长时间运行:让慢性病现身

碎片(5.2 节)、缓慢的资源泄漏、计数回绕、温度相关的时序漂移,都只在长时间尺度现身。浸泡测试的要点不是「跑得久」而是「带负载跑得久」:全天候施加边界负载,周期性采集三件套读数(任务栈水位、堆余量、队列水位)并记录趋势。判读规则:任何单调下降的资源余量都是嫌疑信号——内存类资源尤其如此,余量归零的第一次就是现场。

测量手段与自动化

时间测量的分级与 8.3 节的观测工具箱一致:开发期用跟踪器录制时间线,确认最坏路径的真实构成;自动化测试点用 GPIO 探针打标——在被测路径的起止点翻转引脚,让逻辑分析仪或对端引脚采样给出纳秒级读数,零软件开销且可重复。自动化框架的要点是把「注入负载、等待稳定、读探针、对照指标」写成脚本,接入持续集成:每次代码提交自动跑一轮核心指标回归,时间行为的退化与功能 bug 一样会被当场拦下。覆盖率指标补充最后一块拼图:语句与分支覆盖率证明代码被测过,而最坏路径用例证明测在正确的条件下——两者合起来才算「测过」。

图:验证金字塔与时间指标的贯穿

图:验证金字塔与时间指标的贯穿

一个判定原则收尾

验证完成度的判定原则一句话:每条时间指标都有「最坏条件下的实测值或数学证明」,且证据可复现。说得出这句话的团队,交付的不只是设备,而是承诺的可信度——这正是整本教程从截止期定义出发想要抵达的地方。

本节要点回顾

  • 功能测试覆盖平均路径,验证必须主动围捕最坏路径;
  • 验证矩阵让每条时间指标对应最坏条件下的用例或数学证明;
  • 压力边界按资源五类展开:处理器、中断、缓冲、同步、内存;
  • 设计承诺的每个策略都必须有用例让它实际发生并检验后果;
  • 浸泡测试带边界负载长时间运行,余量单调下降即是嫌疑信号;
  • GPIO 探针加持续集成,让时间行为退化像功能缺陷一样被拦下。

常见问题

问:最坏情况触发不出来怎么办? 用构造代替等待:把竞争条件做成可注入的(测试钩子强制持锁最长时间、强制任务同时就绪)。最坏条件测试的本质是「布置现场」,等运气不如造现场。

问:硬件在环测试是什么? 用脚本驱动真实硬件跑用例:注入负载、读取探针与统计、对照指标自动判分。它比仿真可信(真实时序),比手工测试可重复(脚本),是时间行为回归的载体。

问:浸泡测试要跑多久? 至少覆盖业务的最长连续工作周期,常见七十二小时到一周。跑的期间必须有负载与监控,空转的浸泡测试只能证明「待机很稳」。

问:覆盖率多少算够? 功能安全等级给了下限(7.3 节),普通项目按「关键路径全覆盖加整体八成」起步。覆盖率是必要条件不是充分条件——测到不等于测对,条件才是本节的主角。

问:仿真与实物测试怎么分工? 算法与逻辑先在仿真里收敛(快、可注入极端条件),时间行为必须在实物上验证(仿真器的时序不是时序)。分工线画在「凡涉及真实时间的行为不上仿真结论」。

问:回归测试的范围怎么控? 分级:核心时间指标每提交必跑(分钟级),边界用例每夜跑(小时级),浸泡按版本跑(天级)。回归的成本随分级摊薄,纪律随分级递增。

问:测试环境与量产环境差在哪? 调试探针、额外任务、未裁剪的日志都会改变时序。量产固件的最终验证要用「关闭调试设施」的构建重跑核心指标——验证的是你要发货的那份二进制。

验证报告的最小骨架

把验证结果固化成报告,最小骨架四段:指标对照表(指标、实测、判定、证据链接)、边界用例清单(触发条件、预期策略、实际后果)、浸泡曲线(资源余量随时间的走势)、遗留与降级(未覆盖项及补偿措施)。这份骨架的意义与 9.1 节的预算表对称:设计给承诺,验证给兑现,报告是两者的对账单。客户看得懂对账单,审核机构也看得懂——一份诚实的验证报告,本身就是产品最有分量的部件。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U