文档库 最新最全的文档下载
当前位置:文档库 › 软件的复杂性度量方法概述

软件的复杂性度量方法概述

软件的复杂性度量方法概述
软件的复杂性度量方法概述

2.软件的复杂性度量方法概述

根据软件的生命周期,Halstead复杂性度量和McCabe圈复杂度度量都属于可以应用在软件测试阶段的度量技术。

在基于程序体积的复杂性度量算法中,最具影响力的是20世纪70年代由Halstead提出的软件科学度量理论[2]。Halstead从统计学和心理学的角度研究软件复杂性,把程序看成由可执行的代码行词汇(操作符和操作数)组成的符号序列。Halstead在其度量理论中采用一些基本的度量值来确定软件开发中的一些定量规律,这些度量值通常在程序产生之后得出,或者设计完成之后算出。Halstead的重要结论之一是:程序实际的Halstead长度值N可以由代码行词汇n算出。

McCabe于1976年指出:应该用程序流图的圈数(Cycloramic number)来测量程序的复杂性,并基于程序控制论和图论提出了经典的McCabe圈复杂性度量理论。McCabe控制流图是一种简化的程序流程图,如果把流程图中的每个基本框抽象为一个点,略去每个框的具体信息,就产生一个由结点和弧(或称为分支)组成的图,称为控制流图。控制流图是有向图,可用G = 表示,其中V 表示结点集合,代表程序流程图中的基本框;E表示有向边,代表程序流程图中的控制方向。图1则表示了一个典型程序及其相应的流程图:

A:InPut(Seore);

B:If Seore<45

C:Then Print(‘Fail,)

D:Else Print(‘Pass’)

E:If Seoer>80

F:Then Print(‘withdistinetion’)

G:End

图1 程序及其流程图

为了讨论的方便,以下给出图论中的几个术语定义:

强连通图:在有向图G中,任意两个结点x和y,都有一条从x到y的路径,反之亦然。

回路:指开始和终止于相同结点的路径。

圈:指一个回路,其中所有结点(不包括开始结点)最多只出现一次。

线性独立集:如果在一个集合中,任何一条路经都不是其他路径的线性组合,则称该集合为线性独立集。

圈的基集:即圈的最大线性独立集。在含有e条边和n个结点的图中,基集有e – n + 1个圈。

如果能够合理的编写程序,则总能够使控制流图中存在从开始结点(如图1中的结点A)到达图中的其他每个结点的路径。一般来说,控制流图不是强连通的,因为不可能从其较低的一些结点到达较高的一些结点,但是,如果程序结构中有一个包含整个程序的外循环,则存在一条从其中任意结点到开始结点的“出口→入口”弧(如图1中的弧GA),该弧使控制流图变成强连通的,因为:①从开始结点能够到达程序图中的任意结点;②从任意结点经“出口→入口”弧均可回到开始结点。

McCabe的圈复杂性度量就是考虑控制流图的圈的基集,因为在原始流图中加了一条边,所以对于一个流图为G的程序模块,如果G有e条边和n个结点,那么该程序模块的圈复杂度为:v(G) = e - n + 2。更简单地说,设d是G中的判定结点数,则v(G) = d + l。

软件工程的实践人员和研究人员一致认为:模块的圈数,即模块复杂度,与模块中所存在的软件错误数或缺陷数,以及为了发现并改正它们所需的时间之间存在着明显的联系。McCabe曾经指出:根据以往的经验,当一个模块的v超过10时,这个模块可能就会出问题。Grady和他的研究小组关于v的结论是:模块

中允许的最大圈数为15(Grady,1994)。Channel Tunnel铁路系统中的软件质量保证规格要求:如果模块的圈数超过20,则该模块不合格。

目前已提出的各种复杂性度量算法中,在软件工程界运用得比较多的是McCabe 的环计数和Halstead的软件科学度量法,我们称其为McCabe度量法和Halstead 度量法。下面我们将连同最古老的代码行数度量法一起分别对它们进行简单介绍。

代码行数度量法

代码行数度量法以程序的总代码行数作为程序复杂性的度量值。这种度量方法有一个重要的隐含假定是:书写错误和语法错误在全部错误中占主导地位。然而,由于这类错误严格来讲是私有的,不应把它们计入错误总数之中,在这种情况下,这种度量方法的前提就不存在。因而,代码行数度量法是一种很粗糙的方法,在实际应用中很少使用。

McCabe度量法

McCabe度量法以程序流程图的分析为基础,通过计算强连通的程序图中线性无关有向环的个数,建立复杂性的度量。其计算公式为:V(G)=m-n+p,其中V(G)是强连通有向图G中的环数;m是G中的弧数;n是G中的节点数;p是G 中分离部分的数目。

对于一个正常的程序来说,程序图总是连通的,即p=1。为了使之强连通,我们可以从出口点到入口点画一条虚弧。实际上,我们常常采用另一种计算方法来获得McCabe度量值,即对于单入口单出口模块(通常都属这种情况),我们只需计算程序中判断语句个数加1即可得V(G)值。McCabe度量法实质上是对程序控制流复杂性的度量,它并不考虑数据流,因而其科学性和严密性具有一定的局限性。

Halstead度量法

Halstead度量法通过计算程序中的运算符和操作数的数量对程序的复杂性加以度量。设n1表示程序中不同运算符的个数,n2表示程序中不同操作数的个数,N1表示程序中实际运算符的总数,N2表示程序中实际操作数的总数。令H 表示程序的预测长度,Halstead给出H的计算公式为:H=n1log2n1+n2log2n2;令N表示实际的程序长度,其定义为:N=N1+N2。Halstead的重要结论之一是:程序的实际长度N与预测长度非常接近。这表明即使程序还未编写完也能预先估算出程序的实际长度N。Halstead还给出了另外一些计算公式,包括:程序容量:V=N log2(n1+n2),程序级别:L=(2/n1) * (n2/N2),编制程序所用的工作量:E Λ=V/L,程序中的错误数预测值:B=N log2(n1+n2)/3000。

Halstead度量实际上只考虑了程序的数据流而没有考虑程序的控制流,因而也不能从根本上反映程序的复杂性。

需要说明一点的是,上述度量方法都是针对传统的结构化程序设计方法的。当将其应用到面向对象程序设计方法时,不再适用于其中的某些概念,如类、继承、封装和消息传递等。但在目前尚未找到专门针对面向对象的复杂性度量方法的情况下,这些传统的度量算法也能在一定程度上反映软件开发的复杂程度。

Tegarden等人就曾进行过研究。

软件度量总结(精)

