软件可靠性精.ppt

上传人:石*** 文档编号:52419899 上传时间:2022-10-23 格式:PPT 页数:75 大小:5.35MB
返回 下载 相关 举报
软件可靠性精.ppt_第1页
第1页 / 共75页
软件可靠性精.ppt_第2页
第2页 / 共75页
点击查看更多>>
资源描述

《软件可靠性精.ppt》由会员分享,可在线阅读,更多相关《软件可靠性精.ppt(75页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、软件可靠性第1页,本讲稿共75页软件可靠性的发展软件可靠性的发展l1968年在西德召开的国际软件工程会议上提出的年在西德召开的国际软件工程会议上提出的“软软件危机件危机”l美国贝尔(美国贝尔(Bell)实验室曾对一个)实验室曾对一个AT&T运行支持系统运行支持系统作了统计,发现作了统计,发现80%的故障与软件有关的故障与软件有关l美国航天飞机上飞行软件有美国航天飞机上飞行软件有50多万行源代码;而多万行源代码;而F一一22战斗机上的飞行软件的源代码数更是高达战斗机上的飞行软件的源代码数更是高达150多多万行。万行。l另据美国军方的统计,美国军方在武器装备作战使用中遇另据美国军方的统计,美国军方

2、在武器装备作战使用中遇到的问题,软件问题约占到到的问题,软件问题约占到70左右。左右。第2页,本讲稿共75页l美国空军的范登堡中心在美国空军的范登堡中心在60年代后期发生年代后期发生过多次导弹试射失败的事故,事后发现几过多次导弹试射失败的事故,事后发现几乎都是由软件错误造成的;乎都是由软件错误造成的;lF一一18战斗机在海湾战争中,飞行控制软件战斗机在海湾战争中,飞行控制软件共发生了共发生了500多次故障;多次故障;l我国某型号飞机首飞前航空电子系统在地面我国某型号飞机首飞前航空电子系统在地面测试中测出的故障共测试中测出的故障共800多个,其中软件故多个,其中软件故障就达障就达600多个,约占

3、多个,约占75。由于软件故障造成的重大事故不乏其例由于软件故障造成的重大事故不乏其例第3页,本讲稿共75页l1990年年1月月15日,美国一通信中转系统新投日,美国一通信中转系统新投入使用的软件发生了错误,导致主干线远入使用的软件发生了错误,导致主干线远程网大规模崩溃;程网大规模崩溃;l美国的美国的Therac-25放射性治疗仪由于软件存放射性治疗仪由于软件存在缺陷导致几个癌症病人受到非常严重的在缺陷导致几个癌症病人受到非常严重的过量放射性治疗,其中过量放射性治疗,其中4个人因此死亡;个人因此死亡;l2002年年11月月28日,欧洲的亚里安娜日,欧洲的亚里安娜5型火箭型火箭因发动机控制系统软件

4、的错误而导致飞行因发动机控制系统软件的错误而导致飞行试验失败。试验失败。什么原因?什么原因?第4页,本讲稿共75页调用路径太多调用路径太多其中每个结点或圆圈代表一段可能其中每个结点或圆圈代表一段可能以转移语句结束的顺序执行语句,以转移语句结束的顺序执行语句,每条弧代表两段程序间的控制转移。每条弧代表两段程序间的控制转移。程序含有一个最少重复程序含有一个最少重复20次的循环次的循环语句语句.由于有由于有5条贯穿循环体的路径,条贯穿循环体的路径,即即cdefhm;cdefim;cdegjm;cdegkm;cdlm,那么从,那么从 点点A到点到点B的所有独立路的所有独立路径数为径数为520+519+

5、51,约为,约为1014 或或1016亿。亿。第5页,本讲稿共75页(1 1)故障机理)故障机理 硬件产生故障的原因有四个方面:即设计硬件产生故障的原因有四个方面:即设计问题、生产过程中的问题、超载及耗损。硬件故问题、生产过程中的问题、超载及耗损。硬件故障主要是由于耗损(物理退化)所致的,而软件障主要是由于耗损(物理退化)所致的,而软件不存在物理退化现象。这就决定了软件正确性与不存在物理退化现象。这就决定了软件正确性与软件可靠性密切相关,一个正确的软件任何时刻软件可靠性密切相关,一个正确的软件任何时刻均可靠;然而一个正确的硬件元器件或系统则可均可靠;然而一个正确的硬件元器件或系统则可能在某个时

6、刻故障。软件没有耗损问题并不等于能在某个时刻故障。软件没有耗损问题并不等于没有可靠性问题,因在开发过程中常有一些随机没有可靠性问题,因在开发过程中常有一些随机因素,不可避免地会在软件中留下缺陷,因而软因素,不可避免地会在软件中留下缺陷,因而软件也有可靠性问题。所以硬件的故障机理是耗损,件也有可靠性问题。所以硬件的故障机理是耗损,而软件的故障机理就是残留缺陷在一定环境下造而软件的故障机理就是残留缺陷在一定环境下造成的软件错误。成的软件错误。软件与硬件的不同软件与硬件的不同第6页,本讲稿共75页(2)复杂性)复杂性 软件内部逻辑高度复杂,而硬件内部逻软件内部逻辑高度复杂,而硬件内部逻辑较为简单,这

