问答题 阅读以下信息系统可靠性问题的说明,根据要求回答下面问题。
[说明]
某软件公司开发一项基于数据流的软件,其系统的主要功能是对输入数据进行多次分析、处理和加工,生成需要的输出数据。需求方对该系统的软件可靠性要求很高,要求系统能够长时间无故障运行。该公司将系统设计交给王工负责。王工给出该系统的模块示意图如图1所示。王工解释:只要各个模块的可靠度足够高,失效率足够低,则整个软件系统的可靠性是有保证的。

图1 王工建议的软件系统模块示意图

李工对王工的方案提出了异议。李工认为王工的说法有两个问题:第一,即使每个模块的可靠度足够高,但是整个软件系统模块之间全部采用串联,则整个软件系统的可靠度明显下降。假设各个模块的可靠度均为0.99,则整个软件系统的可靠度为0.99 4 ≈0.96;第二,软件系统模块全部采用串联结构时,一旦某个模块失效,则意味着整个软件系统失效。
李工认为,应该在软件系统中采用冗余技术中的动态冗余或者软件容错的N版本程序设计技术,对容易失效或者非常重要的模块进行冗余设计,将模块之间的串联结构部分变为并联结构,以此提高整个软件系统的可靠性。同时,李工给出了采用动态冗余技术后的软件系统模块示意图,如图2所示。
问答题 在系统可靠性中,可靠度和失效率是两个非常关键的指标,请分别解释其含义。
【正确答案】
【答案解析】可靠度是指系统在规定的条件下、规定的时间内不发生失效的概率。
失效率又称风险函数,也称为条件失效强度,是指运行至此刻系统未出现失效的情况下,单位时间系统出现失效的概率。 在软件可靠性的定量描述中,可以基于使用条件、规定时间、系统输入、系统使用和软件缺陷等变量构建数学表达式来对软件可靠性进行定量描述。其中,可靠度R(t)是表示可靠性最直接的方式,是指软件系统在规定的条件下、规定的时间内不发生失效的概率。
失效率λ(t)又称风险函数,也可称为条件失效强度,是指运行至此刻系统未出现失效的情况下,单位时间系统出现失效的概率。利用数学用语来描述就是当软件在0~t时刻内没有发生失效的条件下,用f(t)表示失效强度函数,则f(t)=λ(t)gR(t)。
问答题 请解释李工提出的动态冗余和N版本程序设计技术,给出图1中模块M2采用图2动态冗余技术后的可靠度。
请给出采用李工设计方案后整个系统可靠度的计算方法,并计算结果。
【正确答案】
【答案解析】动态冗余又称主动冗余,它是通过故障检测、故障定位及故障恢复等手段达到容错的目的。其主要方式是多重模块待机储备,当系统检测到某工作模块出现错误时,就用一个备用的模块来替代它并重新运行。各备用模块在其待机时,可与主模块一样工作,也可以不工作。前者称为热备份系统(双重系统),后者称为冷备份系统(双工系统、双份系统)。
N版本程序设计是一种静态的故障屏蔽技术,其设计思想是用N个具有相同功能的程序同时执行一项计算,结果通过多数表决来选择。其中N个版本的程序必须由不同的人独立设计,使用不同的方法、设计语言、开发环境和工具来实现,目的是减少N个版本的程序在表决点上相关错误的概率。
M2采用动态冗余后的可靠度为:R M2 =1-(1-0.99)×(1-0.99)×(1-0.99)=0.999999
计算方法是:先按照并联系统的计算方法分别计算出中间M2、M3两个并联系统的可靠度,再按照串联系统的计算方法计算出整个系统的可靠度。
该系统的可靠度R=R M1 ×R M2 ×R M3 ×R M4 =0.99×0.999999×0.999999×0.99≈0.980098 通常情况下,被认可的且具有应用前景的软件可靠性设计技术主要有容错设计、检错设计和降低复杂度设计等技术。其中,常用的软件容错技术主要有恢复块设计、N版本程序设计和冗余设计3种方法。
●恢复块设计就是选择一组操作作为容错设计单元,从而把普通的程序块变为恢复块。
●N版本程序设计的核心是通过设计出多个模块或不同版本,对于相同初始条件和相同输入的操作结果进行多数表决,防止因其中某一软件模块/版本的故障而提供了错误的服务,以实现软件容错。
●冗余设计的思路来源于硬件系统,但又有所不同。动态冗余又称为主动冗余,它通过故障检测、故障定位及故障恢复等手段达到容错的目的。其主要方式是多重模块待机储备,当系统检测到某工作模块出现错误时,就用一个备用的模块来替代它并重新运行。各备用模块在其待机时,可与主模块一样工作,也可以不工作。前者称为热备份系统(双重系统),后者称为冷备份系统(双工系统、双份系统)。
串联系统的可靠度计算公式R=R 1 ×R 2 ×R 3 ×…×R n ;并联系统的可靠度计算公式R=1-(1-R 1 )×(1-R 2 )×(1-R 3 )×…×(1-R n )。依题意,假设各个模块的可靠度均为0.99,图2中模块M2-1、M2-2、M2-3组成一个并联系统,其可靠度R M2 =1-(1-0.99)×(1-0.99)×(1-0.99)=0.999999。
同理,图2中模块M3-1、M3-2、M3-3也组成一个并联系统,其可靠度R M3 =0.999999。
李工给出的设计方案同时采用了模块串联和模块并联方式,整个系统可靠度的计算方法是:先按照并联系统的计算方法分别计算出中间:M2、M3两个并联系统的可靠度,再按照串联系统的计算方法计算出整个系统的可靠度。该系统的可靠度R=R M1 ×R M2 ×R M3 ×R M4 =0.99×0.999999×0.999999×0.99≈0.980098。
问答题 请给出检错技术的优缺点,并说明检测技术常见的实现方式和处理方式。
【正确答案】
【答案解析】检错技术实现的代价一般低于容错技术和冗余技术,但有一个明显的缺点,就是不能自动解决故障,出现故障后如果不进行人工干预,将最终导致软件系统不能正常运行。
检错技术常见的实现方式:
①最直接的一种实现方式是判断返回结果,如果返回结果超出正常范围,则进行异常处理。
②计算运行时间也是一种常用技术,如果某个模块或函数运行时间超过预期时间,可以判断出现故障。
③还有置状态标志位等多种方法。
④自检的实现方式需要根据实际情况来选用。
检错技术的处理方式,大多数都采用“查出故障→停止软件运行→报警”的处理方式。但根据故障的不同情况,也有采用不停止或部分停止软件系统运行的情况,这一般由故障是否需要实时处理来决定。 在无须在线容错或不能采用冗余设计技术的部分,但又有较高的可靠性要求时,一般采用检测性设计,在软件出现故障后能及时发现并报警。检错技术实现的代价一般低于容错技术和冗余技术,但其明显的缺点是不能自动解决故障,出现故障后若没有人工干预,最终将导致系统不能正常运行。
采用检错设计技术要着重考虑检测对象、检测延时、实现方式和处理方式等要素。其中,最直接的一种实现方式是判断返回结果,若返回结果超出正常范围,则进行异常处理;计算运行时间也是一种常用的检错设计技术,如果某个模块或函数运行时间超过预期时间,可以判断出现故障;还有置状态标志位等多种方法,自检的实现方式需要根据实际情况来选用。
检错技术的处理方式也有多种,大多数都采用“查出故障→停止软件运行→报警”的处理方式。但根据故障的不同情况,也有采用不停止或部分停止软件系统运行的情况,这一般由故障是否需要实时处理来决定。