软件度量总结 这次总结的结构比较简单,就是按照五个章节分别阐述了自己的理解。 一.软件度量的应用范围。 经过这一阶段的学习,我认为想要明白软件度量,首先要分清度量和测量的区别。度量具有前置性,它提供了一种定量研究软件问题的方法;测量具有实时性或后置性,主要集中在给度量提供数据或者处理数据的方法上。由于软件工程强烈的不确定性,使得软件工程的精确测量困难重重,但软件度量主要研究的是可能性的规律,通过概率和统计学的研究,寻找事物内在的规律。其并不具备 1+1=2的特征, 而是研究在多大可能性上这个结论是合理的,因为软件的主体是人,具有概率属性,设备和材料容易度量,但人很难度量。软件度量的主要作用是评估状况、跟踪进展情况、评价产品有效性和改进设计和过程的质量。定性分析可以提供迅速地判断能力,但定性分析终究需要定量分析的验证与支持,否则其结果很可能成为无目之本,出现错误。 软件度量的方法体系主要包括 5个方面:1. 项目度量,目的在于度量项目规模、成本、进度、顾客满意度等,辅助项目管理进行项目控制; 2. 规模度量,主要依靠经验和经验的模型,是决定项目成败的重要原因之一,是估算工作量、成本预算及策划项目进度的基础; 3. 成本度量, 4。产品度量,实质上是软件质量的度量,软件的质量由一系列质量要素组成,每个质量要素又由一些衡量标准组成,主要肚量方法是McCabe 复杂性度量法; 5,过程度量,对软件开发过程的个各方面进行度量,目的在于预测过程的未来属性,减少结果的偏差,主要包括成熟度度量(例如 CMMI, GJB5000A、管理度量(主要包括里程碑管理、风险度量等项目管理度量,审查度量、质量保证度量等质量管理度量,变更控制、版本管理度量等配置管理度量、生命周期度量三个大的方面。 不同层次的人员对软件度量有不同的需求。高级管理人员,如 CEO 、 COO ,关注点在上市时间、客户满意度、费用的节省等商业策略的组成部分上;中级管理层,如部门经理、总监等,则主要关注生产力、成本控制、效率等,他们更多的是着眼于

浅析软件质量指标度量

软件质量指标度量 V 1.0 2012.3

目录 1综述 (3) 1.1编写目的 (3) 1.2阅读指南 (3) 2软件质量指标 (4) 2.1需求功能点覆盖率 (4) 2.2用例执行覆盖率 (4) 2.3缺陷修复率(截至于**年*月*日) (5) 2.4缺陷遗留个数(截至于**年*月*日) (5) 2.5缺陷分布统计(模块缺陷率) (5) 2.6缺陷分布统计(严重缺陷率) (6) 2.7缺陷密度及收敛 (7) 3测试过程质量指标 (9) 3.1缺陷探测率 (9) 3.2有效缺陷率 (9) 3.1用例执行效率 (10) 3.2缺陷发现率 (10) 4交付质量指标 (12) 4.1加载回退率 (12) 4.2故障回退率 (12) 5版本说明 (13)

1综述 1.1 编写目的 本文档主要为测试经理、测试组长/测试人员、技术负责人、项目经理、开发人员等提供软件质量、测试质量、交付质量等衡量依据。通过不同指标的目标设定、过程跟踪、结果分析,为当期被测产品的质量提供可参考的数据,也为后续测试提供数据的基础积累,并作为制定方法流程的依据。 1.2 阅读指南 ●软件测试质量指标主要针对研发项目、商务项目被测产品出具数据 度量。 ●测试过程质量指标主要为测试经理、测试组长对测试人员的测试执 行质量出具数据度量。 ●交付质量主要为新需求的交付质量出具数据度量。 三者可单独使用,也可结合使用。

2软件质量指标 2.1 需求功能点覆盖率 【需求覆盖率】:计算测试用例总数之和除以与之一一对应的功能点数之和,主要查看是否有功能点遗漏测试的情况。 【公式】:∑测试用例数(个)/ ∑功能点(个) 说明:用例覆盖需求矩阵,一个需求对应多个功能点。 【数据来源】:《联通集中集团客户业务支撑系统销售管理用户需求说明书》《联通集中集团客户业务支撑系统销售管理需求跟踪矩阵》 【计算结果】需求覆盖率=113/8=14.13 2.2 用例执行覆盖率 【用例执行覆盖率】:计算测试用例执行总数除以与之一一对应的测试数之和,主要查看是否有测试用例执行遗漏或有效的情况。 【公式】:∑执行的测试用例个数(个)/ ∑测试用例个数(个)*100% 【数据来源】:《iSMS测试进度跟踪表》 【计算结果】:用例执行覆盖率=100%

软件工程简答题

1你认为一个系统分析员的理想训练和基础知识是什么?请说明理由。 答:系统分析员处在用户和高级程序员之间,负责沟通用户和开发人员的认识和见解,起着桥梁的作用。一方面要协助用户对所开发的软件阐明要求,另一方面还要与高级程序员交换意见,探讨用户所提要求的合理性以及实现的可能性。最后还要负责编写软件需求规格说明和初步的用户手册。 为能胜任上述任务,分析员应当具备如下的素质: (1) 能够熟练地掌握计算机硬、软件的专业知识,具有一定的系统开发经验。 (2) 善于进行抽象的思维和创造性的思维,善于把握抽象的概念,并把它们重新整理成为各种逻辑成分,并给出简明、清晰的描述。 (3) 善于从相互冲突或混淆的原始资料中抽出恰当的条目来。 (4) 善于进行调查研究,能够很快学习用户的专业领域知识,理解用户的环境条件。 (5) 能够倾听他人的意见,注意发挥其它人员的作用。 (6) 具有良好的书面和口头交流表达能力。 2可行性研究主要研究哪些问题?试说明之 可行性研究主要做4个方面的研究: ?经济可行性:进行成本∕效益分析。从经济角度判断系统开发是否“合算”。 ?技术可行性:进行技术风险评价。从开发者的技术实力、以往工作基础、问题的复杂性等出发,判断系统开发在时间、费用等限制条件下成功的可能性。 ?法律可行性:确定系统开发可能导致的任何侵权、妨碍和责任。 ?方案的选择:评价系统或产品开发的几个可能的候选方案。最后给出结论意见。 3如何理解模块独立性?用什么指标来衡量模块独立性? 解答: 如果两个模块互相独立,那么对其中一个模块进行编码、测试或修改时可以完全不考虑另一个模块对它的影响。一般采用两个准则度量模块独立性。即模块间的耦合和模块的内聚。低耦合高内聚。 4 PAD图的特点是什么? 解答:问题分析图(problem analysis diagram),1973年由日本日立公司发明。它用二维树形结构的图来表示程序的控制流,将这种图翻译成程序代码比较容易。下图给出PAD图的基本符号。 5用PDL表示的程序结构一般有哪几种? 解答:过程设计语言(Problem Design Language,简称PDL),也称程序描述语言(Problem Descripition Language),又称为伪码。它是一种用于描述算法设计和处理细节的语言。 用PDL表示的程序结构一般有以下几种:

浅谈软件系统可靠性

浅谈软件系统可靠性 1 概述 近年来,随着计算机在军用与民用产品上的应用日益增多,软件缺陷所引发的产品故障,甚至灾难性事故也越来越严重,软件故障已成为高新技术产品发展的瓶颈。在这种情况下,一旦计算机系统发生故障,则其效益就会大幅度地消减,甚至完全丧失,从而使社会生产和经济活动陷入不可收拾的混乱状态。因此可以说,计算机系统的高可靠性是实现信息化社会的关键。 计算机系统硬件可靠性方面已有六十余年的发展历史,冗余技术、差错控制、故障自动检测、容错技术和避错技术等可靠性设计技术已经成熟。相比之下,软件可靠性的研究只有三十几年的发展历史,加上软件生产基本上仍处于作坊式的手工制作,其提高软件可靠性的技术与管理措施还处于十分不完善的状况。20 世纪70 年代末至80 年代初,软件可靠性的研究集中于对软件可靠性模型进行比较和选择。90 年代以来,软件可靠性研究工作进展较快,主要集中在软件可靠性设计、软件可靠性测试与管理以及软件可靠性数据的收集这三个方面。 2 软件可靠性的基本概念 2.1 软件可靠性的定义 1983年,美国IEEE计算机学会软件工程技术委员会对软件可靠性的定义如下: a)在规定的条件下,在规定的时间内,软件不引起系统失效的概率,该概率是系统输入和系统使用的函数,也是软件中存在的错误的函数;系统输入将确定是否会遇到已存在的错误。 b)在规定的时间周期内,在所述条件下程序执行所要求的功能的能力。 软件可靠性定义中提到的“规定的条件”和“规定的时间”,在工程中有重要的意义。 定义中的“时间”有3种度量。第一种是日历时间,指日常生活中使用的日、周、月和年等计时单元;第二种是时钟时间,指从程序运行开始到运行结束所用的时、分、秒;第三种是执行时间,指计算机在执行程序时实际占用的CPU 时间。 定义中所指的“条件”,是指环境条件,包括了与程序存储、运行有关的计算机及其操作系统。 2.2 影响软件可靠性的主要因素 软件可靠性表明了一个程序按照用户的需求和设计的目标,执行其功能的正确程度。这要求一个可靠的程序应是正确的、完整的、一致的和健壮的。软件可靠性的决定因素是与输入数据有关的软件差错,正是因为软件中的差错引起了软件故障,使软件不能满足需求。影响软件可靠性的因素主要包括: 1、软件开发的支持环境; 2、软件的开发方法;

