一、前言
我一直相信,代码检视可以帮助开发人员,验证软件的所有功能,发现代码中的所有Bug。
我也一直认为,不断进行代码检视,是开发人员提升软件质量,提高工作效率最好的方法。
代码检视就是LLT测试,代码检视也是黑盒测试,当你的眼睛扫过代码行的同时,你的脑子在想着软件功能,这就是高效、活生生的功能测试。
另外,代码检视还能完成功能测试不能完成的事情:提高代码简洁性、可读性、低耦合、可维护性等。
下面是我自己经常用到的一些代码检视方法和心得,总结出来供大家参考。
二、检视方法
方法一、按照“代码行从上往下顺序”进行检视
这可能是大家最习惯用的一种方法,检视起来行云流水。这种方法虽然简单,但是最重要,这种方法可以提高代码简洁性、可读性、低耦合、可维护性,我觉得这是好代码最根本的特征。
虽然方法简单,为了达到不简单的检视效果,我觉得这种方法要重点检视如下方面的问题:
- 代码简洁性差。比如:函数超大;
- 代码可读性差。比如:函数逻辑复杂,圈复杂度高;函数中空行使用混乱,导致很难看出代码层次划分;注释记录少、或者多但是混乱。
- 代码可维护性差。比如:关键日志记录少、或者记录了很多无用的日志;
- 代码整体的功能逻辑。
方法二、按照“测试场景执行的代码顺序”进行检视
这种方法是代码检视可以媲美功能测试的“利器”。无需费尽“九牛二虎之力”搭建测试环境,无需花大量时间写LLT用例。你只要对照自己设计的功能测试用例,或者直接拿来测试人员设计的用例,就可以用你的眼睛和大脑开始“测试”了。
这种方法的优点是:发现各种功能场景的逻辑问题,尤其是异常场景的逻辑问题。
方法三、重点专项检视
当编程语言语法的“灵活性”遇到我们长时间编码已经“迟钝”的大脑,问题就来了… (挖掘机技术哪里强,中国山东找蓝翔 )
逻辑跳转的代码,虽然灵活高效,但也容易引入一些隐藏很深的Bug。在现在各种静态检查工具横行的年代,我觉得还需要进行下面这些重点专项检视:
-
内存申请、释放的场景;比如:异常分支的提前退出,容易导致内存泄露,野指针。
-
在for/while 循环中使用 break/continue/return 的地方,容易出现死循环,内存访问越界,功能逻辑错误的问题。
-
不带else的if判断语句,并且其中没有跳转, 后面隐含的else分支可能会导致问题。
int i = 0; if (xxx) { i = 1; } // 这里隐藏了一个逻辑 i = 0; 可能这不是代码的本意
最后,希望这些心得能帮得上一些忙,希望各路人都能重视代码检视,多花时间在代码检视上。