文档介绍:软件可靠性
第一页,课件共75页
软件可靠性的发展
1968年在西德召开的国际软件工程会议上提出的“软件危机”
美国贝尔(Bell)实验室曾对一个AT&T运行支持系统作了统计,发现80%的故障与软件有关
美国航天飞机上飞行软件有50多万行源代码;而F一22战斗机上的飞行软件的源代码数更是高达150多万行。
另据美国军方的统计,美国军方在武器装备作战使用中遇到的问题,软件问题约占到70%左右。
第二页,课件共75页
美国空军的范登堡中心在60年代后期发生过多次导弹试射失败的事故,事后发现几乎都是由软件错误造成的;
F一18战斗机在海湾战争中,飞行控制软件共发生了500多次故障;
我国某型号飞机首飞前航空电子系统在地面测试中测出的故障共800多个,其中软件故障就达600多个,约占75%。
由于软件故障造成的重大事故不乏其例
第三页,课件共75页
1990年1月15日,美国一通信中转系统新投入使用的软件发生了错误,导致主干线远程网大规模崩溃;
美国的Therac-25放射性治疗仪由于软件存在缺陷导致几个癌症病人受到非常严重的过量放射性治疗,其中4个人因此死亡;
2002年11月28日,欧洲的亚里安娜5型火箭因发动机控制系统软件的错误而导致飞行试验失败。
什么原因??
第四页,课件共75页
调用路径太多
其中每个结点或圆圈代表一段可能以转移语句结束的顺序执行语句,每条弧代表两段程序间的控制转移。,即c→d→e→f→h→m;c→d→e→f→i→m;c→d→e→g→j→m;c→d→e→g→k→m;c→d→l→m,那么从 点A到点B的所有独立路径数为520 +519 +…+51,约为1014 或1016亿。
第五页,课件共75页
(1)故障机理
硬件产生故障的原因有四个方面:即设计问题、生产过程中的问题、超载及耗损。硬件故障主要是由于耗损(物理退化)所致的,而软件不存在物理退化现象。这就决定了软件正确性与软件可靠性密切相关,一个正确的软件任何时刻均可靠;然而一个正确的硬件元器件或系统则可能在某个时刻故障。软件没有耗损问题并不等于没有可靠性问题,因在开发过程中常有一些随机因素,不可避免地会在软件中留下缺陷,因而软件也有可靠性问题。所以硬件的故障机理是耗损,而软件的故障机理就是残留缺陷在一定环境下造成的软件错误。
软件与硬件的不同
第六页,课件共75页
(2)复杂性
软件内部逻辑高度复杂,而硬件内部逻辑较为简单,这就在很大程度上决定了设计错误是导致软件故障的主要原因,而导致硬件故障的可能性则很小。
(3)唯一性
软件是唯一的,软件拷贝不改变软件本身,而任何两个硬件不可能绝对相同。
第七页,课件共75页
软件可靠性的核心是“思考”问题,软件中不可能象硬件那样分解成元部件,它只有语句。语言本身造成的软件故障较少,且通过静态测试(目测或编译)可加修正。软件错误来源主要是软件设计者的思维错误及软件的复杂性,这是难以控制的。故软件可靠性的提高需从人的思维正确性和减少软件的复杂性两方面着手。这正如我们用汉语写文章,观点有错误不能归咎于语言本身不好,而应归咎于人的思想。
(4)可靠性的核心
第八页,课件共75页
由于软件内部逻辑复杂,运行环境动态变化,且不同的软件差异可能很大,因而软件故障机理可能有不同的表现形式。譬如有的故障过程比较简单,易于追踪分析,而有的故障过程可能非常复杂,难于甚至不可能加以详尽描述和分析,尤其是运行于高度复杂实时环境中的大型软件。但总的说来,软件故障机理可描述为:软件缺陷→软件错误→软件故障。
软件故障
第九页,课件共75页
(1)软件缺陷
软件缺陷(Default):软件开发中残留的内在缺陷称为软件缺陷。这些缺陷可以在软件生存期的各个阶段被引入。在软件开发的各阶段,软件始终离不开人的参与,而人难免会犯错误,这样就必然给软件留下不良的痕迹。例如一段程序进行某些数据处理,若在处理过程中就产生软件错误,则说明这段程序存在缺陷或缺少一个程序段。软件缺陷是一个静止的现象,只在一定的输入条件下才能被激活导致软件错误,而且软件错误也不一定导致软件故障,比如容错软件中的错误就可以被检测出来并可纠正或避免,而不导致故障。
第十页,课件共75页