软件工程第十一章

11.1 概述 11.1.1 软件质量的定义 软件质量定义为: (1) 与所确定的功能和性能需求的一致性。 (2) 与所成文的开发标准的一致性。 (3) 与所有专业开发的软件所期望的隐含特性的一致性。 11.1.2 软件质量的度量和评价 影响软件质量的因素可以分为两大类: (1) 可以直接度量的因素,如单位时间内千行代码(KLOC)中产生的错误数。 (2) 只能间接度量的因素,如可用性或可维护性。 在软件开发和维护的过程中,为了定量地评价软件质量,必须对软件质量特性进行度量,以测定软件具有要求质量特性的程度。

11.1.3 软件质量保证 1. 什么是软件质量保证 软件的质量保证就是向用户及社会提供满意的高质量的产品,确保软件产品从诞生到消亡为止的所有阶段的质量的活动,即确定、达到和维护需要的软件质量而进行的所有有计划、有系统的管理活动。 2. 质量保证的策略 质量保证策略的发展大致可以分为以下三个阶段: (1) 以检测为重。产品制成后才进行检测,这种检测只能判断产品的质量,不能提高产品质量。 (2) 以过程管理为重。把质量保证工作重点放在过程管理上,对制造过程的每一道工序都进行质量控制。 (3) 以新产品开发为重。 3. 质量保证的主要任务 (1) 正确定义用户要求。 (2) 技术方法的应用。 (3) 提高软件开发的工程能力。 (4) 软件的复用。 (5) 发挥每个开发者的能力。 (6) 组织外部力量协作。

(7) 排除无效劳动。最大的无效劳动是因需求规格说明有误、设计有误而造成的返工。 (8) 提高计划和管理质量。 4. 质量保证与检验 软件质量必须在设计和实现过程中加以保证。 11.2 质量度量模型 11.2.1 McCall质量度量模型 这是McCall等人于1979年提出的软件质量模型。针对面向软件产品的运行、修正、转移,软件质量概念包括11个特性,其定义如下: (1) 面向软件产品操作。 (2) 面向软件产品修改。 (3) 面向软件产品适应。 11.2.2 ISO的软件质量评价模型 软件质量度量模型由三层组成。 11.3 软件复杂性 11.3.1 软件复杂性的基本概念 软件复杂性度量的参数很多,主要有: (1) 规模,即总共的指令数,或源程序行数。 (2) 难度,通常由程序中出现的操作数的数目所决定的量来表示。 (3) 结构,通常用于程序结构有关的度量来表示。 (4) 智能度,即算法的难易程度。 软件复杂性主要表现在程序的复杂性。程序的复杂性主要指模块内程序的复杂性。它直接关联到软件开发费用的多少、开发周期长短和软件内部潜伏错误的多少。同时它也是软件可理解性的另一种度量。

软件开发度量及考核方法精修订

软件开发度量及考核方 法 集团标准化工作小组 #Q8QGGQT-GX8G08Q8-GNQGJ8-MHHGN#

本人觉得如果要提高软件开发人员的开发质量,必须有相应的考核制度,有了制度后才能推动开发人员想方设法改善自已的开发质量。虽然目前很多公司有这方面的绩效考核,但是大多数没有对软件开发的过程进行细粒度的度量,所以不能依据有效的度量数据来考核开发人员的工作绩效,大部份只是凭考核人主观意志来考核,不能形成对被考核人有效的说服力。以下文档是本人根据以前经验和相关的资料所编写的度量方法和考核方法,希望能对公司改善考核制度有用。由于时间有限,有不足之处,请各位仁兄多提意见,谢谢! 1 目的 对软件开发的过程所产生的软件项的质量和过程进行定量的评价,用评价的结果指导软件的开发过程,不断地提高软件开发质量水平,并依据度量记录来考核软件开发人员的工作绩效。 2 软件项包括 1)技术文档:参照公司"软件工程产品集",所确定的配置项;主要包括:可行性分析报告、需求分析报告、软件功能规格说明、开发计划、质量计划、系统设计报告、测试文档、技术报告、用户手册、总结报告等; 2)计算机程序。 3 度量数据的来源 1)项目计划; 2)评审报告; 3)测试报告; 4)问题报告; 5)软件维护记录; 4 质量度量 度量指标 主要根据各类软件项检查表的检查指标来确定,例如,软件需求规格说明书检查表(见附录1),有10个检查指标,则根据具体项目检查侧重点不同,可从中选择相应的检查指标作为度量指标。 质量等级 1)软件项的质量等级的确定根据度量综合指标进行。 2)度量综合指标计算公式为:Total = ∑QiMi。 3)其中i=1,2,...n代表指标数量; 4)Q代表度量的指标; 5)M代表度量的指标Q在整个指标体系中所占的权重系数,对不同的开发项目可能不同,此系数根据开发的不同着重点给出。 度量指标权重系数表: 序号指标权重 1 指标1 权数1 2 指标2 权数2 3 指标3 权数3 4 指标4 权数4 5 指标5 权数5 加权平均分 6)质量评价:一般地,根据度量综合指标值,有以下评分标准。 质量评价计分标准表 序号得分质量评价 1 ~优质

