|
楼主 |
发表于 2007-3-5 22:19:57
|
显示全部楼层
三、软件测试
软件测试是程序的一种执行过程,目的是尽可能发现并改正被测试软件中的错误。它是软件生命周期中一项非常重要且非常复杂的工作,对软件可靠性保证具有极其重要的意义。在目前形式化方法和程序正确性证明技术还无望成为实用性方法的情况下,软件测试在将来相当一段时间内仍然是软件可靠性保证的有效方法。
1.测试过程
软件测试包括模块测试、集成测试、系统测试和交验测试。模块测试通过对模块的局部数据结构、主要逻辑路径、接口和边界等进行测试来验证模块的功能、性能和可靠性等指标,以证实其工作满足设计要求。集成测试是对接口正确性、数据传递的正确性和集成质量、时间匹配等进行测试。系统测试是软件与工程系统、其它软件和某些应用系统的对接联调测试,主要用以验证设备之间或系统之间的信息传递、时间分配、功能要求等是否满足要求。交验测试是在软件交验时,按照用户需求对软件进行的全面的最终测试。通常,它测试软件的功能、性能、操作和可靠性等,同时,也测试软件系统的可移植性、兼容性、错误恢复处理和
协调的可维护性等。
2.测试方法
软件测试的方法主要有:着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试的"黑箱"法;全面了解程序内部逻辑结构、对所有逻辑路径进行测试的"白箱"法。KekaoXing.com
一般通过设计驱动程序产生测试数据,并把它们传递给被测试模块,同时输出测试结果。用伪模块代替被测试模块调用的模块,采用原来的模块接口,执行少量数据处理,结果返回给被测试模块。驱动程序和伪模块的设计必须简单有效,否则会增加测试的复杂性。集成测试有自顶向下和自底向上两种测试方法。自顶向下的测试是按照控制结构,从主控模块开始,向下把模块逐个连接起来。把附属于主控模块的小模块连接起来的方式有深度优先法和宽度优先法。自顶向下的测试可较早地检查主要的控制和判决点,尤其是采用深度优先法,可较早地执行和证明软件的完整功能。但为了测试高层模块,有时需要低层模块参加工作,而此时低层模块是伪模块,因此没有足够的信息可以向上传递。有效的解决办法是,把一些测试项目推迟到真模块取代伪模块后再进行。
自底向上的测试是从基本模块开始连接和测试。因为是从低层次开始,逐级向上进行测试,因此不再需要下一层次的伪模块,但需要驱动程序参与测试。这种方法测试范围从小到大,比较直观,但不能过早地发现软件的总体设计错误。因此,对于软件的整体测试,最佳的办法是将上述两种方法有机地结合起来,最高几层参与自顶向下测试,其它模块参与自底向上测试。
3.测试工具
测试自动化是人们追求的目标和发展的方向。目前,尽管开发出了不少软件测试工具,但这些工具还主要用于对程序进行静态分析、为测试用例和测试数据提供信息,以及测试结果处理等。为了提高测试的准确性和测试效率,急需集成的全过程自动测试工具。
www.Kekaoxing.com中国可靠性
所幸,生产基于Windows界面的C/S应用软件自动测试工具的SQA公司与生产组件的Ratinal公司合并,为组件的建立、组合、测试和管理提供了综合解决方案。另外,PureAtria公司为在WindowsNT和Unix平台上用C、C++和FORTRAN等开发的应用软件的测试做出了突出贡献。这两家公司的互补为用户提供了新一代全过程测试工具,为集成的全过程自动测试工具的成功开发奠定了基础。在各方努力下,软件测试获得了巨大的发展,在软件可靠性工程中发挥了巨大作用。目前,主要是缺乏有效的指导原则,使软件测试具有一定的盲目性。
四、程序正确性证明
程序正确性证明技术是软件可靠性保证的另一重要方法,主要有语法正确性证明、语义正确性证明、数学证明和基于公理的正确性证明等方法。语法正确性和语义正确性证明主要用于软件编码阶段及其后续阶段、基于语用基础之上的正确性证明。语义正确性证明始于本世纪60年代,至今仍处于研究和试验阶段。自高级语言编译程序问世以来,对形式化定义的语言,语法正确性证明技术已日趋成熟,并得到广泛应用。
没有数学验证的软件可靠性工程无异于空话,数学验证的严谨性将为提高软件可靠性发挥积极的作用。
引入集合与函数的验证方法,为逐步扩大推理建立了基础。用集合、栈和队列进行软件设计,为大规模软件的验证奠定了基础。但程序语言的某些具体特点给程序正确性证明造成了严重的困难。www.可靠性.com
程序正确性证明工具不断推陈出新,自动化证明工具正在成为这一领域的研究热点。不过,在自动化证明尚不可能的情况下,人工证明和统计测试的有机结合为程序正确性证明带来了曙光,为可靠程序的设计开拓了新的视野。
五、软件的可维护性设计
软件维护是软件交付后改正缺陷、克服故障、增强功能、改善性能或其它属性,以及为使其适应新环境而对其进行修改或扩充的过程,是软件生命周期的最后一个阶段,是软件可靠性工程的主要内容之一。
软件维护包括纠错性维护、适应性维护、完善性维护和预防性维护。在软件维护过程中,有三种维护过程模型:①快速固定模型:首先将原系统代码更新成新系统代码,然后生成需求规格说明等文件,并进行测试;②交互提高模型:对老系统代码进行测试、分析后,产生新系统的需求规格说明,然后按正向工程产生新的系统文档及代码;③全重用模型:对老系统的设计文档、代码、测试文档等全面进行逆向工程设计,从而得到新的软件系统。
软件维护技术可分为面向维护的技术和维护支持技术。面向维护的技术是在软件开发阶段用来减少错误、提高软件可维护性的技术,涉及软件开发的每个阶段。维护支持技术是在维护阶段用来提高维护效率和质量的技术,包括信息收集、错误分析、维护评价、代码与文档修改、维护确认、维护测试、远距离维护等内容。
www.可靠性.com
软件的可理解性、可测试性和可修改性等是决定软件可维护性的基本因素。软件的可维护性除了与良好的设计、完善的文档、严格的测试相关外,还与软件生命周期中的所有活动密切相关。在软件生命周期的每个阶段,都必须充分考虑软件的可维护性问题,并进行可维护性设计。
由于软件的复杂性等因素所造成的困难,维护工作极大地依赖于维护工具和方法的支持。由于维护人员往往只着眼于需要理解和修改的部分,因此便引出了程序观察问题。解决这一问题最一般的方法是高层图表示,也有些研究着眼于改造源代码的可视性。此外,支持软件维护的超文本技术、基于抽象的高层抽象技术,以及基于数据库查询的辅助维护工具等都代表了软件维护工具的发展方向。软件维护实际上是软件重用的实践,对软件重用方法和技术的深入研究,有利于改善软件维护的现状。
六、软件失效与安全性分析
软件安全性是软件运行时不发生事故或不导致事故发生的能力。对关键软件进行全过程的安全性设计与分析、验证与评价、控制与管理非常重用。软件安全性设计应与软件可靠性设计综合权衡,协调进行。当然,软件安全性设计要以软件可靠性工程为基础,在软件安全性工作中应遵守软件工程原理。软件安全性分析方法主要有故障树分析法(FTA)、失效模式与效应分析法(FMEA)等。近年来,定时Petri网分析及Petri网与故障树分析相结合的综合方法得到了大力推崇和成功应用。Kekaoxing_com
软件故障树分析是从硬件故障树分析演变而来的。它从假设可能导致不安全或失效的系统行为的软件控制问题(顶事件)开始,对软件进行分析,识别所有可能导致顶事件的潜在行为和条件。这些行为和条件被表示出来之后,通过软件分析来识别其可能的原因,确定它们是否与软件本身相矛盾。如果产生矛盾或事件的可能起因会被系统阻止,则顶事件的一个起因就可以消除。如果该顶事件的所有起因都被消除了,则系统被证明能防止该事件。如果初始软件或系统状态要引起可能导致顶事件的事件发生,则需要改变该软件设计,以防止顶事件的发生。故障树分析的关键在于逻辑证明,而不在于概率估算。
定时Petri网是简单Petri网的增强。利用定时Petri网的研究成果和表示方法,能很好地对系统的失效和安全性进行分析。为了使用定时Petri网来评价软件的失效安全性,软件设计被表示为一个定时Petri网。网的一个状态子集被指定为可能失效或不安全的状态,且网被扩大以指示出那些不安全状态的条件,然后对网进行分析,以确定是否可以从初始系统状态通过一系列的转移点达到任何失效和不安全的状态。这样,如果条件保持,系统将进入失效或不安全状态。
对于许多应用,既可以用故障树,也可以用定时Petri网来评价软件的失效或安全性行为。但Petri网明确地构造出软件的结构和系统执行期间的事件模型,且这些事件预计产生条件的语义被抽象地表示出来;而在故障树中,条件和事件的语义是明确描述出来的,但引起那些事件的结构被抽象地处理了。这两种分析方法的综合,将向分析人员提供一个系统的两种互补的视图。
www.可靠性.com
软件可靠性工程研究的目标是应用理论知识、科学方法和工程规范来指导可靠软件的开发,以期用较少的时间和投入获得高可靠的软件产品。它是软件质量管理的一个新的里程碑,使软件可靠性的分析、评价、设计、验证及管理水平迈向了系统化、规范化、全员化。但是,要生产足够可靠的软件,并测量其可靠性,仍相当困难。作为软件产品的一个重要质量特性,软件可靠性因为其自身的固有特性,不论其理论,还是其方法和管理都有别于传统的可靠性工程。软件可靠性工程是一门涉及多学科、多领域的新兴学科。尽管它还受到技术、方法、工具等支持的限制,但随着用户对软件可靠性需求的日益高涨,它正以前所未有的速度在发展,并吸引着一大批有志于软件可靠性工程的志士仁人为之努力 |
|