测试左移之代码评审测试左移之代码评审
导读
最近两年,品质中心极力推动测试工作左移,以期能提前发现产品的问题,降低成本。笔者自认代码基础能力还不错,就想通
过代码Review来提前发现一些Bug。
多数项目中,代码评审工作是由开发同事相互执行的。但往往开发同事为了赶进度,并没有时间进行代码评审,导致很多明显
的Bug被遗留到了测试阶段。那代码评审是否可以由测试人员来做呢?显然是可以的。诚然多数测试人员的代码能力没有开发
人员的水平,代码Review的深度不如开发同事,但通过实践证明,测试人员也能胜任大部分代码评审的工作。
做CodeReview的方法
笔者在刚开始做代码Review时也是毫无头绪,不知道哪些代码可能有问题。那时我才意识到了解Bug出现的根因对代码
Review有至关重要的作用。
通过对Bug及开发对应修改的代码进行分析,并与开发同事交流,我了解到一些Bug出现的原因,以及出错代码的一些特征。
当这些代码特征被总结出来后,我将这种特征用于Review其他的代码,此时能慢慢地能发现一些Bug了,但效率比较低。
后来用Android Studio自带的Lint工具扫描代码可以扫描出大量疑似缺陷的点,再通过人工分析可以发现不少空指针和逻辑上
的问题,Review代码的效率得到了极大的提升。
但还有一些更深层次的需求,比如像一些多条件组合的代码就不能通过Lint扫出来了。因此我把这些特殊的代码特征进行汇
总,请一个同事帮忙写了一个定制化的代码扫描工具,利用这个工具扫描出代码位置,然后针对性的Review。
总结我的实践过程,建议刚开始做代码Review的朋友,先使用一些业界常用的工具快速入手。当积累一些经验后,尝试自己
分析问题并总结经验,好的经验积累起来形成自己的知识库和工具库,提升Review效率。
Review知识点汇总
以下是笔者在平时工作中总结出一些经常可以发现问题的点,希望对同仁们有所帮助。
1、空指针
如果项目有异常上报统计,就会发现最常见的异常是空指针异常(NullPointerException),代码中如果使用了未初始化的对象都
会导致这个异常。一般开发都会在程序入口处进行参数的判空,不过这样还不够。严格意义上,任何一个对象在使用前都应该
进行判空处理。
如下代码片断所示,一些开发同事习惯当传入参数为空时,直接返回一个空的对象。单从本方法的角度来看是不会有问题的,
但是在调用本方法的地方,如果忘记做判空处理就会出现空指针的错误。
以上示例中较好的代码实践是返回一个没有元素的列表,或者是当参数为空时直接显式的抛出一个异常,让调用者必须处理该
异常。
针对空指针的情况,一般Review以下几点:
(1)方法参数如果不能为空时,是否做了判空处理,或者在方法调用者传入参数时是否确保了不为空;