程序健壮性的提高要从设计、实现、测试三方面入手,具体来说

  1. 设计

  2. 系统

    系统外部模块的异步响应都需要设置超时时间,要有超时处理,超时时间要和外部模块协商一个合理时间。

    发送消息失败和设置timer失败统一做处理。

    需要设计相关机制(比如心跳包机制)监控进程/线程是否发生了堵塞,发生堵塞后需要设计相应的处理流程。

    需要设计相关机制来监控CPU的占有率,当CPU占有率超过阈值后要设计相应的处理流程。

  3. 模块

    系统内部所有需要等待的异步响应都要有超时处理。

    关联组件的行为不一致要做异常处理:比如:APP模块认为通信已经断开,故不会再次请求通信MID模块去执行通信,而通信MID模块等待APP模块来触发下一次通信。

    模块内部暂态都要设置最长停留时间,以及超过这个时间后做什么样的处理。

    模块的错误处理至少要考虑以下几种类型错误:

     输入了范围外的值
    
     在规定时间内,处理没有结束或者没有应答
    
     与期待的时序不一致
    
     期待的数据不完整:
    

    由错误转化为异常的判定标准:

     不以单次Error做判定,而是执行一定次数(3次)的Retry处理。
    
     测试时间以大于一定时间为目标 。
    

    通信关联的功能模块在设计时需要考虑:

     用户异常切断时怎么处理
    
     通信正常切断时怎么处理
    
     通信正常终了时怎么处理
    
     设备异常切断时怎么处理"
    

    做状态迁移表的设计时,如果状态迁移表的事件有外部设备异常切断的通知。要明确各状态下收到该通知时处理的妥当性,并且明确这些设计。

    需要考虑起动处理时各模块消息的同步问题。例如,优先级高的A模块启动后,发送消息给后B模块,考虑如果此时B模块未启动的处理情况。

    对于Backup的数据,需要考虑Backup各种状态下启动之后处理:

    1 没有读取到Backup数据
    2 Backup数据为初始值
    3 Backup数据达到最大边界值
    4 Backup数据超过最大边界值或者异常。

    备份的数据要有默认值。

    备份的数据要进行完整性校验。

    设计模块时,尽量保证此模块可以有机制来恢复。

    模块出现异常时,有一套机制可以检测出来。

  4. 函数

    输入范围之外的值需要做处理。

    函数设计时需要明确设计目标函数所调用函数的所有返回值。对正常值以外的返回值进行分析,分析不同的返回值是否需要做不同的异常处理。并且明确这些异常设计。

    Loop循环,一定要设定跳出循环的条件或者是范围的判定。

    进行数据的格式转换的处理,需要明确:1 数据转换前后的格式2 转换规则3 是否有数据在转换时需要特殊处理,比如边界值。

  5. 实现

    不允许使用C语言中非安全的经典函数,如下:

     strcpy/wcscpy/stpcpy/ wcpcpy
    
     scanf/ sscanf /vscanf /fwscanf /swscanf/ wscanf
    
     gets/ puts
    
     strcat /wcscat
    
     wcrtomb /wctob
    
     sprintf/ vsprintf /vfprintf
    
     asprintf/ vasprintf
    
     strncpy /wcsncpy
    
     strtok/ wcstok
    

    代码满足静态检查规范(cert C,misra C)。

    函数的入参要进行范围判断。

    不允许使用函数的递归。

    优先使用RAII技术来管理资源(使用C++语言),比如锁,文件句柄等。

    优先使用引用来代替裸指针(使用C++语言)。

    优先使用智能指针代替裸指针(使用C++语言)。

    尽量避免强制类型转换。

3.测试

  1. 测试用例

测试用例至少覆盖以下几种情况:

基本功能:典型时序(所有的错误;异步超时需要重点关注)。

性能:性能相关时序。

边界值:外部输入所有的边界值。

异常值:接口中数据范围异常;时序重复混乱;备份数据损坏;服务器来的数据破坏;总线上数据异常等 。

恶意操作:ACC ON,OFF频繁操作;外部线恶意插拔;外部没有得到结果就再次请求;外部连续两个相反的请求;外部连续两个不同的请求等。

内部状态:内存使用量大时;CPU占有率大时;各种电源状态下 。

外部状态:总线负载大时;Linux下2038问题;MQTT/HTTP同时进行;正常功能和debug功能同时进行。OTA/diag/factory reset处于执行中时。
  1. 测试工具

    测试用例要能支持回归测试。

    搭建自动化测试环境。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值