计算机四级考试

全国计算机等级考试(四级)考试大纲 基本要求 ⒈具有计算机及其应用的基础知识。 ⒉熟悉计算机操作系统、软件工程和数据库的原理及其应用。 ⒊具有计算机体系结构、系统组成和性能评价的基础及应用知识。 ⒋具有计算机网络和通信的基础知识。 ⒌具有计算机应用项目开发的分析、设计和组织实施的基本能力。 ⒍具有计算机应用系统安全和保密性知识。 考试内容 一、计算机系统组成及工作原理 ⒈计算机系统组成:

⑴计算机的发展。 ⑵计算机的分类及应用。 ⑶计算机硬件结构。 ⑷主要部件功能。 ⑸计算机软件的功能与分类。 ⑹系统软件与应用软件。 ⒉计算机工作原理: ⑴计算机中数的表示。 ⑵运算器。 ⑶控制器。 ⑷存储器。

⑸输入与输出系统。 ⒊计算机的主要性能: ⑴计算机系统性能指标。 ⑵处理机指标。 ⑶存储容量能力。 ⑷I/O总线能力。 ⑸系统通信能力。 ⑹联机事务处理能力。 ⑺软件支持。 二、数据结构与算法 ⒈基本概念:

⑴数据结构的基本概念。 ⑵算法的描述与分析。 ⒉线性表: ⑴线性表的逻辑结构。 ⑵线性表的顺序存储结构。 ⑶线性表的链式存储结构。 ⒊数组: ⑴数组的定义与运算。 ⑵数组的顺序存储结构。 ⑶矩阵的压缩存储。 ⒋栈与队列:

⑴栈的定义和运算。 ⑵栈的存储结构。 ⑶队列的定义和运算。 ⑷链队列与循环队列。 ⒌串: ⑴串及其操作。 ⑵串的存储结构。 ⒍树和二叉树: ⑴树的定义。 ⑵二叉树的定义及性质。 ⑶二叉树与树的转换。

⑷二叉树的存储。 ⑸遍历二叉树与线索二叉树。 ⒎图: ⑴图及其存储结构。 ⑵图的遍历。 ⑶图的连通性。 ⑷有向无环图。 ⑸最短路径。 ⑹拓扑排序。 ⒏查找:

软件项目量化管理方法

软件项目量化管理方法 摘要:本文在对软件企业量化管理应用常见问题分析的基础上,以解决可操作性、可比性等问题为着眼点,识别出了量化管理中必须明确的四要素,表述了企业在量化四要素上采用的常见做法。 本文采用80/20原则,说明了企业在识别度量对象时应避免的问题;采用持续改进的理论,说明了企业在量化管理应遵循的客观规律。在结合平衡记分卡与目标驱动组合式的量化管理方法理论基础上,提出了软件企业的量化管理的具体应用步骤。 关键词:量化管理四要素80/20原则持续改进GQ(I)M 1. 引言 如今,很多国内软件企业选择采用能力成熟度系列模型(Capa bility Maturity Model, CMM)或其它模型来建立本企业的软件过程规范,欲通过提升软件过程的能力达到提高产品质量、降低开发风险、减少开发成本、保证产品按时交付等目的。将软件过程规范的一个目的就是使软件过程可视化,这个可视化则要求了对软件过程的量化;而产品质量是否提高、开发风险是否降低、开发成本是否减少、项目延期是否缩短,对这些问题的回答则要求了对软件项目的量化;软件过程改进与量化管理息息相关。

不少企业在将识别出的量化管理方法应用于软件项目管理过程时,发现不少问题。最为常见的是: 量化工作的可操作性不强,如:部分量化数据难以收集、难以统计投入的成本没有得到预期的产出。如:量化工作投入了成本,但形成的量化结果参考价值不高提供给管理层用于决策的支持数据也不够,数据缺乏可比性量化结果不是管理层所关心的,达不到管理层预期的过程可视化程度 针对此类问题,本文识别出了在量化管理中必须要考虑的四个方面,即:量化四要素,并从量化四要素对量化管理方法进行了分析,建议了软件企业采用的量化管理方法。 2. 量化四要素 “只有通过对产品、过程的度量,才能描述、评价、提高产品与过程”。 笔者认为,要度量,就要明确度量的对象;要度量对象,就要明确标识度量对象的计量单位;要产生度量结果,就要明确度量方法,包括度量技术和数据收集的方法;要评价度量对象,就要明确用于比对的基准指标,即表征度量对象目前情况的标尺,通过该标尺与度量结果的比对,得出对度量对象的评价。而度量对象(Object)、计量单位(Unit)、度量方法(Method)、基准指标(Benchmark),这就是笔者所说的量化四要素。

《软件工程》试卷

一、单项选择题(每题1分,共10分) 1.软件测试得目得就是() A、评估软件得质量 B、发现软件得错误 C、找出软件中得所有错误 D、证明软件就是正确得 2.研究开发所需得成本与资源属于可行性研究中得()研究 A、技术可行性 B、经济可行性 C、法律可行性 D、操作可行性 3.软件详细设计得主要任务就是确定每个模块得() A、外部接口 B、功能 C、编程 D、算法与使用得数据结构 4.进行需求分析得描述工具有很多,但不包括() A、数据流图 B、流程图 C、判定表 D、数据字典 5.产生软件维护得副作用,就是指() A、开发时得错误 B、隐含得错误 C、因修改软件而造成得错误 D、运行时误操作 6.第一个有代表性得结构化程序设计语言就是( ) A、 FORTRAN B、 PASACL C、 C D、 COBOL 7.用黑盒法设计测试用例得方法之一为() A、边界值分析 B、逻辑覆盖 C、循环覆盖 D、基本路径测试 8.数据字典就是用来定义()中得各个成份得具体含义得 A、流程图 B、功能结构图 C、系统结构图 D、数据流图 9.开发软件所需高成本与产品得低质量之间有着尖锐得矛盾,这种现象称为() A、软件工程 B、软件周期