7、就在很大程度上决定了设辑较为简单,这就在很大程度上决定了设计错误是导致软件故障的主要原因,而导计错误是导致软件故障的主要原因,而导致硬件故障的可能性则很小。致硬件故障的可能性则很小。(3 3)唯一性)唯一性 软件是唯一的,软件拷贝不改变软件软件是唯一的,软件拷贝不改变软件本身,而任何两个硬件不可能绝对相同。本身,而任何两个硬件不可能绝对相同。第7页,本讲稿共75页 软件可靠性的核心是软件可靠性的核心是“思考思考”问题,软件中不可能问题,软件中不可能象硬件那样分解成元部件,它只有语句。语言本象硬件那样分解成元部件,它只有语句。语言本身造成的软件故障较少,且通过静态测试身造成的软件故障较少,且通过

8、静态测试(目测目测或编译或编译)可加修正。软件错误来源主要是软件设计者可加修正。软件错误来源主要是软件设计者的思维错误及软件的复杂性,这是难以控制的。故的思维错误及软件的复杂性,这是难以控制的。故软件可靠性的提高需从人的思维正确性和减少软件软件可靠性的提高需从人的思维正确性和减少软件的复杂性两方面着手。这正如我们用汉语写文章,的复杂性两方面着手。这正如我们用汉语写文章,观点有错误不能归咎于语言本身不好,而应归咎于观点有错误不能归咎于语言本身不好,而应归咎于人的思想人的思想。(4 4)可靠性的核心)可靠性的核心 第8页,本讲稿共75页 由于软件内部逻辑复杂,运行环境动态由于软件内部逻辑复杂,运行

9、环境动态变化,且不同的软件差异可能很大,因而软变化,且不同的软件差异可能很大,因而软件故障机理可能有不同的表现形式。譬如有件故障机理可能有不同的表现形式。譬如有的故障过程比较简单,易于追踪分析,而有的故障过程比较简单,易于追踪分析,而有的故障过程可能非常复杂,难于甚至不可能的故障过程可能非常复杂,难于甚至不可能加以详尽描述和分析,尤其是运行于高度复加以详尽描述和分析,尤其是运行于高度复杂实时环境中的大型软件。但总的说来,软杂实时环境中的大型软件。但总的说来,软件故障机理可描述为:件故障机理可描述为:软件缺陷软件缺陷软件错误软件错误软件故障。软件故障。软件故障软件故障第9页,本讲稿共75页(1

10、1)软件缺陷)软件缺陷软件缺陷软件缺陷(Default)(Default):软件开发中残留的内在缺陷称为软软件开发中残留的内在缺陷称为软件缺陷。这些缺陷可以在软件生存期的各个阶段被引入。件缺陷。这些缺陷可以在软件生存期的各个阶段被引入。在软件开发的各阶段,软件始终离不开人的参与,而人难在软件开发的各阶段,软件始终离不开人的参与,而人难免会犯错误,这样就必然给软件留下不良的痕迹。例如一免会犯错误,这样就必然给软件留下不良的痕迹。例如一段程序进行某些数据处理,若在处理过程中就产生软件错段程序进行某些数据处理,若在处理过程中就产生软件错误,则说明这段程序存在缺陷或缺少一个程序段。软件缺误,则说明这段

11、程序存在缺陷或缺少一个程序段。软件缺陷是一个静止的现象,只在一定的输入条件下才能被激活陷是一个静止的现象,只在一定的输入条件下才能被激活导致软件错误,而且软件错误也不一定导致软件故障,比导致软件错误,而且软件错误也不一定导致软件故障,比如容错软件中的错误就可以被检测出来并可纠正或避免,如容错软件中的错误就可以被检测出来并可纠正或避免,而不导致故障。而不导致故障。第10页,本讲稿共75页(2 2)软件错误)软件错误软件错误软件错误(Error)(Error):软件缺陷在一定条件下暴露并导软件缺陷在一定条件下暴露并导致系统在运行中出现可感知的不正常、不正确、不按致系统在运行中出现可感知的不正常、不

12、正确、不按规范执行的内部状态,则认为软件出现规范执行的内部状态,则认为软件出现“错误错误”,简,简称出错。所谓不正确的内部状态,是指在此状态下,称出错。所谓不正确的内部状态,是指在此状态下,当正常的算法继续下去时,就会发生软件故障。软件当正常的算法继续下去时,就会发生软件故障。软件错误是由于软件缺陷造成的。一个错误可能是多个故错误是由于软件缺陷造成的。一个错误可能是多个故障源。例如,在求最大值的程序中,设计人员由于疏障源。例如,在求最大值的程序中,设计人员由于疏忽将求得的平均值作为最大值,这就是一个软件错误。忽将求得的平均值作为最大值,这就是一个软件错误。第11页,本讲稿共75页(3 3)软件

