硬件和软件可靠性差异对比
硬件可靠性工程作为一门学科最早诞生于第二次世界大战期间,用于评估弹道火箭的成功概率. 20世纪50年代,更先进的方法被用于估算国防和航空航天工业中机械、电气及电子元件的使用寿命. 软件可靠性学科则发展较晚,始于1970年代中期软件开发环境趋于稳定之时。多数软件可靠性模型均诞生于这一稳定时期. 然而自1980年代末起,新技术、新范式、新结构化分析概念及新型软件开发方式如潮涌现,并持续至今.
软件错误而引发的系统失效的影响可能是微不足道的,但也可能是灾难性的. 因此,在软件可靠性和安全性方面所做的工作中,应该更关注错误导致的后果,而不是仅仅预防和消除大部分错误.
硬件可靠性与软件可靠性存在很大差异.
|
|
|
|
|
1.失效主要由设计缺陷引起.可通过修改设计来修复,使之在能引发失效的条件下足够稳定.
|
|
2.损耗或其他与能量相关的现象都可能造成失效。有时在失效发生之前会有预警(如系统发出噪声表明系统退化,失效即将发生).
|
2.不存在损耗现象. 软件失效发生前没有预警,虽然很老的软件代码在进行功能升级时会因将错误引入代码而呈现递升的失效率.
|
|
3.没有两个产品是完全相同的. 失效可能由变异引起.
|
3.不存在变异:同一程序的所有副本都是完全相同的.
|
|
4.通过修理可使设备更可靠. 进行预防性维护将零部件修复到如新的状态即属于此种情况.
|
4.不存在修理. 唯一的解决方案是重新设计(重新编程),这时如果消除了错误又没有引入其他错误,那么可以使软件具有更高的可靠性.
|
|
5.可靠性可能与老炼或损耗现象有关,即随着时间的推移,失效率会降低、恒定或上升.
|
5.可靠性基本不依赖于时间. 可靠性可能随时间推移而提高,但这并不是因为与运行时间有关,更确切地讲,是通过检查和纠正错误使代码的可靠性增长而起的作用.
|
|
6.可靠性可能与时间有关,失效的发生是工作(或存储)时间、循环等的函数.
|
6.可靠性与时间无关. 程序执行到某一特定的步骤时,或遇到某一特定的输入条件时,就会触发失效或路径.
|
|
7.可靠性可能与环境因素(如温度、振动、湿度等)有关.
|
7.外部环境不会影响可靠性,除非是其影响了程序输入. 但程序可靠性受到内部机器环境(等待队列、内存泄漏等)的影响.
|
|
8.从原则上讲,可靠性可以被预测,但从设计、零件、使用及环境应力等因素的认识程度讲,大多带有很大的不确定性.
|
8.不能基于任何物理方面对可靠性进行预计,因为它完全取决于设计中的人为因素.虽然也存在某些基于所用开发过程和代码范围的可靠性预计方法,但这些是有争议的.
|
|
9.可通过冗余来提高可靠性. 冗余技术的成功使用意味着设备已具备检测、隔离和切换能力.
|
9.如果并行路径是相同的,那么冗余将不能提高可靠性,因为若某一路径失效,另一路径也存在该项错误. 可以通过由不同的团队编写不同的程序使之具有不同的平行路径来实现冗余.
|
|
10.失效可以发生在系统的零部件中,而且在一定程度上可由零部件上的应力及其他因素对其进行预计. 对于确认高风险的产品项目,可以使用可靠性关键(项目)清单.
|
10.几乎不可能通过分析逐个语句预计失效. 错误可能随机地存在于程序的任何一处,而且任何语句都有可能出错. 大多数错误存在于程序的边界或程序的异常处理中。可靠性关键项目清单并不适用.
|
|
|
|
|
12.已存在可用于生成和分析设计的计算机辅助设计系统.
|
12.尚不存在计算机化的软件设计和分析方法.软件设计更多的是一种 “艺术形式”,缺乏硬件的那种可验证性,除了在一定程度上利用形式化方法.
|
|
13.硬件产品使用标准的零部件作为基本的结构单元.
|
13.软件不存在标准部件,虽然也有标准化的逻辑结构. 软件重用也正在使用,但是程度很有限.
|
|
|
From Practical Reliability Engineering