《质量评审培训课件46036.pptx》由会员分享,可在线阅读,更多相关《质量评审培训课件46036.pptx(52页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、质量评审设计评审单元测试测试验证测试管理代码评审质量评审质量评审质量评审质量评审质量评审特点质量评审特点优点优点复杂度分析复杂度分析代码评价度量代码评价度量代代码结码结构化化构化化简简LCSAJsLCSAJs质量模型质量模型质量评审能力质量评审能力检查多个代码复杂性度量元圈复杂度结点度量LCSAJ 控制流(测试路径)识别死代码和不可测试代码提供功能强大的结构化化简工具结构化程序验证 将你的代码化简到基本复杂度使用工业标准或自定义质量模型提供边界检查产生定量评估将所有结果总结成顶层的度量指标 清晰性/测试性/维护性提供直观的报告和代码可视化工具复杂性复杂性通常检查多余的复杂性是非常困难的程序的复
2、杂性并不可怕,但是多余的复杂性会引起软件出问题度量元度量元度量元是软件度量的基础,就象“米”是对长度的度量注意度量结果本身并不能直接就反应出质量好坏在质量评审中使用度量源元时,相互的关联是最重要的质量评审质量评审 代码评价度量代码评价度量清晰性清晰性清晰性清晰性系统的系统的可理解性可理解性如何如何可维护性可维护性可维护性可维护性软件的软件的可维护性可维护性如何?如何?可测试性可测试性可测试性可测试性对系统进行对系统进行测试需要多少测试需要多少工作?工作?复杂度度量复杂度度量控制流结点圈复杂度基本结点和基本圈复杂度循环嵌套函数扇入和扇出不可达性结点分类结点分类跳转分为下列几类:向上(向后)跳转向
3、下(向前)跳转结点根据跳转类型可以分为:下-下结点上-下结点上-上结点153421534215342引起结点的引起结点的C结构结构下列编程结构会引起结点:forwhileswitch可利用基本结点度量消除这些局限性引起引起结点的结点的Ada结构结构下列编程结构会引起结点:IF THEN ELSECASEGOTOExceptions可利用基本结点度量消除这些局限性圈复杂度圈复杂度从有向图G,计算圈复杂度V(G):V(G)=No.edges(边数)(边数)-No.nodes(节点数)(节点数)+2这样也正确:V(G)=No.predicates(判定节点数)(判定节点数)+1Case 结构(有N
4、种选择)是个例外,计算为 N 1V(G)=No.regions(区域数)(区域数)假如G是个连接的平面图圈复杂度圈复杂度例子12 条边9 个节点VG=12-9+2=5145236789123456789101112圈复杂度圈复杂度例子3 个判定结点计算为 4 case 计算为 2VG=4+1=53-111圈复杂度圈复杂度例子5 个区域VG=532451结点和圈复杂度结点和圈复杂度13245此有向图可表示为右边两种程序结构。1452315342V(G)=6-5+2=3V(G)=6-5+2=3Knots=4Knots=1结点和圈复杂度结点和圈复杂度圈复杂度和结点度量是互补的两个指标总之,程序结构化
5、度量量化了软件的属性圈复杂度用于表明程序复杂性结点度量用于表明程序实施时附加的复杂性 循环的复杂性度量循环的复杂性度量 由流程图研究源代码的循环结构用于度量复杂性和代码优化识别循环结构不被源代码结构所影响函数度量:函数入口和出口(扇入扇出)循环总数循环最大深度C+OO实现实现类的数目子类的数目每个类的方法继承深度数据成员的数据类外的函数调用其他Chidamber和Kemerer度量程序结构化验证程序结构化验证程序结构化验证程序结构化验证通过匹配程序结构模版执行结构化验证,模版使用源代码基本块的流程图表示使用检查工具自动运行检查下列结构:if-then-endifif-then-else-end
6、ifdo-whilewhilefor case可配置成识别其他结构程序结构化确认程序结构化确认由于使用非正确的结构形式,C 语言非常容易产生错误:需要 switch,case,default 和 break 语句的case语句if-then 语句也容易产生错误for 循环结构也容易产生错误SPV建议建议如果检测到非结构化的代码,这部分代码应该由程序员重新编写,这不包括为了解决某些特殊问题而有意使用的非结构化编程除了允许以修改非结构化程序会带来不必要的复杂为理由以外,建议管理者可以先怀疑任何非结构化编程的使用流程图看起来很混乱,并不总是意味着代码是非结构化的。绘制流程图的算法可能会误导程序是高度
7、复杂的通常程序的非结构化是由于代码内部错误引起的SPV流程图流程图SPV流程图,图形化地显示设计良好的程序结构中节点的化简过程代码评审流程图代码评审流程图 基本结点度量基本结点度量将所有的结构化的程序结构进行化简后,计算剩余的节点数就得到基本结点度量对于一个结构化的程序:基本结点数=0基本结点是非结构化程序引起的复杂性的度量基本圈复杂度基本圈复杂度某些结构化的编程结构会引起很高的圈复杂度这个局限性可用基本度量克服定义:EV(G)=V(G)-M这里M 是有唯一入口和出口节点的子图G的数目对于一个结构化的程序:EV(G)=1SPV度量总结度量总结如果一个模块通过SPV化简之后是结构化的,它有:基本
8、结点为0基本圈复杂度为1非结构化的程序含有很高的基本度量值 这两个度量是对代码中存在的结构缺陷的度量复杂度分析标准复杂度分析标准复杂度分析标准违反情况位于代码评审报告中用于强制源代码执行特定的质量特性1 C Cyclomatic Complexity greater than*2 C Procedure is not reducible in terms of intervals3 C Procedure contains essential knots4 C Procedure is not structured5 C Procedure contains infinite loopLCSA
9、Js线性代码序列及跳转线性代码序列及跳转LCSAJs维护性度量指标检测不可达代码识别不可测试(或不合理)代码强制用于欧洲安全苛刻性军用航空电子项目路径测试的覆盖度量基础最高级别的代码覆盖率度量LCSAJ三要素三要素根据定义和LDRA的代码重格式化策略,LCSAJs能描述成三要素的形式:1.起始点 一个线性代码序列2.结束点3.目标点LCSAJ起始点起始点LCSAJs开始于:程序的第一行可执行代码A的第一行可执行代码,A可以是:功能程序方法任何控制流跳转的目标行:标号else语句endif语句switch语句的子句循环函数调用的返回.LCSAJ跨度跨度LCSAJ跨度是程序中的最小分割,任何LCS
10、AJ的线型代码序列都完全包含在LCSAJ的跨度中LCSAJ跨度的第一行可以是程序的开始,或者是前面的LCSAJ序列不能到达的那一行LCSAJ跨度的终止行可以是程序的结束行,或者是控制流不能经过其下一行的代码行Span FINISH 82 else 1 -START 83 1 84 mess=Hello There;1 85 1 START 86 2 START 87 3 START 88 printf(%d%d%d%20sn,i,j,k,mess);4 FINISH 89 4 -START FINISH 90 1LCSAJ密度密度LCSAJ密度是维护性度量元如果某一行代码作了修改,LCSAJ密
11、度会告诉用户由于此代码修改影响到多少条LCSAJ如果密度越高,那么就越会降低对于所有的LCSAJ此改变都是正确的信心,因此必须增加需要的回归测试数目Code“LCSAJ”LinesDensitya=b2if2(a=x)21b=y;11print(“ok”);2不可达的不可达的LCSAJs如果从程序开始没有任何路径到达指定的代码行,那么代码将被标为不可达(或死代码)这种现象通常出现在紧跟着goto语句的代码行中,典型例子如右面最后一行代码不可达的 LCSAJs标记显示在下面的例子中 if I=0 then go to label:end if;FINISH 235 goto l6;2-236 z
12、=5;0 UNREACHABLE*237 z=9;0 UNREACHABLE*START 238 l6:1 239 z=10;1 FINISH 240 1不可测试的不可测试的LCSAJsLCSAJ是一路径片段,通常在它的线性代码序列中包含许多条件 如果LCSAJ的执行依赖于程序中的某些条件,而且永远不会满足这些条件,那么LCSAJ可能是不可测试的(因此是不可执行的)LCSAJ报告报告总结部分详细的代码清单:LCSAJs出现的地方源代码内的位置LCSAJ三要素列表 不可达的LCSAJs列表通过追踪局部的控制流分支,任何不可达的代码都会在报告中着重显示LCSAJ(路径测试)流程图(路径测试)流程图
13、 质量评审报告质量评审报告度量的解释度量的解释像大多数其他的物理度量一样,度量的大小并不能表明事物的好或者坏通常认为最好要保证函数符合这样的度量,这增加了程序的可读性和可维护性质量评审报告质量评审报告显示复杂度度量和源代码的信息 显示函数级别的复杂度度量和整体源代码的复杂度度量 许多结果也能够以图形化的方式显示可用的度量包括:圈复杂度度量源代码基本块结点度量 函数的入口出口循环数目和嵌套深度程序结构化验证质量评审报告质量评审报告质量评审质量评审-质量模型质量模型质量评审报告质量评审报告Reformatted Code Information for File Total reformatted
14、 Lines,Total comments in ref.Code,Executable ref.Lines,Non-executable ref.Lines Number of Procedures,Total source Lines,Expansion Factor.Comments Associated with Procedures(%of total)Total Comments,Comments in Headers,Comments in Declarations,Comments in Executable Code Blank Lines.Ratio of Comments
15、 to Executable lines(%)Total Comments/Exe.Lines,Header Comments/Exe.Lines,Declaration Comments/Exe.Lines,Code Comments/Exe.Lines Halsteads Metrics Total Operators,Total Operands,Unique Operators,Unique Operands Vocabulary,Length,Volume.LCSAJ and Unreachability Total LCSAJs,Reachable LCSAJs,Unreachab
16、le LCSAJs,Maximum LCSAJ Density Unreachable Lines,Unreachable Branches.File Based C+OO Metrics Total Structured Types Declared,Total Objects Created.Class Level C+OO Metrics Objects Created,Number of Data Members,Number of Members,Number of Child Classes Class Level OO Metrics-with Base Classes Tota
17、l Base Classes,Total Data Members,Total Members,Inheritance Depth Class Level OO Metrics-with Base Classes(2)质量评审报告质量评审报告包含质量评审产生的信息:复杂度标准违反情况详细报告中有每个函数的复杂度汇总表柱状图柱状图柱状图用于图形化显示“质量度量”的数目,包括:测试中的文件(单元/模块)Tbset系统范围的结果Kiviat图图图形化表示质量模型假如源代码满足质量标准,就显示为绿色假如源代码不满足质量标准,就显示为红色直观可视地表示与标准的一致性图示给出度量元达到的实际值Kiviat
18、图的解释图的解释每个度量元都显示在轴上度量元达到的值都绘制在轴上绿色的区域表明度量元的值在上边界和下边界之间超过边界的区域显示为红色可用的不同可用的不同Kiviat图图Kiviat图可用于:维护性测试性清晰性以整个程序显示或者以函数级别显示C+方面有面向对象的 Kiviats图质量评审总结质量评审总结结论:代码质量可以度量和查看代码评价度量中包含代码质量度量质量报告提供总体度量结果快速显示系统的复杂度自动生成有价值的软件质量度量文档化简工具帮助减小复杂性练练 习习使用.TestbedExamplesC_testbed_examplesTestrian目录下Testrian.c程序做复杂度分析和程序结构化化简等功能,查看质量报告、LCSAJ报告和图形化显示质量的结果谢谢观看/欢迎下载BY FAITH I MEAN A VISION OF GOOD ONE CHERISHES AND THE ENTHUSIASM THAT PUSHES ONE TO SEEK ITS FULFILLMENT REGARDLESS OF OBSTACLES.BY FAITH I BY FAITH