产生软件产品可靠性问题的主要因素与解决方法论文
摘要:进行软件产品的可靠性分析与评估,在提高可靠性的同时,确定合适的可靠性目标就显得尤为重要,本文从影响软件可靠性的因素、软件失效的原因等方面对软件产品的可靠性进行了分析,最后提出了解决软件可靠性问题的方法。

关键词:软件可靠性;影响因素;解决方法
1、软件可靠性的定义
软件可靠性表明了一个程序按照用户的要求和设计的目标,执行其功能的正确程度。这要求一个可靠的程序应是正确的、完整的、一致的和健壮的。但在现实中,一个程序要达到安全可靠是不实际的,要精确地度量它也不现实。
在一般情形下只能通过程序的测试,去度量程序的可靠性。基于这点,软件的可靠性定义为:“软件可靠性是软件在给定时间间隔及给定的环境条件下,按设计要求,成功地运行程序的概率。”在此定义中,明确地包含了以下几个因素。
1.1环境条件
在定义中,环境条件指的是软件的使用环境。它涉及该软件运行时需要的支持系统及有关的因素。规定软件的使用环境,是判定失效的责任在用户还是在软件的关键,也是给出准确可靠性度量的依据。
所以,严格地说,描述软件可靠性所要求的使用环境,主要是描述对输入数据的要求及计算机当时的配置状态(即软件环境),同时假定其他一切支持系统及因素对该软件来说都是理想的,不会影响软件的运行。
1.2规定的时间
软件的可靠性体现于软件的运行阶段,因此,在软件的可靠性的定义中,一般采用“运行时间”t作为时间的测量。在这里,定义运行时间t为软件系统一旦投入运行后的计算机挂起(开启但空闲)与工作的积累时间。但计算机的停机时间不包括在运行时间t内。
1.3规定的功能
在考虑软件的可靠性时,首先应明确软件的功能是什么,哪些功能是主要的,哪些功能是次要的。一般从软件的需求说明书和设计说明书中可以了解这些情况。
1.4“成功地运行程序”的定义
这里的成功地运行是指不仅程序能正确地运行满足用户对它的要求,而且当程序一旦受到意外的伤害,或系统错误时,能尽快恢复,仍能正常的运行。
2、软件生命周期与寿命的关系
一切有生命的东西都有一个“寿命”,即它们从出生到死亡为止所经历的时间。
“寿命”这个概念也可以延伸到对非生命产品的质量评价上来。
例如一个电子产品的寿命就是指该产品从出厂到丧失使用价值的持续时间。但是,软件是一种信息产品,它不同于机械、电子等产品,不存在物理上的磨损报废,因此,软件产品的“寿命”,与硬件产品不同。
软件产品的寿命是指软件的整个生命周期。这个生命周期主要包括软件规划、需求分析、设计、编码及单元调试、测试,以及运行、维护阶段。
从软件用户的角度来看,更关心的是软件在交付使用后的情况如何,也就是需要一个从可靠性角度来理解的“寿命”。即希望有一个类似于硬件中平均失效间隔时间MTBF(Mean Time Between Failure)这样的指标来表明,在规定的要求和条件下,能在多大的程度上依赖这个软件来完成任务。
我们把在使用其间能够正常工作的持续时间叫做软件的使用寿命。
软件的使用寿命与输入环境有关。例如,有一个存在缺陷的编译程序,当用于学生做简单练习时,MTBF可能很长,而做一个大课题时,由于程序连续出错,MTBF就会变得很短。所以,MTBF可以看做是对软件可靠性做估计的样本数据,但不能看做是依据。
软件生存期与软件使用寿命的关系如下:2.1软件生命周期主要包括三个阶段,即软件定义阶段、软件开发阶段和软件运行维护阶段。而软件的使用寿命是描述软件在使用期内执行规定任务的一个可供参考的可靠性指标。
在使用期间,允许软件运行结果出错(称之为软件失效),但只要软件的平均失效间隔时间MTBF大于某个预先规定的值,就不认为软件死亡。如果在费用允许的情况下将软件修正,是该软件的可靠性可比以前有所提高。
2.2软件生命周期是软件工程中的术语,软件使用寿命是软件可靠性工程中的术语。软件生命周期中靠软件开发质量来提高软件的可靠性,着重在开发过程,而软件可靠性工程则偏重于可靠性的实际提高和可靠性指标的评估。
2.3软件产品的可靠性如何,直接影响软件的使用寿命。而软件可靠性的优劣是由软件生命周期各个阶段的工作质量决定的。然而生命周期各个阶段对软件质量和可靠性的影响是不一样的。
如图1所示,在软件各个阶段产生的错误中,设计阶段产生的错误占大多数。进一步从图2可知,修正一个软件错误所需的费用将随着软件生命周期的进展而上升。错误发现的越早,修正它所需的费用越少,反之,错误发现的越晚,修正它的费用就越高,而且是呈指数增长。
图1软件生命周期中的错误来源
图2修改错误的费用呈指数增长由于生命周期各个阶段的问题不是孤立的,而是相互影响、相互依存的,每一个阶段的工作成果将成为下一个阶段工作的基础。后一阶段发现的问题也应追溯到前一阶段去找原因。
这种前后相承的关系也会带来错误的传递。这种传递使前面犯下的错误隐藏到后面的阶段。错误隐藏的越久,查找和修改就越困难,花费的代价就越大,甚至错误影响太大,或需要花费的代价太大,导致“不能修改”,使得所做的努力付之东流,浪费了大量的人力和财力。总之,软件生命周期的各个阶段都可能产生错误。而软件需求分析、设计和实现阶段是软件的主要错误来源。
而且即使各个阶段都采取了提高可靠性的措施,对于复杂软件来说,错误仍然不可避免。因此,应当把主要注意力放在分析、设计和实现阶段。通过采用正确的方法、技术和工具,以得到一个错误少、可靠性高的软件,而把检查看做是对软件可靠性的一个证实。不应存在侥幸的心理,急于求成。如果把保证质量的希望完全寄托在测试阶段,由于测试的局限性,要保证软件的可靠性就困难了。
3、软件可靠性的主要指标
软件可靠性的定量指标,是指能够以数字概念来描述可靠性的数学表达式中所使用的量。人们常借用可靠性的定量度量方法来度量软件的可靠性。下面主要讨论常用的指标平均失效等待时间MTTF与平均实效间隔时间MTBF。
假如我们对N个相同的系统(硬件或者软件)进行测试,他们的失效时间分别是T1、T2……,TN,则平均失效等待时间MTTF(Mean Time To Failure)定义为:对于软件系统来说,这相当于同一系统在N各不同的环境(即使用不同的测试用例)下进行测试。因此,MTTF是一个描述失效模型或一组失效特性的指标量。这个指标的目标值应由用户给出,在需求分析阶段纳入可靠性需求,作为软件规格说明提交给开发部门。在运行阶段,可把失效率函数λ(T)视为常数λ,则平均失效等待时间MTTF是失效率λ的倒数:MTTF=1/λ。与MTTF相关的一个量是MTBF,即平均失效间隔时间(MeanTime Between Failures),它是指两次相继失效之间的平均时间。
MTBF在实际使用中通常是指当N很大时,系统内第N次失效与第N+1次失效之间的平均时间。对于失效率λ(T)为常数和修复时间很短的情况,MTTF与MTBF几乎相等。
4、产生软件产品可靠性问题的主要因素
软件的开发属于高智商的劳动。同时,软件的开发又是非常个性化的劳动。软件的设计者因其文化背景、受教育程度、对模型或系统的理解以及爱好、习惯等因素,在程序设计过程中自觉或不自觉地形成自己的特点。
他们在程序结构、存储器标记、信息处理、命令语句使用、通用模块选取、循环顺序、语言交互、嵌入模块、命令集注释等方面都有自己的理解和习惯,形成自己独特的风格。这种个性的体现往往为程序设计者引以为自豪,但却难以被其他程序设计者所采纳。
现在的软件在检验中,大多数人只要求上机运行程序,在运行程序的过程中发现故障现象,以此作为主要的检验手段,而这样就给管理上带来了漏洞。有些问题的存在虽然不是什么大问题,但在程序的运行过程中的某个时段或线路有可能发生数据溢出、堆栈错误、信息丢失等问题,甚至发生死机现象。
这些问题由于不明显,设计者自己很难意识到,而在程序的一般调试中又不容易暴露出来,因为它们的出现只是小概率事件,有时在成千上万次的循环中才出现一次或几次。而这时,软件设计者和质量管理者往往将其作为偶然事件处理。但它们确确实实是程序中的缺陷,只不过由于一般运算和处理途径的兼容性、容易出错时段(路段)的短暂性、软件和硬件的冗余设计等将其掩盖了。这些影响软件可靠性的问题应该可以被发现出来并通过程序的优化设计加以解决。
5、解决软件可靠性问题的技术措施
软件开发的个性化不应妨碍软件可靠性的提高。要发现和解决软件中存在的隐患问题,必须加强软件的设计管理和质量管理。
5.1构建质量系统
在软件的研制阶段应建立质量系统,其人员应该是对软件开发比较熟悉的技术人员。
5.2构建软件的质量管理制度
应包括故障报告制度和会诊制度、会议制度、抽查制度、检验制度等等,并且要制定软件的可靠性保证大纲。
5.3强化软件的文档管理
软件的文档必须在程序的编制过程中不断地完善,作为软件的一个不可分割的组成部分。对于一段程序、一个功能块、一组语句,都应有相应的文档记录。在修改程序时,也要同时修改文档。
5.4在程序中应使用注释语句
各种计算机语言提供给设计者以注释工具,方便他们在源程序中直接写明各种注意事项。这种注释与文档所起的作用一样,也是要说明软件的各个部分所具有的功能。它的不同在于设计者可以将注释语句随程序的语句逐条逐段编写,直接方便他人读懂程序。
5.5在软件的设计系统和质量系统中,应该强调软件的设计思想和程序的编制方法要透明源程序的编写应象硬件设计中的图纸一样,标示清楚,方便他人的阅读和理解。在软件设计系统内部应该相互交流设计思路,互相检查程序。这是为了在互查的过程中相互了解对方的风格和特点,指出怀疑的语句,必要的时候可以相互替代或延续开发工作。
5.6确定关键程序段
在软件的程序中,完成基本功能的程序段和容易出错的程序段应划分出来,进行重点指示。在检查中,要重点检验这些关键程序段。
6、结语
综上所述,提高软件的可靠性与管理有很大关系。只要把握软件设计的特点和规律,严格按照软件开发规范去要求,不断探索,就一定能提高软件的质量和可靠性。
【产生软件产品可靠性问题的主要因素与解决方法论文】相关文章:
经济法可诉性问题初探论文02-28
浅议绿色营销的产生与发展论文12-01
儿童体育发展适宜性问题的思考论文03-03
多媒体教学中的互动性问题论文03-03
怎样面对学生产生的问题论文03-04
泡沫经济是怎样产生的论文02-24
测量可靠性理论哲学思维论文03-16
论保险代位求偿原则的公平性问题论文11-17
变电安全运行的问题及解决方法的论文02-24
混凝土裂缝产生的原因及控制措施论文06-30