📜  软件工程软件故障机制

📅  最后修改于: 2021-01-10 03:00:45             🧑  作者: Mango

软件故障机制

软件故障可以归类为:

瞬态故障:这些故障仅在特定输入下发生。

永久故障:此故障出现在所有输入上。

可恢复的故障:无需运算符的帮助即可恢复系统。

不可恢复的故障:系统只能在运算符的帮助下恢复。

非损坏故障:故障不会损坏系统状态或数据。

损坏故障:损坏系统状态或数据。

软件故障可能是由于软件应满足的错误,歧义,疏忽或对本应满足的规范的误解,编写代码时的粗心或能力不足,测试不足,软件使用不正确或意外或其他无法预见的问题所致。

硬件与软件的可靠性

Hardware Reliability Software Reliability
Hardware faults are mostly physical faults. Software faults are design faults, which are tough to visualize, classify, detect, and correct.
Hardware components generally fail due to wear and tear. Software component fails due to bugs.
In hardware, design faults may also exist, but physical faults generally dominate. In software, we can simply find a strict corresponding counterpart for “manufacturing” as the hardware manufacturing process, if the simple action of uploading software modules into place does not count. Therefore, the quality of the software will not change once it is uploaded into the storage and start running
Hardware exhibits the failure features shown in the following figure:

Software Failure Mechanisms

It is called the bathtub curve. Period A, B, and C stand for burn-in phase, useful life phase, and end-of-life phase respectively.
Software reliability does not show the same features similar as hardware. A possible curve is shown in the following figure:
Software Failure Mechanisms

If we projected software reliability on the same axes.

硬件和软件曲线之间有两个明显的区别是:

一个区别是,在最后阶段,软件的故障率没有硬件那样高。在这个阶段,该软件即将过时;没有动机进行任何软件升级或更改。因此,故障率不会改变。

第二个区别是,在使用寿命期内,每次进行升级时,软件的失败率都会急剧增加。故障率逐渐趋于平稳,部分原因是由于更新后产生并修复了缺陷。

上图中的升级表示功能升级,而不是可靠性升级。对于功能升级,由于增强了软件的功能,因此可能会增加软件的复杂性。如果错误修复将其他缺陷引入软件,则甚至错误修复也可能是导致更多软件故障的原因。对于可靠性升级,如果升级的目的是增强软件可靠性,例如使用更好的工程方法(如无尘室方法)重新设计或重新实现某些模块,则很可能导致软件故障率下降。

下面列出了软件与硬件相比的独特功能的部分列表:

失败原因:软件缺陷主要是设计缺陷。

磨损:软件没有与能源有关的磨损阶段。错误可能会在没有警告的情况下出现。

可修复的系统:定期重新启动可以帮助修复软件查询。

时间依赖性和生命周期:软件可靠性不是操作时间的目的。

环境因素:不影响软件可靠性,除非它可能影响程序输入。

可靠性预测:软件可靠性不能从任何物理基础上进行预测,因为它完全取决于设计中的人为因素。

冗余:如果使用相同的软件元素,则不能提高软件的可靠性。

界面:软件界面只是视觉上的概念以外。

失效率的诱因:通常无法通过对单独陈述的分析来预测。

内置标准组件:易于理解且经过广泛测试的标准元件将有助于提高可维护性和可靠性。但是在软件行业,我们没有观察到这种趋势。代码重用已经存在了一段时间,但程度很小。除了某些标准化的逻辑结构外,没有用于软件的标准元素。