13、故障)软件故障软件故障软件故障(Failure)(Failure):在对错误不作任何纠在对错误不作任何纠正和恢复的情况下,导致系统的输出不满正和恢复的情况下,导致系统的输出不满足用户提供的正式文件上指明的要求或双足用户提供的正式文件上指明的要求或双方协议的条款,称为软件的一次故障。软方协议的条款,称为软件的一次故障。软件故障是由于软存错误造成的一种外部表件故障是由于软存错误造成的一种外部表现,它是动态的、程序执行过程中出现的现,它是动态的、程序执行过程中出现的行为表现。(行为表现。(2 2)中的故障例子,由于没有)中的故障例子,由于没有容错措施,即没有限制和排除软件故障的容错措施,即没有限制和

14、排除软件故障的措施,最终将得到不可接受的结果(平均措施,最终将得到不可接受的结果(平均值),产生软件故障。值),产生软件故障。第12页,本讲稿共75页软件故障的特点软件故障的特点第13页,本讲稿共75页影响软件可靠性的因素影响软件可靠性的因素u运行环境运行环境(剖面剖面)。同一软件在不同运行剖面下,其可靠性行为可同一软件在不同运行剖面下,其可靠性行为可能极不相同。由于软件故障是软件缺陷在一定输入情况下被激能极不相同。由于软件故障是软件缺陷在一定输入情况下被激活的结果,假设软件输入域划分为两个部分:活的结果,假设软件输入域划分为两个部分:G G和和F F:运行剖面:运行剖面不包含不包含F F中的

