复杂度与SourceMonit.ppt

上传人:牧羊曲112 文档编号:5064544 上传时间:2023-06-01 格式:PPT 页数:45 大小:3.47MB
返回 下载 相关 举报
复杂度与SourceMonit.ppt_第1页
第1页 / 共45页
复杂度与SourceMonit.ppt_第2页
第2页 / 共45页
复杂度与SourceMonit.ppt_第3页
第3页 / 共45页
复杂度与SourceMonit.ppt_第4页
第4页 / 共45页
复杂度与SourceMonit.ppt_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《复杂度与SourceMonit.ppt》由会员分享,可在线阅读,更多相关《复杂度与SourceMonit.ppt(45页珍藏版)》请在三一办公上搜索。

1、软件复杂度与SourceMonitor,汇报内容,一、软件复杂度概述,二、圈复杂度介绍,三、SourceMonitor,汇报内容,一、软件复杂度概述,二、圈复杂度介绍,三、SourceMonitor,一、软件复杂度概述,1、起源与应用成立于1976的McCabe&Associates公司开发出了McCabe Cyclomatic Complexity Metric(McCabe圈复杂度)技术对软件进行结构测试。McCabe复杂度是对软件结构进行严格的算术分析得来的,实质上是对程序拓扑结构复杂性的度量,明确指出了任务复杂部分。McCabe复杂度能帮助工程师识别难于测试和维护的模块,已经成为评估软

