代码自查的总结
2017-12-26 22:53
197 查看
代码自查的总结
很多人代码一些完,马上开始Make, 殊不知他错过了一次很好的机会。这个机会就是代码自查,它的目的不仅仅是为了发现程序的错误,更是为了认识到自己编程习惯的局限和盲点,从而在下次进行有效地改进。因为,人自己发现自己的错误并修改的过程,是一种自愈和自我免疫的过程。1. 前提
满足了下面的前提,就可以开始代码自查:项目需求已经确定,有可参考和检查的文档,
主要的功能,已经拆分为各个子模块;
和其他模块的接口,已经定义好;
每个模块的代码,已经用代码实现;
当然,如果你模块划分得越细,也可以逐模块开始代码自查。
2. 过程
可以做两轮自己的code review,每轮的侧重点不一样:2.1 功能自查
第一轮检查,主要侧重于以下的方面的检查2.1.1 文件级
重点检查:头文件是否能避免重复保护;
如果需要支持C++,头文件是保护extern C;
头文件中的extern 是否有定义;
头文件中的函数是否有定义、定义是否一致;
是否遵循最小暴露原则;
在全局静态数组的定义中,使用了需要运行时才能确定的变量,导致了编译错误
2.1.2 子模块级
子模块内部实现的逻辑是否符合预期;子模块对外的接口函数的参数和返回值是否恰当;
是否有之和子模块相关的变量实现成了全局变量;
2.1.2 函数级
输入输出参数是否冗余、缺失、类型不对;函数内部是否声明了不用的变量;
函数返回和函数声明是否一致;
参数检查是否遗漏或者过多;
内部循环是否退出条件过若或者过强;
swtich/case 是否遗漏break、default,或者default不可能执行到
申请的内存是否遗漏释放;
对申请到的内存的使用是否越界;
该函数是否在临界区,是否包含临界区,是否会死锁;
功能逻辑是否符合预期
2.1.3 宏定义级
是否有些近似的代码反复出现没有用宏替换是否把宏当做函数用了,忽略了宏定义只是简单的完全替换关系
2.1.4 拼写级
有一个数据结构中的一个成员,只有类型,没有变量名称;遗漏分号、过多分号;
拼写错误,特别是夹杂有大小写的情况:idLsu/idlsu lsfsret/LsfsRet
上面检查过程中,发现立即可以修改的马上修改,比较复杂的可以放到一个TODO list的FIFO里去;
2.2 性能检查
第二轮检查侧重于以下的方面:2.2.0 算法
针对具体的功能和场景,区分是响应时间有限还是节省资源有限,列出所有可选的算法实现,确定是否当前是最合适的实现;2.2.1 IO路径
IO路径上的所有操作是否都是必需在请求返回前执行的,如果不是,可以拆分到后台线程去执行;IO路径上是否会全抢锁等待,如果有尽量去掉锁或者减小等待的时机;
2.2.2 并发的粒度
是用多进程还是多线程去并行;是否需要绑定处理器核去执行;
2.2.3 锁的类型
是否必需,能否用无锁队列替换;是否适用读写锁;
2.2.4 IO合并和放大
每次是否有太多的没有改动的数据也落盘了;是否依赖了必需落盘的数据,导致它没及时落盘;
同样,如果上面有问题,也需要添加到一个TODO List里面去。
2.3 完成TODO List
根据上面自查完成后生产的TODO list,把里面每一项完成;完成TODO list后,对照自己常犯错误的清单,再次自查,修改完成之后可以交由编译器去编译调试了。
如果此时,你发现编译器也没发现任何错误和警告,恭喜你,已经比较牛了!
相关文章推荐
- 【《Effective C#》提炼总结】提高Unity中C#代码质量的22条准则
- 【代码总结】MYSQL数据库的常见操作
- posix多线程有感--线程高级编程(线程属性函数总结)(代码)
- C++代码优化方法总结
- 35 个 Java 代码性能优化总结
- Excel VBA 常用代码总结
- 手机定位的总结代码
- 20100719-23 考核项目之化学品管控和追溯系统 代码经验总结
- 裸机中代码书写的细节总结
- Eclipse使用总结——修改(My)Eclipse默认的Servlet和jsp代码模板
- 编写高质量代码改善Java程序的151个建议--总结摘抄
- 【javascript】学习总结——动态时钟的实现代码
- 35 个 Java 代码性能优化总结
- ECC代码中调用的大数库(tommath)函数总结
- js 学习总结,可利用其与原生代码交互
- 写好Java代码的30条经验总结
- php模拟post行为代码总结(POST方式不是绝对安全)
- 使用CXF开发WebService程序的总结(四):基于bean的客户端和服务端代码的编写
- Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
- 写了 15 年代码,总结出提升 10 倍效率的三件事