收藏 分享(赏)

第八讲-软件可靠性设计.ppt

上传人:天天快乐 文档编号:589040 上传时间:2018-04-13 格式:PPT 页数:70 大小:1.50MB
下载 相关 举报
第八讲-软件可靠性设计.ppt_第1页
第1页 / 共70页
第八讲-软件可靠性设计.ppt_第2页
第2页 / 共70页
第八讲-软件可靠性设计.ppt_第3页
第3页 / 共70页
第八讲-软件可靠性设计.ppt_第4页
第4页 / 共70页
第八讲-软件可靠性设计.ppt_第5页
第5页 / 共70页
点击查看更多>>
资源描述

1、第8讲 软件可靠性设计(20),内容,软件可靠性设计概述避错设计查错和改错设计容错设计,1. 概述/1,实质:在常规的软件设计中,应用必须的方法和技术,使程序设计在兼顾用户的各种需求时,全面满足软件的可靠性要求可靠性设计的四种类型:避错设计查错设计改错设计容错设计,2. 避错设计,使软件产品在设计过程中,不发送错误或少发生错误的一种设计方法各种软件工程方法有助于避错可靠性设计的Myers设计原则控制程序的复杂度使系统中的各个模块具有最大的独立性使程序具有合理的层次结构当模块或单元之间的相互作用无法避免时,务必使其联系尽量简单,以防止在模块和单元之间产生未知的边际效应,使设计人员陷入泥潭,无力自

2、拔与用户保持紧密联系,设计原理,1.模块化模块:模块是由边界元素限定的相邻的程序元素(例如数据说明,可执行语句)的序列,而且有一个总体的标识符来代表它如pascal和Ada中的块结构中的Beginend对,或者Java中的因此,过程、函数、子过程、子函数、宏等都可以作为模块面向对象中的对象以及对象内的方法也是模块就是把程序划分成若干个模块,每个模块完成一个子功能,把这些模块集成起来组成一个整体,可以完成指定的功能,解决实际问题。,2018/4/13,5,设计原理,2018/4/13,6,过程、函数VB,设计原理,2018/4/13,7,过程、函数C+,类型标识符 函数名(形式参数表) 语句序列

3、对于过程:类型标识符为void,设计原理,2018/4/13,8,子过程、子函数、子程序,主程序,输入子程序,计算子程序,输出子程序,设计原理,面向对象中的对象以及对象内的方法也是模块,2018/4/13,9,订单,DateRecieveisPrepaidPrice,Dispatch()Close(),2018/4/13,10,软件设计原理,经验1:工作量E(P1+P2)E(P1)+E(P2)经验2:,人类在认识复杂现象的过程中使用的最强有力的思维工具是抽象。人们在实践中认识到,在现实世界中一定事物、状态或过程之间总存在着某些相似的方面(共性)。把这些相似的方面集中和概括起来,暂时忽略它们之间

4、的差异,这就是抽象。或者说抽象就是抽出事物的本质特性而暂时不考虑它们的细节。,2018/4/13,11,2、抽象/逐步求精,2018/4/13,12,例:开发一个CAD软件,实现一个二维绘图系统的全部功能,供低级计算机辅助设计使用。,软件设计原理,在我们考虑对任何问题的模块化解法时,可以抽象出很多层次。在抽象的最高层次使用问题环境的语言,以概括方式叙述问题的解法在较低的层次采用更过程化的方法,把面向问题的术语和面向实现的术语结合起来叙述问题的解法最后,在最低的抽象层次可以直接实现的方法来叙述问题的解法,2018/4/13,13, 抽象层次I:用问题所处环境的术语来描述这个软件。该软件包括一个计

5、算机绘图界面,向绘图员显示图形,以及一个数字化仪界面,用以代替绘图板和丁字尺。所有直线、折线、矩形、圆及曲线的描画、所有的几何计算、所有的剖面图和辅助视图都可以用这个CAD软件实现。,2018/4/13,14, 抽象层次II:任务需求的描述。列出“What”而不是“How”。 CAD SOFTWARE TASKS: user interaction task; 2-D drawing creation task; graphics display task; drawing file management task; END,软件设计原理,2018/4/13,15, 抽象层次III:程序过程表

