第八讲软件可靠性设计_第1页
第八讲软件可靠性设计_第2页
第八讲软件可靠性设计_第3页
第八讲软件可靠性设计_第4页
第八讲软件可靠性设计_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八讲软件可靠性设计第一页,共七十页,编辑于2023年,星期一内容软件可靠性设计概述避错设计查错和改错设计容错设计第二页,共七十页,编辑于2023年,星期一1.概述/1实质:在常规的软件设计中,应用必须的方法和技术,使程序设计在兼顾用户的各种需求时,全面满足软件的可靠性要求可靠性设计的四种类型:避错设计查错设计改错设计容错设计第三页,共七十页,编辑于2023年,星期一2.避错设计使软件产品在设计过程中,不发送错误或少发生错误的一种设计方法各种软件工程方法…有助于避错可靠性设计的Myers设计原则控制程序的复杂度使系统中的各个模块具有最大的独立性使程序具有合理的层次结构当模块或单元之间的相互作用无法避免时,务必使其联系尽量简单,以防止在模块和单元之间产生未知的边际效应,使设计人员陷入泥潭,无力自拔与用户保持紧密联系第四页,共七十页,编辑于2023年,星期一设计原理1.模块化模块:模块是由边界元素限定的相邻的程序元素(例如数据说明,可执行语句)的序列,而且有一个总体的标识符来代表它如pascal和Ada中的块结构中的Begin…end对,或者Java中的{}因此,过程、函数、子过程、子函数、宏等都可以作为模块面向对象中的对象以及对象内的方法也是模块就是把程序划分成若干个模块,每个模块完成一个子功能,把这些模块集成起来组成一个整体,可以完成指定的功能,解决实际问题。2023/6/55第五页,共七十页,编辑于2023年,星期一设计原理2023/6/56过程、函数——VB第六页,共七十页,编辑于2023年,星期一设计原理2023/6/57过程、函数——C++类型标识符函数名(形式参数表){

语句序列}对于过程:类型标识符为void第七页,共七十页,编辑于2023年,星期一设计原理2023/6/58子过程、子函数、子程序主程序输入子程序计算子程序输出子程序第八页,共七十页,编辑于2023年,星期一设计原理面向对象中的对象以及对象内的方法也是模块2023/6/59订单DateRecieveisPrepaidPriceDispatch()Close()第九页,共七十页,编辑于2023年,星期一2023/6/510软件设计原理经验1:工作量E(P1+P2)>E(P1)+E(P2)经验2:成本成本/模块最小成本区接口成本软件总成本模块数目第十页,共七十页,编辑于2023年,星期一人类在认识复杂现象的过程中使用的最强有力的思维工具是抽象。人们在实践中认识到,在现实世界中一定事物、状态或过程之间总存在着某些相似的方面(共性)。把这些相似的方面集中和概括起来,暂时忽略它们之间的差异,这就是抽象。或者说抽象就是抽出事物的本质特性而暂时不考虑它们的细节。2023/6/5112、抽象/逐步求精

第十一页,共七十页,编辑于2023年,星期一2023/6/512例:开发一个CAD软件,实现一个二维绘图系统的全部功能,供低级计算机辅助设计使用。软件设计原理在我们考虑对任何问题的模块化解法时,可以抽象出很多层次。在抽象的最高层次使用问题环境的语言,以概括方式叙述问题的解法在较低的层次采用更过程化的方法,把面向问题的术语和面向实现的术语结合起来叙述问题的解法最后,在最低的抽象层次可以直接实现的方法来叙述问题的解法第十二页,共七十页,编辑于2023年,星期一2023/6/513

抽象层次I:用问题所处环境的术语来描述这个软件。该软件包括一个计算机绘图界面,向绘图员显示图形,以及一个数字化仪界面,用以代替绘图板和丁字尺。所有直线、折线、矩形、圆及曲线的描画、所有的几何计算、所有的剖面图和辅助视图都可以用这个CAD软件实现……。第十三页,共七十页,编辑于2023年,星期一2023/6/514抽象层次II:任务需求的描述。列出“What”而不是“How”。

CADSOFTWARETASKS:userinteractiontask;2-Ddrawingcreationtask;graphicsdisplaytask;drawingfilemanagementtask;

