Testbed静态测试使用指南V11Word文档下载推荐.docx
《Testbed静态测试使用指南V11Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Testbed静态测试使用指南V11Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。
1.5接口分析
接口分析检查以下内容:
1.实参和形参个数不匹配;
2.实参和形参类型不匹配;
3.函数参数定义的结构和调用的结构不一致。
1.6软件质量度量分析
对于软件开发工程师、项目负责人及高级管理者来说,软件质量的管理与监控是非常困难的且费时。
LDRATestbed很好地解决了这一问题,使得管理者很容易地收集正在开发的软件系统的相关信息并判断软件是否满足软件质量标准要求,从而达到对软件项目的质量跟踪与控制。
Testbed提供数据文件接口,用户可基于现行软件标准自行定义适合本系统或项目的软件质量模型。
静态分析的软件度量元和相应的说明见表1:
表1软件质量度量元说明
序号
度量元
指标要求
说明
1
函数代码行数
<
=200
函数包含的语句数。
2
注释度量
>
=20%
代码的有效注释率。
3
函数参数
=7
函数参数个数。
4
Goto语句
Goto语句数。
5
圈复杂度
=10
控制流图中边的数量与节点数量之间的差值加2。
6
基本复杂度
=4
圈复杂度与流程图中结构化子图的数量之间的差值;
基本复杂度高意味着非结构化程度高,难以模块化和维护。
7
LCSAJ密度
=20
LCSAJ密度是一个描述软件可维护性的概念,它是指当改变一行代码时,对其它线性代码顺序和跳转的影响程度,值越大说明影响的测试路径相对越多,因此系统可维护性越低。
8
控制流结点数
控制流结点数表示流程图中控制流相交的交点数。
9
基本结点数
=5
将流程图中的结构化部分简化成一个点,简化以后流程图的结点数是基本结点数。
10
扇入度量
调用本函数的上层函数的个数。
11
扇出度量
本函数调用下层函数的个数。
2使用Testbed进行编码规则的定制和检查
LDRATestbed可通过编辑编码规则文件cpen.dat/cppen.dat实现编码规则的定制,下面将具体介绍:
2.1确定测试需求
在测试需求分析阶段确定:
1.确定测试对象:
整个MSVC工程还是文件集合;
纯C文件、纯C++还是C/C++混合文件。
2.确定测试内容:
确定静态分析规则,可参考附录A所示静态分析推荐规则使用说明。
3.确定测试“类型”:
确定是进行击System分析还是Group分析(选择Group时,不对代码进行集成测试,只是采用批处理方式分析单个文件)。
2.2建立测试工程
1.启动Testbed,根据分析对象,选择测试工程类型。
如需对整个MSVC工程进行分析,选择CreateSetBasedUponMSVCv6Project;
如分析对象是一个或多个C、C++文件,选择Select/Create/DeleteSet…。
下面以在Set菜单下选择Select/Create/DeleteSet…选项为例进行说明。
2.在Select/CreateSet输入框中输入“Demo”,点击【Create】按钮
3.点击【System】按钮(选择Group时,不对代码进行集成测试,只是采用批处理方式分析单个文件)。
4.点击右上侧【Add】按钮,选择好要分析的文件,点击【Add】按钮后点【OK】按钮进行确认。
2.3定制代码分析规则
1.点击菜单栏中的Configure,在下拉菜单中点击StaticOptions选项,将会出现如下窗口,点击cpen.dat/cpppen.dat后的Edit按钮,按照提示编辑cpen.dat/cpppen.dat后。
若存在已编辑好的编码规则文件,可按旁边的浏览键直接指定该dat文件,则下面第3步可以省略。
2.编辑第2列,根据实际需求,将对应编码规则置“0”或“1”,置“0”代表该条编码规则无效,置“1”代表该条编码规则有效。
2.4配置Report选项
1.QualityReport配置
点击菜单栏中的Configure,在下拉菜单中点击QualityReportOptions选项,将会出现如下窗口,在ProgrammingStandardModel下拉框中选择“NoModel–allstandards”。
如分析的文件为C、C++混合类型,则在下图右侧所示下拉列表中分别选择一个.C和.CPP文件,选中对应文件后选择在ProgrammingStandardModel下拉框中选择“NoModel–allstandards”。
在OptionalConfiguration中ViolationSummaries选中“All”,根据需要选择ReportViolationsOnly(QualityReport只列出有违反的)。
2.MetricsReport配置
点击菜单栏中的Configure,在下拉菜单中点击MetricsReportOptions选项,将会出现如下窗口,根据测试需求配置metpen,dat及Kiviat.dat文件。
2.5分析执行及结果查看
1.点击菜单栏中的Analysis,在下拉菜单中点击SelectAnalysis,将会出现如下窗口,选择前3项,点击StartAnalysis按钮,开始进行静态分析。
2.静态分析结束后,点击菜单栏中的Individual/SystemResults,选择下拉菜单TextResults中的QualityReport(HTML),查看质量报告。
3结果分析及测试报告编写
3.1质量度量信息的获取
度量度量信息可通过以下几种方式获取:
1.查看规则审查报告:
点击菜单栏中的IndividualResults/SystemResults,选择下拉菜单TextResults中的QualityReport(HTML)。
指标
查看位置
具体说明
在QualityReport(HTML)中的GlobalBasicInformation获取可执行代码行总数与注释行总数
注释行总数/(注释行总数+可执行代码行总数)
SystemResults菜单下选择TextResults子菜单中的QualityReport(HTML)
函数代码行超过200行
函数参数超过7个
使用goto语句
圈复杂度超过10
LCSAJ密度超过20
2.查看质量度量报告:
点击菜单栏中的IndividualResults/SystemResults,选择下拉菜单TextResults中的MetricsReport(HTML)。
MetricReport中
ComplexityMetrics
CyclomaticComplexity,
EssentialCyclomaticComplexity
Knots
EssentialKnots
LCSAJandUnreachability
MaximumLCSAJDensity
DataflowInformation
FanIn
FanOut
3.查看图形化报告:
点击菜单栏中的SystemResults,选择下拉菜单GraphicalResults中的StaticBarCharts。
SystemResults菜单下GraphicalResults子菜单中的StaticBarCharts
CyclomaticComplexity
以圈复杂度为例:
选择StaticBarCharts子菜单下的“EssentialCyclomaticComplexity”,弹出如下所示柱状图,在该界面,将Graph菜单下的ShowBarComponents选中,可查看函数基本圈复杂度具体信息。
3.2程序质量度量报告单
表2程序质量度量报告单
违反
个数
所在软件
具体描述
函数包含的语句数
代码的有效注释率
函数参数个数
Goto语句数
控制流图中边的数量与节点数量之间的差值加2
圈复杂度与流程图中结构化子图的数量之间的差值
LCSAJ密度是一个描述软件可维护性的概念
控制流结点数表示流程图中控制流相交的交点数
调用本函数的上层函数的个数
本函数调用下层函数的个数
3.3静态分析质量报告单
报告单中列出的审查内容根据测试需求确定,其中部分度量指标在质量度量报告中会重复出现,此表可以不列出。
审查结果根据根据QualityReport确定。
表3静态分析质量报告单
审查项目
测试内容
审查结果
控制流分析
是否存在不可达代码
是[]否[]
是否存在循环条件不可达
函数是否包含无限循环(无终止条件)
是否存在无限循环结构
在循环语句中是否有多个控制变量
是否存在浮点相等比较
函数是否存在多个入口
函数是否存在多个出口
数据流分析
是否存在标识名重用
是否存在没使用的函数参数
函数不是所有的路径上都有返回值
函数的实参是全局变量
代码中有多余变量
变量未赋初值就引用
参数与期望的作用不匹配
给值传递参数赋值
标识符超过31个字符
函数定义无相应原型
存在潜在的无限循环
指针在使用之前没有进行非空检查
往没有打开过的文件中写
文件指针在退出时没有关闭
表达式分析
表达式中使用{}
存在数组下标越界
存在被零除
SWITCH语句是否为空
SWITCH语句只含DEFAULT情况
SWITCH语句缺少DEFAULT
CASE语句缺少BREAK
返回类型为VOID的函数出现在表达式中
函数中是否存在Return语句为空
存在混合运算
对指针进行逻辑比较
在逻辑表达式中使用赋值操作符
表达式中使用空函数
接口分析
实参和形参个数不匹配(C++无)
实参和形参类型不匹配
函数参数定义的结构和调用的结构不一致
其它
循环体缺少括弧
函数参数列表为空
函数参数列表申明不一致
基本模块中使用#define定义
SWITCH结构含多个(大于1)DEFAULT
函数返回类型不一致
函数和函数的原型的返回不一致
函数和函数的原型的形参不一致
附录A:
静态分析推荐规则使用说明
Line
级别
对应英文规则
362
M
存在不可达代码
#UnreachableCodefound.
184
#Constructleadstoinfeasiblecode.
185
C
存在循环条件不可达
#Infeasibleloopconditionfound.
40
函数包含无限循环(无终止条件)
#Procedurecontainsinfiniteloop.
27
存在无限循环结构
#Infiniteloopused.
204
在循环语句中有多个控制变量
#Morethanonecontrolvariableforloop.
78
存在浮点相等比较
#Equalitycomparisonoffloatingpoint.
13
#gotodetected.
58
函数存在多个入口
#Procedurehasmorethanoneentrypoint
59
函数存在多个出口
#Procedurehasmorethanoneexitpoint
2
标识名重用
#Labelnamereused.
41
存在没使用的函数参数
#Unusedprocedureparameter.
42
#Functiondoesnotreturnavalueonallpaths.
43
#Actualparameterisalsoglobaltoprocedure.
44
#Variablesweredeclaredbutneverused.
45
#URdataflowanomaliesfound.
51
#Parametersdonotmatchexpectedactions.
54
#Attempttochangeparameterpassedbyvalue.
12
#Identifierexceeds***significantcharacters.
127
#Proceduredefinitionhasnoassociatedprototype.
137
#Potentiallyinfiniteloopfound.
361
#Pointernotcheckedfornullbeforeuse
380
#Attempttowritetounopenedfile
381
#notclosedonexit
192
表达式中的括号使用正确:
#Curlybracketsusedinexpression.
71
#Arrayboundexceeded.
264
#Divideby0found.
82
#Emptyswitchstatement.
83
#Switchcontainsdefaultonly.
72
#Nodefaultcaseinswitchstatement.
84
#SwitchCasenotterminatedwithbreak.AV193
86
#Voidprocedureusedinexpression.
88
#Functionwithemptyreturnexpression.
153
#Useofmixedmodearithmetic.
149
#Logicalcomparisonofpointers.
176
#Assignmentoperatorinbooleanexpression.
22
#Numberofparametersdoesnotmatch.
112
#Actualandformalparametersinconsistent.
151
#Parameterstructuremismatch.
#Nobracketstoloopbody(Testbed).
85
#Emptyparameterlisttoprocedure/function.
188
#Parameterlistdeclarationsareinconsistent.
147
##defineusedinablock.
392
#Switchhasmorethanonedefaultcase.
115
#Functionreturntypeinconsistent.
116
#Functionandprototypereturninconsistent.
117
#Functionandprototypeparameterinconsistent.
19
#Morethan***parametersinprocedure.
36
#CyclomaticComplexitymeasuregreaterthan***.
199
#LCSAJdensityexceeds***.
5
#Procedureexceeds***reformattedlines
注:
M的优先级高于C。