C、软件危机 D、软件产生 10.白盒法又称为逻辑覆盖法,主要用于() A、功能测试 B、系统测试 C、单元测试 D、确认测试 二、填空题(每空1分,共10分) 1.面向数据流得设计方法能够把信息流映射成软件结构,信息流可以分为两种类型。信息沿输入通路进 入系统,同时由外部形式变换成内部形式,进入系统得信息通过变换中心,经加工处理以后,再沿输出通路变换成外部形式离开软件系统,当DFD具有这些特征时,这种信息流就叫做。如果当数据沿输入通路到达一个处理T时,这个处理根据输入数据得类型在若干动作序列中选出一个来执行,这种数据流就称为。 2.软件配置管理就是应用于整个软件过程中得保护性活动,它就是在软件整个生命期内管理变化得一组 活动。软件配置由一组相互关联得对象组成,这些对象也称为。一旦一个配置对象已被开发出来并且通过了复审,它就变成了。 3.度量软件规模得方法主要有两种,技术根据以往开发类似产品得经验与历史数据,估计实 现一个功能所需得源程序行数;技术依据对软件信息域特性与软件复杂性得评估结果,估算软件规模。 4.在确认测试中,如果软件就是为许多客户开发得,那么让每个客户都进行正式得验收测试就是不现实 得。在这种情况下,绝大多数软件开发商都使用称为测试与测试得过程,来发现哪些瞧起来只有最终用户才能发现得错误,其中前者由最终用户们在一个或多个客户场所进行得,而后者就是在开发者得场所进行得。 5.已知产品得内部工作过程,可以通过测试来检验产品内部动作就是否按照规格说明书得规定正常进 行,这种软件测试方法称为:;如果已经知道了产品应该具有得功能,可以通过测试来检验就是否每个功能都能正常使用,这种软件测试方法称为:。 三. 判断题(每题1分,共5分) 1、典型得黑盒测试方法包括:等价类划分法、边界值分析法与基本路经测试法。() 2、MC/DC覆盖以及条件组合覆盖得测试用例数得上限分别为n个与2n个。() 3、CMM得主要作用有两个,一就是为软件项目得招投标工作提供依据,二就是为软件企业得内部改进提供参考。() 4、软件质量保证措施主要有:基于非执行得测试、基于执行得测试与程序正确性证明。()

《软件工程》试卷1

一、单项选择题每小题1分,共20分。(在每小题的四个选项 中只有一个选项是符合题目要求的,请将正确选项前的字母填在题后的括号内) 1.在下列工具与环境中()属于较早期的CASE。 A.基于信息工程CASE B.人工智能CASE C.结构的基于图形CASE D.集成的CASE环境 2.Putnam成本估算模型是一个()模型。 A.静态单变量 B.动态单变量 C.静态多变量 D.动态多变量 3.在McCall软件质量度量模型中,()属于面向软件产品修改。 A.可靠性 B.可重用性 C.适应性 D.可移植性4.ISO的软件质量评价模型由3层组成,其中用于评价设计质量的准则是() A.SQIC B.SQMC C.SQRC D.SQDC 5.软件复杂性度量的参数包括() A.效率 B.规模 C.完整性 D.容错性6.对象实现了数据和操作的结合,使数据和操作()于对象的统一体中。

A.结合 B.隐藏 C.封装 D.抽象7.软件调试技术包括() A.边界值分析 B.演绎法 C.循环覆盖 D.集成测试8.瀑布模型的存在问题是() A.用户容易参与开发 B.缺乏灵活性 C.用户与开发者易沟通 D.适用可变需求 9.软件测试方法中的静态测试方法之一为() A.计算机辅助静态分析 B.黑盒法 C.路径覆盖 D.边界值分析 10.软件生命周期中所花费用最多的阶段是() A.详细设计 B.软件编码 C.软件测试 D.软件维护 11.第一个体现结构化编程思想的程序设计语言是()

A.FORTRAN语言 B.Pascal语言 C.C语言D.PL/1语言12.程序的三种基本控制结构是() A.过程、子程序和分程序 B.顺序、选择和重复 C.递归、堆栈和队列 D.调用、返回和转移 13.在详细设计阶段,经常采用的工具有() A.PAD B.SA C.SC D.DFD 14.详细设计的结果基本决定了最终程序的() A.代码的规模 B.运行速度 C.质量 D.可维护性 15.需求分析中开发人员要从用户那里了解() A.软件做什么 B.用户使用界面 C.输入的信息 D.软件的规模 16.结构化程序设计主要强调的是() A.程序的规模 B.程序的效率 C.程序设计语言的先进性

软件可靠性的评价准则

软件可靠性的评价准则 迄今为止,尚无一个软件可靠性模型对软件的不同特性和不同使用环境都有效。已公开发表的100余种软件可靠性模型,表达形式不同,适应性各异,与实际的软件开发过程有较大差异。而且,新模型还在不断发表。因此,在进行软件可靠性预计、分析、分配、评价和设计之前,对软件可靠性模型进行评价及选择与软件项目相符或相近的模型非常重要。通过建立有效的评价准则,在考虑它们与各种软件的关系的基础上,对拟评价的可靠性模型就有效性、适应性和模型能力等进行评价,判定它们的价值,比较它们的优劣,然后选择有效的软件可靠性模型。另一方面,在可接受的模型之间无法做出明确的选择时,可根据模型的使用环境等,在模型评价准则的基础上,进行模型择优。当然,软件可靠性模型的评价不仅依赖于模型的应用,还依赖于理论的支持和丰富的、高质量可靠性数据的支持。软件可靠性模型的评价最早始于1984年Iannino、Musa、Okumoto和Littlewood所提出的原则。根据这一原则,结合后人的工作,形成了基本的软件可靠性评价准则集。它们是软件可靠性模型比较、选择和应用的基础。 准则一:模型预测有效 软件可靠性模型最重要的评价指标是模型预测的有效性。它根据软件现在和过去的故障 行为,用模型预测软件将来的故障行为和可靠性水平。它主要通过能有效描述软件故障随机过程特性的故障数方式对模型进行描述与评价。基于软件故障时间特性的随机过程也是一种常用的方法,而且这两种方法相互重叠。 要确定软件可靠性模型预测的有效性,首先要比较模型预测质量。这种比较通常通过相 对误差法、偏值、U图法、Y图法、趋势法等方法进行。故障数度量是一种在工程上被广泛应 用的方法。此外,还可以通过比较不同数据集合所做出的中位线图形来评价模型预测的有效性。如果一个模型产生的曲线最接近于0,则该模型是最优的。而且,这种有效性测定方法有效地克服了规范化图形评价与具体软件项目之间的联系,保证了它的独立性。 用给定可靠性数据对软件可靠性模型进行比较时,必须考察拟合模型与观察数据的一致 性和符合性。当然,根据拟合模型进行采样,是否可以获得足够的观察数据非常重要。拟合优度检验是一种系统地表达并证明观察数据和拟合模型之间全局符合性的方法,使用最广泛的是x2检验。 1.准确性 软件可靠性模型预测的准确性可用前序似然函数来测定。设观察到的失效数据对应于软 件相继失效之间的时间序列t1,t2,..,ti-1,并用这些数据来预测软件在未来可能的Ti,即希 望得到Ti的真实概率密度函数Fi(t)的最优估计值。假设以t1,t2,...,ti-1为基础预测Ti的 分布Fi(t)的概率密度函数 @@42D11000.GIF;表达式1@@ 对Ti+1,Ti+2,...,Ti+n的这种向前一步预测,即进行了n+1次预测之后的前序似然函数为 @@42D11001.GIF;表达式2@@ 由于这种度量常常接近于0,所以常用其自然对数进行比较。假定比较的两个软件可靠性 模型分别为A和B,则对它们进行n次预测之后的前序似然比为 @@42D11002.GIF;表达式3@@

