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