15、输入,则软件不会出现故障,其可靠性恒为中的输入,则软件不会出现故障,其可靠性恒为l l。反。反之,如果运行剖面不包含之,如果运行剖面不包含G G中的输入,则每一输入情况下均出现中的输入,则每一输入情况下均出现故障,如果没有容错措施则故障,如果没有容错措施则R=0R=0。u软件规模。软件规模。随着软件规模的增大,软件可靠性问题愈显突出。在随着软件规模的增大,软件可靠性问题愈显突出。在我们考虑软件可靠性问题时,软件一般是指中型以上软件我们考虑软件可靠性问题时,软件一般是指中型以上软件(4000-(4000-50005000条以上语句条以上语句),这时可靠性问题难以对付。软件工程实践的一个,这时可靠

16、性问题难以对付。软件工程实践的一个侧面可以反映这一点,即单元测试一般由编程人员本人进行,而综合侧面可以反映这一点,即单元测试一般由编程人员本人进行,而综合测试则需独立的测试人员。软件可靠性增长模型也主要应用于综合测测试则需独立的测试人员。软件可靠性增长模型也主要应用于综合测试阶段。试阶段。u软件内部结构。软件内部结构。软件内部结构一般比较复杂,且动态变化,对可靠性软件内部结构一般比较复杂,且动态变化,对可靠性的影响也不甚清楚。但总的说来,结构越复杂,软件复杂度越高,内的影响也不甚清楚。但总的说来,结构越复杂,软件复杂度越高,内含缺陷数越大,因而软件可靠度越低。含缺陷数越大,因而软件可靠度越低。

17、第14页,本讲稿共75页u软件可靠性设计技术。软件可靠性设计技术。关于软件可靠性设计技术的外延并不明确,关于软件可靠性设计技术的外延并不明确,但一般是指软件设计阶段中采用的用以保证和提高软件可靠性为但一般是指软件设计阶段中采用的用以保证和提高软件可靠性为主要目标的软件技术。主要目标的软件技术。u软件可靠性测试软件可靠性测试。研究表明,软件测试方法与资源投入对软件可靠性。研究表明,软件测试方法与资源投入对软件可靠性有不可忽视的影响。有不可忽视的影响。u软件可靠性管理软件可靠性管理。软件可靠性管理旨在系统管理软件生存期。软件可靠性管理旨在系统管理软件生存期各阶段的可靠性活动,使之系统化、规范化、一

18、体化,这样各阶段的可靠性活动,使之系统化、规范化、一体化,这样就可以避免许多人为错误,以提高软件可靠性。就可以避免许多人为错误,以提高软件可靠性。u软件开发人员能力和经验软件开发人员能力和经验。显然,软件开发人员。显然,软件开发人员(包括测试人员包括测试人员)的能力愈强,经验愈丰富,所犯错误便可能愈少,所得软件产的能力愈强,经验愈丰富,所犯错误便可能愈少,所得软件产品质量愈高,相应的可靠性也愈高。品质量愈高,相应的可靠性也愈高。u软件开发方法软件开发方法。软件工程表明,开发方法对软件可靠性有显著影响。软件工程表明,开发方法对软件可靠性有显著影响。与非结构化方法比较,结构化方法可以明显减少软件缺

19、陷数。与非结构化方法比较,结构化方法可以明显减少软件缺陷数。u软件开发环境软件开发环境。研究表明,程序语言对软件可靠性有影响。譬。研究表明,程序语言对软件可靠性有影响。譬如,结构化语言如,结构化语言AdaAda优于优于FortranFortran语言,而软件测试工具优劣则语言,而软件测试工具优劣则影响测试效果。影响测试效果。第15页,本讲稿共75页软件可靠性定义软件可靠性定义 (1 1)沿用硬件可靠性的定义沿用硬件可靠性的定义,即软件可靠性是指,即软件可靠性是指软件在所规定的环境条件下、规定的时间内,一直软件在所规定的环境条件下、规定的时间内,一直能按要求和规格说明正确地完成任务的性质。这一能

20、按要求和规格说明正确地完成任务的性质。这一性质的概率性质的概率(定量定量)描述也称为可靠度,可用可靠度函描述也称为可靠度,可用可靠度函数表示。可见这是一种面向时间的定义方法,它没有考数表示。可见这是一种面向时间的定义方法,它没有考虑故障的原因、软件产品故障的特点及软件产品的特殊虑故障的原因、软件产品故障的特点及软件产品的特殊性。性。(2 2)软件可靠性定义为:软件可靠性定义为:假定输入和硬件都没有错假定输入和硬件都没有错误,对于一组输入数据,软件能正常运行不发生错误的误,对于一组输入数据,软件能正常运行不发生错误的概率。这是一种面向数据的定义方法。概率。这是一种面向数据的定义方法。建议推荐第1

21、6页,本讲稿共75页软件可靠性技术软件可靠性技术|软件避错技术软件避错技术|软件容错技术软件容错技术|软件测试技术软件测试技术|软件预计技术软件预计技术第17页,本讲稿共75页软件避错技术软件避错技术u软件设计技术软件设计技术(1 1)自顶向下设计自顶向下设计(TDD(TDDTop-Down DesignTop-Down Design)是把系统功能最抽象是把系统功能最抽象描述作为最高层次,并从它出发,把系统分成分级的分系统,称描述作为最高层次,并从它出发,把系统分成分级的分系统,称为层为层(Levels)(Levels)。(2 2)数据结构设计法数据结构设计法。主要注意力集中在信息结构和信息流

22、。主要注意力集中在信息结构和信息流动上,而不是过于集中在所要完成的功能上。如定义数据动上,而不是过于集中在所要完成的功能上。如定义数据结构、标识数据流、定义能使数据流动的操作等。为了防结构、标识数据流、定义能使数据流动的操作等。为了防止数据冲突,须引进中间文件,来实现输入数据与输出数止数据冲突,须引进中间文件,来实现输入数据与输出数据的结构转换处理。据的结构转换处理。(3 3)高级软件)高级软件(HOS(HOSHigher Order Software)Higher Order Software)方法论。这是一方法论。这是一种详细说明和开发可靠软件系统的方法论,是完全面向系统种详细说明和开发可

23、靠软件系统的方法论,是完全面向系统而不是面向传统软件的。高级软件的基本出发点是把一个给而不是面向传统软件的。高级软件的基本出发点是把一个给定的系统看成一个定的系统看成一个“软件软件”,并可用数学模型,并可用数学模型(即函数即函数)来描述。来描述。19741974年年NASANASA将高级软件首次在宇宙飞船模型软件开发中应用,现将高级软件首次在宇宙飞船模型软件开发中应用,现已用于开发宇宙飞船的飞行软件中。已用于开发宇宙飞船的飞行软件中。第18页,本讲稿共75页u软件实现技术软件实现技术(1 1)自顶向下)自顶向下 (Top-Down Programming(Top-Down Programmin

24、g,TDP)TDP)和由底向上程序设计和由底向上程序设计(Bottom(BottomUp ProgrammingUp Programming,BUP)BUP)方法。方法。(2 2)模块程序设计)模块程序设计(MP(MPModular Programming)Modular Programming)的思想是把整个软的思想是把整个软件系统分解成为一系列独立的代码段来实现软件的。每段就叫一个件系统分解成为一系列独立的代码段来实现软件的。每段就叫一个模块,它常常是一个小型的、面向功能性的子程序或函数,每个模模块,它常常是一个小型的、面向功能性的子程序或函数,每个模块用来表示与某个功能有关的一个或多个任

25、务,模块之间的数据通块用来表示与某个功能有关的一个或多个任务,模块之间的数据通信靠接口来完成。模块之间有一定的独立性,可由不同的程序员编信靠接口来完成。模块之间有一定的独立性,可由不同的程序员编程来加快实现的进程。程来加快实现的进程。(3 3)逐步求精程序设计)逐步求精程序设计 (SWRP(SWRPStep Wise Refinement Step Wise Refinement Programming)Programming)的基本思想是:对于一个复杂的问题,先解决容的基本思想是:对于一个复杂的问题,先解决容易部分易部分(给出较粗的框图给出较粗的框图),接着对剩下的问题再作更细的分解,如,接

