1、软件工程,第10章软件的技术度量,10.1 软件度量,10.1.1 测量、测度、度量、指标和估算 测量:对产品或过程的某个属性的范围、数量、维度、容量或大小提供一个定量的指标。 测度:测量的一个行为,把数字或符号分配给现实世界实体的属性的过程,是任意一个工程过程中的重要元素。 度量:建立在多次测度的基础上,对系统、部件或过程的某一特性所具有的程度进行的量化测量。 指标:是一个度量或多个度量的组合,对同一类事物的多次度量的一个横向比较。它可以对软件产品、过程或资源提供更深入的理解。 估算:对软件产品、过程资源等使用历史资料或经验公式等进行预测。,10.1.2 软件度量的分类 软件度量可以分为直接
2、度量和间接度量两类。 10.1.3 软件度量的目的 更好地理解产品质量 评估过程的效率 改善在项目级别完成的工作的质量,10.1.4 有效软件度量的属性 简单的和可计算的。 经验和直觉上有说服力的。 一致的和客观的。 在单位和量纲的使用上是一致的。 编程语言独立。 高质量反馈的有效机制。,10.2 分析模型的度量,10.2.1 基于功能点的度量 测量参数 值 权值 用户输入数 *4 用户输出数 *5 用户查询数 *4 文件数 *7 外部界面数 *7 总计数值 其中: 用户输入数 用户为软件提供的输入参数个数 用户输出数 软件系统为用户提供的输出参数个数 用户查询数 一个联机输入确定一次查询,软
3、件以联机输出的形式, 实时地产生一个响应 文件数 统计逻辑的主文件个数 外部界面数 统计所有机器可读的界面,利用这些界面可以将信息从一个系统传送到另一个系统,ATM系统的数据流图,为了确定用以计算功能点度量所需的关键测度,对数据流图加以评价: 外部输入有8个:账号、选择信息、确认信息、金额(分为取款金额和转账金额)、日期、账号(转入账号)、密码; 外部输出有3个:与屏幕和语音接口的数据接口信息; 用户查询有5个:余额信息、密码、转出账户的信息、明细信息、出钞器余额; 有2个文件,即客户存储信息单和系统配置信息; 外部接口有8个:与出钞器、后台服务系统、凭条打印机和读卡器的所有数据接口信息。 我
4、们假定复杂度是平均的,这些数据及复杂度在下表中显示:,8,3,5,2,8,4,4,5,10,7,32,15,20,20,56,143,我们假定Fi是46(一个中度复杂的产品) 则得FP=总计数值(0.65+0.01Fi) =143(0.65+0.0146)=158.7,10.3 设计模型的度量,10.3.1 体系结构设计度量 体系结构设计度量集中于体系结构的特征上,强调体系结构的结构和模块的有效性。 Card和Glass定义了三个软件设计复杂度测度:结构复杂度、数据复杂度和系统复杂度 模块i的结构复杂度S(i):S(i)=f2out(i),其中fout(i)是模块i的扇出数。 数据复杂度D(i
5、)定义如下:D(i)=v(i)/fout(i)+1,其中v(i)是模块i的输入输出变量的数目之和。 系统复杂度C(i)定义为结构复杂度和数据复杂度之和:C(i)=S(i)+D(i)。,Fenton建议使用简单的形态度量,如外形度量,这样不同的程序体系结构就可以用同一套简单的量纲加以比较。可以定义如下的度量(以ATM为例): size=n+a,其中n是节点,既模块的数目,a是弧,即控制线的数目。对于ATM系统的体系结构,size=14+13=27。 深度=从根节点到叶子节点的最长路径=5。 宽度=体系结构中的最宽的那一层的节点数=5。 弧和节点的比率,r=a/n,测度了体系结构的连接密度,为体系
6、结构的耦合提供了一个简单的指示。对于ATM系统的体系结构,r=13/14=0.93。,10.3.2 构件级设计度量 内聚度量 耦合度量 复杂度度量 根据软件过程性描述(详细设计或代码)中的控制流程确定复杂性度量。 McCabe认为程序控制流的复杂度度量很多都是基于流图的。流图可以从算法设计导出,是由节点和边构成的。下面三个图给出了一个模块的流图设计。,6,(a) 流程图,(b)复合条件分离后的流程图,(c) 流图,6,复杂度度量的一种方法是计算流图的环复杂度,环复杂度定义了程序基本集的独立路径数量的上界。 可以用如下三种方法之一来计算环复杂度V(G): V(G)=流图中区域的数量,区域是指结点
7、和边限定的区域,分为闭合区域和外部区域。上图中的流图有4个闭合区域,所以V(G)=4+1=5。 V(G)=E-N+2,其中E是流图中边的数目,N是流图中节点的数目。上图中的流图有10条边,7个节点,所以V(G)=10-7+2=5。 V(G)=P+1,其中P是流图中的判定节点的数目,判定节点是指包含了条件的节点。上图中的流图中节点1、2、4、5是判定节点,所以V(G)=4+1=5。 程序结构的复杂性度量值V(G)取决于程序控制流的复杂程度。当程序内的分支数和循环数增加时,V(G)值将随之增加,即程序的复杂性增大。V(G)还可以作为程序规模的定量指标,V(G)值越高的程序往往是越复杂、越容易出问题
8、的程序。,10.4 源代码度量,Halstead的软件科学理论把定量定律赋予了计算机软件开发,软件科学使用的一组基本测度在代码产生后或设计完成后对代码估算得到。 程序可以看成是由操作符和操作数组成的符号序列,操作符是指程序中出现的语法符号,如+、-、if-then-else、while等;操作数是操作对象,如程序中定义或使用的变量、常量、数组、指针等。 n1在一个程序中出现的不同操作符。 n2在一个程序中出现的不同操作数。 N1操作符出现的总数。 N2操作数出现的总数。 Halstead使用基本测度来计算以下几个度量: 程序长度N=n1log2n1+n2log2n2 程序体积V=Nlog2(n
9、1+n2),确定下列源码的操作符和操作数,addend=0; j=0; while (j=10) addend=addend*10+3; print(addend); 其中操作符:,;,while,=,*,+,print,( ) 操作数:addend,0,j,10,3, 因此,n1=8, n2=5 长度N = n1log2n1+n2log2n2=8log28+5log25=8x3+5x2.32=35.6,10.7 软件质量的度量,McCall等人通过确定影响软件质量要素的属性定义了21个软件质量要素的评价准则,这些准则可以间接测量软件质量要素,从而可以度量整个软件质量。 11个软件质量要素和2
10、1个评价准则之间的关系如下表所示。,除了McCall的软件质量度量模型外,还有很多软件工程组织和专家在软件质量度量方面做了大量工作,但正确性、可维护性、完整性、可靠性和可用性往往能为项目提供有用的指标。 软件正确性。正确性包含两方面,一方面是指软件完成所要求的功能的程度,另一方面指的是软件没有错误。 可以用代码缺陷率DQRf和每千行代码的缺陷数DQRl来度量软件完成所要求功能的程度,用代码出错率EQRf和每千行代码的错误数EQRl来度量软件的错误。 软件可维护性。可维护性是指为满足用户新的要求,或当环境发生了变化,或运行中发现了新的错误时,对软件进行相应诊断和修改的容易程度。 有一种简单的面向
11、时间的度量,称为平均变更时间MTTC,包括分析变更请求、设计合适的修改方案、实现变更并进行测试、以及将该变更发布给全部用户所花的时间。一般情况下,MTTC值越低,可维护性越好。,软件完整性。完整性是指为了某一目的而保护数据,避免它受到偶然的,或有意的破坏、改动或遗失的能力。在网络时代,软件完整性变得越来越重要,它测量的是一个系统对安全性攻击(包括对程序、数据和文档的攻击)的抵抗能力。 软件可靠性。可靠性是软件在给定时间段的不失败概率,可以用在给定时间间隔内程序按规格说明成功运行的概率来衡量。 在实际应用中,我们可以利用概率统计的方法进行比较简单的计算:,用R(n)表示可靠性,这里的n为时间单位
12、数。如果时间单位为天,则R(1)是在1天中不失败的概率。 在给定时间段中的失败概率F(n)为1减去该时间段的可靠性R(n): F(n)=1-R(n) 错误率是错误间隔的时间倒数 错误率可用来估算失败概率F(1)。 例如某程序每两天发生一个错误,则即时错误率为1/2,即每天0.5个错误。 例1:如果平均每两天发生一个错误,那么系统在1、2、3、和4天的不失败概率是多少? 解:错误率可以用来估算某单位时间(如一天)内的失败概率。因为F(1)=0.5所以:R(1)=1-F(1)=0.5R(2)=R(1)2 =0.50.5=0.25R(3)=R(1)3 =0.53=0.125R(4)=R(1)3 =0.53=0.0625,软件可用性。可用性是程序根据需求,在给定的环境和时间内其可运行的概率。 可用性= MTTF / (MTTF+MTTR)100% 其中,MTTF和MTTR分别为平均无故障时间和平均故障修复时间。MTBF=MTTF+MTTR为平均故障间隔时间,是相邻两次故障发生的时间间隔。 如果MTTR忽略不计,并且假设在0时刻到t时刻内,系统无故障,则系统是可靠的,这就是系统的可靠性,而时间t就是可用性。 可用性也是软件可维护性的一种间接度量。,