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

上传人:ya****h 文档编号:117408954 上传时间:2022-07-08 格式:DOCX 页数:16 大小:562.85KB
收藏 版权申诉 举报 下载
C++Test代码静态检查规则制作方法_第1页
第1页 / 共16页
C++Test代码静态检查规则制作方法_第2页
第2页 / 共16页
C++Test代码静态检查规则制作方法_第3页
第3页 / 共16页
资源描述:

《C++Test代码静态检查规则制作方法》由会员分享,可在线阅读,更多相关《C++Test代码静态检查规则制作方法(16页珍藏版)》请在装配图网上搜索。

1、4、人.、”1前言在一个团队进行软件开发的过程中,一般都会制定一个大家共同遵守的编码规范,程序员遵循良好的编码规范写程序有很多好处:1. 有助于程序的维护,降低软件生命周期成本,符合项目管理的规律;2. 使团队中相关人员的流动对项目的影响尽可能小,有利于项目的控制与管理3. 提高程序的可读性,有利于相关设计人员交流,提高软件质量4. 有利于形成可管理,可重用的团队后备资源5. 有利于软件工程相关产品元素的SCM并且,通过建立代码编写规范,可以提高程序的可靠性、可读性、可修改性、可维护性、一致性,保证程序代码的质量,继续软件开发成果,充分利用资源。提高程序的可继续性,使开发人员之间的工作成果可以

2、共享。这是遵守规范进行代码编写是程序员的基本素质。如果对编码规范进行人肉检查,无疑是非常费时费力,效果不好。使用自动化的工作来进行检查显然是一个更好的执行方法。为了这个目标,我们就研究了下使用C+Test进行代码静态检查。C+Test是一个C/C+自动单元测试工具,自动测试C/C+类、函数或部件,自动生成测试用例、测试驱动程序或桩调用,无需手工编写C+Test能够自动测试代码构造(白盒测试)、测试代码的功能性(黑盒测试)和维护代码的完整性(回归测试),并提供自动覆盖率测试。同时C+Test还是一个C/C+编程规范自动检查工具,它内置了800多条业界规则,同时可以图形化地定制自己的规则,C+Te

3、st进行静态测试(自动编程规范检查)有以下优点:1. PatternMatching(自动代码走查)2. 内置800多条业界有名的C/C+规则(大量规则来自于多家世界著名电信公司的编程规范,以及世界权威的编程规范资料),可实现自动的图形化代码编程规范检查3使用RuleWizard图形化建立自定义代码规则的功能。客户可以很方便建立并保存一整套自己的代码编程规范(团队经验),从而保证团队经验不会因为人员变动而流失。与此同时避免了编程人员为了保存团队的代码编程规范而浪费大量时间人工编写scriptBugDetective(FlowAnalysis)4.HotSpot技术(“热点”技术)。C+Test

4、通过自带的“热点”包,用回溯的方式自动模拟运行程序中的执行路径,从而精确高速地找到程序存在问题的位置;例如,我们不允许程序中存在“/0”的运算部分,由此凡是程序中“/var”的部分都有可能因为var是0而造成程序逻辑错误(其中“/var”的型态就称为程序中的“热点”),此时,C+Test会自动搜索程序中所有“/var”的运算型态,并回溯运行程序中的执行路径,找到所有致使var变成0的路径,从而精确地找到程序中的错误。2. 定制规则C+Test内置了300多个静态测试项,一般的情况下其实也就够用了。但是如果有特殊的测试要求,动辄几十K的代码,用眼睛看,脑子想,太辛苦,也不“安全。如果我们用C+T

5、est图形化的RuleWizard,结合公司的编码规范来制定规则,一来方便,高效,二来可以节约人工检查所带来的不必要的成本oRule的创建有2种方式,一种是手工写规则,让RuleWizard去帮你生成规则(最好别用autocreate,因为C+Test的智能化还很欠缺)。我这里主要重点放在自己写规则方面,下面介绍基本步骤:2.1 C+Test的基本设置首先使用C+Test静态规则集检查必须要进行一些简单的设置新建工程:选择VS6.0或者VS.NET工程文件,或者打开一个已有的工程(是原来已经建立的C+Test工程,后缀名为*.cpf)配置工程,引入需要包含的头文件文件夹.商血Configura