END软件设计原理第十四页,共七十页,编辑于2023年,星期一2023/6/515抽象层次III:程序过程表示。以2-D绘图生成任务为例:

PROCEDURE2-DdrawingcreationREPEATUNTILE(drawingcreationtaskterminates)DOWHILE(digitizerinteractionoccurs)Digitizerinterfacetask;DETERMINEdrawingrequestCASELine:linedrawingtask;Rectangle:rectangledrawingtask;Circle:circledrawingtask;

……END;

DOWHILE(keyboardinteractionoccurs)keyboardinteractiontask;PROCESSanalysis/computationCASEView:auxiliaryviewtask;Section:crosssectioningtask;

……END;

……ENDREPETITION;

ENDPROCEDURE.

软件设计原理第十五页,共七十页,编辑于2023年,星期一2023/6/5163、信息隐蔽(Informationhiding)信息隐蔽使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。

在这个抽象层次上,给出了初步的过程表示,所用的术语都已面向软件,而且模块化的工作已经开始显露。软件设计原理第十六页,共七十页,编辑于2023年,星期一2023/6/517f1f2f3……fi……fnSgi(X,S)S’输出输出第十七页,共七十页,编辑于2023年,星期一4、模块独立性(Moduleindependence)每个模块完成一个相对独立的特定子功能,并且和其他模块之间的接口很简单。模块的独立程度可以由两个定性标准来衡量,这两个标准分别称为耦合性和内聚性。藕合衡量不同模块彼此间互相依赖(连接)的紧密程度;内聚衡量一个模块内部各个元素彼此间结合的紧密程度。一般较较优秀的软件设计应尽量做到高内聚、低耦合,即减弱模块间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。2023/6/518软件设计原理第十八页,共七十页,编辑于2023年,星期一2023/6/519GreatdealofdependenceIndependent

HighlycoupledLooselycoupledUncoupled独立性的度量:耦合第十九页,共七十页,编辑于2023年,星期一耦合的七种类型完全独立数据耦合特征耦合控制耦合外部耦合公共耦合内容耦合2023/6/520第二十页,共七十页,编辑于2023年,星期一独立性的度量:耦合完全独立两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的2023/6/521第二十一页,共七十页,编辑于2023年,星期一独立性的度量:耦合数据耦合一个模块访问另一个模块时,彼此之间是通过简单数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的。2023/6/522第二十二页,共七十页,编辑于2023年,星期一独立性的度量:耦合特征耦合一组模块通过参数表传递记录信息,就是特征记耦合。这个记录是某一数据结构的子结构,而不是简单变量。2023/6/523第二十三页,共七十页,编辑于2023年,星期一独立性的度量:耦合控制耦合如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。2023/6/524ABFlagF2F1Fn…………Flag第二十四页,共七十页,编辑于2023年,星期一2023/6/525独立性的度量:耦合第二十五页,共七十页,编辑于2023年,星期一公共环境耦合若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。2023/6/526第二十六页,共七十页,编辑于2023年,星期一2023/6/527公共耦合

Global:V1V2A:……………………A1=V1+V2……………………B:……………………V1=B1……………………Global:V1V2A:……………………V1++……………………B:……………………V2=B1+V1……………………问题:

公共部分的改动将影响所有调用它的模块;

公共部分的数据存取无法控制;

复杂程度随耦合模块的个数增加而增加。第二十七页,共七十页,编辑于2023年,星期一2023/6/528公共耦合

