3、BIT测试需求分析:功能需求、性能需求、可靠性需求、可测试性设计
好,咱们进入正题。BIT测试需求分析,说白了就是搞清楚一件事:这个飞控计算机到底要测什么、怎么测、测到什么程度才算合格。
我做了这么多年飞控系统,见过不少项目在BIT设计上栽跟头。有的测得太少,上天了才发现问题;有的测得太狠,把正常飞控任务都给拖垮了。所以,需求分析这一步,千万别马虎。
3.1 功能需求:BIT到底要干哪些活?
功能需求,就是BIT系统必须完成的任务清单。我个人习惯把它分成三个层级:
- 上电BIT(PBIT):系统上电后自动执行。主要检查CPU、内存、总线、关键传感器是否活着。我一般要求PBIT在3秒内完成,不能耽误起飞准备。
- 周期BIT(CBIT):飞行过程中后台运行。不能影响主任务,只能利用空闲时间片。说白了就是“偷偷摸摸”地测。
- 维护BIT(MBIT):地面维护时人工触发。可以测得更深入,比如逐条指令验证、存储器全地址遍历等。
核心功能清单(我建议至少包含这些):
- CPU寄存器读写验证
- 内存(RAM/Flash)数据完整性检查
- 总线(CAN/ARINC429/1553)通信状态监测
- 传感器(IMU、GPS、气压计)数据有效性判断
- 执行机构(舵机、电机)响应测试
- 电源电压/电流监控
- 看门狗喂狗机制
嗯,这里要注意:功能需求不是越多越好。我在项目中遇到过有人把BIT搞成了“全功能测试”,结果上电自检跑了半分钟,飞手都等急了。所以,功能需求一定要和运行阶段匹配。
3.2 性能需求:BIT不能拖后腿
性能需求,很多人容易忽略。你想想看,BIT本身也是要消耗资源的。如果BIT占用了太多CPU时间,飞控主任务就可能掉帧。
我一般从这几个维度来定性能指标:
| 性能指标 | PBIT要求 | CBIT要求 | MBIT要求 |
|---|---|---|---|
| 执行时间 | ≤3秒 | ≤5ms/周期 | 无严格限制 |
| CPU占用率 | 可100% | ≤5% | 可100% |
| 内存占用 | ≤10KB | ≤2KB | ≤50KB |
| 误报率 | ≤0.1% | ≤0.01% | ≤0.01% |
| 漏报率 | ≤0.01% | ≤0.001% | ≤0.001% |
我曾经在一个项目中,CBIT的CPU占用率做到了8%,结果飞控在急转弯时出现了轻微抖动。排查了半天,才发现是BIT的定时器中断太频繁了。后来把CBIT的周期从10ms改到50ms,问题就解决了。所以,性能需求一定要实测验证,不能光靠估算。
避坑指南:我曾经见过一个团队,把BIT的误报率要求定得太严(0.001%),结果为了降低误报,加了大量滤波和延时判断,反而导致故障检测延迟过高。后来我建议他们区分“警告”和“故障”两个级别——警告可以宽松些,故障才严格要求。这样既保证了及时性,又控制了误报。
3.3 可靠性需求:BIT本身也要可靠
这个点很有意思。BIT是用来检测故障的,但如果BIT自己先挂了,那谁来检测BIT?
所以,可靠性需求的核心就是:BIT系统自身的故障不能影响飞控主功能。
我一般会提这几个要求:
- BIT代码必须独立编译:不能和飞控主代码混在一起。万一BIT代码有bug,不能把主代码也带崩了。
- BIT任务优先级最低:CBIT必须跑在空闲任务里。主任务忙的时候,BIT可以自动跳过。
- BIT结果要有冗余存储:至少存两份,一份在RAM,一份在Flash。防止单点故障导致BIT日志丢失。
- BIT看门狗独立:BIT不能依赖主看门狗。我习惯给BIT单独配一个软狗,超时了就自动复位BIT模块,但不影响主系统。
警告:千万别把BIT的故障检测结果直接用于飞控逻辑切换!我见过一个案例,BIT误报了一个传感器故障,结果飞控自动切到了备份传感器,而备份传感器其实才是真正有问题的那个。正确的做法是:BIT只上报状态,由飞控主任务做决策。
3.4 可测试性设计:让BIT好测、好改、好维护
可测试性设计,说白了就是让BIT系统本身也容易被测试。你想想看,如果BIT代码写成一坨,出了问题连开发人员都看不懂,那还怎么维护?
我总结了几个实战经验:
- 模块化设计:每个BIT测试项独立成一个函数。输入、输出、判定逻辑分开。这样单个测试项出问题,不会影响其他项。
- 可配置的测试项开关:通过配置文件或宏定义,可以单独启用/禁用某个测试项。我在项目中遇到过,某个传感器在特定批次有已知问题,需要临时屏蔽BIT检测,有这个开关就方便多了。
- 日志分级输出:DEBUG、INFO、WARN、ERROR四级。平时只输出ERROR,调试时打开DEBUG。别小看这个,我见过有人把所有日志都打出来,结果串口被刷爆了。
- 注入故障接口:这是可测试性设计的精髓。预留一个接口,可以模拟各种故障场景(比如模拟传感器断线、模拟内存错误)。这样不用真的把硬件搞坏,就能验证BIT的检测逻辑是否正确。
我个人最推荐的做法:在代码里预留一个“BIT自检模式”。进入这个模式后,系统会自动遍历所有测试项,并输出详细的测试报告。包括每个测试项的耗时、结果、中间数据。这样不管是开发阶段还是维护阶段,都能快速定位问题。
嗯,说到可测试性,我还想提一句:BIT的测试报告格式一定要统一。我见过有人用printf随意输出,结果不同模块的日志格式五花八门,解析起来痛苦得要命。后来我强制要求所有BIT输出必须遵循JSON格式,虽然代码量多了点,但后期维护效率提升了好几倍。
好了,关于BIT测试需求分析,我就讲这么多。记住一句话:需求分析不是写文档,而是为后续的设计、开发、测试定好规矩。规矩定好了,后面的事就顺了。