件可靠性测试方法在对软件因长期使用软件性能下降,甚至完全失效这种严重影响软件可靠性的测试存在不足的现状,通过对软件自身特性以及软件可靠性估算面临问题的深入分析和研究,结合传统的软件可靠性测试方法,提出了基于操作剖面的软件可靠性压力测试思想和操作剖面、压力测试点相互结合、互为补充的软件可靠性测试方法,并给出了软件可靠性测试新方法实施的技术途径。该思想与方法既是对传统软件可靠性测试方法的一个大胆探索,也是对软件可靠性测试方法的一个有益补充。
关键词:软件缺陷;软件可靠性;压力测试;
0、引言
软件在计算机发展的不同阶段有不同的认识。计算机发展的初期,硬件在计算机应用中起决定作用,而软件,即程序,甚至是机器指令程序或汇编程序,是处于从属地位的。软件开发是以个体手工的方式进行,设计是人的智力行为,软件质量完全取决于个人的智力和编程技巧。随着计算机的发展,人们认识到软件使得计算机的计算能力大大提高,应用能力大大增强。于是在开发计算机应用系统时,硬件和软件同时考虑,而且开始编制应用支撑程序,如操作系统、数据库等。这时的生产方式是以小作坊的形式进行。到了后来,社会的各种应用需要对计算机提出了更高和更特别的要求,很多大型软件系统开发的工作量高达数千人年,指令数百万条或更多,如美国宇航飞船的软件系统有4000万条语句。而今,计算机的应用面越来越广,应用规模越来越大,应用过程越来越复杂,软件在计算机系统中的比重越来越大,软件成本在总成本中的比重正在逐年上升,而且这种趋势还在增加。这时人们感到传统的软件生产方式已不适应计算机发展的需要,需要把工程学的基本原理和方法引入到软件开发过程中,即软件工程思想。
事实上,无论计算机技术如何发展,计算机中的软件是人通过智力劳动产生的,其软件产品是人的思维结果,是一个逻辑部件,而不是一个物理部件。软件开发水平很大程度上取决于软件人员的教育、训练和经验的积累。由此软件具有与硬件或传统工业产品不同的特点:
(1)软件是一种逻辑实体,具有抽象性,人们必须通过观察、分析、思考、判断,才能了解它的功能、性能等特性;
(2)软件没有明显的制造过程,一旦研制开发成功,就可以大量拷贝同一内容的副本。所以对软件的质量控制,必须在软件开发方面下工夫;
(3)软件在使用过程中,没有磨损、老化的问题,但为了适应硬件、环境以及需求的变化而进行修改,这些修改常常会引入错误,导致软件失效率升高,软件质量降低。如果修改成本太高,质量风险太大,软件就会被抛弃;
(4)软件对硬件和环境有着不同程度的依赖性,由此带来了软件移植的问题;
(5)软件的开发至今尚未完全摆脱手工作坊式的开发方式,生产效率低。这对复杂软件,特别是今后会更加复杂的软件带来了是否能够控制其复杂性和时效性的问题;
(6)软件开发需要投入大量、高强度的脑力劳动,成本非常高,风险也大。现在软件的开销已大大超过了硬件的开销;
(7)许多软件的开发和运行涉及机构、体制和管理方式等问题,还会涉及到人们的观念和心理。这些人的因素,常常成为软件开发的困难所在,直接影响到项目的成败。
基于上述软件的特性,美国国防部中大量的软件系统其可靠性得不到保证,几乎没有不存在错误的软件系统。尽管人们在软件开发过程中采用各种软件工程方法,应用各种软件测试技术,但他们只能尽量发现错误、减少错误,却不可能彻底消除错误,无法实现真正意义上的无错软件,百分之百的可靠。
现今计算机硬件技术的发展,使得在计算机系统中的硬件可靠性越来越高,而软件可靠性的问题变得日益突出。在一些关键的应用领域,如航空、航天等,对软件可靠性的要求尤为重要。如在银行等服务性行业,其软件系统的可靠性也直接关系到自身的声誉和生存发展竞争能力。由于软件中存在缺陷、错误和故障使软件失效很有可能造成巨大的损失或惨重的灾难。研究结果表明:由于软件开发出现问题引起的系统失效与由于硬件设计或使用引起的失效之比是10:1。由此可见,软件在计算机系统中占有绝对重要的地位。于是,人们借鉴硬件可靠性理论,提出了“软件可靠性”概念,不再追求软件无错,而以统计的观点去判断软件满足用户使用要求的程度。
1、软件可靠性
软件可靠性借鉴了硬件可靠性的概念,即软件按规定的条件,在规定的时间内运行而不发生故障的能力。软件可靠性与硬件可靠性不同的是:软件可靠性不但与软件中存在的缺陷有关,而且与系统输入和系统使用有关。
从定义上看,评价或测试一个软件的可靠性,最主要的是要确定系统怎样输入、如何使用一整套的方法和策略。另一方面,软件可靠性是软件质量特性中重要的固有特性和关键因素,软件可靠性反映了用户的质量观点。而软件的故障是由于软件的质量存在问题——即它固有的缺陷导致错误,进而使系统的输出不满足预定的要求,造成系统的故障。所谓按规定的条件主要是指软件的运行(使用)环境,它涉及软件运行所需要的一切支持系统及有关的因素。如支持硬件、网络、操作系统及其它支持软件、输入数据、操作规程等。
尽管当前的软件可靠性定义借用了硬件可靠性的定义,但事实上软件可靠性因软件的特性它与硬件可靠性相比较是有很大的差别的,如:
(1) 硬件有老化损耗现象,硬件失效是物理故障,是器件物理变化的必然结果。软件不发生变化,没有磨损现象,但软件由于长期使用软件性能下降,甚至完全失效的故障也是有的。例如,无休止的线程、无释放的文件锁闭、数据污染、存储空间的彻底分裂与积聚差错等;
(2) 硬件可靠性的决定因素是时间,受设计、生产、运用的所有过程影响,软件可靠性的决定因素是与输入数据有关的软件差错,是输入数据和程序内部状态的函数,更多地决定于人;
原文转自:http://www.spasvo.com/news/html/2013624103915.html