人工代码检查的一二三

代码检查是白盒测试的一种方法,通过代码检查可以确定代码和设计的一致性、代码结构的合理性、代码编写的标准性和可读性、代码逻辑表达的正确性等。

虽然很多测试工具也都支持对代码的静态分析,但是,很多非语法方面的错误,还是只能通过人工代码检查的方法来进行。

  1. 代码检查的目的

代码检查可以实现以下目的:

  • 确保代码符合组织的编码规范要求。
  • 确保代码与设计的一致性。
  • 确保代码逻辑表达的正确性。
  • 确保代码易于阅读、理解和维护。
  1. 代码检查的方式

代码检查的方式有以下3种:

  • 桌面检查

桌面检查是由有经验的程序员对代码进行分析、检验,发现程序中错误的过程。桌面检查可以由开发人员自己进行。

  • 代码走查

代码走查是由程序员和测试员组成的审查小组对代码进行审查,发现问题的过程。代码走查过程中,小组成员需要熟悉软件的需求和设计,能够在头脑中建立测试用例,逻辑运行程序。

  • 代码审查

代码审查也是由程序员和测试员组成的审查小组对代码进行静态分析的过程。

与代码走查时小组成员是平等的提出和讨论问题不同的是,代码审查是由程序员(开发人员)讲解程序的结构和逻辑,并且回答小组成员提出的问题;程序员在讲解自己的程序时,也能发现自己原来没有注意到的问题。

为了提高效率,可以为审查小组提供一份常见错误清单。

PS:在实际应用中,代码检查能快速找到20%~30%以上的编码缺陷和逻辑设计缺陷。然而代码检查是要消耗时间的,而且需要知识和经验的积累。

  1. 代码检查的主要内容
  • 检查函数
  •  函数头是否清晰地描述了函数的功能。
  •  函数的名称是否清晰地表达了它所要做的事情。
  •  各个参数的定义和排序是否遵循特定的顺序。
  •  所有的参数是否都要是有用的。
  •  参数的接口关系是否清晰明了。
  •  函数中是否有相关的注释。
  •  每个函数是否只做一件事情。
  •  每个函数是否都有返回值。
  •  函数的异常处理是否清楚。
  • 检查数据类型及变量
  •  每个数据类型是否都有解释。
  •  每个数据类型是否都有正确的取值。
  •  数据结构是否足够简单。
  •  每一个变量的命名是否都明确地表示了其代表什么。
  •  所有的变量是否都要被使用。
  •  全部变量是否描述清晰。
  •  所有变量是否都分配了正确的长度、类型和存储空间。
  •  变量初始化、命名是否与标准库中的命名相冲突。
  •  变量之间的传递是否注意了类型转换问题。
  • 检查条件判断语句
  •  if/else使用是否正确。
  •  数字、字符、指针和0/NULL/FALSE判断是否明确。
  •  是否有臃肿的判断逻辑。
  •  所有的判断条件边界是否正确。
  •  判断体是否足够短。
  • 检查循环体
  •  循环体是否不为空。
  •  循环之前是否做好初始化代码。
  •  明确的多次循环操作是否为for循环。
  •  不明确的多次循环操作是否为while循环。
  •  所有的循环边界是否正确。
  •  循环终止的条件是否清晰。
  • 输入输出检查
  •  所有文件的属性是否已描述清楚。
  •  确认输入参数的异常是否处理了。
  •  对文件结束的条件是否进行检查。
  • 程序(模块)检查
  •  程序中所有的异常是否处理了?
  •  程序中是否存在重复的代码?
  • 表达式分析
  •  表达式中是否存在数组下标越界错误。
  •  表达式中是否存在除数为零错误。
  •  表达式中是否存在浮点数计算的误差等。
  • 其他
  •  调用的子程序、宏、函数是否存在,参数是否一致。
  •  确认常量的取值和数据类型是否正确。
  •  代码语法格式和规则,如排版、注释、标识符命名、可读性、变量、函数、过程、可测性、程序效率、质量保证、代码编辑、编译、审查、代码测试、维护、宏等各是否符合编码要求。

这正是:

人工检查很有效,工具暂时代不了

检查方式选一种,检查内容可参考

参考书目:软件测试实用技术与常用模板(第2版),作者:李龙,黎连业,出版社:机械工业出版社


作者简介:王小双,长期从事GJB5000推广、实施、评价、改进的工作,创建《软件工程之思》微信公众号,一直在《软件工程之思》分享GJB5000、CMMI、软件工程的知识和感悟。现致力于GJB5000咨询以及软件过程改进、软件工程能力提升的研究工作。

发表评论

登录后才能评论
服务中心
服务中心
联系客服
联系客服
投诉举报
返回顶部