设为首页收藏本站优领域

优领域

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
优领域 优领域 IT领域 编程开发 C++ 查看内容

C++Test代码静态检查规则制作方法

2011-11-4 00:40| 发布者: admin| 查看: 2543| 评论: 0

摘要: 1 前言 在一个团队进行软件开发的过程中,一般都会制定一个大家共同遵守的编码规范,程序员遵循良好的编码规范写程序有很多好处: 1.有助于程序的维护,降低软件生命周期成本,符合项目管理的规律; 2.使团队中相 ...

    1  前言

    在一个团队进行软件开发的过程中,一般都会制定一个大家共同遵守的编码规范,程序员遵循良好的编码规范写程序有很多好处:

    1.有助于程序的维护,降低软件生命周期成本,符合项目管理的规律;

    2.使团队中相关人员的流动对项目的影响尽可能小,有利于项目的控制与管理

    3.提高程序的可读性,有利于相关设计人员交流,提高软件质量

    4.有利于形成可管理,可重用的团队后备资源

    5.有利于软件工程相关产品元素的SCM

    并且,通过建立代码编写规范,可以提高程序的可靠性、可读性、可修改性、可维护性、一致性,保证程序代码的质量,继续软件开发成果,充分利用资源。提高程序的可继续性,使开发人员之间的工作成果可以共享。这是遵守规范进行代码编写是程序员的基本素质。

    如果对编码规范进行人肉检查,无疑是非常费时费力,效果不好。使用自动化的工作来进行检查显然是一个更好的执行方法。为了这个目标,我们就研究了下使用C++ Test进行代码静态检查。

    C++Test是一个C/C++自动单元测试工具,自动测试C/C++类、函数或部件,自动生成测试用例、测试驱动程序或桩调用,无需手工编写。C++Test能够自动测试代码构造(白盒测试)、测试代码的功能性(黑盒测试)和维护代码的完整性(回归测试),并提供自动覆盖率测试。同时C++Test还是一个C/C++编程规范自动检查工具,它内置了800多条业界规则,同时可以图形化地定制自己的规则,C++ Test进行静态测试(自动编程规范检查)有以下优点:

    1.Pattern Matching(自动代码走查)

    2.内置800多条业界有名的C/C++规则(大量规则来自于多家世界著名电信公司的编程规范,以及世界权威的编程规范资料),可实现自动的图形化代码编程规范检查3.使用RuleWizard图形化建立自定义代码规则的功能。客户可以很方便建立并保存一整套自己的代码编程规范(团队经验),从而保证团队经验不会因为人员变动而流失。与此同时避免了编程人员为了保存团队的代码编程规范而浪费大量时间人工编写script Bug Detective(Flow Analysis)

    4.Hot Spot技术(“热点”技术)。C++Test通过自带的“热点”包,用回溯的方式自动模拟运行程序中的执行路径,从而精确高速地找到程序存在问题的位置;例如,我们不允许程序中存在“/0”的运算部分,由此凡是程序中“/var”的部分都有可能因为var是0而造成程序逻辑错误(其中“/var”的型态就称为程序中的“热点”),此时,C++Test会自动搜索程序中所有“/var”的运算型态,并回溯运行程序中的执行路径,找到所有致使var变成0的路径,从而精确地找到程序中的错误。

    2. 定制规则

    C++ Test内置了300多个静态测试项,一般的情况下其实也就够用了。但是如果有特殊的测试要求,动辄几十K的代码,用眼睛看,脑子想,太辛苦,也不“安全”。如果我们用C++Test图形化的RuleWizard,结合公司的编码规范来制定规则,一来方便,高效,二来可以节约人工检查所带来的不必要的成本。Rule的创建有2种方式,一种是手工写规则,让RuleWizard去帮你生成规则(最好别用autocreate,因为C++Test的智能化还很欠缺)。我这里主要重点放在自己写规则方面,下面介绍基本步骤:

    2.1 C++Test的基本设置

    首先使用C++Test静态规则集检查必须要进行一些简单的设置

    新建工程:选择VS6.0或者VS.NET工程文件,或者打开一个已有的工程(是原来已经建立的C++Test工程,后缀名为*.cpf)

    配置工程,引入需要包含的头文件文件夹 .

 

    测试选项的筛选,Enable Coding Standards(静态测试),Enable Unit Testing(单元测试),选择静态测试,去掉单元测试的选项。

    2.2 默认规则

    C++Test内置了800多条规则包括Effective C++,Security等各个方面的C++规则,应该能够满足大多数公司编码规范,启用某某规则只要勾选checkbox即可。另外,如果不会写规则的话,也可以参看默认的规则和C++Test的manual在\Parasoft\C++Test\manuals\rulewizard文件夹下。

    2.3 制作规则

    首先介绍一下基本规则的制作方法

    在出现的对话框中Dictionary选择C,C++,还有一个选项是C++Test一般用于C++文本规则的制作,Rule Creation选择By Node,Auto-Create用于手动书写代码而自动生成规则,但是自动生成的规则往往不尽人意,所以一般不用。Node Selections选择if,因为此次书写的规则跟if有关,完成了点击ok.

    以上制作的规则是在逻辑表达式中常量应该放==号的左边,这样可以避免漏写一个“=”号后造成分支判断出现永真或者永假式即:

void foo() 
{
    
if(nFlag = 0)        /* Violation */
 
    {
        
return
 (Ok);
    }
    
else

    {
        
return (ERROR);
    } 
}

    以上条件判断永远只会走 return (ERROR)这个分支。

相关阅读

网站统计|优领域|优领域 ( 粤ICP备12011853号-1 )  

GMT+8, 2019-3-22 15:12 , Processed in 0.040451 second(s), 12 queries .

Copyright © 2008-2014 优领域

回顶部