4. 调试用例设计方法
航天器软硬件联合调试的用例设计,不能只凭调试人员的经验临时构造激励。更可靠的做法是:以接口控制文件(ICD)确定“软硬件之间到底交换什么”,以功能基线确定“这些交换应当完成什么功能”,以故障模式与影响分析(FMEA)确定“哪些交换可能出错、出错后会造成什么后果”。三者分别回答接口是什么、功能要什么、故障怕什么,共同约束用例的输入、预期响应和判据。
本节把这三类输入转化为可执行的用例集,重点不是罗列用例编号,而是说明每条用例从哪里来、激励如何构造、预期如何判定,以及如何保证正常、边界、异常三类用例覆盖完整的软硬件交互路径。
一、三类设计输入如何转化为用例要素
ICD 提供的是接口层面的确定性信息:信号名称、方向、传输方式(如 1553B 总线、CAN、RS-422 串口、离散量)、数据字格式、位域定义、量纲与比例因子、更新周期、有效范围、默认值、超时门限。这些字段直接决定用例的“激励值”和“观测点”。例如某星务计算机通过 1553B 向姿态控制模块发送遥控指令字,ICD 规定指令码占 bit0~bit7、参数占 bit8~bit15、校验占 bit16~bit23,则用例必须能精确构造这三个位域,而不是笼统地“发一条指令”。
功能基线提供的是功能层面的预期行为:在给定输入下,软件应产生什么输出、在什么时限内、满足什么精度或状态迁移。它把 ICD 的“数据”提升为“语义”,是判定用例通过与否的依据。例如功能基线规定“收到模式切换指令后 200 ms 内输出对应离散量并回读状态字”,则用例的预期结果必须包含时限和状态字内容,而不是只看“有没有响应”。
FMEA 提供的是故障层面的关注点:单点故障、共因故障、接口失效、时序竞争、数据损坏、状态卡滞等。它决定异常用例的构造方向。例如 FMEA 指出“1553B 消息校验错误可能导致指令误执行”,则异常用例应主动注入校验错误,观察软件是否拒收、是否进入安全状态、是否上报故障。
转化关系可以概括为:ICD → 激励字段与观测点;功能基线 → 预期响应与判据;FMEA → 异常注入方式与安全行为要求。三者交叉后,每条用例才同时具备“可施加、可观测、可判定”三个属性。
二、正常、边界、异常用例的构造方法
正常用例覆盖功能基线声明的主流程。构造时选取 ICD 中典型有效值,按功能基线的时序施加激励,检查输出是否在时限内、数值是否在精度范围内、状态迁移是否符合预期。正常用例数量不必多,但必须覆盖每条软硬件交互路径的“首次贯通”,例如上电初始化、模式切换、数据采集回传、指令执行回读。
边界用例针对 ICD 中定义的量程、位宽、周期和门限。典型边界包括:数值取最小值、最大值、零值、满量程;位域取全 0、全 1、仅最低位有效、仅最高位有效;时间取更新周期整数倍、超时门限前一刻与后一刻。边界用例的价值在于暴露定点运算溢出、符号位处理错误、计数器翻转、缓冲区临界等问题。例如某温度遥测字为 12 位无符号数、比例因子 0.0625 ℃/LSB,则边界应取 0x000、0xFFF 以及对应 0 ℃、4095×0.0625=255.9375 ℃ 的临界点,观察软件解码是否溢出或截断。
异常用例由 FMEA 驱动,常见注入方式包括:校验错误、超时无响应、数据字长度不符、非法指令码、状态字异常、总线冲突、电源瞬断、传感器断线。异常用例不仅要看软件是否报错,更要看它是否进入功能基线或安全性要求规定的安全状态,以及是否在恢复后能正确复位。例如注入一帧校验错误的指令后,预期软件应丢弃该帧、置故障标志、保持原状态,并在下一周期正常帧到达后恢复执行。
三、覆盖软硬件交互路径的用例集组织
把上述用例按“交互路径”组织,而不是按功能模块堆叠,才能保证覆盖完整。一条交互路径可以理解为:软件某模块 → 接口驱动 → 物理总线/线缆 → 硬件端设备 → 回传路径 → 软件接收与处理。用例集应保证每条路径上至少有一条正常用例、若干边界用例和由 FMEA 导出的异常用例。
下面这张图给出从三类设计输入到用例集,再到交互路径覆盖的组织关系。图中以某星务软件与姿控模块的 1553B 交互为例,展示正常、边界、异常三类用例如何分别落到同一条交互路径的不同环节上。
四、用例集示例与判据设计
以“星务软件向姿控模块发送模式切换指令”这条交互路径为例,可以形成如下用例集。表中参数均为教学示例,用于说明构造方法,不代表真实航天器指标。
| 用例编号 | 类型 | 设计来源 | 激励构造 | 预期响应与判据 |
|---|---|---|---|---|
| TC-01 | 正常 | 功能基线主流程 | 指令码 0x21,参数 0x05,校验正确 | 200 ms 内回读状态字 bit3=1,模式寄存器=0x05 |
| TC-02 | 边界 | ICD 参数位域全 0 | 指令码 0x21,参数 0x00,校验正确 | 参数按 0 处理,不触发非法值告警 |
| TC-03 | 边界 | ICD 参数位域全 1 | 指令码 0x21,参数 0xFF,校验正确 | 参数按 255 处理,无溢出,状态字回读一致 |
| TC-04 | 异常 | FMEA 校验错误 | 指令码 0x21,参数 0x05,校验位取反 | 丢弃该帧,置校验故障标志,保持原模式 |
| TC-05 | 异常 | FMEA 超时无响应 | 发送后不返回状态字,持续 300 ms | 超时门限 250 ms 触发,置通信超时标志,进入降级模式 |
| TC-06 | 异常 | FMEA 非法指令码 | 指令码 0x7F,参数 0x05,校验正确 | 拒收,置非法指令标志,不改变模式寄存器 |
判据设计要避免“响应正确”这类模糊表述。可观测的量包括:状态字位域、模式寄存器值、故障计数器、总线消息计数、时间戳差值、安全状态离散量。对每条用例,至少指定一个主判据和一个辅助判据。例如 TC-05 的主判据是“超时标志置位”,辅助判据是“模式寄存器保持原值且降级模式离散量为高”。
提示:边界用例的激励值应直接来自 ICD 的位宽和量纲,而不是凭经验取“差不多大”的数。例如 12 位无符号遥测字,边界就是 0x000 和 0xFFF;若比例因子为 0.0625,则对应物理量 0 ℃ 和 255.9375 ℃。只有把位域和物理量对应清楚,才能判断软件解码是否在临界点出错。
五、形成用例集时的常见遗漏
实际调试中,用例集最容易遗漏三类情况。第一,只覆盖软件到硬件的下行路径,忽略硬件回传和软件接收判读的上行路径,导致“发出去了但没看回来”。第二,只做正常和异常,跳过边界,结果定点溢出、计数器翻转、缓冲区临界等问题在联调后期才暴露。第三,异常用例只验证“报错”,不验证“报错之后系统处于什么状态、能否恢复”,而 FMEA 真正关心的是故障后果是否被控制在安全范围内。
因此,在用例集评审时,可以用一条简单规则检查:对每一条软硬件交互路径,是否至少存在一条正常用例证明它能通,是否存在边界用例证明它在极限值下不失控,是否存在异常用例证明它在故障下能进入安全状态并可恢复。三条都满足,这条路径才算被用例集真正覆盖。
注意:用例中的时限、门限、精度等数值必须与功能基线和 ICD 保持一致。若调试中发现实际响应时间接近门限,应记录实测值并反馈,而不是自行放宽判据。判据的修改必须回到功能基线层面确认,否则用例集就失去了作为验收依据的作用。
把 ICD、功能基线和 FMEA 三者结合,用例设计就从“想到什么测什么”变为“有来源、有判据、有覆盖检查”的系统化过程。正常用例保证主流程贯通,边界用例暴露临界缺陷,异常用例验证安全行为,三者共同构成覆盖软硬件交互路径的用例集,为后续联合调试提供可执行、可复现、可判定的输入。