程序复杂性度量

程序复杂性度量 程序复杂性主要指模块内程序的复杂性。它直接关联到软件开发费用的多少,开发周期的长短和软件内部潜伏错误的多少。同时它也是软件可理解性的另一种度量。 减少程序复杂性,可提高软件的简单性和可理解性,并使软件开发费用减少,开发周期缩短,软件内部潜藏错误减少 一、代码行度量法 度量程序的复杂性,最简单的方法就是统计程序的源代码行数。此方法基于两个前提: (1)程序复杂性随着程序规模的增加不均衡地增长; (2)控制程序规模的方法最好是采用分而治之的办法。将一个大程序分解成若干个简单的可理解的程序段。 方法的基本考虑是统计一个程序模块的源代码行数目,并以源代码行数做为程序复杂性的度量。若设每行代码的出错率为每 100行源程序中可能有的错误数目,例如每行代码的出错率为1%,则是指每 100行源程序中可能有一个错误。 Thayer曾指出,程序出错率的估算范围是从0.04%~ 7%之间,即每100行源程序中可能存在0.04~7个错误。他还指

出,每行代码的出错率与源程序行数之间不存在简单的线性关系。Lipow进一步指出,对于小程序,每行代码的出错率为1.3%~1.8%;对于大程序,每行代码的出错率增加到2.7%~3.2%之间,但这只是考虑了程序的可执行部分,没有包括程序中的说明部分。Lipow及其他研究者得出一个结论:对于少于100个语句的小程序,源代码行数与出错率是线性相关的。随着程序的增大,出错率以非线性方式增长。所以,代码行度量法只是一个简单的,估计得很粗糙的方法。 二、McCabe度量法 McCabe度量法是一种基于程序控制流的复杂性度量方法。McCabe定义的程序复杂性度量值又称环路复杂度,它基于一个程序模块的程序图中环路的个数。 如果把程序流程图中每个处理符号都退化成一个结点,原来联结不同处理符号的流线变成连接不同结点的有向弧,这样得到的有向图就叫做程序图。 计算有向图G的环路复杂性的公式: V(G)=m-n+2 其中,V(G)是有向图G中的环路个数,m是图G中有向弧个数,n是图G中结点个数。

软件工程题库及答案

一、选择题 软件 (2) 1.在软件开发的各种资源中,(D)是最重要的资源。 A开发工具B方法C硬件环境D人员 2.软件的复杂性是(A),它引起人员通信困难、开发费用超支、开发时间超时等问题。 A固有的B人为的C可消除的D不可降低的 3.3:软件是计算机系统中与硬件相互依存的另一部分,它的组成部分是(D)。 A.程序、数据 B.程序、文档 C.程序 D.程序、数据、文档 4.软件是一种(B)产品。 A、有形 B、逻辑 C、物质 D、消耗 软件危机 (1)

5.1:开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做( C ) A.软件工程 B.软件周期 C.软件危机 D.软件产生 6.2:在软件生产的程序系统时代由于软件规模扩大和软件复杂性提高等原因导致了(A) A.软件危机 B.软件工程 C.程序设计革命 D.结构化程序设计 7.3:以下哪一项不是软件危机的表现形式(C ) (A)成本高(B)生产率低 (C)技术发展快(D)质量得不到保证 8.4:“软件危机”产生的主要原因是( A)。 A.软件日益庞大 B.开发方法不当 C.开发人员编写程序能力差 D.没有维护好软件 9.5:软件危机是指在软件开发和(C)过程中遇到的一系列严重问题。

A开发B使用C维护D更新 软件工程 (2) 1 0."1:为了解决软件危机人们提出了用(B)的原理来设计软件,这就是软件工程诞生的基础。 (A)运筹学(B)工程学(C)软件学(D)数学 1 1." 2.在软件工程时期,决定软件质量的主要因素是(A) A.管理水平 B.个人程序技术 C.小组技术水平 D.硬件的发展 1 2." 3.软件管理工作涉及到的直接对象不包括(B)。 A.软件开发人员 B.硬件设备 C.项目经费 D.软件项目

软件复杂度概述

软件复杂度概述 在硬件的可靠性设计中,有一条基本原则“简单就是可靠”。这个原则同样也适合软件,与功能的增多或增强相伴的是不断升级与补丁。现在已经有若干种软件复杂性的度量方法可供参考,其中McCabe QA是比较出色和实用的方法,它能够计算出多种软件复杂度,由此可对软件进行检查、分析和查明那些可能导致错误的代码。 复杂度 70年代,软件系统已经变得极其复杂,无论是开发还是维护都是一项成本高昂的工作。人们意识到必须使软件模块化,以便于开发、测试和维护。为此,成立于1976的McCabe&Associates公司开发出了McCabe Cyclomatic Complexity Metric(圈复杂度)技术对软件进行结构测试。Metric以软件复杂度测量的数目为基础,能帮助工程师识别难于测试和维护的模块,圈复杂度已经成为评估软件质量的一个重要标准。人们可以用圈复杂度对软件的复杂度和质量进行衡量,来安排工程进度,在成本、进度和性能之间寻求平衡。 复杂度的种类 有模块、类和程序三类复杂度。模块复杂度包含了关于模块的复杂度信息;类复杂度是针对那些使用McCabe面向对象特性的程序,它包含了关于类的复杂度信息;程序复杂度包含了关于程序的复杂度信息。 集成复杂度报告 对应于三种复杂度的是三种复杂度报告。如果一个报告的复杂度信息不只一种,那么就把这些复杂度信息组合成新的报告。 集成复杂度信息只收集一个部件及其下级的信息。例如:如果一个程序级报告包含一个类复杂度,那么只报告组成程序的类的信息,而不包含类组成的信息。 McCabe复杂度 McCabe复杂度是对软件结构进行严格的算术分析得来的,实质上是对程序拓扑结构复杂性的度量,明确指出了任务复杂部分。McCabe复杂度包括:圈复杂度、基本复杂度、模块设计复杂度、设计复杂度、集成复杂度、行数、规范化复杂度、全局数据复杂度、局部数据复杂度、病态数据复杂度。 McCabe复杂度的用途 在软件工程中,有三种使用McCabe复杂性度量的方式。 作为测试的辅助工具。McCabe复杂性度量的结果等于通过一个子程序的路径数,因而需要设计同样多的测试案例以覆盖所有的路径。如果测试案例数小于复杂性数,则有三种情况一是需要更多的测试;二是某些判断点可以去掉;三是某些判断点可用插入式代码替换。 作为程序设计和管理指南。在软件开发中,需要一种简单的方式指出可能出问题的子程序。保持子程序简单的通用方法是设置一个长度限制,例如50行或2页,但这实际上是在缺乏测试简明性的有效方法时无可奈何的替代方法。不少人认为McCabe度量就是这样一种简明性度量。但是要注意,McCabe度量数大的程序,不见得结构化就不好。例如,Case语句是良结构的,但可能有很大的McCabe度量数(依赖于语句中的分支数),这可能是由于问题和解决方案所固有的复杂性所决定的。使用者应当自己决定如何使用McCabe度量所提供的信息。 作为网络复杂性度量的一种方法。Hall和Preiser提出了一种组合网络复杂性度量,用于度量可能由多个程序员组按模块化原理建立的大型软件系统的复杂性。他们提出的组合度量公式为 式中C1,...,Ck是各个模块的复杂性;CN是网络复杂性;W1和W2为权值。 McCabe复杂度即可用于度量各个模块的复杂性,也可用于度量网络复杂性。