26、着对剩下的问题再作更细的分解,如此反复,直到所有问题都解决为止。此反复,直到所有问题都解决为止。(4 4)结构化程序设计)结构化程序设计(SP(SPStructure Programming)Structure Programming)概念是强调从程概念是强调从程序结构和风格上来研究程序设计。结构化程序设计严格说不是一种程序序结构和风格上来研究程序设计。结构化程序设计严格说不是一种程序设计的方法,而是编程的一个标准或风格。设计的方法,而是编程的一个标准或风格。第19页,本讲稿共75页软件避错技术的应用软件避错技术的应用在在“美洲豹美洲豹”(Jaguar)飞机的数字式电传飞机的数字式电传飞行控制

27、系统的飞控软件中飞行控制系统的飞控软件中 第20页,本讲稿共75页软件容错技术软件容错技术uN文本技术文本技术第21页,本讲稿共75页N文本特点文本特点独立设计;独立设计;尽量采用不同的算法和数据结构;尽量采用不同的算法和数据结构;不同的语言;不同的语言;不同的程序员来编写。不同的程序员来编写。每个文本程序中设置一个或多个交叉每个文本程序中设置一个或多个交叉检测点,每当文本执行到一个交叉检测点检测点,每当文本执行到一个交叉检测点时便产生一个比较向量,并将比较向量交时便产生一个比较向量,并将比较向量交给表决程序,自己则进入等待状态,等待给表决程序,自己则进入等待状态,等待来自表决驱动的指令。来自

28、表决驱动的指令。第22页,本讲稿共75页比较向量比较向量比较向量比较向量,用于比较的目的。,用于比较的目的。比较状态标志比较状态标志,用来指示在产生比较,用来指示在产生比较向量的过程中是否发生了特殊事件,向量的过程中是否发生了特殊事件,譬如监测到例外条件,遇到文本结尾譬如监测到例外条件,遇到文本结尾等。等。第23页,本讲稿共75页表决程序表决程序激活各文本使之投入运行;激活各文本使之投入运行;接受来自各文本的比较向量;接受来自各文本的比较向量;实现各文本同步;实现各文本同步;比较各文本的比较向量;比较各文本的比较向量;处理比较结果。处理比较结果。第24页,本讲稿共75页恢复块技术恢复块技术第2

29、5页,本讲稿共75页软件容错技术的应用F8纵向数字纵向数字飞行控制系统飞行控制系统在各余度硬件在各余度硬件通道中采用了通道中采用了非相似软件,非相似软件,即即“恢复块恢复块”,也就是,也就是F8DFBW驻留备驻留备份软件份软件(Resident Backup Software简称简称REBUS)第26页,本讲稿共75页软件测试技术软件测试技术u定义:定义:软件测试是为了发现错误而执行软件的过程。或者说软件测试是根软件测试是为了发现错误而执行软件的过程。或者说软件测试是根据软件开发各阶段的说明和程序内部结构,精心设计的测试用例据软件开发各阶段的说明和程序内部结构,精心设计的测试用例(测测试用例试

30、用例)而执行软件及发现错误的过程。而执行软件及发现错误的过程。u软件测试的原则软件测试的原则(1 1)好的测试用例能使从程序中查出以前未发现的错误的可能性增大。)好的测试用例能使从程序中查出以前未发现的错误的可能性增大。(2 2)能查出先前未发现的错误的测试是成功的测试。)能查出先前未发现的错误的测试是成功的测试。(3 3)尽量避免程序员及程序设计机构测试自己的程序,因为软件测)尽量避免程序员及程序设计机构测试自己的程序,因为软件测试中人的心理状态是重要的问题之一。试中人的心理状态是重要的问题之一。第27页,本讲稿共75页软件测试方法软件测试方法(1 1)静态测试。)静态测试。不执行程序而只是

31、检查源程不执行程序而只是检查源程序的结构、文法和过程间的接口是否有错序的结构、文法和过程间的接口是否有错的测试称为静态测试。的测试称为静态测试。(2 2)动态测试。)动态测试。使程序在某种控制环境中使程序在某种控制环境中运行,在完成所要求的功能的同时,检查运行,在完成所要求的功能的同时,检查是否存在不必要的功能的测试称为动态测是否存在不必要的功能的测试称为动态测试。动态测试也称程序测试,是通过测试试。动态测试也称程序测试,是通过测试用例执行程序发现错误的过程。用例执行程序发现错误的过程。第28页,本讲稿共75页测试策略测试策略u“黑盒黑盒”测试法测试法 黑盒测试又称数据驱动黑盒测试又称数据驱动