第二十八页,共七十页,编辑于2023年,星期一内容耦合,如果发生下列情形,两个模块之间就发生了内容耦合一个模块直接访问另一个模块的内部数据;一个模块不通过正常入口转到另一模块内部;两个模块有一部分程序代码重迭(只可能出现在汇编语言中);一个模块有多个入口。2023/6/529第二十九页,共七十页,编辑于2023年,星期一独立性的度量:耦合2023/6/530A访问C的内部数据内容耦合第三十页,共七十页,编辑于2023年,星期一2023/6/531A不通过正常入口而转入C的内部。……ABCDA:……………………gotoC1……………………C:……………………C1:…………内容耦合独立性的度量:耦合第三十一页,共七十页,编辑于2023年,星期一独立性的度量:耦合应遵循以下原则:尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合2023/6/532第三十二页,共七十页,编辑于2023年,星期一2023/6/533独立性的度量:内聚内聚标志一个模块内各个元素彼此紧密结合的紧密程度。七种内聚:1.偶然内聚2.逻辑内聚3.时间内聚4.过程内聚5.通信内聚6.顺序内聚7.功能内聚第三十三页,共七十页,编辑于2023年,星期一功能内聚一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块为功能内聚模块。功能内聚是最强也是最好的一种内聚。例子:Sin(),GetCustomerName()2023/6/534第三十四页,共七十页,编辑于2023年,星期一顺序内聚顺序内聚是指模块中各成分有顺序关系,某一成分的输出数据是另一成分的输入数据。2023/6/535第三十五页,共七十页,编辑于2023年,星期一通信内聚如果模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据,则称为通信内聚或者说:如果一个模块的所有成分都操作同一个数据集或者生成同一数据集通常,通信内聚模块是通过数据流图来定义的。2023/6/536第三十六页,共七十页,编辑于2023年,星期一过程内聚如果一个模块内部的处理成分是相关的,而且这些处理必须以特定的次序执行,则称为过程内聚使用流程图做为工具设计程序时,把流程图中的某一部分划出组成模块,就得到过程内聚模块。例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。问题:请大家举个生活中必须遵照特定次序的例子?答案:排队买饭(队列,要求先进先出)。2023/6/537第三十七页,共七十页,编辑于2023年,星期一时间内聚某个模块包含的任务(操作)必须在同一时间内执行如:模块完成各种初始化工作2023/6/538第三十八页,共七十页,编辑于2023年,星期一逻辑内聚这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。2023/6/539A:Readinputsfromdiskfromtapefrom……第三十九页,共七十页,编辑于2023年,星期一偶然内聚巧合内聚(偶然内聚)。当模块内各部分之间没有联系,或者即使有联系,这种联系也很松散,则称这种模块为巧合内聚模块,它是内聚程度最低的模块。2023/6/540第四十页,共七十页,编辑于2023年,星期一2023/6/541第四十一页,共七十页,编辑于2023年,星期一2023/6/542设计内聚的原则设计时应尽力争取做到高内聚,并且能够辨识出低内聚的模块,并采取措施进行修改,以提高模块的内聚程度、降低模块间的耦合程度,从而获得较高的模块独立性第四十二页,共七十页,编辑于2023年,星期一2023/6/543争取低耦合、高内聚(增加内聚>减少耦合)如果在几个模块中发现共有的子功能,一般应该将该子功能独立出来作为一个模块,以提高模块的独立性合并那些具有较多的控制信息传递的模块以降低模块之间的耦合度启发性规则第四十三页,共七十页,编辑于2023年,星期一2023/6/5442.模块规模适中:过大不易理解;太小则接口开销过大。注意分解后不应降低模块的独立性。3.适当控制——

深度、宽度、扇出、扇入深度=分层的层数。宽度越大系统越复杂宽度=同一层上模块数的最大值。过大表示系统复杂度大。第四十四页,共七十页,编辑于2023年,星期一2023/6/545启发性规则系统结构第四十五页,共七十页,编辑于2023年,星期一2023/6/546扇出=一个模块直接调用\控制的模块数。3fan-out9扇出越大意味着模块过分复杂,应该适当增加中间层扇出太小则可以把下级模块进一步分解成若干子模块,或者把该模块合并到它的上级模块中AA的扇出启发性规则第四十六页,共七十页,编辑于2023年,星期一启发性规则2023/6/547AA的扇入

扇入=直接调用该模块的模块数在不破坏独立性的前提下,fan-in

大的比较好。一个好的软件结构通常顶层扇出较高,中间层扇出较低,底层又高扇入到公共模块中去第四十七页,共七十页,编辑于2023年,星期一2023/6/5484、作用域在控制域内控制域:包含该模块和所有从属于该模块的模块MACBM的控制域为{M,A,B,C}作用域:模块中的一个判定所影响的模块。启发性规则第四十八页,共七十页,编辑于2023年,星期一2023/6/549TOP

CD

E

FABTOPCD

E

FAB模块D的作用域超出控制域D的作用域在控制域内第四十九页,共七十页,编辑于2023年,星期一2023/6/550第五十页,共七十页,编辑于2023年,星期一2023/6/5515、降低接口的复杂程度:接口复杂可能表明模块的独立性差。6、设计单入单出的模块。当从顶部进入模块并且从底部退出时,软件是比较容易理解和维护的启发性规则第五十一页,共七十页,编辑于2023年,星期一启发性规则7、模块功能可预测——