6、示。以2-D绘图生成任务为例: PROCEDURE 2-D drawing creation REPEAT UNTILE (drawing creation task terminates) DO WHILE (digitizer interaction occurs) Digitizer interface task; DETERMINE drawing request CASE Line: line drawing task; Rectangle: rectangle drawing task; Circle: circle drawing task; END; DO WHILE (key

7、board interaction occurs) keyboard interaction task; PROCESS analysis/computation CASE View: auxiliary view task; Section: cross sectioning task; END; END REPETITION; END PROCEDURE.,软件设计原理,2018/4/13,16,3、信息隐蔽(Information hiding)信息隐蔽使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。,在这个抽象层次上,给出了初步的过程表示,所用的术语都

8、已面向软件,而且模块化的工作已经开始显露。,软件设计原理,2018/4/13,17,4、模块独立性(Module independence)每个模块完成一个相对独立的特定子功能,并且和其他模块之间的接口很简单。模块的独立程度可以由两个定性标准来衡量,这两个标准分别称为耦合性和内聚性。藕合衡量不同模块彼此间互相依赖(连接)的紧密程度;内聚衡量一个模块内部各个元素彼此间结合的紧密程度。一般较较优秀的软件设计应尽量做到高内聚、低耦合,即减弱模块间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。,2018/4/13,18,软件设计原理,2018/4/13,19,独立性的度量:耦合,耦合的七种类型

9、完全独立数据耦合特征耦合控制耦合外部耦合公共耦合内容耦合,2018/4/13,20,独立性的度量:耦合,完全独立两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,2018/4/13,21,独立性的度量:耦合,数据耦合一个模块访问另一个模块时,彼此之间是通过简单数据参数 (不是控制参数、公共数据结构或外部变量) 来交换输入、输出信息的。,2018/4/13,22,独立性的度量:耦合,特征耦合一组模块通过参数表传递记录信息,就是特征记耦合。这个记录是某一数据结构的子结构,而不是简单变量。,2018/4/13,23,独立性的度量:耦合,控制耦合如果一个模块通过传送开关、标

10、志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。,2018/4/13,24,2018/4/13,25,独立性的度量:耦合,公共环境耦合若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。,2018/4/13,26,2018/4/13,27, 公共耦合,问题: 公共部分的改动将影响所有调用它的模块; 公共部分的数据存取无法控制; 复杂程度随耦合模块的个数增加而增加。,2018/4/13,28, 公共耦合,内容耦合,如果发生下列情形,两个模块之间就发生了内容耦合一个模块直接访问另一个模块的内部数据;

11、一个模块不通过正常入口转到另一模块内部;两个模块有一部分程序代码重迭(只可能出现在汇编语言中);一个模块有多个入口。,2018/4/13,29,独立性的度量:耦合,2018/4/13,30,A访问C的内部数据, 内容耦合,2018/4/13,31,A不通过正常入口而转入C的内部。, 内容耦合,独立性的度量:耦合,独立性的度量:耦合,应遵循以下原则:尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合,2018/4/13,32,2018/4/13,33,独立性的度量:内聚,内聚标志一个模块内各个元素彼此紧密结合的紧密程度。七种内聚:1.偶然内聚2.逻辑内聚3.时间内

12、聚4.过程内聚5.通信内聚6.顺序内聚7.功能内聚,功能内聚一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块为功能内聚模块。功能内聚是最强也是最好的一种内聚。例子:Sin(),GetCustomerName(),2018/4/13,34,顺序内聚顺序内聚是指模块中各成分有顺序关系,某一成分的输出数据是另一成分的输入数据。,2018/4/13,35,通信内聚如果模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据,则称为通信内聚或者说:如果一个模块的所有成分都操作同一个数据集或者生成同一数

13、据集通常,通信内聚模块是通过数据流图来定义的。,2018/4/13,36,过程内聚如果一个模块内部的处理成分是相关的,而且这些处理必须以特定的次序执行,则称为过程内聚使用流程图做为工具设计程序时,把流程图中的某一部分划出组成模块,就得到过程内聚模块。例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。问题:请大家举个生活中必须遵照特定次序的例子? 答案:排队买饭(队列,要求先进先出)。,2018/4/13,37,时间内聚某个模块包含的任务(操作)必须在同一时间内执行如:模块完成各种初始化工作,2018/4/13,38,逻辑内聚这种模块把几种相关的功能组合在一