32、(输入输出驱动输入输出驱动)测试方案。如果将所测试方案。如果将所有输入情况都测试一遍这将是一个天文数字。有输入情况都测试一遍这将是一个天文数字。u“白盒白盒”测试法测试法 白盒测试法又称逻辑驱动测试。它允许人们检查程序的内部白盒测试法又称逻辑驱动测试。它允许人们检查程序的内部结构。使用这一方案时,测试者从检查程序的逻辑着手,按结构。使用这一方案时,测试者从检查程序的逻辑着手,按程序结构测试,即测试程序的每一条路径而不考虑软件说明程序结构测试,即测试程序的每一条路径而不考虑软件说明书的要求。显然,独立路径也是一个天文数字。书的要求。显然,独立路径也是一个天文数字。虽然以上两种极端方案都不可行,但

33、它却给测试提供了考虽然以上两种极端方案都不可行,但它却给测试提供了考虑问题的方向。即应该把程序外部功能和内部结构结合起来,虑问题的方向。即应该把程序外部功能和内部结构结合起来,形成新的测试方案。形成新的测试方案。第29页,本讲稿共75页测试用例设计测试用例设计(1 1)等价划分。把输入域作等价划分,使所设计的测试用例具)等价划分。把输入域作等价划分,使所设计的测试用例具有代表性,即一个测试用例可以代表与其等价的其它测试用有代表性,即一个测试用例可以代表与其等价的其它测试用例。例。(2 2)边值分析。边值分析不是简单地等价类中找一个测试用例,)边值分析。边值分析不是简单地等价类中找一个测试用例,

34、而需经边值分析,并且不仅分析输入的边值还分析输出的边而需经边值分析,并且不仅分析输入的边值还分析输出的边值。值。(3 3)因果图。因果图是一种用于设计测试用例的图形工具,它)因果图。因果图是一种用于设计测试用例的图形工具,它对用自然语言书写的需求或设计规范的内容进行分析,找出对用自然语言书写的需求或设计规范的内容进行分析,找出输入输入(因因)与输出与输出(果果)及其间的逻辑关系,并由图的形式表示出及其间的逻辑关系,并由图的形式表示出来。通过布尔逻辑吸收、合并,删去低效率的测试用例,最后将来。通过布尔逻辑吸收、合并,删去低效率的测试用例,最后将因果图转换成判定表,将判定表中的每一列转换成高效率的

35、测试因果图转换成判定表,将判定表中的每一列转换成高效率的测试用例。用例。IBMIBM公司有几个这样的程序专利。公司有几个这样的程序专利。黑盒方法等价划分,边值分析,因果图,猜测错误白盒方法语句覆盖,判定覆盖,条件覆盖,判定/条件覆盖,多重条件覆盖第30页,本讲稿共75页测试方法测试方法u模块独立测试模块独立测试 模块独立测试或程序单元测试是指测试程序中的单个子程序或模块独立测试或程序单元测试是指测试程序中的单个子程序或过程的测试过程的测试(以下简称模块测试以下简称模块测试)。模块测试的目的是对模块的功能与模块的性能规范或接模块测试的目的是对模块的功能与模块的性能规范或接口规范进行比较,以揭示模

36、块与规范的矛盾。模块测试主要口规范进行比较,以揭示模块与规范的矛盾。模块测试主要是采用白盒测试方法。利用一种或多种白盒测试法对模块的是采用白盒测试方法。利用一种或多种白盒测试法对模块的逻辑结构进行分析,得到一些测试用例,然后根据模块规范逻辑结构进行分析,得到一些测试用例,然后根据模块规范再用黑盒方法对原有的测试用例加以补充。再用黑盒方法对原有的测试用例加以补充。u综合测试综合测试 综合测试是测试程序模块间接口的过程,以发现模块间相互作用综合测试是测试程序模块间接口的过程,以发现模块间相互作用出现的问题。综合测试模块组装方法有自顶向下、自底向上及混合测出现的问题。综合测试模块组装方法有自顶向下、

37、自底向上及混合测试等方法。试等方法。第31页,本讲稿共75页(4 4)猜测错误。凭直觉和经验列出可能有的错误和易错情况表,)猜测错误。凭直觉和经验列出可能有的错误和易错情况表,并写出测试用例。并写出测试用例。(5 5)语句覆盖。选择足够的测试用例使程序中的每条语句至少被执行)语句覆盖。选择足够的测试用例使程序中的每条语句至少被执行一次。这是一个必要但不充分的准则。一次。这是一个必要但不充分的准则。(6 6)判定覆盖。要求程序中的每一个分支语句至少都通过一次,即每)判定覆盖。要求程序中的每一个分支语句至少都通过一次,即每一条判定语句的真值执行一次,假值也执行一次。它较语句覆键的逻一条判定语句的真