相同输入必产生相同输出。反例:模块中使用全局变量或静态变量,则可能导致不可预测。2023/6/552第五十二页,共七十页,编辑于2023年,星期一3.查错和改错设计避错设计不能完全避免错误需要设计能够具有自动查错和改错功能的方法查错设计被动式检测主动式检测第五十三页,共七十页,编辑于2023年,星期一3.1被动式错误检测/1适用于软件的各种结构层次,用来检测从一个单元、模块向另一个单元、模块传递的错误征兆和检测存在于单元、模块内部的错误原则相互怀疑原则立即检测原则第五十四页,共七十页,编辑于2023年,星期一3.1被动式错误检测/2方法:取决于软件的用途、功能、结构和算法,没有通用的模式,可选择的方法检查每个输入数据的属性按照已知的数据极限检查输入数据检查所有的多值数据的有效性如果输入数据存在明显的冗余成分,应检查二者的一致性如果输入数据中不存在冗余,可以对输入数据求和,比较输入数据与内部数据的一致性第五十五页,共七十页,编辑于2023年,星期一3.1被动式错误检测/3发生错误后立即停止程序运行,检错不停止程序,记录错误第五十六页,共七十页,编辑于2023年,星期一3.2主动式错误检测/1赋予程序特殊功能,主动搜索错误,并进行指示由检测监视器承担,对系统的有关的数据主动进行扫描,例如:合理运行时间的异常过程系统中丢失的文件长时间内未完成的输入,输出操作主动系统诊断可以作为周期性的任务来安排第五十七页,共七十页,编辑于2023年,星期一3.2主动式错误检测/2如操作系统中的存储管理模块,具有向用户程序和操作系统的其它模块出借存储区域的功能,然而用户程序或其他模块的错误有时会造成借出去的存储区域不能返回给存储管理模块.主动式检测能及时发现这类问题第五十八页,共七十页,编辑于2023年,星期一3.3改错设计希望软件具有自动改正错误的功能需要“智能”,困难很大,所以目前采用的方法多半是隔离错误.实现用户隔离就是防止一个用户程序的失效,影响其它用户程序及整个系统正常运行的关键措施例如贝尔实验室TSPS系统,电话换接系统,可靠性要求为40年内停止工作时间不超过两小时,整机停机是极为严重的任务,而常见的故障,例如某个电话线连接中断,则是可以允许的失误。TSPS系统使用被动和主动查错及改错技术来减少系统失效,策略是尽快检测出某些特殊类型的错误,并控制其扩散.即使损失某些数据也在所不惜第五十九页,共七十页,编辑于2023年,星期一4.容错设计容错计算系统能够在出现一定限度的失效的情况下,依旧能够提供所需要的服务.这些失效的发生是由于系统的组件或者系统设计中存在缺陷所导致的.构造大型的计算系统是一个复杂的任务;要使系统具有容错能力就更复杂,除非采用合适的系统构造概念.传统的硬件系统的容错方法建立在对物理组件失效模式的影响的深入了解的基础上.传统的硬件容错方法一般不足以处理设计上的缺陷.因此,绝大多数硬件的容错方法不能运用到软件上,因为软件中绝大多数的缺陷都是设计缺陷第六十页,共七十页,编辑于2023年,星期一两种方法N文本法静态冗余恢复块法动态冗余增加了资源消耗,容错技术不宜普遍采用第六十一页,共七十页,编辑于2023年,星期一4.1N文本法相对于一个给定的功能,由N(N>2)个不同的设计组独立编制出N个不同的程序,然后同时在N个机器上运行并比较运行的结果如果结果一致,认为结果正确如果结果不尽相同,按多数表决或其它预先制定的策略,判定结果的正确性优点:没有服务中断第六十二页,共七十页,编辑于2023年,星期一4.2恢复块机制某一恢复块结构的句法:

ensure<acceptancetest>byP0

else-byP1else

fail

软件系统带有3个部分,两个程序P0(主要的)和P1(可选的),和接受性测试(acceptancetest).系统的设计就是按照句法所指的控制结构.执行P0,如果满足接受性测试,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论