14、起,每次被 调用时,由传送给模块的判定参数来确定该模块 应执行哪一种功能。,2018/4/13,39,偶然内聚巧合内聚 (偶然内聚)。当模块内各部分之间没有联系,或者即使有联系,这种联系也很松散,则称这种模块为巧合内聚模块,它是内聚程度 最低的模块。,2018/4/13,40,2018/4/13,41,2018/4/13,42,设计内聚的原则设计时应尽力争取做到高内聚,并且能够辨识出低内聚的模块,并采取措施进行修改,以提高模块的内聚程度、降低模块间的耦合程度,从而获得较高的模块独立性,2018/4/13,43,争取低耦合、高内聚(增加内聚 减少耦合)如果在几个模块中发现共有的子功能,一般应该将

15、该子功能独立出来作为一个模块,以提高模块的独立性合并那些具有较多的控制信息传递的模块以降低模块之间的耦合度,启发性规则,2018/4/13,44,2. 模块规模适中:过大不易理解;太小则接口开销过大。注意分解后不应降低模块的独立性。3. 适当控制 深度、宽度、扇出、扇入 深度 = 分层的层数。宽度越大系统越复杂 宽度 = 同一层上模块数的最大值。过大表示系统复杂度大。,2018/4/13,45,启发性规则,系统结构,2018/4/13,46,扇出 = 一个模块直接调用控制的模块数。 3 fan-out 9扇出越大意味着模块过分复杂,应该适当增加中间层扇出太小则可以把下级模块进一步分解成若干子模

16、块,或者把该模块合并到它的上级模块中,启发性规则,启发性规则,2018/4/13,47, 扇入 = 直接调用该模块的模块数在不破坏独立性的前提下,fan-in 大的比较好。,一个好的软件结构通常顶层扇出较高,中间层扇出较低,底层又高扇入到公共模块中去,2018/4/13,48,4、作用域在控制域内 控制域:包含该模块和所有从属于该模块的模块,M的控制域为 M,A,B,C, 作用域:模块中的一个判定所影响的模块。,启发性规则,2018/4/13,49,TOP,C,D,E,F,A,B,TOP,C,D,E,F,A,B,模块D的作用域超出控制域,D的作用域在控制域内,2018/4/13,50,2018

17、/4/13,51,5、降低接口的复杂程度:接口复杂可能表明模块的独立性差。6、设计单入单出的模块。当从顶部进入模块并且从底部退出时,软件是比较容易理解和维护的,启发性规则,启发性规则,7、模块功能可预测 相同输入必产生相同输出。反例:模块中使用全局变量或静态变量,则可能导致不可预测。,2018/4/13,52,3. 查错和改错设计,避错设计不能完全避免错误需要设计能够具有自动查错和改错功能的方法查错设计被动式检测主动式检测,3.1 被动式错误检测/1,适用于软件的各种结构层次,用来检测从一个单元、模块向另一个单元、模块传递的错误征兆和检测存在于单元、模块内部的错误原则相互怀疑原则立即检测原则,

18、3.1 被动式错误检测/2,方法:取决于软件的用途、功能、结构和算法,没有通用的模式,可选择的方法检查每个输入数据的属性按照已知的数据极限检查输入数据检查所有的多值数据的有效性如果输入数据存在明显的冗余成分,应检查二者的一致性如果输入数据中不存在冗余,可以对输入数据求和,比较输入数据与内部数据的一致性,3.1 被动式错误检测/3,发生错误后立即停止程序运行,检错不停止程序,记录错误,3.2 主动式错误检测/1,赋予程序特殊功能,主动搜索错误,并进行指示由检测监视器承担,对系统的有关的数据主动进行扫描,例如:合理运行时间的异常过程系统中丢失的文件长时间内未完成的输入,输出操作主动系统诊断可以作为