38、值执行一次,假值也执行一次。它较语句覆键的逻辑覆盖好些,但同样是不充分的。辑覆盖好些,但同样是不充分的。(7 7)条件覆盖。执行所设计的测试用例,使得判定中的每个条件)条件覆盖。执行所设计的测试用例,使得判定中的每个条件都获得各种可能的结果。它较判定覆盖准则要好,但不能替代都获得各种可能的结果。它较判定覆盖准则要好,但不能替代它。它。(8 8)判定条件覆盖。要求设计足够的测试用例,使得每个判定)判定条件覆盖。要求设计足够的测试用例,使得每个判定中每个条件的所有可能结果至少出现一次,每个判定本身所中每个条件的所有可能结果至少出现一次,每个判定本身所有可能也至少出现一次,同时程序的每个入口点至少要

39、进入有可能也至少出现一次,同时程序的每个入口点至少要进入一次。一次。(9 9)多重条件覆盖。执行所设计的调试情况,使得每个判定中条件结)多重条件覆盖。执行所设计的调试情况,使得每个判定中条件结果的所有可能组合至少出现一次,程序所有入口都至少进入一次,显果的所有可能组合至少出现一次,程序所有入口都至少进入一次,显然这是一种最强的逻辑覆盖准则。然这是一种最强的逻辑覆盖准则。第32页,本讲稿共75页面向对象的软件测试面向对象的软件测试传统的软件测试以结构化软件开发为主,传统的软件测试以结构化软件开发为主,在理论和方法上已经取得丰硕成果,但自在理论和方法上已经取得丰硕成果,但自2020世纪世纪80 8

40、0 年代中后期以来,面向对象软件年代中后期以来,面向对象软件开发技术迅速发展开发技术迅速发展.尽管面向对象技术的基本思想保证了软件尽管面向对象技术的基本思想保证了软件有更高的质量,但因为无论采用什么样的有更高的质量,但因为无论采用什么样的编程技术,编程人员的错误都是不可避免编程技术,编程人员的错误都是不可避免的,而由于面向对象技术开发的软件代码的,而由于面向对象技术开发的软件代码重用率高,更需要严格测试,以避免错误重用率高,更需要严格测试,以避免错误的繁衍。的繁衍。第33页,本讲稿共75页面向对象软件语言特征对测试影响面向对象软件语言特征对测试影响封装性对测试的影响封装性对测试的影响继承性对测

41、试的影响继承性对测试的影响多态和动态绑定对测试的影响多态和动态绑定对测试的影响第34页,本讲稿共75页2.软件建模软件模型是系统分析、设计、实现和测试的蓝图,在软件开发过程中,软件建模是至关重要的环节。面向对象软件测试方法的一个最重要的不同在于其软件模型的改变。第35页,本讲稿共75页传统软件开发所采用的是从过程的角度即结构化方法来建立模型,它采用了模块分解和功能抽象的手段,开发人员把精力集中在控制流程和算法上。面向对象软件开发利用对象、属性和操作作为主要的建模成分对问题进行建模。它从需求分析入手,开发人员可以把精力集中在所研究的问题域上 第36页,本讲稿共75页 目前,UML(Unified

42、 Modeling Language)已成为面向对象分析与设计的标准建模语言。第37页,本讲稿共75页3.测试层次传统软件测试层次面向对象软件测试层次单元测试类测试集成测试类簇(交互)测试系统测试系统测试第38页,本讲稿共75页类测试与传统的单元测试区别第39页,本讲稿共75页类测试的执行顺序第40页,本讲稿共75页类簇测试又称为类的交互测试,它主要考察一组协同操作的类之间的相互作用。第41页,本讲稿共75页系统测试(system testing)是检验系统是否符合要求。面向对象软件的系统测试与传统的系统测试没有太大的区别,仅仅是测试用例的形式不同有所而已。第42页,本讲稿共75页三.对一个实

43、例的模型测试前面已经提到,在软件开发的前期,我们可以对软件进行建模,这使得我们可以在编写具体代码之前先对软件的模型进行测试。代码是通过执行来测试,而模型是通过审查来验证软件设计的正确性、完整性和一致性。第43页,本讲稿共75页对分析和设计模型进行测试的好处在于:1 测试用例可以更早地确定。2 漏洞可在开发过程中早期检测出来,从而节省了时间、金钱和精力。3 对代码测试有指导意义,使之有的放矢。第44页,本讲稿共75页其实模型的测试是融合在建模过程之中的,通过不断地审合发现现有模型的缺陷和疏漏,最终得到的正是经过测试的模型。我将以一个简单的撞球游戏为例,来简要分析一下对一个软件建模和测试的过程。第

44、45页,本讲稿共75页撞球游戏的模型测试运行第46页,本讲稿共75页模型测试过程1.用例建模2.类建模3.动态和交互分析第47页,本讲稿共75页用例建模用例建模有时也称为功能建模,它是通过设想各种可能的用例,进行需求分析,来明确软件应该具备哪些功能,它在很大程度上是面向行为的。我们可以通过UML的用例图(use-case diagram)和各种情景来进行用例建模。第48页,本讲稿共75页用例图第49页,本讲稿共75页情景设计情景1人物:游戏者使用情况:启动撞球游戏,开始比赛,然后按下关闭按钮退出。发生频率:低情景2人物:游戏者使用情况:启动撞球游戏,开始比赛,撞碎所有砖块而获胜。发生频率:中等

