秦 俭
(沈阳理工大学 辽宁 沈阳 110159)
软件对当今社会的发展具有重要意义,但是影响软件可靠性的因素众多,譬如软件自身特性、人为因素以及软件工程管理等。这些因素具体可分为客观因素与主观因素,客观因素包括人为或环境的影响,主观因素则包括软件严密性、复杂性、易理解性、可修改性以及可靠性等。在排查影响软件可靠性的因素时,务必重视对主客观的区分。
软件可靠性是评测软件多方性能的关键依据。具体而言,软件的可靠性主要是指成品软件能否在有限的资源范围内实现规定功能,有限的资源范围指的是规定条件、指定时间、指定区间等。而规定条件能够保障软件的正常运行,在有限的资源范围内实现了运行效率的提升,直接与软件运作有关的输入条件,均可成为规定条件[1]。
另外,指定时间的主要意义在于软件成品的实际运行,而指定功能指的是为使用者提供的定向服务,实现既定的运行指标。软件可靠性是成品软件最为关键的功能之一,与软件本身存在的缺点、使用质量以及运行系统等多个组成之间存在密切关联。近年来,国内对软件可靠性测试的研究更加深入,同时为可靠性概率度量设置专门的单位,并称之为“软件可靠度”,为软件的可靠性测试提供便利条件[2]。
随着开发人员对软件产品研究的深入,发现其可靠性的影响因素多种多样,但是从本质上分析,所有的影响因素均可划分为主观与客观两大类。主观因素就是受到软件自身影响,而客观因素就是受到外界环境影响,开发人员在测试软件可靠性时务必充分重视对主客观因素的区分与归类。软件可靠性的影响因素有时细小入微,开发人员敲错一个字符都有可能对软件可靠性造成负面影响[3]。
开发人员的工作能力与专业水准是影响软件编程质量的重要因素,因此开发人员在软件编程的过程中应当积攒大量的实践经验,并且不断纠正错误的编程思路,以此形成正确、高效且保质保量的软件成品。虽然软件开发单位对编程掌控的效果与质量偏优,但是不能过于依赖开发人员的个人编程能力,如果开发人员的技术水准并未达到标准,那么极有可能影响软件的开发质量[4]。
近年来,为了响应国家对现代化发展的号召,国内很多软件开发公司已经着手扩大发展规模。随着软件开发的不断深入,软件研发越来越复杂,其内容愈发繁重。基于此,及时发现软件开发过程中的技术问题,尤其是软件可靠性等问题,愈发重要。由此可见,软件规模是软件可靠性的影响因素之一。通过多年的研究发现,软件的容错率与软件规模无关。具体来说,软件开发环境和编程语言之间的差异,改变了软件产品的统计和分析结果,促使两者无法形成正比关系[5]。
从软件的组织结构来看,其设计逻辑相对复杂,与硬件单一的编程形式不同,软件在编程过程中无时无刻不在变化,呈现出极强的动态性,软件组织结构的复杂性对其可靠性的影响较大。结合近年来的开发实例来说,软件组织结构的复杂性越高,软件编程过程中出现错误或技术失误的可能性就越大,而软件的可靠性则随之不断降低。综上所述,可以明显感知软件组织结构对其可靠性的影响之深,换言之,其自身的复杂程度才是导致可靠性下降的真正原因[6]。
前文提到,软件的复杂程度是导致其可靠性下降的真正原因,故而与产品本身的组织结构存在密切关联,但与软件规模存在本质差异。组织结构主要是指精细化的系统概念,而软件规模则是较为广泛笼统的系统概念。我们可以理解为该软件成品规模大,但是并不复杂,也就是说,软件如果只是规模大,那么软件的组织结构可以是相同的组织无限复制,组织结构之间并无差异,同样的处理思路,同样的系统运行,因此软件规模大并非表明组织结构复杂[7]。
规模大,但不复杂,我们也可以理解为软件内部各子模块结构统一,且较易理解,这样一来,即使软件规模再大,却并不复杂。举例来说,即使软件成品的规模再小,但它的逻辑复杂,知识牵涉范围较广,通过各种途径方可克服困难,但是促使其编程的过程更加复杂。以下即为实例理解,一个铁水凝固过程的数值模拟软件,该过程实际规模很小,仅需计算一个独立单位的铁水在特定环境下自然冷却的时间区间,从外向内或从内向外各单位点的温度随着时间的变化曲线,但从需要考虑的因素来看,该过程其实很复杂,例如需要计算时间、位置点、外界环境、构成部分等多种因素。由此可见,软件组织结构是影响软件可靠性的重要因素之一。另外,针对不同因素有可能对软件造成的影响,可有效加深可靠性测试。
一般来说,软件运行剖面可以界定软件的运行环境,就像建筑物的横截面一样,可以看出其内部构造及环境。软件运行剖面能够指出软件运行所需实际环境,而软件的初始输入状态会影响系统状态。为了明确软件可靠性测试的定量与定向依据,开发人员通常会采用软件运行剖面的形式进行初步测定,以此制作定量的软件使用方式。
从效用角度分析,软件运行剖面好比开发人员落实编程与设计的导向,在运行剖面的支持下,开发人员可有效提高软件的生产效率与生产质量,进一步加快软件的研发进度,同时确保软件可靠性。具体而言,软件运行剖面即为软件可执行操作或可能发生的概率事件的统称,或者说是软件成品的不同使用途径。在软件的开发编程过程中,提供的运行剖面数量越多,软件内部可被发现的遗漏点以及安全隐患数量越多。由此可见,软件运行剖面也是软件可靠性的影响因素之一。
从面向角度分析,运行剖面在面向使用者的同时也面向编程过程,因此直接获取软件的运行剖面无异于异想天开。在获取软件运行剖面的过程中,开发人员通常采用“金字塔”模型实施构建,这里所说的“金字塔”实际上就是自上而下、逐级细化的分析手段,从而获取较为完善的软件运行剖面。具体而言,其过程就是:首先,明确用户剖面,用户剖面是构建软件运行剖面建设的基础;其次,就是按照由上而下的顺序将用户运用软件的输入空间细化为系统模式剖面,接着再将系统模式剖面划分为功能剖面;最后,开发人员通过细致划分,按照功能剖面的类型进行界定,最终获取完整的软件运行剖面。
从环境与可靠性的角度来看,当软件处于同一个开发环境,并且拥有同一个研发目的时,假设过程中所采用的运行剖面不同,那么该产品对可靠性的表现也将存在多处差异。通常情况下,软件产品的输入域包括R和S,实验中的S区域存在一定的软件缺陷,而R部分中输入恒不激活软件缺陷。如果运行剖面显示,软件单方面依靠S区域进行运作,该产品则永久故障,且并不具备容错方案,久而久之,导致软件的永久失效,可靠性的测试结果恒为0;换言之,如果在运行剖面中并未显示出输入域S,软件始终正常运行,并未出现故障,则该软件的可靠性恒为1。
随着新理念与新技术的介入,软件的开发手段呈现多元化发展趋势,例如结构化法、面向对象法、形式化法等。同一软件可采用多种方法开发,但这样做的劣势在于没有定量或定向的评判标准,因而软件的质量只能在用户端获取,不利于及时反馈与后期修缮,因此该类软件需要注意运用的场合与环境,或者说应当注意面向对象。
举例来说,结构化法自身具备简单、实用的技术优势,且在国内的应用前景广阔,但并不适合用于大规模或较复杂的软件开发项目,无法在短时间内有效解决软件的重用问题,致使软件代码的重复率不断增高。如此一来,假设软件在使用过程中,某一处地方需要改动,那么编码便会出现混乱,增加了软件维护工作的复杂程度,同时也增加了软件可靠性的风险。
软件可靠性测试的主要目的是为了保证与验证软件的可靠性。从性质上讲,软件可靠性测试属于一种随机测试,可结合用户对软件的实际使用情况进行性能及可靠性测试。目前为止,我国科研水准持续提升,对软件可靠性的评估水平随之增长,促使软件的各项性能指标均可达到相应标准。可靠性测试是解决软件乱码以及降低软件使用风险的有效途径。较之普通的软件功能测试,可靠性测试更加复杂,需要考虑的综合性因素更多,包括功能项、输入集、数据集以及相关概率的早期识别等。结合软件功能点中的使用概率分布,可靠性测试的多样性也随之提高。
综上所述,软件可靠性对于信息系统整体的正常运行来说具有重要意义,因此必须明确软件可靠性的影响因素以及关键特性。结合上文,影响软件可靠性的因素主要包括软件开发人员水平、软件规模、软件的组织结构、软件运行剖面以及软件开发办法等。开发人员在软件编程的过程中,务必高度重视对以上几点因素的检验与测试,避免软件可靠性在使用时受到的影响。