C语言代码质量保证
1.编码要注意资源的使用,看到申请就要留意什么地方回收;正常流程结束要回收,出现异常提前返回也要回收。
2.避免异步处理过程中保存的变量失效,如从芯片中拿到IOCB的指针,但此时可能不处理,在后续异步流程中处理该IOCB;此时IOCB可能已经释放,因此开始保存IOCB的值而非指针。
3.强制类型转换时,原始空间大小需要大于等于转换成的数据结构大小,如fc2_send_ba_acc中:
abts_reply = (fc2_cmd_t *)fcxt->usfc_drv_wspace.fcb_buff;
fcb_buff所指向的空间的大小必须大于等于fc2_cmd_t结构体的大小,考虑到fc2_cmd_t 可能添加结构体成员等进行扩展,需要添加
Assert判断:
ASSERT(fcxt->usfc_drv_wspace.fcb_len >= sizeof(fc2_cmd_t ))
4.日志大小过大时需截断,避免无限增长;考虑客户长期 运行情况;
5.QFC_ASSERT(BYTES_IN_IOCB == sizeof(umq_iocb_pkt_t));
6.调试分支命名加上自己的名字,调试完成及时删除,避免搞的公共gitlab一团糟
7.日志打印,避免重复打印造成冲日志;
8.问题交接:设备信息(IP用户名密码等)、当前分析结论、日志关键字等,尽量避免下环节分析人重复耗费工作量获取已知信息;
10.项目常用联系人(软件,硬件,测试等等,项目管理,质量,物料);
11.向芯片发送的IOCB请求,如果芯片不返回应有超时机制进行异常处理。
12.公共层通过函数指针调用的芯片层驱动函数,返回值应与公共层匹配,不要用芯片层自定义的错误码;
13.git 提交时按功能点整合,合并编译错误等提交;用于构建版本的commit做好标签
14.跟芯片相关的一些SWITCH的defaut分支中触发FW DUMP,比如返回的CMPL_IOCB中的status在芯片手册中未定义
15.git commit log中添加bug号,bug注释中添加commit id
16.linkup时发出请求添加的等待远端回应的定时器在linkdown时要处理掉。申请释放资源的流程可以先写释放流程再写申请流程;