软件工程概论知识点汇总

软件危机是指在计算机软件的开发和维护过程中遇到一系列严重问题。 软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明是正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。 软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门。 软件工程方法学包含3个要素:方法、工具和过程 目前使用最广泛的软件工程方法学,分别是传统方法学和面向对象方法学 软件生命周期由软件定义、软件开发和运行维护3个时期组成。 软件生存周期是指一个软件从提出开发要求开始直到软件报废为止的整个时期。 通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为范型。 软件定义分3个阶段,即问题定义、可行性研究和需求分析。 可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。 可行性研究的主要内容包括技术可行性、经济可行性和操作可行性3个方面。 开发时期由4个阶段组成:总体设计、详细设计、编码和单元测试,综合测试。其中前两个阶段称为系统设计,后两个阶段称为系统实现。 系统流程图是概括地描绘物理系统的传统工具;而数据流图是系统逻辑功能的图形表示工具。 模型,就是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。通常,模型由一组图形符号和组织这些符号的规则组成。 分析建模的用处是为了更好地理解复杂事物。 软件需求分析的目标是深入描述软件的功能和性能,确定软件设计的约束和软件同其它系统元素的接口细节,定义软件的其它有效性需求。 需求分析过程应该建立3种模型,分别是数据模型、功能模型和行为模型。 数据模型中包含3种相互关联的信息:数据对象、数据对象的属性及数据对象彼此间相互连接的关系。 结构程序设计的定义:如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制接口进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。 在结构化分析中,用于描述加工逻辑的主要工具有三种,即:结构化语言、判定表、判定树。 衡量模块独立程序的两个定性标准是内聚和耦合。 确认测试也称为验收测试,它的目标是验收软件的有效性。 等价划分是一种黑盒测试技术,这种技术把程序的输入域划分成若干个数据类,据此导出测试用例。一个理想的测试用例能独立发现一类错误。 软件可靠性是程序在给定的时间间隔内,按照规格说明书的规定成功的运行的概率。 软件的可用性是程序在给定的时间点,按照规格说明书的规定,成功的运行的概率。 软件工程的主要目的就是要提高软件的可维护性,减少软件维护所需要的工作量,降低软件系统的总成本。 数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。 Jackson方法是一种面向数据结构的设计方法。 完整的软件测试一般要经过单元测试、集成测试、确认测试和系统测试等4个阶段。 模块化是指把程序划分成独立命名切可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。 软件复杂性度量的参数包括: ①规模②难度③结构④智能度 数据字典应该有下列4类元素的定义组成: 1、数据流; 2、数据流分量(即数据元素) 3、数据存储 4、处理 产生软件危机的原因?

软件工程第十一章

11.1概述 11.1.1 软件质量的定义 软件质量定义为: (1)与所确定的功能和性能需求的一致性。 (2)与所成文的开发标准的一致性。 (3)与所有专业开发的软件所期望的隐含特性的一致性。 11.1.2 软件质量的度量和评价 影响软件质量的因素可以分为两大类: (1)可以直接度量的因素,如单位时间内千行代码(KLOC)中产生的错误数。 (2)只能间接度量的因素,如可用性或可维护性。 在软件开发和维护的过程中,为了定量地评价软件质量,必须对软件质量特性进行度量,以测定软件具有要求质量特性的程度。

11.1.3 软件质量保证 1. 什么是软件质量保证 软件的质量保证就是向用户及社会提供满意的高质量的产品,确保软件产品从诞生到消亡为止的所有阶段的质量的活动,即确定、达到和维护需要的软件质量而进行的所有有计划、有系统的管理活动。 2. 质量保证的策略 质量保证策略的发展大致可以分为以下三个阶段: (1)以检测为重。产品制成后才进行检测,这种检测只能判断产品的质量,不能提高产品质量。 (2)以过程管理为重。把质量保证工作重点放在过程管理上,对制造过程的每一道工序都进行质量控制。 (3)以新产品开发为重。 3. 质量保证的主要任务 (1)正确定义用户要求。 (2)技术方法的应用。 (3)提高软件开发的工程能力。 (4)软件的复用。 (5)发挥每个开发者的能力。 (6)组织外部力量协作。

(7) 排除无效劳动。最大的无效劳动是因需求规格说明有误、设计有误而造成的返工。 (8) 提高计划和管理质量。 4. 质量保证与检验 软件质量必须在设计和实现过程中加以保证。 11.2 质量度量模型 11.2.1McCall质量度量模型 这是McCall等人于1979年提出的软件质量模型。针对面向软件产品的运行、修正、转移,软件质量概念包括11个特性,其定义如下: (1)面向软件产品操作。 (2)面向软件产品修改。 (3)面向软件产品适应。 11.2.2 ISO的软件质量评价模型 软件质量度量模型由三层组成。 11.3 软件复杂性 11.3.1 软件复杂性的基本概念 软件复杂性度量的参数很多,主要有: (1)规模,即总共的指令数,或源程序行数。 (2)难度,通常由程序中出现的操作数的数目所决定的量来表示。 (3)结构,通常用于程序结构有关的度量来表示。 (4)智能度,即算法的难易程度。 软件复杂性主要表现在程序的复杂性。程序的复杂性主要指模块内程序的复杂性。它直接关联到软件开发费用的多少、开发周期长短和软件内部潜伏错误的多少。同时它也是软件可理解性的另一种度量。

软件质量度量指标v1.0

