一. 编码基本功
1. 前言
依据实际数据能够看出,调试工夫占据了咱们开发工夫中的最大局部,广泛能到60%。如果咱们有办法大幅消减调试阶段的工夫,效率天然可能大幅晋升。
通过什么伎俩可能做到?
- 写好代码,以模块化为核心指导思想,尽量把代码写清晰,写强壮,少出一些BUG;
- 做好单测,以自动化为核心指导思想,尽量早,尽量低代价,尽量全面,验证所有逻辑,把BUG毁灭于萌芽之中;
2. 6步法
这6个步骤,围绕『单测』这个外围,目标是进步单测的效率、成果,让单测能够成为一道『拦河大坝』,把BUG阻断在开发阶段,防止后续『海底捞针』,在大范畴代码中定位BUG。
- 设计改善:对设计产出的API进行优化,以及对模块内部结构进行微调,做好分层和解耦。
目标是晋升代码的模块性,让代码更容易了解,更容易调试,测试,批改,复用,扩大。
本步骤输入API函数的原型定义。 - 编写单测的用例&代码:在编写函数实现代码前,先编写函数的单元测试代码,利用单元测试来调试函数,升高函数调试的难度和工作量。本步骤输入API函数的单测代码。
- 函数代码实现:编写函数的实现代码,重点关注代码的易了解性,健壮性。利用前一步写好的单测案例进行逐函数调试。本步骤输入API函数的实现代码,实现代码调试。
- 覆盖率剖析:在函数编写实现,并利用单测调试结束后,收集覆盖率数据并剖析,依据覆盖率数据掂量单测品质,增补新的单测用例。
- valgrind检测:对于C/C++,单元测试无奈发现内存透露、溢出、线程类问题。能够利用valgrind对单测运行过程进行查看,排除这几类问题。
- codereview:对于设计类问题,以及只在特定异样场景产生的谬误,单测、valgrind检测都无奈齐全打消。能够通过代码review,人工排除这一类的问题。
3. 设计中注意事项
- 在函数中要查看参数的有效性(能够应用assert),调用函数要查看函数返回值
- memcpy不能对重叠区域进行拷贝,memmove能够
- 开释过的指针要置为null
- 局部变量要初始化
- malloc分配内存要初始化能力应用
- 应用strtol替换atoi