《软件工程04.ppt》由会员分享,可在线阅读,更多相关《软件工程04.ppt(30页珍藏版)》请在三一办公上搜索。
1、软件工程,Software Engineering,第四讲,3、软件结构,二、块内联系的类型块内联系从小到大有下述种:()共存性块内联系。图2.20 中,设块X,Y,Z中有一组相同语句,把这种语句独立出来作为块W。块W中的几条语句是为了节省空间而独立出来的,块W的块内联系称为“共存性块内联系”。即偶然性内聚,3、软件结构块内联系的类型,X,Y,Z,A=A+BGET FILEPUT OUTPUTIF I=5 THEN E=0,W,图2.20,3、软件结构块内联系的类型,共存性块内联系的各成分之间没有逻辑联系,阅读时难以理解;另一方面不易修改,例如X如需变动W中的某个语句,Y和Z就不能再用块W了。
2、基于上述原因,只要有足够的空间,应尽量避免共存性块内联系。(2)逻辑性块内联系 如图2.21(a)中块A,B,C的功能相近,为了节省空间,可以把它们合并成一个块ABC,就成了图2.21(b)的块结构图。块ABC的块内联系就属于逻辑性块内联系。,3、软件结构块内联系的类型,可以模拟一下模块ABC的程序执行流程,大致如图2.21(c)所示,S为A,B,C的公共部分。逻辑性块内联系的缺点有两个,一是不易修改。当某个块(如X)需要修改公共程序段S时,其他块可能不需要修改;二是增加了块间联系,这是因为每一个调用块在调用时都要传递一个标志量的缘故。,3、软件结构块内联系的类型,X,Y,Z,A,B,C,X,
3、Y,Z,ABC,S,(a),(b),(c),恢复开关值,图2.21,3、软件结构块内联系的类型,(3)瞬时性块内联系。如果一个块所包含的任务必须在同一“时间”内完成,则称这个块内联系属于瞬时性块内联系。如图2.22的处理意外故障块中,关闭文件、保留现场、报警等任务必须在同一时间内完成。,紧急意外故障处理,关闭文件,保留现场,报警,图2.22,3、软件结构块内联系的类型,(4)通讯性块内联系。一个块内所有处理元素集中于同一数据结构中,其块内联系属通讯性块内联系。如图2.23中,由文件FILE的数据可产生不同的表格。若把生产日报表,单项产品生产报表的生成集中于块X中,则X的块内联系属于通讯性块内联
4、系。,X,从文件FILE读出数据,由数据产生日报表,由数据产生单项产品报表,图2.23,3、软件结构块内联系的类型,(5)顺序性块内联系.一个块中各个处理元素都紧密相关于同一功能,且必须顺序执行,此块的块内联系属顺序性块内联系。图2.24的块A的功能是求一元二次方程的根。图中各处理元素都与求根有关,必须顺序执行。,A,输入系数,求根,打印方程的根,图2.24,3、软件结构块内联系的类型,(6)功能性块内联系.如果一个块完成一个且仅完成一个功能,这个块的块内联系称功能性块内联系。例如,由块M1M2M3分别完成 矩阵求逆;打印统计表 计算差额。则M1,M2,M3都是功能性块。上述对块间联系和块内联
5、系讨论的目的不是要精确地确定地确定它们的类型和级别,而是为第5章将要讨论的设计准则提供基本依据。,4、软件度量,前几节中,已对软件的结构,块间的关系和块内联系做了定性的分析,这种定性分析没有形式的数学基础。软件作为一种产品,人们也试图给它一种定量的评价,但由于软件产品的特殊性,恰当地给出软件产品的定量评价是极为困难的。虽然如此,软件定量分析的研究工作也取得一些初步成果。下面以软件复杂性和软件可靠性为例做一点介绍。,4、软件度量,4.1软件复杂性一、软件复杂性的基本概念 软件复杂性度量的参数很多,主要有:(1)规模,即软件总共的指令数,或源程序行数。(2)难度,通常用由程序中出现的控制符和操作数
6、的数目所决定的量来表示。(3)结构,通常用程序结构有关的度量来表示。(4)智能度,即算法的难易程度。,4、软件度量 软件复杂性的基本概念,软件复杂性主要表现在程序的复杂性。程序的复杂性主要指模块内程序的复杂性,它直接关联到软件开发费用的多少、开发周期长短和软件内部潜伏错误的多少,同时它也是软件可理解的另一种度量。减少程序复杂性,可提高软件的简单性和可理解性,并使软件开发费用减少,开发周期缩短,软件内部潜藏错误减少。为了度量程序复杂性,要求复杂性度量满足一下假设:,4、软件度量 软件复杂性的基本概念,它可以用来计算任何一种程序的复杂性。对于不合理的程序,例如对于长度动态增长的程序,或者对于原则上
7、无法排错的程序,不应当使用它进行复杂性计算。如果程序中指令条数、附加存储量及计算时间增多,不会减少程序的复杂性。,4、软件度量,二、软件复杂性的度量方法 1.代码行的度量法 度量程序的复杂性,最简单的方法就是统计程序的源代码行数。此方法的基本考虑是统计一个程序的源代码行数,并以源代码行数作为程序复杂性的度量。若设每行代码的出错率为每100行源程序中可能的错误数目,例如每行代码的出错率为1%,则是指每100行源程序中可能有一个错误。,4、软件度量 软件复杂性的度量方法,Thayer曾指出,程序出错率的估计范围是从0.04%7%之间,即每100行源程序中可能存在0.047个错误。他还指出,每行代码
8、的出错率与源程序行数之间不存在简单的线性关系。Lipow进一步指出,对小程序,每行代码的出错率为1.3%1.8%;对于大程序,每行代码的出错率增加到2.7%3.2%之间。但这只是考虑了程序的可执行部分,没有包括程序中的证明部分。Lipow及其他研究者得出一个结论:对于少于,4、软件度量 软件复杂性的度量方法,100个语句的小程序,源代码行数与出错率是线性相关的;随着程序的增大,出错率以非线性方式增长。所以,代码行数度量法只是一个简单的,估计得很粗糙的方法。2.统计复杂性度量。70年代初就已开始从统计学的观点对程序复杂性进行研究。M.Halstead提出把程序操作数和操作符的总数作为程序复杂性度
9、量的标准,提出了程序复杂性的估算因子公式,并将这些结果联系到程序执行时间和故障的估计。,4、软件度量 软件复杂性的度量方法,统计复杂性度量的方法是用程序中出现的操作数和操作符的总次数来估算程序总长度。操作符是语法中像+,-,if,then,else,while,do等这样的语法元素,而操作数是变量,常量等。令N1表示程序中操作符出现的总次数,N2表示程序中操作数出现的总次数,则程序长度N定义为:N=N1+N2 若令n1表示程序中出现的不同操作符的个数,很显然当程序规模大到一定程度,n1会趋向,4、软件度量 软件复杂性的度量方法,一个定数。令n2表示程序中出现的不同操作数的个数,n2随着程序规模
10、的增大而增大,则程序长度N有估算公式 N=n1log2 n1+n2log2 n2 这种统计复杂性度量的方法虽需待程序编制完后才可精确的计算,但若在编制之前进行估测的话,可能比估测指令数量要准确一些。,4、软件度量 软件复杂性的度量方法,3.结构复杂性度量。McCabe度量法 McCabe度量法是一种基于程序控制流的复杂性度量方法。McCabe复杂性度量又称环路度量,它认为程序的复杂性很大程度上取决于控制的复杂性,单一的顺序程序结构最为简单,循环和选择所构成的环路越多,程序就越复杂。这种方法以图论为工具,先画出程序图,然后用该图的环路数作为程序复杂性的度量值。,4、软件度量 软件复杂性的度量方法
11、,图2.25中a,b,c,d,e,f是六个小的子任务。当a任务处理完毕时,下一步的处理取决于a中的某个测试条件,程序将执行任务b,c,d之一。McCabe定义向这样的控制流图的结构复杂性为此平面图中域的个数。所谓域是指图中有连线所形成的有界和无界的封闭区域,如图中的R1,R2,R3,R4,和R5,即V(G)=5.因为区域数随着分支数和循环数的增加而增加,所以V(G)提供了测试复杂性的一种定量度量。实验研究表明,复杂程度V(G)和源程序,4、软件度量 软件复杂性的度量方法,中存在的错误数,以及为了发现和改正这些错误所需要的时间之和存在明显的关系。McCabe还指出,V(G)可以作为最大块规模的定
12、量指标,通过收集大量软件系统的数据表明,V(G)=10看来是块规模的实际上限。当块复杂度 超过这个数时,测试就会变得很困难。在以后讲软件测试时还要讨论这一问题。,4、软件度量 软件复杂性的度量方法,a,b,e,f,c,d,R1,R2,R3,R4,R5,V(G)=5,图 2.25,4、2软件可靠性,4.2软件可靠性 可靠性的含义是:“在给定的时间里,在规定的环境条件下,系统完成所规定的功能的概率”。例如,计算机硬件可靠性度量之一是它的稳定可用程度,用其错误出现和纠正其错误的速率来表示。令MTTF是机器的平均无故障时间,MTTR是错误的平均修复时间,则机器的稳定可用性可定义为:A=MTTF/(MT
13、TF+MTTR),4、2软件可靠性,同样地,软件的可靠性也可以用错误出现和纠正的速率来表示。但是,因为软件生产是一次性事件,不可能使用有关错误的经验数据,所以开发出的软件可靠性预测模型对再生产的软件指导意义不大,但这种模型毕竟是软件可靠性的一种定量分析手段。为了实现可靠性的定量分析,人们尝试建立了各种可靠性分析模型,一些有希望的可靠性模型大致分为如下几类:,4、2软件可靠性,由硬件可靠性理论导出的模型 基于程序内部特性的模型 植入模型 第一类可靠性模型所做的假设是(1)在两次错误出现之间的调试时间随着错误出现率呈指数分布,而错误出现率和剩余错误数成正比。(2)每个错误一经发现,立即排除,并使错
14、误总数减1。(3)产生错误的速率是个常数。,4、2软件可靠性,对于软件来说,上述假设的合法性可能还是个问题。例如,纠正一个错误的同时,可能不小心而产生新的错误,因此,第二个假设显然并不总是成立的。第二类模型试图求出存在于软件中的错误的预期数目。根据软件复杂性度量函数导出的定量关系,这类模型建立在程序中的操作符和操作数的数目与程序中错误的初始估计数之间的关系。,4、2软件可靠性,第三类可靠性模型(植入模型)是由MILLS首先提出的,这种方法一开始用来估算野生动物数或一个池塘内鱼的尾数。比如,要估算池塘内鲢鱼的尾数N,可先放入带有标记的鲢鱼尾数Nt条,过一段时间后,从池塘中捕获鲢鱼。数一数捕获的鲢
15、鱼有n尾,其中带标记的有nt 尾。如果这些带与不带标记的鲢鱼分布均匀,又比较合群,而且捕捉的难易程度相同,那么就可以建立如下的方程式:,Nt,N+Nt,=,nt,n+nt,4、2软件可靠性,其中,Nt,nt,n已知,可求得N为 N=(n/n)t Nt 植入模型就是在软件中“植入”已知错误,并计算发现的植入错误数与发现的实际错误数之比的方法来估计系统的可靠性。要随机地植入带标记的错误到程序中,设程序中尚未发现的残留错误总数为N,植入的错误总数为Nt,在经历一段时间的测试之后,总共发现程序有n个残留错误,其中有nt个带标记的植入错误。假定植入错误和程序中尚未发现的,4、2软件可靠性,残留错误都可以同等难易地被测试到(这个假定实际中并不容易做到)。那么,可用上述公式求出程序中尚未发现的残留错误数N.上述介绍的有关软件复杂性的可靠性预测模型的研究工作还处于初始阶段,有许多理论和技术上的研究工作。,
链接地址:https://www.31ppt.com/p-4096092.html