45、情景3人物:游戏者使用情况:按下鼠标左键暂停游戏发生频率:低 情景4人物:游戏者使用情况:小球与木棍碰撞,反弹后撞碎一些砖块并与墙相撞。发生频率:高 第50页,本讲稿共75页用例模型审查标准标准对需求的说明完整性 使用用例描述了一个合格产品所需的所有功能。正确性 每个用例都要精确地描述了一个需求一致性 需求之间没有相互矛盾的地方第51页,本讲稿共75页类建模类建模即确定软件所需的类和它们的属性以及类之间的关系。这个过程主要是面向数据的。我们可以通过UML的类图(class diagram)进行类建模。第52页,本讲稿共75页撞球游戏的类图第53页,本讲稿共75页Ballxp类是游戏的核心类,游

46、戏中的数据运算、情形判定和图形绘制都是通过它来完成的。对类属性的构建并不是一件容易的事,需要从用例模型出发,仔细研究全部情景,通过反复审查来确定的。第54页,本讲稿共75页比如为了实现游戏的基本功能,Ballxp类中必须包含有小球、砖块和木棍的状态信息,必须有数据更新、画球、画砖、画木棍的功能。为了响应游戏者的鼠标移动,又要添加接受鼠标信息的接口函数。为了应对小球在不同区域的碰撞,还要对当前的小球位置进行识别。第55页,本讲稿共75页类模型审查标准一个成功的类构建需要在能充分满足需求功能的前提下,各类的职责明析,状态和数据交换顺畅。第56页,本讲稿共75页动态和交互分析面向对象软件是通过一系列

47、消息交互作用来实现的动态过程。UML中可用状态图和顺序图来表述,它可以方便我们分析软件实际运行时的动态过程。第57页,本讲稿共75页撞球游戏的状态图 第58页,本讲稿共75页撞球游戏的顺序图 第59页,本讲稿共75页通过上面的一系列模型和分析,我们可以审查软件在设计上的疏漏。要尽量在编码开始前对设计充分检查,否则,在后期修复错误的代价将相当大。这是模型测试的意义所在。第60页,本讲稿共75页提出面向对象软件测试的必要性概括分析了面向对象软件测试的新特点和方法 运用UML对一个实例进行建模和模型测试第61页,本讲稿共75页我们可以看到,不管是模型测试还是代码测试,对一个面向对象软件的顺利开发都有

48、着重要意义,在今后的实践当中应当自觉运用面向对象软件测试的思想和方法,做到早测试、勤测试,以提高软件的可靠性,尽量降低因修复错误而付出的代价。第62页,本讲稿共75页软件可靠性预计软件可靠性预计软件可靠性预计:软件可靠性预计:由模块可靠性由模块可靠性软件系软件系统的可靠性统的可靠性软件可靠性预计的三个要素:软件可靠性预计的三个要素:模型、数据模型、数据和参数估计和参数估计软件可靠性预计和可靠性测试的关系:软件可靠性预计和可靠性测试的关系:软件可靠性测试为可靠性预计提供数据软件可靠性测试为可靠性预计提供数据 软件可靠性预计给出什么时候停止测试软件可靠性预计给出什么时候停止测试第63页,本讲稿共7

49、5页软件可靠性模型软件可靠性模型模型动 态静 态宏 观微观模型缺陷播种模型数 据 域模型经 验模 型故障时间故障计数Jelinski-MorandaSchick-WolvertonMoranda几何Musa执行时间Littlewood-VerrallGoel-Okumoto NHPPMoranda 几何PossionShooman超几何NeisonHalstead表中表示隶属关系第64页,本讲稿共75页JelinskiMoranda(JM)模型)模型 假设:假设:(1 1)软件最初的错误数)软件最初的错误数N N为常值,用表示在第为常值,用表示在第(i-1)(i-1)个错个错误被改正后,软件投

50、入运行至第次误被改正后,软件投入运行至第次i i故障发生前这个阶故障发生前这个阶段的时间,且故障间隔时间是统计独立的。段的时间,且故障间隔时间是统计独立的。(2 2)在两个相继故障构成的时间间隔内,软件的故障)在两个相继故障构成的时间间隔内,软件的故障率为常数,其大小正比于软件中的残存错误数。率为常数,其大小正比于软件中的残存错误数。(3 3)每个软件错误一经发现,立即被修正,且不考虑修改错)每个软件错误一经发现,立即被修正,且不考虑修改错误的时间,也不产生新的错误。误的时间,也不产生新的错误。(4 4)每次故障后总有并仅有一个错误被排除,因此系统)每次故障后总有并仅有一个错误被排除,因此系统

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