(1)测试为什么要做代码走查?测试真的需要做代码走查么?
话说开发同学进行代码走查是因为把缺陷扼杀在摇篮里,那测试同学进行代码走查有何意义?下面和大家分享下我对这一块儿的理解:
测试代码走查目的:
1、了解代码逻辑,补充测试设计欠缺部分。
2、确认是否有公共函数等变更,进行影响范围评估;
3、尽量发现bug;
4、确认是否有非迭代代码;
测试代码走查流程:

测试代码走查checklist

进阶代码走查项
1、编程规范
(1)按照具体编程语言的编码规范进行检查,包括命名规则、程序注释、缩进排版、声明与初始化、语句格式等;
2、面向对象设计
(1)类的设计和抽象是否合适;
(2)是否符合面向接口编程的思想;
(3)是否使用合适的设计模式;
3、性能方面
(1)在出现海量数据时,队列、表、文件在传输、上载等方面是否会出现问题,是否控制如分配的内存块儿大小、队列长度等;
(2)对hashtable、vector等集合类数据结构的选择和设置是否合适;
(3)有无滥用string对象的现象;
(4)是否采用通用的线程池、对象池等高速缓存技术以提高性能;
(5)类的接口是否定义良好,如参数类型等应避免内部转换;
(6)是否采用内存或硬盘缓冲机制以提高效率?
(7)并发访问时的应对策略;
(8)I/O方面是否使用了合适的类或采用良好的方法以提高性能(如减少序列化、使用buffer类封装流等);
(9)同步方法的使用是否得当,是否过度使用?
(10)递归方法中的迭代次数是否合适(应保证在合理的栈空间范围内);
(11)如果调用了阻塞方法,是否考虑了保证性能的措施。
(12)避免过度优化,对性能要求高的代码是否使用profile工具;
4、资源释放处理
(1)分配的内存是否释放,尤其在错误处理路径上(如c/c++);
(2)错误发生时是否所有对象被释放,如数据库链接、socket、文件等;
(3)是否同一个对象被释放多次(如c/c++);
(4)代码是否保存准确的对象引用计数;
5、程序流程
(1)循环结束条件是否准确;
(2)是否避免了死循环的产生;
(3)对循环的处理是否合适,应考虑到性能方面的影响;
6、线程安全
(1)代码中所有的全局变量是否是线程安全的;
(2)需要被多个线程访问的对象是否线程安全,检查有无通过同步方法保护;
(3)同步对象上的锁是否按相同的顺序获得和释放避免死锁,注意错误处理代码;
(4)是否存在可能的死锁或是竞争,当用到多个锁时,避免出现类似情况:线程a获得锁1,线程b获得锁2,然后锁1;
(5)在保证线程安全的同时,注意避免过度使用同步,导致性能降低;
7、数据库处理
(1)数据库设计或sql语句是否便于移植(注意与性能会存在冲突);
(2)数据库资源是否正常关闭或释放;
(3)数据库访问模块是否正确封装,便于管理和提高性能;
(4)是否采用合适的事务隔离级别;
(5)是否采用存储过程以提高性能;
(6)是否采用preparedstatement以提高性能;
8、通讯方面
(1)socket通讯是否存在长期阻塞问题;
(2)发送接收的数据流是否采用缓冲机制;
(3)socket超市处理和异常处理;
(4)数据传输的流量控制问题;
9、JAVA对象处理
(1)对象生命周期的处理,是否对象引用已失效可设置null并被回收;
(2)在对象传值和传参方面有无问题,对象的clone方法使用是否过度;
(3)是否大量经常的创建临时对象;
(4)是否尽量使用局部对象(堆栈对象);
(5)在只需要对象引用的地方是否创建了新的对象实例;
10、异常处理
(1)每次当方法返回时是否正确处理了异常,如最简单的处理是记录日志到日志文件中;
(2)是否对数据的值和范围是否合法进行校验,包括使用断言;
(3)在出错路径上是否所有的资源和内存都已经释放;
(4)所有抛出的异常是否都得到正确的处理,特别是对子方法抛出的异常,在整个调用栈中必须能够被捕捉并处理;
(5)当调用导致错误发生时,方法的调用者应该得到一个通知;
(6)不要忘了对错误处理部分的代码进行测试,很多代码在正常情况下执行良好,而一旦出错整个系统就崩溃了;
11、方法(函数)
(1)方法的参数是否都做了校验;
(2)数组类结构是否做了边界校验;
(3)变量在使用前是否做了初始化;
(4)返回堆对象的引用,不要返回栈对象的引用;
(5)方法的api是否被良好定义,即是否尽量面对接口编程,以便于维护和重构;
12、安全方面
(1)对命令行执行的代码,需要详细检查命令行参数;
(2)WEB类程序检查是否对访问参数进行合法性验证;
(3)重要信息的保存是否选用合适的加密算法;
(4)通讯时考虑是否选用安全的通讯方式;
13、其他
(1)日志是否正常输出和控制;
(2)配置信息如何获得,是否有硬编码;
测试代码走查报告
记录走查过程中发现的问题,整理自己走查的思路;
总结
测试到底需不需要进行代码走查不重要,重要的是测试的职责是保证质量,如果能更深入,更早的发现问题,何乐而不为呢?
ps:此类走查更适合迭代项目,新项目/重构项目仅供参考!
网友评论