共计 856 个字符,预计需要花费 3 分钟才能阅读完成。
一. 编码基本功
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
正文完