好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

软件复杂度与SourceMonitor.ppt

45页
  • 卖家[上传人]:人***
  • 文档编号:584250510
  • 上传时间:2024-08-30
  • 文档格式:PPT
  • 文档大小:8.93MB
  • / 45 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第2页汇汇报报内内容容一、软件复杂度概述一、软件复杂度概述二、圈复杂度介绍二、圈复杂度介绍 三、三、SourceMonitor 汇汇报报内内容容一、软件复杂度概述一、软件复杂度概述二、圈复杂度介绍二、圈复杂度介绍 三、三、SourceMonitor 1、起源与应用l成立于1976的McCabe  &  Associates公司开发出了McCabe  Cyclomatic Complexity Metric(McCabe圈复杂度)技术对软件进行结构测试lMcCabe复杂度是对软件结构进行严格的算术分析得来的,实质上是对程序拓扑结构复杂性的度量,明确指出了任务复杂部分lMcCabe复杂度能帮助工程师识别难于测试和维护的模块,已经成为评估软件质量的一个重要标准lMcCabe复杂度可以为软件开发过程中平衡成本、进度和性能提供指导 2、 McCabe复杂度分类McCabe复杂度复杂度圈复杂度基本复杂度模块设计复杂度设计复杂度集成复杂度行数全局数据复杂度局部数据复杂度病态数据复杂度规范化复杂度 (1)圈复杂度(Cyclomatic Complexity (v(G)) )l概念Ø圈复杂度是用来衡量一个模块判定结构的复杂程度,数量上表现为独立路径的条数。

      l计算方法Ø如果一个模块流程图有e条边n个节点,   它的圈复杂度v(G)=e-n+2v(G)=6-6+2=2123456 (2)基本复杂度(Essential Complexity (ev(G)) )l概念Ø基本复杂度用来衡量程序非结构化程度;Ø基本复杂度高意味着程序非结构化程度高,难以理解和模块化,软件质量和可维护性低l计算方法Ø将圈复杂度图中的结构化部分简化成一个点,计算简化以后流程图的圈复杂度就是基本复杂度l应用Ø当基本复杂度为1,这个模块是充分结构化的;Ø当基本复杂度大于1而小于圈复杂度,这个模块是部分结构化的;Ø当基本复杂度等于圈复杂度,这个模块是完全非结构化的 (3)模块设计复杂度(Module Design Complexity (iv(G)) )l概念Ø模块设计复杂度用来衡量模块和其他模块的调用关系Ø软件模块设计复杂度高意味模块耦合度高,这将导致模块难于隔离、维护和复用l计算方法Ø模块设计复杂度是从模块流程图中移去那些不包含调用子模块的判定和循环结构后得出的圈复杂度Ø模块设计复杂度不能大于圈复杂度,通常是远小于圈复杂度l应用Ø衡量模块对其下层模块的支配作用;Ø衡量一个模块到其子模块进行集成测试的最小数量;Ø定位可能多余的代码;Ø是设计复杂度(S0)和集成复杂度(S1)计算的基础。

      (4)设计复杂度(Design Complexity (S0) )l概念Ø设计复杂度以数量来衡量程序模块之间的相互作用关系Ø高设计复杂度的系统意味着系统各部分之间有着复杂的相互关系,这样系统将难以维护l计算方法ØS0是程序中所有模块设计复杂度之和,计算公式如下:l应用Ø提供了系统级模块设计复杂度的概况,不反映独立模块的内部情况;Ø指出一个模块整体的复杂度,反映了每个模块和其内部模块的控制关系;Ø有助于集成复杂度的计算 (5)集成复杂度(Integration Complexity (S1) )l概念Ø集成复杂度是为了防止错误所必须进行的集成测试的数量表示,另一种说法是程序中独立线性子树的数目,一棵子树是一个有返回的调用序列l计算方法ØS1的计算公式:S1=S0-N+1, N是程序中模块的数目l应用Ø有助于集成测试的实施;Ø量化集成测试工作且反映了系统设计复杂度;Ø有助于从整体上隔离系统复杂度 (6)行数(Number of Lines (nl) )l概念Ø行数是模块中总的行数,包括代码和注释l优点Ø计算简单;Ø与所用的高级程序设计语言类型无关;Ø指出了模块的行数(即模块的规模),规模小的模块易于理解和维护。

      (7)规范化复杂度(Normalized Complexity (nv) )l概念Ø规范化复杂度是圈复杂度除以行数l计算方法Ønv=v(G)/nll应用Ø定义那些有着显著判定逻辑密度的模块,这些模块相对于其他常见规范模块需要做更多的维护工作  (8)全局数据复杂度(Global Data Complexity (gdv(G)) )l概念及应用Ø全局数据复杂度量化了模块结构和全局数据变量的关系Ø说明了模块对外部数据的依赖程度Ø度量了全局数据的测试工作Ø描述了模块之间的耦合关系Ø反映潜在的维护问题Ø需要有McCabe Data (9)局部数据复杂度(Specified Data Complexity (sdv(G)) )l概念及应用Ø局部数据复杂度量化了模块结构和用户局部数据变量的关系Ø度量了局部数据的测试工作Ø量化了每个模块中相应数据对模块控制结构的影响Ø需有McCabe Data (10)病态数据复杂度(Pathological Complexity (pv(G)) )l概念Ø病态数据复杂度衡量一个模块包含的完全非结构化成份的程度,标出向循环内部跳入的问题代码,而这些部分具有最大的风险度,通常需要重新设计。

      l计算方法Ø所有的非结构部分除去向循环内跳入的结构,转化为线结构,病态复杂度就等于简化以后流程图的圈复杂度l优点Ø与所用的高级程序设计语言类型无关;Ø指出了可靠性的问题,降低了维护风险;Ø帮助识别极不可靠的软件 3、 McCabe复杂度用途l(1)作为测试的辅助工具ØMcCabe复杂性度量的结果等于完整覆盖测试的测试用例个数l(2)作为程序设计和管理指南Ø在软件开发过程中,提供一种简单的方式指出可能出问题的子程序Ø注意,McCabe度量数大的程序,不见得结构化就不好l(3)作为网络复杂性度量的一种方法ØHall和Preiser提出了一种组合网络复杂性度量方法,用于度量由多个程序按模块化原理建立的大型软件系统的复杂性公式如下:Ø式中C1,...,Ck是各个模块的复杂性;CN是网络复杂性;W1和W2为权值 汇汇报报内内容容二、圈复杂度介绍二、圈复杂度介绍 一、软件复杂度概述一、软件复杂度概述 三、三、SourceMonitor 1、 概念l圈复杂度(Cyclomatic Complexity (v(G)) )是用来衡量一个模块判定结构的复杂程度,数量上表现为独立路径的条数,即合理的预防错误所需测试的最少路径条数。

      l圈复杂度度量以软件的控制流图为基础l经验表明,程序的可能错误和高的圈复杂度有着很大关系, McCabe & Associates建议圈复杂度到10l过于复杂的模块容易出错,难于理解、测试、更正,所以应当在软件开发的各个阶段有意识地限制复杂度 2、 计算方法一l圈复杂度计算公式1:v(G)=e-n+2l其中,e为控制流图的边数,n为控制流图的节点数v(G)=10-10+2=212345679810 3、 计算方法二l圈复杂度计算公式2:v(G)=判定节点数+1l对于多分支的CASE结构或IF-ELSEIF-ELSE结构,要求必须统计全部实际的判定节点数,也即每个ELSEIF语句,以及每个CASE语句,都应该算为一个判定节点v(G)=1+1=2 4、 计算方法三l圈复杂度计算公式3:v(G)=Rl其中,R代表平面被控制流图划分成的区域数12345v(G)=R=512345678910v(G)=10-7+2=5 5、 计算方法总结l针对程序的控制流图计算圈复杂度V(G)时,最好还是采用公式v(G)=e-n+2;l针对模块的控制流图时,可以直接统计判定节点数,这样更为简单;l针对复杂的控制流图时,使用区域计算公式v(G)=R更为简单。

      6、 示例int foo(bool isOK){    const int ZERO = 0;    int* pInt = NULL;    if (isOk) {        pInt = &ZERO;    }    return *pInt;}l如果仅仅测试一种情况:foo(true); 结果是,测试通过,并具有100%的代码覆盖率但我们知道foo(false);就会失败l以上foo()的v(G)为2,所以至少需要2个单元测试路径1212435 7、 优点l指出极复杂模块,这样的模块也许可以进一步细化;l在开发过程中通过限制程序逻辑,降低出错几率;l帮助测试人员确定测试和维护对象;l度量测试计划,确定测试重点和测试区域;l与所用的高级程序设计语言类型无关 8、降低圈复杂度的方法——重构l概念Ø重构(Refactoring)就是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性l重构方法Ø重复代码或者相似代码提取为一个新的方法Ø将过长的方法按功能拆分成小的方法Ø将过大类的功能拆分成多个功能单一的小类l推荐书籍Ø《重构——改善既有代码的设计》Ø作者:Martin FowlerØ书中列出了长达70条的重构名录,提供了具体重构的方法和重构的技巧。

      将帮助开发人员一次一小步地修改代码,减少了开发过程中的风险 汇汇报报内内容容三、三、SourceMonitor 一、软件复杂度概述一、软件复杂度概述 二、圈复杂度介绍二、圈复杂度介绍 1、 基本介绍l软件大小:3.86MBl软件语言:英文l软件类别: 国外软件 / 编程工具l应用平台: Win2003/XP/2000/9Xl技术支持:l功能简介:利用SourceMonitor可以为C++、C、C#、Java、Delphi、Visual Basic和HTML的源代码文件测试代码数量和性能,最终结果可以描绘成图、输出打印 2、 主界面 3、 功能介绍l度量、记录和显示代码质量指标(metrics)Ømetrics:代码行数、注释行数、分支比例、注释比例、类定义个数、方法个数/类、平均语句数/方法、最大复杂度、最大调用深度、平均复杂度、函数个数Ø显示形式:数据、Kiviat Graph、Block Histograml提取代码复杂度信息,为代码重构提供指导l提示代码安全隐患,将问题解决在开发阶段l提高程序员代码质量和工作效率 4、 软件使用l(1)新建工程——选择语言 4、 软件使用l(2)新建工程——选择代码 4、 软件使用l(3)新建工程——工程命名 4、 软件使用l(4)新建工程——选择工程目录 4、 软件使用l(5)新建工程——检查点命名 4、 软件使用l(6)新建工程——新建工程完成 4、 软件使用l(7)导入代码 4、 软件使用l(8)检查代码——工程视图 4、 软件使用l(9)检查代码——检查点视图 4、 软件使用l(10)检查代码——方法视图 4、 软件使用l(11)检查代码——细节视图——检查点细节视图 4、 软件使用l(12)检查代码——细节视图——文件细节视图 4、 软件使用l(13)检查代码——图表视图——工程历史图表 4、 软件使用l(14)检查代码——图表视图——频率图 4、 软件使用l(15)检查代码——图表视图——Kiviat图 5、 工程示例l以NC源程序为例,介绍SourceMonitor软件的使用。

      点击阅读更多内容
      相关文档
      【全国硕士研究生入学统一考试政治】2020年考研政治真题.docx 【全国硕士研究生入学统一考试政治】2015年考研政治真题.docx 【全国硕士研究生入学统一考试政治】2010年考研政治真题.docx 【全国硕士研究生入学统一考试政治】1996年政治考研真题(理科)及参考答案.doc 【全国硕士研究生入学统一考试政治】2001年政治考研真题(理科)及参考答案.doc 【全国硕士研究生入学统一考试政治】2016年考研政治真题.docx 【全国硕士研究生入学统一考试政治】2000年政治考研真题(文科)及参考答案.doc 【全国硕士研究生入学统一考试政治】1997年政治考研真题(理科)及参考答案.doc 【全国硕士研究生入学统一考试政治】2007年考研政治真题.doc 【全国硕士研究生入学统一考试政治】1997年政治考研真题(文科)及参考答案.doc 【全国硕士研究生入学统一考试政治】2004年考研政治真题.doc 【全国硕士研究生入学统一考试政治】2003年考研政治真题.doc 【全国硕士研究生入学统一考试政治】2019年考研政治真题.docx 【全国硕士研究生入学统一考试政治】2009年考研政治真题.docx 【全国硕士研究生入学统一考试政治】2001年政治考研真题(文科)及参考答案.doc 【全国硕士研究生入学统一考试政治】2021年考研政治真题.doc 【全国硕士研究生入学统一考试政治】2014年考研政治真题.docx 【全国硕士研究生入学统一考试政治】2018年考研政治真题.docx 【全国硕士研究生入学统一考试政治】2008年考研政治真题.doc 【全国硕士研究生入学统一考试政治】2011年考研政治真题.docx
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.