2、件质量的一个重要标准。McCabe复杂度可以为软件开发过程中平衡成本、进度和性能提供指导。,一、软件复杂度概述,2、McCabe复杂度分类,McCabe复杂度,圈复杂度,基本复杂度,模块设计复杂度,设计复杂度,集成复杂度,行数,全局数据复杂度,局部数据复杂度,病态数据复杂度,规范化复杂度,一、软件复杂度概述,(1)圈复杂度(Cyclomatic Complexity(v(G))概念圈复杂度是用来衡量一个模块判定结构的复杂程度,数量上表现为独立路径的条数。计算方法如果一个模块流程图有e条边n个节点,它的圈复杂度v(G)=e-n+2。,v(G)=6-6+2=2,1,2,3,4,5,6,一、软件复杂

3、度概述,(2)基本复杂度(Essential Complexity(ev(G))概念基本复杂度用来衡量程序非结构化程度;基本复杂度高意味着程序非结构化程度高,难以理解和模块化,软件质量和可维护性低。计算方法将圈复杂度图中的结构化部分简化成一个点,计算简化以后流程图的圈复杂度就是基本复杂度。应用当基本复杂度为1,这个模块是充分结构化的;当基本复杂度大于1而小于圈复杂度,这个模块是部分结构化的;当基本复杂度等于圈复杂度,这个模块是完全非结构化的。,一、软件复杂度概述,(3)模块设计复杂度(Module Design Complexity(iv(G))概念模块设计复杂度用来衡量模块和其他模块的调用关

4、系。软件模块设计复杂度高意味模块耦合度高,这将导致模块难于隔离、维护和复用。计算方法模块设计复杂度是从模块流程图中移去那些不包含调用子模块的判定和循环结构后得出的圈复杂度模块设计复杂度不能大于圈复杂度,通常是远小于圈复杂度。应用衡量模块对其下层模块的支配作用;衡量一个模块到其子模块进行集成测试的最小数量;定位可能多余的代码;是设计复杂度(S0)和集成复杂度(S1)计算的基础。,一、软件复杂度概述,(4)设计复杂度(Design Complexity(S0))概念设计复杂度以数量来衡量程序模块之间的相互作用关系高设计复杂度的系统意味着系统各部分之间有着复杂的相互关系,这样系统将难以维护。计算方法

5、S0是程序中所有模块设计复杂度之和,计算公式如下:应用提供了系统级模块设计复杂度的概况,不反映独立模块的内部情况;指出一个模块整体的复杂度,反映了每个模块和其内部模块的控制关系;有助于集成复杂度的计算。,一、软件复杂度概述,(5)集成复杂度(Integration Complexity(S1))概念集成复杂度是为了防止错误所必须进行的集成测试的数量表示,另一种说法是程序中独立线性子树的数目,一棵子树是一个有返回的调用序列。计算方法S1的计算公式:S1=S0-N+1,N是程序中模块的数目应用有助于集成测试的实施;量化集成测试工作且反映了系统设计复杂度;有助于从整体上隔离系统复杂度。,一、软件复杂

6、度概述,(6)行数(Number of Lines(nl))概念行数是模块中总的行数,包括代码和注释。优点计算简单;与所用的高级程序设计语言类型无关;指出了模块的行数(即模块的规模),规模小的模块易于理解和维护。,一、软件复杂度概述,(7)规范化复杂度(Normalized Complexity(nv))概念规范化复杂度是圈复杂度除以行数。计算方法nv=v(G)/nl应用定义那些有着显著判定逻辑密度的模块,这些模块相对于其他常见规范模块需要做更多的维护工作。,一、软件复杂度概述,(8)全局数据复杂度(Global Data Complexity(gdv(G))概念及应用全局数据复杂度量化了模块

7、结构和全局数据变量的关系说明了模块对外部数据的依赖程度度量了全局数据的测试工作描述了模块之间的耦合关系反映潜在的维护问题需要有McCabe Data,一、软件复杂度概述,(9)局部数据复杂度(Specified Data Complexity(sdv(G))概念及应用局部数据复杂度量化了模块结构和用户局部数据变量的关系度量了局部数据的测试工作量化了每个模块中相应数据对模块控制结构的影响需有McCabe Data,一、软件复杂度概述,(10)病态数据复杂度(Pathological Complexity(pv(G))概念病态数据复杂度衡量一个模块包含的完全非结构化成份的程度,标出向循环内部跳入的

8、问题代码,而这些部分具有最大的风险度,通常需要重新设计。计算方法所有的非结构部分除去向循环内跳入的结构,转化为线结构,病态复杂度就等于简化以后流程图的圈复杂度。优点与所用的高级程序设计语言类型无关;指出了可靠性的问题,降低了维护风险;帮助识别极不可靠的软件。,一、软件复杂度概述,3、McCabe复杂度用途(1)作为测试的辅助工具McCabe复杂性度量的结果等于完整覆盖测试的测试用例个数。(2)作为程序设计和管理指南在软件开发过程中,提供一种简单的方式指出可能出问题的子程序。注意,McCabe度量数大的程序,不见得结构化就不好。(3)作为网络复杂性度量的一种方法Hall和Preiser提出了一种

9、组合网络复杂性度量方法,用于度量由多个程序按模块化原理建立的大型软件系统的复杂性。公式如下:式中C1,.,Ck是各个模块的复杂性;CN是网络复杂性;W1和W2为权值,汇报内容,二、圈复杂度介绍,一、软件复杂度概述,三、SourceMonitor,二、圈复杂度介绍,1、概念圈复杂度(Cyclomatic Complexity(v(G))是用来衡量一个模块判定结构的复杂程度,数量上表现为独立路径的条数,即合理的预防错误所需测试的最少路径条数。圈复杂度度量以软件的控制流图为基础。经验表明,程序的可能错误和高的圈复杂度有着很大关系,McCabe&Associates建议圈复杂度到10。过于复杂的模块容

10、易出错,难于理解、测试、更正,所以应当在软件开发的各个阶段有意识地限制复杂度。,二、圈复杂度介绍,2、计算方法一圈复杂度计算公式1:v(G)=e-n+2。其中,e为控制流图的边数,n为控制流图的节点数。,v(G)=10-10+2=2,1,2,3,4,5,6,7,9,8,10,二、圈复杂度介绍,3、计算方法二圈复杂度计算公式2:v(G)=判定节点数+1。对于多分支的CASE结构或IF-ELSEIF-ELSE结构,要求必须统计全部实际的判定节点数,也即每个ELSEIF语句,以及每个CASE语句,都应该算为一个判定节点。,v(G)=1+1=2,二、圈复杂度介绍,4、计算方法三圈复杂度计算公式3:v(

11、G)=R。其中,R代表平面被控制流图划分成的区域数。,1,2,3,4,5,v(G)=R=5,1,2,3,4,5,6,7,8,9,10,v(G)=10-7+2=5,二、圈复杂度介绍,5、计算方法总结针对程序的控制流图计算圈复杂度V(G)时,最好还是采用公式v(G)=e-n+2;针对模块的控制流图时,可以直接统计判定节点数,这样更为简单;针对复杂的控制流图时,使用区域计算公式v(G)=R更为简单。,二、圈复杂度介绍,6、示例,int foo(bool isOK)const int ZERO=0;int*pInt=NULL;if(isOk)pInt=,如果仅仅测试一种情况:foo(true);结果是

12、,测试通过,并具有100%的代码覆盖率。但我们知道foo(false);就会失败。以上foo()的v(G)为2,所以至少需要2个单元测试路径。,1,2,1,2,4,3,5,二、圈复杂度介绍,7、优点指出极复杂模块,这样的模块也许可以进一步细化;在开发过程中通过限制程序逻辑,降低出错几率;帮助测试人员确定测试和维护对象;度量测试计划,确定测试重点和测试区域;与所用的高级程序设计语言类型无关。,二、圈复杂度介绍,8、降低圈复杂度的方法重构概念重构(Refactoring)就是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护

13、性。重构方法重复代码或者相似代码提取为一个新的方法将过长的方法按功能拆分成小的方法将过大类的功能拆分成多个功能单一的小类推荐书籍重构改善既有代码的设计作者:Martin Fowler书中列出了长达70条的重构名录,提供了具体重构的方法和重构的技巧。将帮助开发人员一次一小步地修改代码,减少了开发过程中的风险。,汇报内容,三、SourceMonitor,一、软件复杂度概述,二、圈复杂度介绍,三、SourceMonitor,1、基本介绍软件大小:3.86MB软件语言:英文软件类别:国外软件/编程工具应用平台:Win2003/XP/2000/9X技术支持:功能简介:利用SourceMonitor可以为

14、C+、C、C#、Java、Delphi、Visual Basic和HTML的源代码文件测试代码数量和性能,最终结果可以描绘成图、输出打印,三、SourceMonitor,2、主界面,三、SourceMonitor,3、功能介绍度量、记录和显示代码质量指标(metrics)metrics:代码行数、注释行数、分支比例、注释比例、类定义个数、方法个数/类、平均语句数/方法、最大复杂度、最大调用深度、平均复杂度、函数个数显示形式:数据、Kiviat Graph、Block Histogram提取代码复杂度信息,为代码重构提供指导提示代码安全隐患,将问题解决在开发阶段提高程序员代码质量和工作效率,三、

15、SourceMonitor,4、软件使用(1)新建工程选择语言,三、SourceMonitor,4、软件使用(2)新建工程选择代码,三、SourceMonitor,4、软件使用(3)新建工程工程命名,三、SourceMonitor,4、软件使用(4)新建工程选择工程目录,三、SourceMonitor,4、软件使用(5)新建工程检查点命名,三、SourceMonitor,4、软件使用(6)新建工程新建工程完成,三、SourceMonitor,4、软件使用(7)导入代码,三、SourceMonitor,4、软件使用(8)检查代码工程视图,三、SourceMonitor,4、软件使用(9)检查代码检查点视图,三、SourceMonitor,4、软件使用(10)检查代码方法视图,三、SourceMonitor,4、软件使用(11)检查代码细节视图检查点细节视图,三、SourceMonitor,4、软件使用(12)检查代码细节视图文件细节视图,三、SourceMonitor,4、软件使用(13)检查代码图表视图工程历史图表,三、SourceMonitor,4、软件使用(14)检查代码图表视图频率图,三、SourceMonitor,4、软件使用(15)检查代码图表视图Kiviat图,三、SourceMonitor,5、工程示例以NC源程序为例,介绍SourceMonitor软件的使用。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号