摘要 随着计算机技术的不断发展,水文分析计算和水资源、水环境决策信息系统越来越依赖于计算机程序的编写和软件的二次开发。但是,这些程序的可靠性却值得进一步商榷。通过对软件故障特性的分析,论述了程序结构和软件可靠性之间的关系。同时给出了良好的程序结构的准则和基本的实现办法。
关键词:软件故障 可靠性 程序结构 软件测试
1 引言
随着计算机软件技术在水文、水资源、水环境方面的发展和软件重要性的加强,软件的可靠性对整个系统可靠性的影响越来越大[1]。可靠性研究概括起来一是如何设计一个可靠的软件,二是怎样测试验证软件的可靠性。在这些工作中,良好的程序结构是问题的关键。本文主要说明程序结构对软件可靠性设计和软件可靠性验证等方面所产生的影响。
2 软件技术特性
2.1软件故障的不变性
在保持源程序设计、测试的特定环境不变的情况下,反复运行,其软件故障现象不会改变。只有在使用的环境改变时,才可能有变化[2]。
一个没有软件错误的软件,一旦交付使用,就不会因疲劳而发生软件故障。
2.2软件故障对输入环境的敏感性
软件中存在的错误要在一定条件下才能反映出来。事实上,软件的执行过程是程序各路径的逻辑组合过程,不同的输入环境将会得到不同的组合形式。某条路径中的错误只有在这条路径被执行后才能对系统产生影响。反过来讲,一个软件运行正常,不能作为它没有软件错误的依据。
2.3 软件故障对人为因素和应用的依赖性
软件系统的输入域一方面要按人的要求来决定,而且每次的输入往往同以前的输入结果有关;另一方面与应用系统有关,不同的应用对象会有不同的输入域。因此,软件的故障往往与人的要求和应用的对象有着密切的联系。这种依赖性使软件的输入域变得非常大而且存在某些不确定性,很难用一个完善的检查安装方法来证实软件系统的不确定性。
2.4软件正确性测度和验证的不完备性
设F是软件中所有可能存在的故障集合,F0是某一测试或验证系统MP所能检查验证出的故障集(也就是如果软件中任何一个故障 ,则MP系统都能找出一条程序执行的路径S0,它使 呈现),如果F=F0,则MP是完备的,MP可以完全证明软件的正确性。但至今还没有找到这样的MP系统。这就是说,F0只是F的一个真子集,即所谓的不完备性。这种情况使许多大型软件中难免存在错误[3]。#p#副标题#e#
3 程序结构准则
3.1 良好的程序结构是提高软件可靠性的核心问题
以水文分析计算中的 Ⅲ型分布曲线作为频率分析线型的参数优化程序为例,这个程序包括:基本数据的输入输出,洪水系列从小到大排列,矩法优选,0.618方法优选,轮次法优选,优选准则,目标函数(绝对值优选准则和误差平方和最小准则)。
如果将上面的水文计算编程,可有两种思路:设其为程序M和N。M为分层结构化程序(见图1),它分为4层,第1层和第2层各有1个程序,第3层有5个程序,第4层有1个程序;N为非结构化的程序。假设每个程序的输入都只有0、1两种状态。则M的测试输入集有21+21+25+21= 38个状态元素;而N的测试输入集有28=256个状态元素,是M的输入集的6.74倍。
还可以假设有软件P、Q都由10个小程序组成。其中P是分层结构化的软件,它将10个小程序分成3层,第1层是3个程序,第2层是3个程序,第3层是4个程序;Q是非结构化的软件。假设每个程序的输入都只有0、1两种状态。则P的测试输入集有23+23+24=32个状态元素。而Q的测试输入集则有210=1024个状态元素,是P的输入集的32倍。如果把程序数目增加,每个程序输入的状态就要增加,非结构化软件的测试输入集就要大到根本无法测试的程度。由此可以看出,良好的程序结构可以大大加快程序测试的过程。
由于软件错误是软件设计阶段人为因素的错误或缺陷所造成的,因此从结构上考虑尽可能减少人为因素的影响,是提高软件可靠性的重要途径[4]。程序结构上的不合理是产生软件错误、增加软件维护工作量以及造成软件失败的最重要的原因。因此,解决软件可靠性的核心问题是要寻求良好的程序结构。 #p#分页标题#e#
3.2良好的程序结构准则
3.2.1能用目前最常用的智能手段说明程序的正确性。
常用的智能手段主要是:
(1) 枚举(Enumeration);
(2) 数学归纳法(Mathematical Induction);
(3) 抽象(Abstraction)。
某些程序结构已经被看成是正确的定理,但至今尚无像平面几何中的定理那样被普遍认为是有用的定理集合。即使这样,努力使自己编制的程序从结构上能够用常用的智能手段和普遍有用的定理来说明其正确性,是提高软件可靠性的重要途径[5]。
3.2.2能使软件错误孤立,不被扩散。
分层的模块化的程序是达到这个目的的重要手段。充分运用“抽象”的手段,把一个程序系统看成是一台“抽象机器”,而这台“抽象机器”是由许多“分程序”(或“过程”、“子程序”、“算法”等)合成的结果。每个“分程序”又可以看成是一台“抽象机器”,它们是上层“抽象机器”的子抽象机,也是由若干“分程序”合成的结果。这样逐步细化直至最后完成真正的硬件机器指令代码的代真。
在设计编制程序的过程中,程序长度问题是每一个程序员面临的首要核心问题。每个程序员一定要把程序限制在尽可能简单的结构中。轻视程序长度引起的困难是会制造出冗长的像瘟疫一样的“机巧”结构,这是使软件失败的主要原因[6]。利用“分程序”合成各级“抽象机器”的主要目的就是为了缩短程序的长度。这里有一个程序划分的问题。划分的原则应使每个分程序所包含的子动作充分地小,而且它们达到的结果说明充分简明。此外,在“分程序”之间,这些子动作是完全封闭和独立的。也就是说,每个“分程序”的软件错误在逻辑上是孤立的,不会因为其自身错误而引起其他“分程序”的软件错误。这种结构有利于对错误的检查和纠正,且可以根据各“分程序”中可能存在的错误采取相应措施。
3.2.3应有相应的检查测试方法和手段
在每个程序中都应设立必要的测试点(离线的或在线的),使编制与可靠性设计和测试同时进行,并有机结合在一起。
最终要做的是大程序,然而大程序的可靠性要依赖合成这个大程序的各“分程序”。设每个“分程序”的正确机会为P,则由N个这样的“分程序”合成的大程序的正确机会为P=PN。当N很大时,P应该尽量接近于1。也就是说,对最下层的程序模块的可靠性要求要非常高。为此,应使用程序正确性证明和测试相结合的方法,一方面尽可能使程序的结构符合上述的原则,另一方面要给出充分有效的程序测试方法。虽然很多人对程序测试感到繁琐而不愿意做这项工作,但如果在设计编程中不同时考虑程序测试问题,将可能给下一个阶段的程序调试和维护带来严重的后果。
3.2.4应能预见程序的可适应性和可修改性
尽管程序在逻辑上是正确的,但结果往往不能令人满意;或者程序在逻辑上是正确的,对使用者的原先要求也是令人满意的,但后来发现原先的问题表述不正确,必须重新表述问题并相应地修改程序[7]。这些情况的发生是不可避免的,为此就需要程序的结构能预见程序可能的修改和扩充。在这方面,程序族的思想有利于这种程序结构的建立。
对同一任务,会存在多种具体的表述[8],而程序员所编制的程序只可能是其中的一种选择。而这种选择能否完全满足使用者的合理要求,是很难确定的。如果在作出这种选择时,在程序结构上充分考虑其他可能的选择,即把给定问题的表述作合适的推广,那么程序的可适应性和可修改性就会有质的提高。
4 结语
以上只是良好程序结构的基本要求,具备这些要求就具备了能够产生可靠软件的基础。随着计算机科学的发展,对于水文水资源水环境方面的二次开发软件将越来越多,软件可靠性理论的研究也就显得越来越重要。因此,运用良好的程序结构对提高软件的可靠性、提高软件人员的工程化素质,具有相当重要的意义。 #p#分页标题#e#
5 参考文献
1 German PF, Beven K. Water flow in soil macropore, I. An experimen approach J Soil Sci,1998,32:1~5.
2 Souza J C S, leite da silva A M,Alives da Silva A P. Information debugging in forecasting_aided state estimation using a pattern analysis approach. In: proc of 12th pscc.Dresden, Germany: Berlin in press,2001.45~49.
3 刘亚宇,杨文松.PLC程序设计的新方法及推广应用.电工技术杂志,2001,1,14~16.
4 袁振州.基于计算机模拟方法的动态交通分配程序设计.交通与计算机,2001(19)(总第103期),29~31.
5 连玉忠.堤防沟渠纵横断测量数据处理程序设计.黑龙江水利科技,2001,2,89~90.
6 Arnold JGPM,Allen, R. Muttianh and G. Automated base flow separation and recession analysis techniques. Ground Water,33(6).
7 BirtlesAB. Identification and separation of major base flow components from a steam hydrograph. Water Resource Res.1999,14(5),791~803.
8 Wittenberg H and Base flow recession and recharge as nonlinear storage processes ,Hydrol.1999,2,20~30.
作者:张龙,男,1978年生,中山大学城市与资源规划系在读研究生。
请登录之后再进行评论