6、tionsE曲U巒TiD谢日Name:CompletsArialysisAnalysisFlowAnalysisSettingsEnableCodingStandards,EnableUnitTestingUsenativetestcasesClose测试选项的筛选,EnableCodingStandards(静态测试),EnableUnitTesting(单元测试),选择静态测试,去掉单元测试的选项。2.2 默认规则C+Test内置了800多条规则包括EffectiveC+,Security等各个方面的C+规则,应该能够满足大多数公司编码规范,启用某某规则只要勾选checkbox即可。另外,

7、如果不会写规则的话,也可以参看默认的规则和C+Test的manual在ParasoftC+Testmanualsrulewizard文件夹下。2.3 制作规则首先介绍一下基本规则的制作方法RuleRuleCresrtioriAuto-CreateNodeSeleciiomsUH匹站七i_iii|-jlySimplebreakcasecatchcoHtiruedefaultdowhilereturnswitchtrywhileDictionary亡Q+CancelProperties:Description在出现的对话框中Dietionary选择C,C+,还有一个选项是C+Test般用于C+文本

8、规则的制作,RuleCreation选择ByNode,Auto-Create用于手动书写代码而自动生成规则,但是自动生成的规则往往不尽人意,所以一般不用NodeSelections选择if,因为此次书写的规则跟if有关,完成了点击ok.Erie野銅也wImHelpBC.C+-Integert.onatantReal.izintantStringConstantboQl.-CsritanteriuiriConstant-&Declarations尸rierdECJFunctionsE匚JParametersE匚JgriatilasEl&ExpreESjoriES匚JAEilgnmentS匚JBi

9、twise日&C.omparisoria!=ba=babLogicalMiscellaneousNumerical&GeneralFile一&NsrneSpacesnamespaceusing田匚IStatements田口Types以上制作的规则是在逻辑表达式中常量应该放=号的左边,这样可以避免漏写一个“=”号后造成分支判断出现永真或者永假式即:voidfoo()if(nFlag=0)/*Violation*/return(Ok);elsereturn(ERROR);以上条件判断永远只会走return(ERROR)这个分支。2.4 Rulewizard定义的基本组成部分ftirie-Wizar

