[软件工程]十.可靠性工程(reliable engineering)
1.什么是可靠性工程
- 我们希望软件在给定的时间内,运行的时候不会崩溃或者发生失效,同时能保护我们的数据和个人信息。我们要能够信任我们所使用的软件,这意味着软件必须是可靠的。
- 可靠性(reliability):系统的可靠性是系统在给定的时段内能够正确提供用户希望的服务的可能性,且可以保护系统不崩溃或者失效,和我们的数据和个人信息
2.什么是错误,什么是失效
1)什么是错误(error)
通常指开发人员在软件开发过程中引入的缺陷或问题。错误是故障的根源,是软件系统中潜在的问题,可能在软件运行时导致失效。。
2)什么是失效(failure)
是指软件系统未能满足用户需求或预期行为的情况。失效是故障在软件运行时的表现,是用户直接体验到的问题。
3)什么是故障(fault)
是错误的直接结果,是软件系统中存在的一个具体问题,它可能导致软件在运行时出现异常行为或不正确的结果。
4) 故障(fault)-错误(error)-失效模型(failure Mode)
1>什么是故障-错误-失效模型(fault-error-failure Mode)
即人为故障导致系统故障,
系统故障导致系统错误,
系统错误导致系统失效。
2>图形表示
3.什么是可用性(availability),性能(performance),可依赖性(dependabilty),安全性(safety),信息安全性(security),韧性(resilence),防范性(Defensibility),可靠性(reliability)的定义和区别
1)可用性(Availability)
可用性是指系统在任何给定时间点上,能够正常运行并提供服务的能力。它通常用系统正常运行时间占总时间的比例来衡量。高可用性意味着系统很少或几乎不会出现故障,用户可以随时访问系统并获得服务。
2)性能(Performance)
性能是指系统在执行任务时的效率和响应速度。它包括响应时间、吞吐量、资源利用率等指标。性能好的系统能够快速响应用户请求,并高效地处理大量数据。
3)可依赖性(Dependability)
可依赖性是一个综合性的概念,它包括可用性,可靠性,安全性和信息安全性。(其目的是覆盖系统的可用性,可靠性,安全性和信息安全性。)可依赖性强调的是系统在规定条件下和规定时间内,能够持续提供服务的能力。
4)安全性(Safety)
安全性是指系统在运行过程中,不会对人、环境或财产造成损害的能力。安全性关注的是系统在正常运行和异常情况下的安全保护措施。
5)信息安全性(Security)
信息安全性是指系统保护信息不被未授权访问、泄露、篡改或破坏的能力。它包括数据加密、访问控制、身份验证等措施。是否能抵御意外或蓄意入侵的可能性(鲁棒性)(important)
6)韧性(Resilience)
韧性是指系统在面对干扰性事件(如硬件故障、网络攻击等)时,能够维持关键服务的能力。韧性强调的是系统在遭受攻击或故障后,能够迅速恢复并继续提供服务的能力。
7)防范性(Defensibility)
防范性是指在软件开发过程中,为了确保软件的质量和安全性,所采取的一系列措施和策略。这些措施包括但不限于代码审查、单元测试、集成测试、系统测试、压力测试、安全审计等。
8)可靠性(reliability)
可靠性(reliability):系统的可靠性是系统在给定的时段内能够正确提供用户希望的服务的可能性,且可以保护系统不崩溃或者失效,和我们的数据和个人信息。
9)可用性(Availablity)和可靠性(reliablity)的区别
可用性是指系统在任何给定时间点上,能够正常运行并提供服务的能力。
可靠性是指系统在指定的时间段内可以正常地提供服务,并且提供一些保护系统不崩溃和保护用户数据和信息的能力。
4.可靠性需求(Reliability Requirement)
1)功能性需求:(Functional Requirement)
定义了系统应该包含的检查和修复的手段和修复措施,以及防止系统失效和外部攻击的保护性特征。(提供一些保护系统不崩溃和保护用户数据和信息的能力。)
2)非功能性需求:(Non-functional Requirement)
非功能性需求是对系统的可靠性和可用性的要求做出的规格说明,使用前面描述的度量之一来描述,定义了系统需要的可靠性和可用性。(在任何给定时间点上,能够正常运行并提供服务的能力),多以来,定量的可靠性和可用性规格说明被用于安全关键的系统中,但是很少用在关键的业务流程中。
5.可靠性指标和度量
1)度量可靠性和可用性的指标
-
- 请求失败概率(Probability of Failure On Demand POFOD):(适合偶尔使用的系统)这个度量定义系服务请求将导致失效的可能性。所以POFOD = 0.001意味着提出一个请求是,出现失效(failure)的可能性
例子:假设你有一个紧急情况下的报警按钮,它在紧急情况下被按下时应该立即通知救援人员。如果这个按钮的POFOD是0.001,这意味着在紧急情况下按下按钮时,有0.1%的概率它不会正常工作,导致无法及时通知救援人员。
-
- 失效发生率(Rate Of Failure On Demand ROCOF):(ROCOF常常用于衡量频繁使用的系统)这个度量说明在一段时间内(比如一小时内),或在一定的系统执行次数之内,能够观察到的系统的失效次数,若ROCOF = 0.001,ROCOF的倒数是平均失效间隔时间(Mean Time To Failure MTTF)其常用在可靠性度量中。
例子:考虑一个自动售货机,它每天被使用数百次。如果ROCOF是0.001,这意味着在任何给定的使用中,自动售货机出现故障(比如卡住或不出货)的概率是0.1%。ROCOF的倒数,即平均失效间隔时间(MTTF),将告诉我们这个自动售货机在两次故障之间平均能正常工作多长时间。
-
- 平均失效间隔时间(Mean Time To Failure MTTF):是ROCOF的倒数,常常用在有很长的事务处理序列的系统。
例子:假设你有一辆汽车,它的MTTF是100,000公里,这意味着在正常使用条件下,你的汽车平均每行驶100,000公里就会出现一次故障。这个指标帮助你了解汽车的可靠性。
-
- 可用性(AVAIL):AVAIL是当请求某一服务的时候系统可使用的概率。因此,概率0.9999的可用性是指平均来说系统在运行时间的99.99%是可用。
例子:考虑一个在线银行系统,其可用性是0.9999。这意味着在任何给定的时间点,用户有99.99%的概率能够成功访问和使用这个系统。如果银行系统每天运行24小时,那么它每年大约有52分钟的时间是不可用的(因为1 - 0.9999 = 0.0001,即0.01%的不可用时间)。
2)举个例子
客户说3年故障最多5次,是难以去验证的,是不合理的,我们应该转化为概率的形式,易于衡量。
比如:如果客户的系统是偶尔使用的,那么转化为POFOD = 0.0001,即提出10000次请求,会又一次请求会导致失效。
例子:假设你有一个紧急情况下的报警按钮,它在紧急情况下被按下时应该立即通知救援人员。如果这个按钮的POFOD是0.001,这意味着在紧急情况下按下按钮时,有0.1%的概率它不会正常工作,导致无法及时通知救援人员。
比如:如果客户的系统是经常使用的,那么转化为ROCOF = 0.0001,即在10000次的执行次数内,能观察到一次系统失效。
例子:考虑一个自动售货机,它每天被使用数百次。如果ROCOF是0.001,这意味着在任何给定的使用中,自动售货机出现故障(比如卡住或不出货)的概率是0.1%。ROCOF的倒数,即平均失效间隔时间(MTTF),将告诉我们这个自动售货机在两次故障之间平均能正常工作多长时间。
比如:如果客户的系统有很长的处理序列,那么转化为MTTF = 10000,即每发生一次系统失效的间隔次数为10000次执行。
例子:假设你有一辆汽车,它的MTTF是100,000公里,这意味着在正常使用条件下,你的汽车平均每行驶100,000公里就会出现一次故障。这个指标帮助你了解汽车的可靠性。
比如:可以将用户的需求转化为 AVAIL = 0.999即在请求某一服务的时候,系统可使用的概率是99.99%
例子:考虑一个在线银行系统,其可用性是0.9999。这意味着在任何给定的时间点,用户有99.99%的概率能够成功访问和使用这个系统。如果银行系统每天运行24小时,那么它每年大约有52分钟的时间是不可用的(因为1 - 0.9999 = 0.0001,即0.01%的不可用时间)。
6.如何保证可靠性(dependablity),防范性(defensibility),韧性(resilience),安全性(safety),它的功能性需求和非功能性需求
-
- (画)进行体系结构设计
- 进行需求跟踪: 跟踪需求的变更,确保所有需求都被正确实现。
- 监控和日志:建立监控系统,实时跟踪系统状态,记录关键操作日志,以便于问题追踪和性能分析
- 安全协议:实现加密、认证和授权等安全协议,保护系统免受未授权访问和攻击。