19、周期性的任务来安排,3.2 主动式错误检测/2,如操作系统中的存储管理模块,具有向用户程序和操作系统的其它模块出借存储区域的功能,然而用户程序或其他模块的错误有时会造成借出去的存储区域不能返回给存储管理模块.主动式检测能及时发现这类问题,3.3 改错设计,希望软件具有自动改正错误的功能需要“智能”,困难很大,所以目前采用的方法多半是隔离错误.实现用户隔离就是防止一个用户程序的失效,影响其它用户程序及整个系统正常运行的关键措施例如贝尔实验室TSPS系统,电话换接系统,可靠性要求为40年内停止工作时间不超过两小时,整机停机是极为严重的任务,而常见的故障,例如某个电话线连接中断,则是可以允许的失误。

20、TSPS系统使用被动和主动查错及改错技术来减少系统失效,策略是尽快检测出某些特殊类型的错误,并控制其扩散.即使损失某些数据也在所不惜,4. 容错设计,容错计算系统能够在出现一定限度的失效的情况下,依旧能够提供所需要的服务. 这些失效的发生是由于系统的组件或者系统设计中存在缺陷所导致的. 构造大型的计算系统是一个复杂的任务; 要使系统具有容错能力就更复杂,除非采用合适的系统构造概念.传统的硬件系统的容错方法建立在对物理组件失效模式的影响的深入了解的基础上. 传统的硬件容错方法一般不足以处理设计上的缺陷. 因此,绝大多数硬件的容错方法不能运用到软件上,因为软件中绝大多数的缺陷都是设计缺陷,两种方法

21、N文本法静态冗余恢复块法动态冗余增加了资源消耗,容错技术不宜普遍采用,4.1 N文本法,相对于一个给定的功能,由N(N2)个不同的设计组独立编制出N个不同的程序,然后同时在N个机器上运行并比较运行的结果如果结果一致,认为结果正确如果结果不尽相同,按多数表决或其它预先制定的策略,判定结果的正确性,优点:没有服务中断,4.2 恢复块机制,某一恢复块结构的句法:ensureby P0 else-by P1 else fail 软件系统带有3个部分,两个程序P0 (主要的) 和P1 (可选的), 和接受性测试(acceptance test). 系统的设计就是按照句法所指的控制结构.执行P0,如果满足

22、接受性测试,正常返回,如果不符合测试条件,或者超过了规定时间,发出调用替补过程P1的指令,如果再次失败或再次超时,则出错只要一台计算机,案例:阿丽亚娜5型火箭软件设计的反思,1996年6月,欧洲航天局研制的”阿丽亚娜5型火箭”在法国圭亚那库鲁航天中心首次发射,这次发射因空中云层过厚而被推迟了1小时.随后高51.4米,通体银白的火箭离开发射台升空约30秒,距地面约4000米时,半空穿来两声巨大的爆炸声.70亿美元的研制费用,上万人10余年的心血,瞬息间付之一炬.外电报称:这是自1986年美国”挑战者”航天飞机爆炸后,世界航天史上的又一大悲剧.,事件发生后,欧洲航天局成立的专门的调查委员会,经过6

23、周的调查,确认失败的原因为:阿丽亚娜5型火箭在主发动机点火顺序开始37秒后,制导和姿势信息完全遗失造成的,信息遗失是由于惯性制导系统的软件出现规格和设计错误.,原因一:在需求分析和设计中,没有对惯性制导系统中”重用”软件的合理性,进行可行性分析和认证采用了阿丽亚娜4型火箭的惯性制导系统.但5型的功率和飞行速度都远大于4型,惯性制导系统把64位的浮点数转换为一个带符合的整数时,由于数量太大而超限,原因二:查错设计的失误对于这种非常重要的操作数的转换,本来应该在设计时加以防范,设计人员也考虑到了这一点,他们发现7个变量可能引起操作数有差错,但是由于计算机的最大工作负荷已达80%,于是它们只对其中4个变量进行了保护,原因三:改错设计的失误在许多安全关键系统中,如果发现关键失效发生,通常采用紧急停机的措施.,原因四:容错方法的失误阿丽亚娜5型的设计师们非常重视可靠性技术中的冗余设计技术.火箭的惯性制导系统采用双备冗余.火箭上的主计算机也是双备冗余,飞行控制系统的许多单元也是双备冗余.但是他们忽视了软件容错的特殊性,在硬件的热备份系统中使用了完全相同的软件版本,只做到了硬件容错,小结,软件可靠性设计与硬件有差别避错设计查错和改错设计容错设计,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经济财会 > 贸易

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报