代码检查(一)

发表于:2008-8-05 13:20

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:薛丽 崔烨    来源:51Testing投稿

分享:

  2、C++代码检查规则类型
  1)规则层次
  在代码检查工作中常常可以发现这样的现象:有些规则能在所有的项目中都能发现问题,另一些规则所能发现的问题只存在于某类项目中。
  根据规则的这个特点,如图 33中所示,参考文献[2]中将代码检查规则分为两个层次:
  公共规则(General checks):用于检查在大多数情况都有可能发生的缺陷。
  项目相关规则(Project specific checks):用于在项目中检查可能的缺陷。

  

  图 3  一个典型的代码检查规则清单节选图
  在项目中积累了大量软件问题报告历史数据的支持下,可以从中进一步细化出与项目或开发人员相关的检查规则。
  在学习任何一种计算机编程语言时,总是按照基本数据类型->表达式->语句->复杂语句->函数->整个程序体(类)的顺序逐步学习的。事实上软件正是按照这样的顺序自下而上逐层组建起来的,代码缺陷作为软件编程写时的一种异常情况,毫不例外也是按照这样层次的构建而成。在实际测试项目的代码检查过程中,我们发现在每个层次上都有可能存在潜在代码缺陷,要找到引起软件问题的根源,要求在尽可能低的层次上找到引发缺陷的代码。正因如此,非常有必要在C++语法的每个层次上都建立相应的检查元规则。
  图4为一个代码检查规则体系模型图[2],图中展示了在代码检查项目开始前,通过逐级组合各种元规则和规则形成新的检查规则,最后形成了初始的检查清单。在项目实践中,经过对缺陷代码模式的推导,进而得到扩展的检查清单。初始检查清单和扩展检查清单本质上并没有什么区别,只是因为形成的时间不同。

    

  图4  代码检查规则体系模型图
  在检查代码时我们有时会想要定义一个带有否定意义的规则,如“在AA情况下如果没有BB,则可能存在一个问题”。这类检查规则采用自然语言描述比较容易,但是要用代码实现起来往往并不简单,并且对这类规则的定义和维护也比较麻烦。定义组合规则,是解决这类问题一种变通的方法。
  下面简单介绍一下定义组合规则的原理。如图5中所示定义三个规则,“满足情况AA”对应规则R1,“满足在AA情况下出现BB”对应规则R2, 将满足R1但不满足R2(即以!符号表示)组合则对应规则R3-“在AA情况下如果没有BB,则可能存在一个问题”。

  

  图5  组合规则示例图
  根据前面讨论,本文将代码检查的规则分类设计如下:
 公共规则
  定义针对函数体(含)以上层次的检查规则,在这些层次上出现的缺陷问题一般不容易精确到具体的代码行。
 关键字规则
  针对每个关键字定义的检查规则。由于关键字是C++语法中一种最普通的元素,单独使用关键字规则的意义不大,一般情况需要和语句、表达式规则或者复杂语句规则配合使用。
 语句/表达式规则
  针对基本语句类型或基本表达式定义的规则,满足对应结构的表达式,则可认为符合了相应的表达式规则。语句/表达式规则中可以包含多个关键字,在同一语句/表达式规则中包含的关键字地位是平等的,与检查的先后次序无关。
 复杂语句块规则
  针对条件、开关选择等多分支语句定义的规则,通常由关键字、语句/表达式进行组合来定义复杂语句块,并在定义时可以进行嵌套,在定义复杂语句块规则加入语句或表达式和复杂语句时需要考虑检查的先后次序。
 高级组合规则
  关键字规则、语句/表达式规则和复杂语句块规则合称为普通规则。
  对于难以使用普通规则定义方式定义的复杂语义,需要定义高级组合规则。定义高级组合规则可以使用上面几种规则作为基本单元,也可以嵌套使用其它组合规则。

54/5<12345>
100家互联网大公司java笔试题汇总,填问卷领取~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号