毕业设计(论文)-针对网络教学平台软件的可靠性测试研究与实践.doc_第1页
毕业设计(论文)-针对网络教学平台软件的可靠性测试研究与实践.doc_第2页
毕业设计(论文)-针对网络教学平台软件的可靠性测试研究与实践.doc_第3页
毕业设计(论文)-针对网络教学平台软件的可靠性测试研究与实践.doc_第4页
毕业设计(论文)-针对网络教学平台软件的可靠性测试研究与实践.doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

针对网络教学平台软件的可靠性测试研究与实践目录第 1 章 绪论1.1 课题背景1.2 国内外研究动1.2.1 软件可靠性研究的发展及现状1.2.2 软件可靠性领域面临的主要问题1.3 论文主要研究内容及意义第 2 章 软件可靠性测评相关理论研究2 .1 软件可靠性的基本概念2.1.1 软件可靠性的定义2.1.2 软件可靠性的度量2.1.3 软件可靠性工程2.2 软件测试与可靠性2.2.1 软件测试 软件测试方法 软件测试技术 软件测试模型2.2.2 软件可靠性评价技术2.2.3 软件可靠性模型 软件可靠性模型的概念 建模原理 建模的一般过程2.3 软件测试与可靠性评价的关系2.4 小结第 3 章 传统的软件可靠性测试方法3.1 软件可靠性测试方法的概念3.1.1 软件可靠性测试的提出3.1.2 软件可靠性测试的定义3.1.3 软件可靠性测试的过程3.2 两种主要的软件可靠性测试方法3.2.1 基于使用模型的统计测试方法 统计测试原理 使用模型的构造 测试用例的生成 测试的充分性以及可靠性度量3.2.2 基于运行剖面的可靠性测试方法1 绪论1.1 课题背景二十世纪七十年代以来,计算机系统被越来越广泛地用来监视和控制与人类生活相关的一些物理过程。这些计算机系统监视其外部物理过程的变化,并根据变化产生控制指令,引导物理过程按照正确的方式运转。典型的应用包括飞行器和航天器的控制系统、汽车电子系统、工业过程控制系统、电站控制系统、危重病人的生命维持系统、通信系统以及目前正在大规模兴起的消费类电子产品。在这种情况下,对计算机系统的质量和可靠性的要求也越来越高,这是因为这些系统的功能一旦失效,将引起生命、财产的重大损失以及环境可能遭到严重破坏1,从而使社会生产和经济活动陷入不可收拾的混乱状态。计算机系统的可靠性包含硬件可靠性与软件可靠性两方面的内容。由于硬件可靠性技术已有五十余年的发展历史,冗余技术、差错控制、故障自动检测、容错技术和避错技术等可靠性设计技术已经成熟,以及大规模超大规模集成电路的被采用,可使整机的可靠性大体上每经六年就提高十倍。相比之下,软件可靠性的研究只有二十年左右的发展历史,加上软件生产基本上仍处于作坊式的手工制作,其提高软件可靠性的技术与管理措施还处于十分不完善的状况。而且随着计算机技术迅猛发展,软件的销售量和使用量呈几何级数增长,软件的规模也越来越大,复杂性急剧提高。例如,航天飞机的飞行软件达 50 万行源代码,f-22 战斗机更达 150 多万行源代码,软件失效已成为系统瘫痪的主要原因。根据美国国防部和 nasa 的统计,当今武器系统和航天项目中的软件可靠性比硬件系统大约低一个数量级。而且工程应用中由软件引发的、震惊科技界的故障持续不断,在某些类型的设备中软件故障甚至远远超过了硬件,成为系统的主要故障源。1.2 国内外研究动态1.2.1 软件可靠性研究的发展及现状第一篇关于软件可靠性的论文是 1967 年 hudon提出的生灭过程模型,该模型导出了故障间隔的威布尔分布。继 hudon之后,1972 年 jelinski等人进一步研究了软件的故障率,他们都假定有一个故障的分段常数,故障率同残留差错数成正比。以上模型中的参数估计大多采用经典统计的方法。但大量的事实表明,当观察值的分布偏离原来的假设模式时,由经典统计所得的参数估计值往往很不可靠。因此,1977 年 j.w.tukey提出了探索数据分析方法(eda),该方法区别于经典统计方法的主要之处是:对数据作极少假定或根本不假设模型,非常不重视问题的数学结构,而强调直接研究数据本身,了解数据的特征、结构,以此出发,分析如何得到更多的信息,然后采用适合这种数据的估计。70 年代末至 80 年代初,软件可靠性的研究开始集中于对软件可靠性模型进行比较和选择。早期工作的不足之处是缺乏较好的故障数据和所需的比较准则。90 年代以来,软件可靠性研究工作进展较快,主要有:(1) 软件可靠性设计。在软件设计过程中,为了提高软件可靠性,经常采用一些专门的技术将可靠性“设计”到软件中去。提高软件可靠性的技术主要有 2类:一类是避免故障,即在开发过程中,不让缺陷和差错潜入软件的技术;另一类是容错技术,其中最常用的设计技术就是恢复块技术和-版本程序设计技术。f.belle 等人从可靠度优化、费用优化等方面考虑了软件的容错技术。在此基础上,将上述诸技术结合起来,belle 等人提出了一致性恢复块、接受表决、自检程序设计以及考虑版本间失效相关的容错技术,但目前这些技术仍处于理论上的研电子科技大学硕士论文:软件可靠性测试与评价技术的研究与实现究,其工程上的实践尚有待于进一步探讨。(2) 软件可靠性测试。通过对软件可靠性的测试发现软件中的故障,从而不断排除故障以提高软件可靠性。传统的软件测试方法主要有面向程序的静态测试和动态测试 2 大类。1991 年,t.downs 针对现有大多数软件可靠性模型在测试阶段将软件处理成黑盒子的作法,提出对测试过程直接建模。1993 年,whittaker 等人采用马尔可夫过程对软件的测试过程和测试用例作了研究。在 1997 年的第 19届国际软件工程会议上,美国的 p.frank 在一个发现程序失效并修改软件而消除失效的模型中,比较了几种测试方法,所考虑的问题是,使用测试用例来发现失效或通过模拟使用并在使用过程中发现失效是不是最好的。“最好”是用在所有测试到的失效都消除以后获得的可靠性来度量的。另外,美国的 a.podgurski等人在这次会议上维护之后的软件可靠性重新评价一文中指出:回归测试中测试用例复用与修改后软件可靠性的评价是不相容的。作者提出了一种在某些普通环境下评价修改后软件可靠性的比较经济的方法。随着面向对象编程(oop)技术的兴起,相应地发展了面向对象的软件测试技术,该技术首先由 m.j.harrold 等人提出,其基本思想是找出服务内部和服务间的定义-引用对,围绕定义-引用对的覆盖确定测试用例。针对目前大多数 oop 测试主要集中在类的测试上,liu. c等人通过建立一个状态模型来获得软件的动态运行时行为,提出了一个系统级的oop 软件测试方法。(3) 软件可靠性数据的收集。软件可靠性数据的收集是估测软件可靠性的基础,所收集的数据是否有效,是否满足模型的要求,直接影响到软件可靠性评价的准确性和可靠性。通常收集的软件可靠性数据有 2 类:失效计数数据和失效间隔数据。但由于软件中一个相同的错误可能会导致许多失效,并且若干个错误之间有时存在相关性,从而会降低所收集到数据的精确度,因此收集软件可靠性数据时,首先要制订出详细的计划和标准,如人力资源、时间的分配,所收集数据的形式、记录方式、存储方式等问题。其次,应对数据作具体的分析处理后方可应用,如数据的提取、合并、相关性分析等,采用的主要技术有算法、分段拟合技术等。另外,当应用某一具体的软件可靠性模型时,可能会出现需要的是其中的一类失效数据,而收集到的却是另一类,这时需进行失效数据间的转换。目前虽已开发出了一些自动收集软件可靠性数据的支持工具,但局限性很大,因此,如何准确而高效地自动收集各种软件可靠性数据,还是一项有待于进一步研究和实践的课题。(4) 软件可靠性预测。传统的软件可靠性预测模型大多通过拟合已收集到的软件失效数据来预测软件在未来时间的失效数。考虑到不同时期软件失效数据对软件可靠性预测的影响会有所不同,m.xie 提出了一个双指数平滑软件可靠性预测模型,即对近期所观察到的软件失效数据赋予一个较大的权值,与传统的预测模型相比,该模型简单易行且准确程度高。对于软件可靠性预测中的不一致问题,karunanithi等人在 1991 和 1992 年这两届的 ieee 关于软件可靠性工程的国际会议上,提出了利用神经网络来解决该问题。在训练人工神经网络阶段,使用执行时间作为输入,而将观察到的累积错误数作为目标输出,在训练结束时,输入一个附加的、未来的、执行时间的区间段,并考察人工神经网络对累积错误数的估计精度。hans.son 等人利用熵论针对软件开发阶段由于开发方法的差异而引起的软件可靠性预测问题作了定量分析。(5) 硬-软件混合系统可靠性问题。计算机系统是由硬件、软件组成的一个有机整体,硬件与软件之间相互依赖、相互作用,因此为了评价计算机系统的可靠性,必须从硬-软件综合系统的角度来认识问题。国外从 70 年代中期开始研究综合系统的可靠性问题。1983 年 arms 会议上开始将“综合硬/软件可靠性”作为会议专题之一。同年,还专门召开了“全系统可靠性研讨会”,国外这方面的研究成果已经在航空等领域得到应用。从 80 年代中期开始,我国科学工作者也投入了这项研究及应用。几种常见的硬- 软件混合系统可靠性模型有:costes-landrauit-lapie 马氏模型,thompson模型,sumita-masuda 模型,shooman模型,ibm 模型,iyer-tang 模型等。上述模型大多假定系统包含一个硬件子系统和一个软件子系统,所以,当任意一个子系统失效,都会导致系统失效。welkesr讨论了具有冗余硬件元件和多个软件版本的混合系统可靠性,建立了一个硬-软件统一模型,该模型将软件中的 g-o/nhp 模型与硬件马氏过程模型综合起来考虑。通过确定软件失效的转移概率,将软件失效在硬件可靠性模型中体现出来。国内软件可靠性研究始于 80 年代初,黄锡滋等在软件可靠性建模、软件可靠性分配及软件可靠性管理等方面作了有益的探索;陈望梅等开展软件避错技术研究;姚一平等在软件可靠性建模、软件可靠性评价工具和混合硬件-软件系统可靠性等方面作了努力;刘纯生在软件容错方面作了重要工作;蔡开元在软件可靠性建模(提出模糊软件可靠性模型)、软件可靠性模型应用选择、软件可靠性测试、软件可靠性度量体系作了有益的探讨。徐仁佐、李德银、张宇虹等在软件可靠性理论方面作了研究。在工程实践方面,姚一平等曾利用自己的软件可靠性评价工具对 act 验证机软件可靠性给予评价。蔡开元也将自己的模糊软件可靠性模型应用于 act验证机。徐仁佐等人利用 clips 开发了软件可靠性专家系统,从而为软件可靠性模型的选择和比较提供了有力的支持。1.2.2 软件可靠性领域面临的主要问题软件可靠性的研究虽然已取得了很大的成就,但存在的问题仍很多,主要有:(1) 软件可靠性测试。软件可靠性测试是适用于软件可靠性工程中的一种测试方法,旨在有效地发现程序中影响软件可靠性的缺陷,有别于传统的测试方法。软件可靠性测试在软件可靠性工程中很重要,甚至必不可少,是正确估计软件产品的可靠性的基础。但目前在这方面的研究工作很薄弱,急需开展。(2) 软件可靠性模型问题。虽然目前已建立了数百种软件可靠性模型,但均具有一定的局限性,因此,从软件可靠性模型的假设是否合理、实际应用是否简单方便、适用范围是否广泛等问题出发,如何进一步建立合理、实用的软件可靠性模型还有待于进一步研究。(3) 软件测试用例的自动生成问题。现有的软件测试用例生成方法缺乏形式化方式,因此各种软件测试工具中测试用例的自动生成工具还有待于进一步开发和完善。(4) 实时软件的可靠性评价。目前在软件可靠性评价技术的研究中,大多针对通用软件而忽视了实时软件。虽然两者在评价方法上有一部分是相同的,但实时软件的可靠性评价还有自身的特殊性,如对时间资源的管理与通用软件存在差异。(5) 高可靠性软件的可靠性评价。对某些可靠性要求极高的软件,如核电站、航天飞机软件,单纯依赖软件可靠性模型进行软件可靠性评价似乎不现实,因为所需的测试时间远远超出了有实际意义的界限。那么怎样对这些软件进行可靠性评价呢?目前还缺乏有效方法。(6) 硬-软件混合系统可靠性问题。计算机系统中硬、软件故障产生的方式截然不同,故硬、软件可靠性不完全一致,同时考虑到人的可靠性,目前虽然已建立了一些硬-软件可靠性模型,但这些模型都是针对一些具体的问题提出的,其侧重点各不相同,因而模型的问题还很多。1.3 论文主要研究内容及意义本论文是在国家“十五”项目“高可信赖的嵌入式实时操作系统”和合作项目“航空燃油计算机管理系统”的支持下进行的。本文主要围绕软件可靠性测试与评价技术展开,针对当前软件可靠性领域面临的主要问题,在以下几个方面做了重点研究:1 软件可靠性测试方法的研究。2 软件可靠性评价技术的研究。3 实时软件的可靠性评价技术的研究。4 软件可靠性测试用例的自动生成技术,以及自动化软件可靠性测试与评价框架的研究与实现。软件可靠性是软件质量的重要指标之一,软件业也越来越关注软件的可靠性问题。在这样的前提下,讨论软件的可靠性测试与可靠性评价技术,是十分有必要的,本文研究的意义主要有以下几点:第一,对于软件的可靠性测试方法起一定的改进作用。基于使用模型的统计测试方法的应用越来越广泛,然而使用模型的建立却缺乏成熟的方法。本文利用作为工业标准的 uml 建模语言,探讨并给出了一种基于 uml 模型的统计测试方法。该方法从 uml 模型导出使用模型,并首次给出了从 uml 状态图和用例图转化为使用模型的形式化算法。本文的研究使得统计测试方法更加可行、高效。第二,提出了一种比较有效的可靠性评价方法来验证软件的可靠性。由于软件可靠性模型本身存在的诸多不足和缺陷,传统的基于可靠性增长模型的可靠性评价方法已经不适合软件的可靠性评价,尤其是高可靠性需求的软件。本文通过研究基于假设检验的可靠性评价方法,并在其基础上做出改进,提出了一种基于贝叶斯理论的可靠性评价方法。该方法克服了传统可靠性评价方法的一些弊端。第三,针对实时多任务软件的可靠性评价做了一些研究。与通用软件相比,实时软件的可靠性评价有自身的特殊性。在实时多任务系统中,任务通常是一个相对独立的运行实体,具有不同的运行时间比例、故障率、重要度等,对整个系统的可靠性影响也不一样。本文提出了一种基于任务模块的实时软件可靠性评价模型,能较好地反映系统中实时软件的故障过程。第四,构建了一个软件可靠性测试与评价的辅助工具平台(satretools),并将上述理论研究应用到该平台框架的设计中。satretools 是一个集成化的测试系统,集成了软件的可视化建模、可靠性测试用例自动生成与管理、测试进程的执行和跟踪、以及可靠性评价等功能。针对传统的软件测评工具功能单一、自动化程度不高等缺陷,satretools 努力提供一个完整、自动化的可靠性测评环境。2 软件可靠性测评相关理论研究2.1 软件可靠性的基本概念2.1.1 软件可靠性的定义1983 年,美国 ieee 计算机学会软件工程技术委员会对软件可靠性的定义如下:1在规定的条件下,在规定的时间内,软件不引起系统失效的概率,该概率是系统输入和系统使用的函数,也是软件中存在的错误的函数;系统输入将确定是否会遇到已存在的错误(如果错误存在的话)。2在规定的时间周期内,在所述条件下程序执行所要求的功能的能力。软件可靠性定义中提到的“规定的条件”和“规定的时间”,在工程中有重要的意义,需要进一步解释。软件测试和运行中有三种时间度量。第一种是日历时间,日历时间是指日常生活中使用的日、周、月、年等计时单元;第二种是时钟时间,时钟时间是指从程序运行开始,到运行结束所用的时、分、秒,其中包括等待时间和其他辅助时间,但是不包括计算机停机占用的时间;第三种是执行时间,执行时间是指计算机在执行程序时,实际占用的中心处理器(cpu)的时间,所以又称为 cpu 时间。定义中所指的“条件”,是指环境条件。环境条件包括了与程序存储、运行有关的计算机及其操作系统。例如计算机的型号、字长、内存容量、外存介质的数量及容量、输入和输出设备的数量、通信网络、操作系统和数据管理系统、编译程序及其他支持软件。这些因素显然对程序的运行有重要的影响。但是这些因素在使用中一般没有变化。定义中的环境条件还包括软件的输入分布。程序在启动运行时,需要给变量赋值,即给程序提供输入数据。输入数据可能是由外部设备输入,也可能早已存储于计算机内存等待读取。2.1.2 软件可靠性的度量对软件产品具有可靠性程度的定量评价称为软件可靠性度量。软件可靠性度量参数(常简称软件可靠性参数)是指表示软件可靠性的一个或几个变量。软件可靠性指标是指从用户的角度对产品的可靠性参数应达到的目标值所作的规定。第 2 章软件可靠性测评相关理论研究软件可靠性很难用一个度量参数表示。对于不同的软件、不同的应用,可能使用不同的参数。和硬件可靠性度量一样,软件可靠性度量也可应用概率论和数理统计的方法、技术,因为软件的失效呈现出随机性。软件可靠性度量可以分为两类:管理度量和技术度量。管理度量主要面向管理人员,为软件可靠性管理服务。管理度量仅仅用于反映是否进行某项软件可靠性活动,因此通常只取“是”或“否”两个值。比如:是否进行软件故障树分析,是否收集有关的可靠性数据等。本节主要从技术度量的角度阐述软件可靠性的度量指标,即可靠性度量。1初始故障数:测试开始时软件中故障的个数。它可通过程序容量或可靠性模型对这一度量进行估计。2剩余故障数:经测试和故障排除后,尚残留在软件(程序和文档)中的故障数。通常它是根据测试的故障数据和可靠性模型来进行估计的,这是一种较为直观的度量方式。3 可靠度一般用 r(t)度量,指在 t=0 时系统正常的条件下,系统在时间区间0,t内能正常运行的概率。该参数是关于软件失效行为的概率描述,是软件可靠性的基本定义。4 失效概率 f(t)是失效时间少于或等于 t 的概率,根据其定义可知它和可靠度 r(t)之间存在如下联系:f(t)=1-r(t) 公式(1-1)5 失效强度 f(t):失效强度是失效概率的密度函数,如果 f(t)是可微分的,失效强度 f(t)是 f(t)关于时间的一阶导数,即:f(t)=df(t)/dt=-dr(t)/d(t) 公式(1-2)8 平均失效间隔时间 mtbf:指 2 次相邻失效时间间隔的均值。当软件从时刻 t1 工作到时刻 t2,若发生了 n次失效,则:mtbf=(t1- t2)/(n+1 公式(1-6)2.1.3 软件可靠性工程至今尚无国际公认的关于软件可靠性工程的定义。根据我国可靠性工程界关于硬件可靠性工程的定义,本文认为,软件可靠性工程(softwarereliabilityengineering)是为了达到软件产品的可靠性要求而进行的一系列软件工程活动。其内涵涉及以下4方面活动和有关技术:1 软件可靠性分析:进行软件的可靠性需求分析、指标分配、故障数分析、失效模式和影响分析以及软件开发过程中有关软件可靠性的特性分析等;2软件可靠性设计和实现:进行防错设计、容错设计、纠错设计、故障恢复设计和软件可靠性增长等;3软件可靠性测量、测试和评价:在软件生存周期各阶段进行有关软件可靠性的设计、制造和管理方面的属性测量,进行软件可靠性测试、软件可靠性预计、软件可靠性估计和软件可靠性验证等;4 软件可靠性管理:确定影响软件可靠性的因素,指定必要的设计和实现准则,以及对软件开发各阶段软件可靠性相关过程和产品的要求。依据上面3中所述有关测量数据和分析结果控制与改进开发过程,进行风险管理(不仅考虑安全性等技术风险,而且考虑进度和经费方面的风险),改进费用效益关系,改进开发过程,对采购或重用的软件进行可靠性管理等。实施软件可靠性工程要解决三个问题,即软件可靠性指标的确定与分配、软件可靠性要求的实现和软件可靠性的验证。2.2 软件测试与可靠性2.2.1 软件测试软件测试是保证软件正确性和提高软件软件可靠性的最基本和最重要的手段,也是工业界使用的主流技术。下面本文将对软件测试用到的主要方法、技术和测试模型做一个简要的介绍。 软件测试方法软件测试方法有许多,不同的测试方法往往有不同的出发点、不同的思路以及不同的手段。本节主要介绍两种最基本的测试方法:黑盒测试和白盒测试。1 黑盒测试(black-box testing)又称功能测试,数据驱动测试(data drivingtesting)或基于规格说明(specification-based testing)的测试。在进行黑盒测试时,仅把软件当作一个黑盒,只需知道程序输出和输入之间的关系或者程序的功能。因此,黑盒测试是从用户的观点出发的测试。它是从软件需求出发,根据软件需求规格说明设计测试用例,并根据测试用例的要求运行被测程序的测试方法。它较少关心程序内部的实现过程,侧重于程序的执行结果,将被测程序看成是不可见的黑盒子,因此被称为黑盒测试。黑盒测试着重于验证软件功能和性能的正确性,其典型测试项目包括功能测试、性能测试、边界测试、强度测试等。2 白盒测试(white-box testing)又称结构测试(structure testing),逻辑驱动测试(logical driving testing) 或基于程序的测试(program-based testing)。采用这一测试方法,测试者必须看到被测的源程序,分析程序的内部结构,并根据其内部构造设计测试用例。白盒测试是一种按照程序内部的逻辑结构和编码结构设计并执行测试用例的测试方法。采用这种测试方法,测试者需要掌握被测程序的内部结构。白盒测试通常根据覆盖准则设计测试用例,使程序中的每个语句、每个条件分支、每个控制路径都在程序测试中受到检验。白盒测试需要运行程序,并能在运行过程中跟踪程序的执行路径。这两类测试方法是从完全不同的起点出发,并且是两个完全对立的出发点,可以说反映了事物的两个极端。两类方法各有侧重,在测试的实践中都是有效的和实用的。我们不能指望其中的一个能够完全代替另一个。在进行单元测试时大都采用白盒测试,而在功能测试或系统测试中一般采用黑盒测试。表2-1给出了黑盒测试和白盒测试两类测试方法的对比。 软件测试技术目前在软件测试中广泛使用的关键技术有:(1)基于规范的测试技术在该类测试中,除了早已熟悉的边界值分析、等价类划分等方法外,还有决策表、有限自动机、形式化规范等方法。决策表用来表示条件(输入)和行为(输出)之间的逻辑关系,从条件和行为的所有可能组合中系统地选取测试用例,可用因果图来表示这样的关系。有限自动机用来对测试系统进行建模,并采用相关的技术,选取测试用例覆盖其中的状态及其转换。形式化规范是用形式化语言给出规范(例如准确地定义语法和语义),进而实现自动地由规范生成测试用例,同时提供预示输出(oracleoutput),用以检验测试结果。(2)基于代码的测试技术在该类测试中,主要包括参考模型建立、控制流测试和数据流测试。主要用图形的形式来表示程序的控制结构,其中的结点和边对应程序中的元素,结点表示语句或语句的顺序流,边表示结点之间的控制转换;控制流测试旨在覆盖程序中的所有语句可以用决策/条件覆盖等准则来度量覆盖率;数据流测试中,使用控制流程图作为注释来解释如何定义和使用程序变量,沿着流程图的不同流向看出同一个变量的值的变化,可以用一个三元组(d,u,v)来表示,其中v 是变量,d 是定义v 的结点,u是使用v的结点,这样,就可以看出三者之间的关系。(3)基于故障的测试技术在该类测试中,主要包括错误猜测、故障植入、修改测试三种,其中错误猜测是由测试人员根据给定的程序,依据自身经验和以前类似项目的记录大致猜测最有可能的故障;故障植入是目前非常通用的测试方法,通过人工地将故障植入程序并对其后的结果进行监控,找出程序中隐藏的缺陷;修改测试是指对程序稍作修改,即作一些语法上的修改(区别于原始版本),让所有的测试用例在原始版本和修改后的版本上运行,如果测试用例能够分清程序与修改后程序之间的差别,就将后者删去。大量实践表明:修改测试可以找出程序中的语法故障,有的甚至是很复杂的故障。当然,在具体应用时,修改的程度要根据实际需要而定。(4)基于使用的测试技术可以使用模拟仿真技术重新生成产品实际操作的环境,即通过列举程序可能的输入状态和它们发生的概率来建立测试模型,生成的测试模型是关于如何使用系统的一种定量特征描述。目前在软件可靠性工程测试技术里已经大量使用该技术。 软件测试模型随着面向对象开发技术的广泛应用和软件测试自动化的要求,基于模型的软件测试逐渐得到重视。基于模型的软件测试属于基于规范的软件测试范畴,其特点是:在产生测试用例和进行测试结果评价时,都是根据被测试应用程序的模型及其派生模型(一般称为测试模型)进行的。基于模型的测试最初应用于硬件测试,广泛用于电信交换系统测试,目前在软件测试中得到了一定应用,并在学术界和工业界得到了越来越多的重视。软件测试中使用的典型模型有:有限状态机、uml 模型和马尔可夫链等模型。1 有限状态机:基于有限状态机的测试模型假设软件在某个时刻总处于某个状态,并且当前状态决定了软件可能的输入,有限状态机模型特别适用于把测试数据表达为输入序列的测试方法,并可以利用图的遍历算法自动产生输入序列。有限状态机可以用状态迁移图或状态迁移矩阵表示,可以根据状态覆盖或迁移覆盖产生测试用例。有限状态机模型有成熟的理论基础,并且可以利用形式语言和自动机理论来设计、操纵和分析,特别适合描述反应式软件系统,是最常用的软件描述和软件测试的模型。beizer 等详细讨论了基于状态机的软件测试,基于有限状态机模型的测试研究已经取得一定研究成果6,7,8,但是复杂软件往往要用很复杂的状态机表示,构造状态机模型的工作量比较大,因此自动构造软件的有限状态机模型非常关键。2 uml 模型:作为事实上的面向对象建模标准语言,统一建模语言(uml)在面向对象开发过程中得到了广泛应用,出现了大量商品化的支持工具,如rational rose,基于uml模型的测试也得到了广泛关注。基于uml 模型的测试研究主要集中于 uml 的状态图(statechart),还很少利用其他图(如部署图、组件图)的模型信息。状态图是有限状态机的扩展,强调了对复杂实时系统进行建模,提供了层次状态机的框架,即一个单独状态可以扩展为更低级别的状态机,并提供了并发机制的描述9,因此 uml使用状态图作对单个类的行为建模。文研究了基于状态机的测试充分性准则,文 11研究了基于状态图的软件测试。3 马尔可夫链:是一种以统计理论为基础的统计模型,可以描述软件的使用,在软件统计测试中得到了广泛应用。马尔可夫链实际上是一种迁移具有概率特征的有限状态机,不仅可以根据状态间迁移概率自动产生测试用例,还可以分析测试结果,对软件性能指标和可靠性指标等进行度量。另外,马尔可夫链模型适用于对多种软件进行统计测试,并可以通过仿真得到状态和迁移覆盖的平均期望时间,有利于在开发早期对大规模软件系统进行测试时间和费用的规划。马尔可夫链是统计测试的基本模型,在净室软件工程中得到了深入研究,在微软、raytheon及美国联邦航空署(faa)都得到了成功应用。马尔可夫链可以用随机迁移矩阵或者带迁移概率的状态迁移图表示。基于马尔可夫链的测试充分性准则一般要求测试过程中对马尔可夫链迁移的覆盖与实际使用相同。4 文法模型:可以描述程序的语法。由于不同的文法等价于不同的状态机,因此也可以视为状态机模型的变体。有关基于文法的测试可见文16,这方面研究工作相对较少。2.2.2 软件可靠性评价技术随着人们对软件可靠性工程研究的深入,软件可靠性评价成为了一项不可缺少的重要的研究内容。因为离开了准确的评价方法,可靠性保证措施的有效性难以判断。目前在软件可靠性评价技术中,受到关注的主要有两种评价方法:1基于软件可靠性测试的验证方法软件可靠性验证方法是为了验证在给定的统计置信度下,软件当前的可靠性水平是否满足用户的要求而进行的测试,即用户在接收软件时,确定它是否满足测评相关理论研究软件规格说明书中规定的可靠性指标。该种方法一般是在软件验收阶段进行的,在软件需求方参与的情况下实施。其主要过程是根据现场测试(注意测试中不再进行故障剔除)的故障情况,利用某种或某些软件供需双方都认可的可靠性验收模型(比如 nelson模型)进行可靠性的定量评价,以判断该软件是否达到了其需求说明书中约定的可靠度。2基于软件可靠性建模的方法这一方法又称为软件可靠性增长建模,是当前软件可靠性建模的主要内容。该方法主要用于软件的开发阶段,其故障情况也要依赖于测试,与第一种方法不同的是在进行测试的同时修改故障,并通过对所收集到的故障行为进行建模分析,从而估计软件可靠性的实际水平,指导开发人员进行下一步的工作。测试与缺陷的排除联系在一起,一般安排在开发过程的系统测试阶段执行,将测试所确定的失效提交给开发者进行分析和修改,建立软件的一个新的版本,再进行下一次测试。在这种“测试排错新版本”的迭代过程中,由于在软件测试阶段被发现的软件错误不断被剔除,软件可靠性呈增长趋势,因此称为软件可靠性增长建模。软件可靠性模型将在 2.2.3 节重点阐述。2.2.3 软件可靠性模型软件可靠性模型是软件可靠性定量分析技术的基础。以软件可靠性模型为支撑的软件可靠性评价技术,在当前软件开发过程中具有重要的作用。本节将主要阐述软件可靠性模型的相关理论。 软件可靠性模型的概念软件可靠性工程中使用的模型有两大类型。第一类是可靠性结构模型。可靠性结构模型是指用于反映系统结构逻辑关系的数学方程。借助这类模型,在掌握软件单元可靠性特征的基础上,可以对系统的可靠性特征及其发展变化规律做出评价。软件可靠性结构模型包括串联系统模型、并联系统模型,以及硬软件复合系统模型等。软件可靠性结构模型是软件系统可靠性分析的重要工具,既可以用于软件系统的可靠性综合,也可用于软件系统的可靠性分解,本文第四章研究的基于任务模块的实时软件可靠性评价模型便属于这类模型。第二类模型是可靠性预计模型。可靠性预计模型本质上是一些描述软件失效与软件错误的关系,描述软件失效与运行剖面的关系的数学方程。借助这类模型,可以对软件的可靠性特征做出定量的预计或评价。例如,可以预计开发过程中的可靠性增长,预计或评价软件在预定工作时间的可靠度,预计软件在任意时刻发。生的失效数的平均值、软件在规定的时间间隔内发生失效次数的平均值、软件在生任意时刻的失效率、软件失效时间间隔的概率分布和软件预期的交付时间等。评价和预计是两个有区别又有联系的概念。评价是指对软件现有的可靠性水平做出评价。预计是指对软件未来的可靠性特征进行预测。预测未来的前提是认识现状,所以二者难以截然分开。必须指出,在使用数学模型进行预计时,蕴含的假定是,事物发展规律在未来的一段时间内保持不变。对于短期预测这个假设是合理的。但是,随着预测期的延长,其近似性减弱。用可靠性模型进行预计时,为了得到较准确的结果,如果发现软件的失效规律有明显改变,应该对参数加以修正或重新收集失效数据,重新确定模型参数。一般所说的软件可靠性模型均是指的软件可靠性预计模型。在本文中,若不作特别说明,软件可靠性模型均是指软件可靠性预计模型。 建模原理软件可靠性建模的目的是:根据与软件可靠性有关的数据,以统计方法给出软件可靠性的估计值或预测值。软件可靠性模型说明了失效过程对影响它的主要因素的通用依赖形式:错误引入、错误消除、操作环境。 建模的一般过程软件可靠性建模是试图以数学模型来模拟软件的可靠性行为,并对这一可靠性行为给出一种或多种定量的估计或预测。建模过程通常由以下几个部分组成:1 模型假设:在软件可靠性建模时都要作出某些假设,其主要原因是:1)目前人们对软件可靠性行为中的某些特征还无法确知,或者某些特征本来就具有不确定性。比如每个故障具有相同的发生率?故障的发生是否独立?2)为了数学上处理的方便。比如,假设每个故障是否有相同的发生率;软件的初始故障数为一固定的常数等。事实上,现有的很多模型,其差别仅在于假设的不同,而建模的原理是相同的。2 确定度量方式:在直接的、间接的、甚至辅助的各种度量中,根据需要,选择其中一种或多种度量来估计软件的可靠性。比如,故障强度、平均无故障时间等。3 建立数学模型:将已经选择的可靠性度量,表示为软件产品的某些特性的函数。比如,用 x1 , x2 , ,xn 表示软件的某些特性,建立起: (t)=f (x1 , x2 , ,xn) mttf=g (x1 , x2 , ,xn) 4 进行参数估计:对于某些通过模型无法直接获得的度量或参数,则需要使用某种参数估计方法来确定它们的值。目前,参数估计的主要方法有:最大似然估计、最小二乘法、贝叶斯估计、置信区间或置信水平。采用哪一种估计方法要视具体的模型和测试所收集的数据而定。5 确定数据输入域:绝大多数模型都要通过收集故障数据来确定模型中的未知参数。而故障数据的收集是以软件运行(模拟运行或实际运行)为前提的。因此,需要确定数据输入域。视具体情况,数据输入域 fd 可以是一个连续的数据范围 fd=? (di) | dmindidmax,也可以是一些离散的点 fd=d1 , d2 , ,dn。2.3 软件测试与可靠性评价的关系软件测试是“为了发现故障而执行程序的过程”18,其根本目的是以尽可能少的时间和人力发现并改正软件中潜在的各种故障及缺陷。因此,软件测试与软件可靠性评价有着密切的关系。一方面,软件测试是软件可靠性评价的基础,软件可靠性模型利用软件测试所提供的有关软件系统的故障数据,估算软件的可靠性,对软件将来的故障行为进行预测,以协助开发人员监督软件开发过程,辅助软件过程管理,如过程评价、风险分析、项目估计与决策等。因此,软件测试是保证软件质量,提高软件可靠性的主要手段。没有充分的测试工作,就不可能对软件的可靠性进行有效的评价。另一方面,软件可靠性评价又可以为软件测试服务。只有当经过可靠性评价后得到的可靠性定量指标达到预定的要求时,对软件进行的测试工作才是比较充分的测试。如果度量指标尚未达到预定要求,说明软件中还存在着较多的故障,需要继续对软件进行测试。也就是说,可以用可靠性度量指标来衡量软件测试工作的充分性。实际上,测试工作一直对准软件中隐含的各种故障,所有的测试方法和手段都是以找出软件中隐含的故障为目的。软件中隐藏的故障数目,直接决定软件的可靠性。如果不能将软件中隐含的故障及时排除,一旦暴露出来就会给使用者和维护者带来不同程度的严重后果,势必软件的可靠性差。所以,软件测试必须在软件投入生产运行之前进行,以尽可能多地发现软件中的故障,提高软件可靠性。2.4 小结软件可靠性是最重要的软件特性,通常用它来衡量在规定的条件和时间内,软件完成规定功能的能力。本章首先介绍了软件可靠性的基本概念,然后针对软件测试和软件可靠性评价的相关技术进行了重点研究。软件测试是提高和保证软件可靠性的最基本和最重要的手段,也是工业界使用的主流技术。为了保证软件可靠性,仅仅依靠软件测试还远远不够,还需要对软件的可靠性进行检验,即软件可靠性评价技术。因为离开了准确的评价方法,可靠性保证措施的有效性难以判断。软件测试与软件可靠性评价是验证并确认软件可靠性的基本手段,同时它们之间又存在密切的关系:一方面,软件测试是软件可靠性评价的基础,软件测试是保证软件质量,提高软件可靠性的主要手段。没有充分的测试工作,就不可能对软件的可靠性进行有效的评价。另一方面,软件可靠性评价又可以为软件测试服务。只有当经过可靠性评价后得到的可靠性定量指标达到预定的要求时,对软件进行的测试工作才是比较充分的测试。3 软件可靠性测试方法不同的软件测试类型具有不同的目的,归纳起来软件测试的目的有两种:一是为了发现错误,称这种测试为软件正确性测试,如传统的黑盒测试、白盒测试等都属于这类型的测试方法;另一目的是为了确保软件满足使用要求,称这种测试为软件可靠性测试。本章主要针对在软件可靠性工程中广泛使用的这种测试方法软件可靠性测试方法进行研究。3.1 软件可靠性测试方法的概念3.1.1 软件可靠性测试的提出软件可靠性度量不准确是软件可靠性测评的重要问题,其根本原因在于软件可靠性模型的假设与实际软件不符。为了简化模型的计算,在已提出的可靠性度量模型中常假设在测试时,软件按预期的实际运行方式进行。但在实际测试时,软件的使用方式可能与现场运行时有很大的不同。例如,在测试期间,对不常用的功能(如系统失效保护)也要进行大量的测试,以确保软件在需要时能按要求正常工作。可见,要想正确估计软件产品的可靠性,必须象在实际应用系统中一样测试软件产品。只有通过某种方式近似的模拟软件真实的运行环境,在此环境下进行系统测试,才能准确评价软件在实际运行中的可靠性。软件可靠性测试方法正是在这种情况下应运而生的。它主要采用了本文第 2.2.1 节论述的基于使用的测试技术,即通过使用模拟仿真技术重新生成产品实际操作的环境,通过列举程序可能的输入状态和它们发生的概率来建立测试模型,根据测试模型生成实际操作的场景。目前在软件可靠性工程测试技术里已经大量使用该技术。3.1.2 软件可靠性测试的定义软件可靠性测试是指在软件的预期使用环境中,为进行软件可靠性评价而对软件实施的一种测试。其基本思想是按照软件的测试模型(对软件实际使用情况的统计规律的描述)对软件进行测试。软件可靠性测试是面向失效的测试,以用户将要使用的方式来测试软件,每一次测试代表用户将要完成的一组操作,使测试成为最终产品使用的预演。这就使得所获得的测试数据与软件的实际运行数据比较接近,可用于软件的可靠性评价。软件可靠性测试能有效地暴露在实际使用过程中影响可靠性要求的软件缺陷。通过软件可靠性测试可以达到以下目的:(1) 有效地发现程序中影响软件可靠性的缺陷,从而实现可靠性增长:按照软件的测试模型对软件进行测试一般先暴露在使用中发生概率高的缺陷,然后是发生概率低的缺陷。而高发生概率的缺陷是影响产品可靠性的主要缺陷,通过排除这些缺陷可以有效地实现软件可靠性的增长。(2) 验证软件可靠性满足一定的要求:通过对软件可靠性测试中观测到的失效情况进行分析,可以验证软件可靠性的定量要求是否得到满足。(3) 估计、预计软件可靠性水平:通过对软件可靠性测试中观测到的失效数据进行分析,可以评价当前软件可靠性的水平,预测未来可能达到的水平,从而为开发管理提供决策依据。软件可靠性测试中暴露的缺陷既可以是影响功能需求的缺陷也可以是影响性能需求的缺陷。软件可靠性测试方法从概念上讲是一种黑盒测试方法,因为它是面向需求、面向使用的测试,它不需要了解程序的结构以及如何实现等问题。3.1.3 软件可靠性测试的过程使用软件可靠性测试方法对软件进行可靠性测试与评价的一般流程如图()所示。主要活动包括:(1) 构造测试模型:可靠性测试所用的“测试模型”是关于如何使用系统的一种定量特征描述,即系统的输入值用其按时间的分布或按它们在可能输入范围内的出现概率的分布来描述。粗略地说,这种测试模型是根据用户实际使用软件的方式,模拟软件的真实运行环境。测试模型是否能代表、刻画软件地实际使用取决于可靠性工程人员对软件的系统模式、功能、任务需求及相应的输入激励的分析,取决于他们对用户使用这些系统模式、功能、任务的概率的了解。测试模型构造的质量将对测试、分析的结果是否可信产生最直接的影响。(2) 产生测试用例,执行测试:软件可靠性测试采用的是根据测试模型,随机产生测试用例,然后在真实的测试环境或仿真测试环境中,对系统进行测试。(3) 可靠性评价,确定测试是否停止:利用某种可靠性评价方法对测试结果进行分析, 评价和预计软件的可靠性,以确定测试终止的时机。3.2 两种主要的软件可靠性测试方法当前有两种主要的软件可靠性测试方法,这就是下面要讨论的“基于运行剖面的可靠性测试方法”和“基于使用模型的统计测试方法” 。前者是 at&t 贝尔实验室的 j.d musa 在 1993 年提出的21,而后者是 harlan d.mills(1987)和 james a.whittaker(1992)提出的。这两种方法从不同的角度构造测试模型来模拟软件真实的运行环境。3.2.1 基于使用模型的统计测试方法 统计测试原理统计测试一词出自“净室软件工程”。统计测试把统计方法应用到了软件测试中,它的主要目标是度量软件的可靠性。它产生软件所有可能的使用的一个子集,并以这个子集所表现的性能作为依据来考虑整体使用的性能。统计测试根据用户对软件的使用方式展开,对那些使用频繁的操作会进行更多的测试,因此可以有效地发现那些对软件可靠性影响较大的软件错误。统计测试从本质上来说就是一种可靠性测试方法。软件测试的统计方法首先由harlanmills(1987)和他的ibm的同事开发出来,其思想是确定一个使用模型来代表系统所有可能的使用情形及其发生的概率,然后由该使用模型随机产生测试用例。随后johnmusa(1993)和他at&t的同事也提出了类似的方法(本文第3.2.2节介绍的方法),他们提出开发一个由运行集合和运行时所对应的概率组成的运行剖面,执行所有的运行可以达到理想的完全测试。mills和musa的方法所用的术语虽有微小的差别,但他们的基本思想都是基于统计学的基本原理,即根据软件实际使用情况的统计规律的描述,对软件进行随机测试。 使用模型的构造在实际应用领域,软件的使用方式会表现出一定的统计特性,不同的输入处于不同的状态发生的频度各不相同。使用模型是软件使用过程中软件形态的精确刻划,它把软件的使用方式以模型的方法表示出来,描述了软件的使用特性。基于使用模型的统计测试就是建立软件的使用模型、根据使用模型产生测试用例(软件所有可能输入的一个子集)和度量软件的可靠性的过程。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论