软件质量指标度量 1综述 (2) 1.1编写目的 (2) 1.2阅读指南 (2) 2软件质量指标 (3) 2.1需求功能点覆盖率 (3) 2.2用例执行覆盖率 (3) 2.3缺陷修复率(截至于**年*月*日) (4) 2.4缺陷遗留个数(截至于**年*月*日) (4) 2.5缺陷分布统计(模块缺陷率) (4) 2.6缺陷分布统计(严重缺陷率) (5) 2.7缺陷密度及收敛 (5) 3测试过程质量指标 (8) 3.1缺陷探测率 (8) 3.2有效缺陷率 (8) 3.1用例执行效率 (9) 3.2缺陷发现率 (9) 4交付质量指标 (11) 4.1加载回退率 (11) 4.2故障回退率 (11) 5版本说明 (12)

1综述 1.1编写目的 本文档主要为测试经理、测试组长/测试人员、技术负责人、项目经理、开发人员等提供软件质量、测试质量、交付质量等衡量依据。通过不同指标的目标设定、过程跟踪、结果分析,为当期被测产品的质量提供可参考的数据,也为后续测试提供数据的基础积累,并作为制定方法流程的依据。 1.2阅读指南 ●软件测试质量指标主要针对研发项目、商务项目被测产品出具数据 度量。 ●测试过程质量指标主要为测试经理、测试组长对测试人员的测试执 行质量出具数据度量。 ●交付质量主要为新需求的交付质量出具数据度量。 三者可单独使用,也可结合使用。

2软件质量指标 2.1需求功能点覆盖率 【需求覆盖率】:计算测试用例总数之和除以与之一一对应的功能点数之和,主要查看是否有功能点遗漏测试的情况。 【公式】:∑测试用例数(个) / ∑功能点(个) 说明:用例覆盖需求矩阵,一个需求对应多个功能点。 【数据来源】:《联通集中集团客户业务支撑系统销售管理用户需求说明书》《联通集中集团客户业务支撑系统销售管理需求跟踪矩阵》 【计算结果】需求覆盖率=113/8=14.13 2.2用例执行覆盖率 【用例执行覆盖率】:计算测试用例执行总数除以与之一一对应的测试数之和,主要查看是否有测试用例执行遗漏或有效的情况。 【公式】:∑执行的测试用例个数(个) / ∑测试用例个数(个)*100% 【数据来源】:《iSMS测试进度跟踪表》 【计算结果】:用例执行覆盖率=100%

开源软件中结构复杂度的度量方法

—61— 开源软件中结构复杂度的度量方法 黄雅菁,高建华 (上海师范大学计算机科学与工程系,上海 200234) 摘 要:针对大型开源软件的复杂性,提出一种基于随机图和结构熵的开源软件结构复杂度的度量方法。将开源软件中的软件包抽象成点,将软件包之间的依赖关系抽象成有向边,建立随机图,并引入结构熵的概念。结合随机图的特性和结构熵度量开源软件的耦合度和内聚度。利用该方法进行实例分析,结果表明,随着开源软件按版本发展,软件耦合度和内聚度不断增长。 关键词:开源软件;随机图;结构熵;耦合;内聚 Measure Method of Structural Complexity in Open Source Software HUANG Ya-jing, GAO Jian-hua (Department of Computer Science and Engineering, Shanghai Normal University, Shanghai 200234) 【Abstract 】 In order to study the complexity of the large-scale open source software, this paper models the packages in the open source software as vertices and the dependency relationships among these packages as directed edges. It uses random graph measure and structure entropy to propose a new method of measuring structural complexity of open source software. It uses the method by the fact to investigate that as the release of the open source software evolves, the coupling and cohesion grow from lower to higher. 【Key words 】open source software; random graph; structure entropy; coupling; cohesion 计 算 机 工 程 Computer Engineering 第36卷 第10期 Vol.36 No.10 2010年5月 May 2010 ·软件技术与数据库· 文章编号:1000—3428(2010)10—0061—03 文献标识码:A 中图分类号:TP311.5 1 概述 由于免费开放源代码等优点,开源软件得到广泛应用。但开源软件数据量大,允许开发者自由修改程序,使开源软件复杂性越来越高。软件结构复杂性直接影响软件维护的代价和精力。软件系统的复杂度取决于软件内部结构各子系统之间的控制流与数据流的复杂程度,它包括算法复杂度和结构复杂度。本文所提到的复杂度是指结构复杂度。软件复杂度度量的方法[1-2]已被广泛研究,从不同角度量化了软件的一些特性,但对大型的开源软件不适用。 国内外研究工作者[3-4]已经将随机图论应用在开源软件的管理。经典的随机图特性只能解释某些结构特性,但很难直接应用在软件包管理上。例如,度分析能说明软件包在互相依赖中的选择机制,但不能用来定义整个软件的复杂度。 文献[5]定义了基于随机图的有向图复杂度参数,该参数超越了简单的直接依赖关系,但不能反映软件包之间的紧密程度。 本文以随机图论为基础,把开源软件子包抽象成点,把子包之间的依赖关系抽象成有向边,建立随机图。基于随机 图的特性度量开源软件的耦合度,并引入结构熵的概念度量开源软件内聚度,提出一种基于随机图和结构熵度量开源软件结构复杂度的方法。应用该方法研究和分析了开源软件按版本发、耦合度和内聚度纵向变化情况。 2 软件结构复杂度度量 结构复杂度度量的目标要能反映模块内部结构的复杂度 以及模块间接口的复杂度,决定于代码基本的层级组织,先开始于方法层,然后通过抽象层移植[6]。在方法层,评估软件系统结构复杂度是通过度量圈复杂度,即通过代码主体可执行路径的条数。圈复杂度的值越高,方法的代码就越复杂。在抽象层(例如类、包、元件),评估软件系统结构复杂度是 通过度量耦合和内聚。耦合是指2个子系统之间的依赖数目,内聚是指子系统内部的依赖数目。 当运行大型复杂代码,传统的圈复杂度、耦合和内聚的度量没有考虑设计依赖的影响。The Structure 101度量框架(https://www.wendangku.net/doc/f815531738.html,/procucts/structure101/index.php)能提供软件在方法层和抽象层设计依赖关系,这种关系是运行时的依赖关系,度量框架界面如图1所示。 图1 The Structure 101度量框架界面 本文主要研究包的级别,评估开源软件结构复杂度主要通过度量耦合和内聚,利用The Structure 101框架度量开源软件可得其包之间的依赖关系。在图1中,区域1显示包的层级关系,即包及其下的子包;区域2显示包两两之间的依 基金项目:国家自然科学基金资助项目(60673067);上海市教育委员会科研创新基金资助项目(0922135) 作者简介:黄雅菁(1983-),女,硕士研究生,主研方向:开源软件技术,软件工程;高建华,教授、博士 收稿日期:2009-11-20 E-mail :yajing_huang@https://www.wendangku.net/doc/f815531738.html,

相关文档