- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
软件度量:软件结构度量
第四章 软件结构度量方法
4.1 基础知识
早期软件度量学和当时面向功能分解的设计方法相联系,多以模块度量为主。
面向过程的程序设计,影响软件质量的主要因素:耦合性、内聚性、复杂性、
模块化及规模大小。
利用软件模块结构图进行分析,可以从以下方面度量:
模块间传递数据量的最大值
模块间传递数据量的平均值
模块间传递数据量的总数
模块间公共数据数目
模块扇入、扇出平均值和最大值
模块条件调用、循环调用数目
最大深度(层数)
一般认为设计良好的软件产品用其内部结构来描述其特点。软件内部结构属
性包括模块性、耦合、内聚、复杂度、信息流、重用度等。如果能够对这些属性
进行度量,就能够找出软件中难于实现、测试与维护的部分。
4.2 结构度量的类型
结构会影响到设计、编码和测试的时间与工作量、维护成本以及复杂性。
主要对三类结构进行度量:控制流结构、数据流结构、数据结构。
控制流 (Control Flow )解决的是各种指令在程序中的执行顺序问题,反映了
程序的迭代和循环性质。程序规模对一条指令只能进行一次计数,而控制流反映
出在程序在实际运行时可能会多次执行某条指令。
数据流 (Data Flow)能够在程序创建或处理某个数据项的过程中对其轨迹进
行跟踪。数据流度量描述了数据在与程序进行交互的行为。
数据结构 (Data Structure )涉及数据自身的组织问题,与程序无关。如果把
数据元素组织成表、队列、堆栈或者其他具有良好定义的结构,则程序实现时就
容易对创建、修改或删除数据的算法进行良好定义。数据结构能够反映出在编写
“用来处理数据”的程序时的难度以及定义“用来验证程序正确性”的测试用例
时的难度。有些情况下,程序的复杂性是由复杂的数据结构而不是复杂的控制流
或数据流结构引起的。
4.3 控制流结构
控制流度量的建模通常采用有向图 (Directed Graph )。
在有向图中,每个结点(或点)所对应的是一条程序语句,每段弧 (或有向
边)所表示的是从一条语句到另一条语句的控制流。这个有向图是控制流图
(Control-flow Graph )或流图(Flow Graph)。
McCabe 圈复杂性能够对控制流结构进行度量,有以下三种方法:
(1)用程序流图的圈数来测量程序的复杂性。(需要将程序流图的首尾结点
连起来)
(2 )通过V (G )= e – n +2 计算,其中e 是程序流图中的边数,n 是程序
流图中的结点数。
(3 )可以通过计算程序中的用于分支与循环判断的判定语句数量。
4.4 数据流结构
4.4.1 耦合
模块内的内聚 (Cohesion )与模块间的耦合 (Coupling )。
耦合:两个模块之间的相互依赖程度。因此耦合指的是模块对的一个属性,
而不是作为一个整体的设计属性。设计中模块的全集表示的是全局耦合(Global
Coupling ),全局耦合可以从可能的模块对中的耦合推导而来。
系统中有两个模块x 和y ,两个模块之间可能有6 种耦合关系:
(1) 无耦合关系R :x 和y 之间没有任何联系,即x 和y 完全独立;
0
(2 ) 数据耦合关系R :x 和y 通过参数产生联系,其中每个参数是一个数
1
据元素或者是一个由不含控制元素的同类数据项的组成的集合。这种
类型的耦合对模块之间的任何联系都是必须的;
(3 ) 标记耦合关系R :x 和y 把相同的记录类型当作一个参数。这种类型
2
的耦合可以使两个在其他方面不相关的模块相互依赖;
(4 ) 控制耦合关系R :x 向y 传递了一个参数,能够控制y 的行为。即传
3
递的参数是一个标志,如传递了1 或0 的值,用于控制y 中程序的执
行过程;
(5 ) 公共耦合关系R :x 和y 引用相同的全局数据。这种类型的耦合会使
文档评论(0)