10、ri-i,-*4-+*3bJibttLninn.rufc?|亠I口也iaOBrlj耳辭即0o1,SShortcutmrTfrLogicCtmptmertbNodeProprtiT】Cont!tJI谢f(TlEsTWftUiMWI.TRine(jejDemarcationlinebetweencommandsandnodeproNode:规则的基本组成部分,通过Node你可以很清楚的知道它的功能。如表达式a=b、变量的类型测试分为:parentNode:规则中的主分支Node或者次分支的主Node.内容可以是表式、变量、函数等childNode:规则的组成单元。Commands:用来在Node和

11、Nodes之间建立关联关系。形象一点就是点中一个Node然后右键显示出的快捷菜单的上半部分。如下图:介绍一下主要的CommandCollector:集合。这个概念更像数学中的集合而不是Java中的广义集合。满足一定条件的数据或者方法或者变量的全体。比如,所有被声明过的变量,如下图isDecl是用来返回前边的node是不是一个声明。那么body的membervariable返回了所有的包涵指定类型变量得语句(包括变量付值、声明判断等)那么这个图被理解为,所有不是声明得语句内使用的变量的集合。没有被声明的变量,如下图。这里的意思是所有作为声明语句的变量的集合。那么通常情况下,A集合和B集合应该是相

12、等的,也就是说所有被声明过的变量(B集合内容)应该都被使用/赋值/判断(A集合的内容)。NodeSet:Node对Node集合的处理。分为Union(合并)、Intersection(交叉)、Difference(差值,左差/右差)、Xor(异或)。如下图:BFunctionsanBody川Variabl&sifirnJ唏MlBodywtrVariables.SrrLirDifferenbe|3DeofJFlDecfJTMethod),这种方式主要用于一些规则中需要输出特殊的变量,而用RuleWizard中的CreateOutputDisplay无法实现。例如要输出某个Node的名字,只能通过

13、添加Python脚本来实现:2. 作为单独组件添加(右键单击Node,点CreateMethodNodeorCreateMethodBoolean),这种方式可以控制整个规则的行为,返回值0代表有效值,返回值1代表出错的情况。3.2 PythonMethodC+Test创建的PythonMethod可以有0个,1个或者2个参数,第一个参数的类型是NodeProvider,第二个参数的类型是RuleContext,以下PythonMethod是符合规范的:deffunction(node,context):deffunction(node):deffunction():当一个规则被创建时,它会匹

14、配源文件的上下文语法解释Tree,上面说的Node的参数NodeProvider,也就是对语法解释Tree包装出来的一个对象,我们就可以通过它来访问语法解释Tree的任何属性。而上面所说的RuleContext,你可以存储一些数据在它里面,而其他规则也可以访问这些数据,这意味着几条规则之间有一块共享区域,彼此之间可以通信。例如有些规范一条规则不能实现,需要多条规则结合起来才能实现,那么就要用到RuleContext.Python脚本书写的规则还有一下性质:1. PythonMethod的名字没有限制2. Booleanmethods的返回值0代表有效,1代表无效3. PythonMethod的

15、语法必须符合Python规范,如果创建的OutputMethod的语法有错误,则它的输出箭头会变为红色。4. PythonMethod修改后实时生效3.3 主要API模块为了使用Python脚本,C+Test提供了一系列的API,主要分为三大模块:1.NodeProvider,对Python上下文语法解释Tree的封装2.RuleContext,可以对当前规则的上下文进行访问。如:a.访问上下文中的容器,当前规则上下文中有ListA时,任何时候,我们都可以用context.getList(A),对集合A进行访问。b.生成出错信息,我们可以用context.report(Violationdet

16、ected),生成出错信息,改信息显示在C+Test的Message视窗中。3. EnforcerContext,跨规则的访问上下文,可以多条规则联合起来实现更强大的功能。以下Python脚本示例跨规则的访问:defsomePythonMethod(node,context):# invokeherethelowerlevertextrule:parent二context.getParentContext()result二parent.executeRule(./my_text.rule,node)# my_text.rulewasexecutedandtheresult# specifies

17、whetheranyviolationwasdetectedif1=result:# my_text.rulereportedviolationelse:# my_text.ruledidnotdetectanyviolations#主要用到函数executeRule(),该函数返回1代表RuleEnforcerContext检测当指定文件名的规则,返回0代表没有检测到指定文件名的规则。Python脚本的具体用法请参照ParasoftC+Testmanualsrulewizardpython_scripting_api.htm3.4 示例Modiy.EditCreateCreateCollac

18、tciLOutputCre:i+eLIethd1Boole:=ltlCreat已Az5已厂tionHodefa.GreateLogicCorriponerLt(globalFuiEsjiriDlerrientatiorlBody.C0nt63tt.DllEKjort(T/FDlllmport07F)Filun沏亡紛MasEllipEiECT/F)HassidCr/FjImplementation.sLmjlementation.WFIe匚onvareionOperitor(T/F)IsDaclCT/F)IaDefaultType(T/F?IsEij-tern(T/F)Islnline(T/F)

19、IsOpiratiY(T-/F)IsStaU=(T/F)IeTemulate(T/F)Lma(#)Nane(5).Parameter.ReturnTyje.以上用python脚本创建函数ConpareVarName来避免函数内有仅有以大小写区分的变量名,即:不允许出现仅依靠大小写进行区分的标识符。理由避免混淆,产生对程序理解和维护的困难。事例不正确的命名INT32i32ExtAttr=0;INT32i32Extattr=0;4总结使用自动工具进行编码规范的检查效率很高,而且能保证质量。C+Test的静态代码规则制作也比较容易,功能也很强大。唯一的不足可能就是,C+Test本身的运行速度稍微有点慢,而且比较占内存。(貌似是Java写的,呵呵)。总的来讲还是很不错的,值得推广和。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!