线上期刊服务咨询,期刊咨询:400-808-1701 订阅咨询:400-808-1721

软件测试8篇

时间:2023-03-07 15:01:17

绪论:在寻找写作灵感吗?爱发表网为您精选了8篇软件测试,愿这些内容能够启迪您的思维,激发您的创作热情,欢迎您的阅读与分享!

软件测试

篇1

乙方(供测方):_________

甲乙双方经过平等协商,在诚信友好,充分地表达各自意愿的基础上,根据《中华人民共和国合同法》的规定,达成如下协议,双方共同遵守。

第一条 合同性质

本合同属于软件测试合同。

第二条 合同内容

乙方为甲方提供《_________软件》的测试。

以下的测试款项,甲方在购买正式的软件时,可作为正式购买软件预付款的一部分抵扣,同时,测试期结束,此合同失效。

第三条 测试方式,费用及支付方式

测试方式为:账号的测试;_________提供测试服务器测试;客户出服务器,_________提供测试软件。

支付方式:a.账号的测试:合同签订后,乙方提供2个带有_________的账号(每个账号有30分钟的话费)话机或网关,提交甲方测试,测试的费用只收硬件的押金即可。测试结束,乙方按硬件的借侧合同执行。b._________提供测试服务器测试:由乙方提供整套的已装有_________软件带有公网ip地址的服务器,其管理权由甲方控制,测试期为一个月,测试费用:_________元,合同签订后一次付清,即可将服务器的地址与密码交予甲方。测试结束后全部收回。c.客户出服务器,_________提供测试软件:客户按照乙方的要求将服务器,中继网关配好后,提交乙方安装_________软件,具体的条款见本合同的第四、五、六、七条。测试期为_________个月,费用为_________元人民币,合同签订后一次性付清。

第四条 合同执行期限

交货:甲方将所需要的全部硬件设备配好后(硬件设备配置必须符合乙方系统的要求);乙方应于甲方通知乙方安装系统之日起_________个工作日内完成软件系统的安装和调试。

第五条 验收标准及时间

乙方安装和调试竣工资料(包括用户手册和/或维护手册等)。

甲方接到乙方验收通知后在现场安排验收,验收合格后,甲方以书面方式签收。

第六条 系统培训

甲方参加系统培训的人员的基本的要求:熟悉并具有电信操作及运营经验,熟悉英特网及宽带网的协议及设计,能熟练操作msie6.0linux9.0cis,熟悉计算机及服务器系统的维护及简单维修。

第七条 软件服务内容

7.1 在_________网关及_________接通并通过_________验收后,_________在_________个工作日内完成远程_________网关软件安装及调试工作。

7.2 在服务器及完整的linux9.0操作系统安装完毕并通过_________验收后,_________在_________个工作日内完成远程软件安装及调试工作。

7.3 在以上两项工作完成之后,_________科技在5个工作日内完成远程综合调试工作并提交综合测试报告。

7.4 售后服务条例:对于使用_________系统服务平台的运营商,乙方提供许可软件的售后服务支持

7.5 售后服务指标体系:乙方在接到甲方反映的技术问题30分钟内电话联系一级技术支持并开始工作。经常性问题在60分钟内解决,为解决的问题提供120分钟进展报告。有难度问题(在24小时内不能解决的问题),提供每12小时进展报告。

7.6 系统的安装,调试及维护原则上由乙方负责。

7.7 乙方提供的技术支持为_________。

第八条 不可抗力

甲乙双方的任何一方由于不可抗力的原因不能履行合同时,应及时向对方通报不能履行或不能完全履行的理由,在取得有关主管机关证明以后,允许延期履行,部分履行或者不履行合同,并根据情况可部分或全部免予承担违约责任。

第九条 争议解决方式

在合同履行过程中发生争议,双方应当协商解决。协商解决不成,双方商定,采用向合同签订地仲裁委员会仲裁。

第十条 合同生效

本合同正本一式二份,甲乙双方各执一份,经双方签字盖章后生效。

甲方(盖章):_________乙方(盖章):_________

授权代表(签字):_________授权代表(签字):_________

篇2

关键词:软件可靠性;软件质量;软件测试;测试用例



1概述

信息技术的飞速发展,使软件产品应用到社会的各个领域,软件产品的质量自然成为人们共同关注的焦点。软件开发商为了占有市场,必须把产品质量作为企业的重要目标之一,以免在激烈的竞争中被淘汰。用户为了保证自己业务的顺利完成,总是希望选用优质的软件。质量不佳的软件产品不仅会使开发商的维护费用和用户的使用成本大幅增加,还可能产生其他的责任风险,在一些关键应用,如民航订票系统、银行结算系统、证券交易系统等中使用质量有问题的软件,还可能造成灾难性的后果。

软件危机曾经是软件界甚至整个计算机界最热门的话题,为了解决这个危机,软件从业人员、专家和学者做出了大量的努力。现在人们已经逐步认识到所谓的软件危机实际上仅是一种状况,那就是软件中有错误,正是这些错误导致了软件开发在成本、进度和质量上的失控。有错是软件的属性,而且是无法改变的。因为软件是由人来完成的,所有由人做的工作都不会是完美无缺的。问题在于应该如何去避免错误的产生和消除已经产生的错误,使程序中的错误密度达到尽可能低的程度。

软件工程学出现后,软件开发被视为一项工程,以工程化的方法来进行规划和管理软件的开发。事实上,不论采用什么技术和什么方法,软件中出现错误总是难免的。采用新的语言、先进的开发方式、完善的开发过程,可以减少错误的引入,但是不可能完全杜绝软件中的错误,这些引入的错误需要测试来找出。测试是软件开发的重要部分。统计表明,在典型的软件开发项目中,软件测试工作量往往占软件开发总工作量的40%以上。而在软件开发的总成本中用在测试上的开销要占30%到50%。如果把维护阶段也考虑在内,讨论整个软件生存时期时,测试的成本比例也许会有所降低,但实际上维护工作相当于二次开发,仍至多次开发,其中必定还包含有许多测试工作。系统的问题越早发现,改正成本越低,破坏性越小,所以,在系统前要尽量多地把系统问题找出来,其手段就是有计划、有组织地进行充分的测试。

软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一组测试数据,并利用这些测试数据运行程序,以发现程序错误的过程。根据测试数据设计方法,软件测试可分为结构测试和功能测试。在结构测试过程中,测试者对程序的语句、分支和逻辑路径进行各种覆盖测试,可以在不同点检查程序的状态,以确定实际状态与预期状态是否一致。软件测试的目的是发现错误,而不是确认其正确性,而对已进行的测试过程的程度进行评估。

2测试方法

2.1软件测试实质

软件测试是一项逻辑性强、且极具条理的工作,也是具有风险性的行为。由于软件的输入量、输出结果、软件实现途径都很多,而且软件产品说明书没有客观的标准,导致从不同的角度看,软件缺陷的标准不同,因而无法对软件实施完全测试,这样,就无法通过软件测试显示隐藏的软件缺陷,只能尽量查找软件缺陷,找到的软件缺陷越多,说明软件本身的缺陷就越多,况且还有一些是未发现、不能断定的缺陷,这就是软件测试的局限性。软件测试与软件开发过程的关系如图1所示。

图1软件测试与软件开发的关系

所有的软件测试都有2个关键的问题组成:建立能测试应用程序的环境,并在该环境中测试软件能力。测试员必须理解和重新生成软件所在的复杂软件环境,并运用其能力确保正常的测试。

2.2软件测试手段

从测试是否针对系统的内部结构和具体实现算法的角度来看,可分为白盒测试和黑盒测试。2.2.1黑盒测试

黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能情况下,通过测试来检测每个功能是否都能正常使用。在测试时,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息并且保持外部信息(如:数据库或文件)的完整性。黑盒法着眼于程序外部结构,不考虑内部逻辑结构,只针对软件界面和软件功能进行测试,它主要用于软件验收测试。黑盒法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。测试情况实际上有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。

2.2.2白盒测试

白盒测试也称结构测试或逻辑驱动测试,它是在已知产品内部工作过程情况下,通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都能按预定要求正确工作,而不顾它的功能。白盒测试的主要方法有逻辑驱动、基路测试等,白盒法是穷举路径测试,主要用于软件验证。

(1)软件有产品说明书时,对产品说明书实施测试和审查:由于软件产品说明书属于文档,因此对产品说明书的测试是黑盒测试。在实施测试时要弄清所开发软件的客户,并熟悉现有的标准和规范,基于同类软件测试的经验进行测试。除了这些,如果时间和条件允许,应该对产品说明书进行审查,按照相关的标准,看产品说明书是否符合要求。这都是通常的一些做法,当然还可以采用其他软件检测方法。

(2)由于当前软件开发有时不是很正规,在没有产品说明书时应使用试探性测试:首先要分步骤地弄清软件特性,记录软件运行情况,详细描述软件功能,然后运用静态和动态黑盒测试两种方式来测试软件,发现软件缺陷,在这种情况下,可以将一些非法、错误和垃圾数据作为输入数据,以检验软件的输出结果。测试时可采用反复测试、边界值测试和不合条件等方法。

(3)对有些软件实施状态测试:首先是熟悉软件的逻辑流程,可能的话,建立状态转换图,尽量清晰地描绘软件可能的独立状态,从一种状态到另一种状态所允许的输入和条件,以及进入或退出某种状态时的设置条件和输出结果;如果要测试的软件规模较大、复杂性较高,那么建立状态转换图将是非常艰巨的任务,这时减少要测试的状态及状态的数量,但是必须保证每种状态都必须测试一次,也可以在状态测试时选择那些不常用的分支,因为这是最容易被忽略的。在此基础上,测试所有的错误状态及返回值,测试随机状态转换。

(4)在前述测试的基础上,对有些测试实施失败状态测试:具体在实施时,指的是几个时间对某一资源竞争使用,比如:

①两个不同的程序同时保持或打开同一个文档。

②共享同一台设备。

③当软件处于读取或者修改状态时按键或者单击鼠标。

④同时关闭或者启动同一个软件的多个实例。

⑤使用不同的程序同时访问同一个数据库。

类似这样的竞争条件还有很多,不一一举例。

(5)在实际测试时还常用反复、压迫和重负测试,实施这些测试的目的是考验软件在恶劣条件下是否能正常运行和退出,从而验证软件的性能。反复测试指的是不断地执行同样的操作;压迫测试是使用软件在不够理想的条件下运行,从而观察软件对外部资源的要求和依赖程度,借此来测试软件的性能;重负测试是指尽量提供条件任其发挥,让软件处理尽可能大的数据文件,即最大限度地发掘软件的能力,使之不堪重负,大多数情况下,用时间作为参数实施重负测试,看其在重负情况下能否正常运行。实际测试时,常将三种测试方法结合起来使用。

(6)测试软件的另一种有效方法就是进行正式审查,其中包括以下几个方面:确定问题、制定审查规则、准备工作以及编写报告,进行审查的主要方法就是组织熟悉该类软件的人员逐一检查代码,其中重要的软件还需要按能力成熟度(CMM)中的要求进行同行评审。

(7)在实际测试中经常采用一种称之为动态白盒测试的方法,其意义是指利用查看代码功能和实现方式得到的信息来确定哪些要测试,哪些不需要测试,以及如何开展测试。其中不仅是查看代码,还包括直接测试和控制软件。包括以下几个部分:

①直接测试底层功能、过程、子程序和库。

②根据软件运行的实际情况不断地调整测试用例。

③对软件中的部分变量和状态信息进行访问,确定测试与预期结果是否相符,并强制软件以正常测试难以实现的方式运行。在具体实施时应分阶段地进行测试,即遵循单元测试、集成测试、配置项测试和系统测试的步骤。目前,灰盒测试逐渐为大家认同,灰盒测试综合了白盒测试和黑盒测试的优点,模糊了两者的界限,在做法上仍然把软件当成黑盒来测试,但是通过简单地查看(不像白盒那样进行完整地查看)软件内部工作机制作为补充。现在的网页制作就很适合灰盒测试。

3结束语

软件测试的目的不是为了仅仅找出错误,而是通过它发现错误、分析错误,找到错误的分布特征和规律,从而帮助项目管理人员发现当前所采用的软件开发过程的缺陷,以便改进;同时也能够通过设计有针对性的检测方法,改善软件测试的有效性。即使测试没有发现任何错误,也是十分有价值的,因为完整的测试不仅可以给软件质量进行一个正确的评价,而且是提高软件质量的重要方法之一。

参考文献

篇3

关键词:软件测试;满足需求;可靠性

Software Test

Dalian maritime University in Liaoning province Xu Xinghao

Abstract: With the development of science and technology, the function of software is becoming more and more powerful. The complexity of software is increasing so fast that it is very difficult to test and assess the reliability of software. As an important part of software development, software testing has been paid more and more attention. The importance of software testing is more prominent. In order to ensure the quality of a software system, it is necessary to specialize in software testing and method for assessment of reliability. This paper is something about studying in this area.

Key words: software testing; meet demand; reliability

1 引言

随着科学技术的飞速发展,硬件发杂性、多样性和应用的复杂性增加,软件系统的复杂性和规模也在不断增大,软件安全性和质量的保证成为各大公司及个人日益关注的焦点,软件中存在的各种问题也逐渐成为制约我国软件产业发展的主要因素。后期的软件测试工作可以说是为软件产品的完工把好最后一道关,是检验软件产品最为重要的一步。所以软件测试在软件开发中的地位日趋升高、软件测试员的地位也在日益提高。

我们先简单的分析一下软件缺陷产生的原因。软件在投入运行之前会先进行软件测试,但运行前的软件测试是根据软件的需求分析、设计规格和编码实现为审定目标。但程序中的故障并一定是由编码引起的,大多数的软件缺陷可能是在系统详细设计阶段、概要设计阶段甚至是在需求分析阶段就存在问题所导致。在软件开发过程中,需求的更改、软件说明书的描述开发小组人员间的交流都可能导致软件程序出现缺陷。而软件测试是最大限度避免软件缺陷产生的最好途径[1]。本文系统的介绍了有关软件测试的各阶段及其用途。

2 软件测试的定义

软件测试(Software testing)是软件生存期(Software life cycle)中的一个重要阶段,是软件质量保证的关键步骤。通俗地讲,软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码进行最终复审的活动。1983年IEEE提出的软件工程术语中给软件测试下的定义是:“使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别”。这个定义明确指出:软件测试的目的是为了检验软件系统是否满足需求[2]。

从用户的角度来看,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,所以软件测试应该是“为了发现错误而执行程序的过程”。或者说,软件测试应该根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误或缺陷。

3 软件测试的生命周期

软件测试就是软件在投入运行前,对软件需求分析、设计规格和编码是的最终审查,他是保证软件质量的关键步骤。软件测试是为了发现错误而执行程序并根据软件开发各阶段的规格说明和程序的内部结构而精心设计的测试。下图为一个测试生命周期模型。

软件测试不仅仅是对程序的测试,而是贯穿于软件定义和开发的整个过程,因此,软件开发过程中产生的需求分析、概要设计、详细设计以及编码等各个阶段所得到的文档,包括需求规格说明、概要设计规格说明、详细设计规格说明以及源程序,都是软件测试的对象[3]。软件测试在软件生命周期,也就是软件从开发设计、运行、直到结束使用的全过程中,主要横跨单元测试阶段和综合测试阶段,即要在每个模块编写出以后进行测试、在完成单元测试后进行的测试,如集成测试、系统测试、验收测试等。

4 软件测试的目的

软件测试的目的,第一是确认软件的质量,其一方面是确认软件做了你所期望的事情(Do the right thing),另一方面是确认软件以正确的方式来做了这个事件(Do it right)。第二是提供信息,比如提供给开发人员或程序经理的反馈信息,为风险评估所准备的信息。 第三软件测试不仅是在测试软件产品的本身,而且还包括软件开发的过程。如果一个软件产品开发完成之后发现了很多问题,这说明此软件开发过程很可能是有缺陷的。因此软件测试的第三个目的是保证整个软件开发过程是高质量的。

软件质量是由几个方面来衡量的:一、在正确的时间用正确的的方法把一个工作做正确(Doing the right things right at the right time.)。二、符合一些应用标准的要求,比如不同国家的用户不同的操作习惯和要求,项目工程中的可维护性、可测试性等要求。三、质量本身就是软件达到了最开始所设定的要求,而代码的优美或精巧的技巧并不代表软件的高质量(Quality is defined as conformance to requirements, not as “goodness” or “elegance”.)。四、质量也代表着它符合客户的需要(Quality also means “meet customer needs”.)。作为软件测试这个行业,最重要的一件事就是从客户的需求出发,从客户的角度去看产品,客户会怎么去使用这个产品,使用过程中会遇到什么样的问题。只有这些问题都解决了,软件产品的质量才可以说是上去了[4]。

测试人员在软件开发过程中的任务:

1、寻找Bug;

2、避免软件开发过程中的缺陷;

3、衡量软件的品质;

4、关注用户的需求。

总的目标是:确保软件的质量

5软件测试方法及流程

软件测试方法主要有黑箱测试方法与白箱测试两类。黑箱测试又称功能测试、数据驱动测试或基于规格说明的测试,是在完全不考虑程序内部结构和内部特性的情况下,检查输入与输出之间关系是否符合要求。白箱测试又称结构测试、逻辑驱动测试或基于程序的测试,是在已知程序内部结构的情况下设计测试用例的测试方法。显然,白箱测试适合在单元测试中运用,而在独立测试阶段多采用黑箱测试方法。

测试用例(Test case)实际上是对软件运行过程中所有可能存在的目标、运动、行动、环境和结果的描述,是对客观世界的一种抽象。设计测试用例即设计针对特定功能或组合功能的测试方案,并编写成文档。测试用例应该体现软件工程的思想和原则。测试用例的选择既要有一般情况,也应有极限情况以及最大和最小的边界值情况[5]。因为测试的目的是暴露应用软件中隐藏的缺陷,所以在设计选取测试用例和数据时要考虑那些易于发现缺陷的测试用例和数据,结合复杂的运行环境,在所有可能的输入条件和输出条件中确定测试数据,来检查应用软件是否都能产生正确的输出。

软件测试所得到的数据经过处理以后,可以用来作为评估软件系统是否满足用户需求的依据。软件测试阶段的信息流如下图所示:

6 结语

软件系统的规模也在持续扩大,需求日益复杂,对软件质量的要求也越来越高。但现实中软件系统的质量和稳定性却不尽如人意,采用有效的软件测试是保证软件质量、提高软件可靠性的重要手段。

软件测试是产品最终交付到用户之前的最后一道防线,有着举足轻重的地位。然而,做好软件测试却是不容易的,一方面你需要同时掌握软件开发的技能和软件测试方面的技能;另一方面,产品必须给予测试充分的独立性和资源保证。

软件测试是发现软件中错误而检查文档、运行程序的一个过程。软件测试的概念虽然是和软件编程同时提出的,但发展速度却远远没有编程技术快。近十几年来,随着软件应用的迅速推广,对软件测试也变得迫切需要,各种针对性的测试方法和技术不断出现。

软件测试前景被极为看好,我们相信,在不久的将来,软件测试会成为软件行业的主题被越来越多的人更广泛的重视。

参考文献

[1].杨为民等,可靠性维修性保障性丛书,国防工业出版社,1995.

[2].张海藩,软件工程,人民邮电出版社,2008.

[3].Daniel J.Mosley, Bruce A.Posey,软件测试自动化,机械工业出版社,2007.

[4].梅启智、廖炯生、孙惠中,系统可靠性工程基础,科学出版社,1992.

篇4

关键词:软件测试;方法;技术

白盒测试也称结构测试或逻辑驱动测试。它是按照程序内部的逻辑结构测试程序,主要关注代码是否能够正确执行。通过白盒测试可以检测出产品内部动作是否按照设计规格说明书的规定正常工作,并检验程序中的每条通路是否都能按预定要求正确工作。白盒测试是把测试对象看作一个透明的盒子,软件测试人员能够依据程序内部逻辑结构等相关信息,设计或选择测试用例,对程序进行测试。通过在不同的节点检查程序的状态,以保证实际的状态和预期的状态一致。

3.灰盒测试

灰盒测试,是介于白盒测试与黑盒测试之间的。可以这样理解,灰盒测试关注输出对于输入的正确性,同时也关注内部表现,但这种关注不像白那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态,有时候输出是正确的,但内部其实已经错误了,这种情况非常多,如果每次都通过白盒测试来操作,效率会很低,因此需要采取这样的一种灰盒的方法。

二、 软件测试技术的策略

软件测试并不单是软件开发完成后的一个独立的过程,而是贯穿于整个软件开发的过程,根据软件开发的周期不同,可以将软件测试分为:单元测试、集成测试、确认测试、系统测试和验收测试。

1.单元测试(Unit Testing)

单元测试是在软件开发过程中能够进行的最基础的测试活动,在单元测试活动中,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。单元测试不仅仅是作为无错编码一种辅助手段在一次性的开发过程中使用,单元测试必须是可重复的,无论是在软件修改,或是移植到新的运行环境的过程中。因此,所有的测试都必须在整个软件系统的生命周期中进行维护。

2.集成测试(Integrated Testing)

集成测试,也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。程序在某些局部反映不出来的问题,在全局上很可能暴露出来,影响功能的实现。因此,单元测试后,有必要进行集成测试,发现并排除在模块连接中可能发生的问题,最终构成要求的软件子系统或系统。对子系统,集成测试也叫部件测试。

3.确认测试(Validation Testing)

确认测试又称有效性测试。有效性测试是在模拟的环境下,运用黑盒测试的方法,验证被测软件是否能够按照需求规格说明书中所要求的工作。任务是验证软件的功能和性能及其他特性是否与用户的要求一致。对软件的功能和性能要求在软件需求规格说明书中已经明确规定,它包含的信息就是软件确认测试的基础。确认测试的目的是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是确认测试的任务,即软件的功能和性能如同用户所合理期待的那样。

4.系统测试(System Testing)

系统测试的任务是尽可能彻底地检查出程序中的错误,提高软件系统的可靠性,其目的是检验系统“做得怎样”。这阶段又可分为三个步骤:模块测试,测试每个模块的程序是否有错误;组装测试,测试模块之间的接口是否正确;确认测试,测试整个软件系统是否满足用户功能和性能的要求。该阶段结束应交付测试报告,说明测试数据的选择,测试用例以及测试结果是否符合预期结果。

三、软件测试未来发展方向

目前,软件测试存在4个发展方向。

1.验证技术

验证的目的在于证明在软件生命期各个阶段,以及阶段间的逻辑协调性和正确性。验证技术目前仅适用于特殊用途的小程序。

2.静态测试

正逐步地从代码的静态测试往高层开发产品的静态测试发展。

3.测试用例的选择

什么样的测试用例是好的测试用例?可以从4个特性描述测试用例的质量,即有效性、仿效性、经济性和修改性。

4.测试技术的自动化

这是一个最新的发展方向。自动测试也是一门技术,但与测试技术存在很大的区别。

参考文献:

篇5

关键词:软件测试;软件测试技术;自动化测试;测试工具

中图分类号:TP311.5 文献标识码:A

The Status Quo of Software Testing Technology

LI Jing, GUO Xiao-lei

(Software Vocational and Technical College,Kaifeng University,Henan Kaifeng 475004)

Key words: software testing; software testing techniques;automated testin; testing tools

1 软件测试概述与必要性

软件是由人来完成的,所有由人做的工作都不会是完美无缺的。问题在于应该如何去避免错误的产生和消除已经产生的错误,使程序中的错误密度达到尽可能低的程度。

随着软件规模的增大,软件的复杂程度也越来越大,与其他系统的接口不断增多应用越来越广泛,集成度越来越高,这使得没有现代软件开发经验的人很难理解它。为了尽可能地减少错误,软件测试这一环节必须得到重视。

中国软件外包市场巨大,国内软件外包服务多属于为客户提供技术和质量服务的中间环节。以占中国软件外包总量近85%的对日软件外包来说,业务内容基本都针对测试环节。这就要求我们加强对软件测试的重视。

质量不佳的软件产品不仅会使开发商的维护费用和用户的使用成本大幅增加,还可能产生其他的责任风险,在一些关键应用,如民航订票系统、银行结算系统、证券交易系统等中使用质量有问题的软件,还可能造成灾难性的后果。这使得软件测试环节显得尤为重要。

2 软件测试技术分析

2.1软件测试的概念

软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一组测试数据,并利用这些测试数据运行程序,以发现程序错误的过程。根据测试数据设计方法,软件测试可分为结构测试和功能测试。在结构测试过程中,测试者对程序的语句、分支和逻辑路径进行各种覆盖测试,可以在不同点检查程序的状态,以确定实际状态与预期状态是否一致。软件测试的目的是发现错误,而不是确认其正确性,而对已进行的测试过程的程度进行评估。

2.2软件测试的目的

软件测试的目的是为了保证软件产品的最终质量,在软件开发的过程中,对软件产品进行质量控制。一般来说软件测试应由独立的产品评测中心负责,严格按照软件测试流程,制定测试计划、测试方案、测试规范,实施测试,对测试记录进行分析,并根据回归测试情况撰写测试报告。测试是为了证明程序有错,而不能保证程序没有错误。

2.3软件测试的方法和过程

软件测试的种类可以分为人工测试和基于计算机的测试。而基于计算机的测试又可以分为白盒测试和黑盒测试。原则上讲,软件测试分为静态测试和动态测试两类。静态测试包括代码审查和静态分析,动态测试包括白盒测试和黑盒测试。[2]

测试虽然是软件生存周期的一个独立阶段,但测试工作却渗透到从分析、设计直到编程的各个阶段中,如测试计划的编写从分析和设计阶段就开始了,而具体的测试工作随编程工作的不断深入也在进行中。在实际工作中,测试环节可分为明显的、同等重要的三个阶段:即单元测试、集成测试(又称构件测试)和系统测试。

2.3.1单元测试

软件单元定义了一个软件很底层的块,用PB开发的客户机/服务器的软件系统中,一个窗口、函数、菜单、报表或一个存储过程都可以作为一个单元进行测试。单元测试是测试的第一步。由开发者自己进行测试最合适,一般采用白盒测试。

2.3.2集成测试

在将所有的单元经过测试以后,接着进行集成测试。集成测试也称综合测试,即将已分别通过测试的单元按要求组合起来再进行的测试,以检查这些单元之间的接口是否存在问题。要求参与的人熟悉单元的内部细节,又要求他们能够从足够高的层次上观察整个系统。集成测试阶段是以黑盒法为主,在自底向上集成的早期,白盒法测试占一定的比例,随着集成测试的不断深入,这种比例在测试过程中将越来越少,渐渐地,黑盒法测试占据主导地位。

2.3.3系统测试

系统测试是整个测试阶段的最后一步,所有的开发和测试在这一点上集中表现为生成一个具有一定功能的软件系统。该阶段主要对系统的准确性及完整性等方面进行测试。主要进行:功能确认测试、运行测试、强度测试、恢复测试、安全性测试等。系统测试的测试人员由测试组成员(或质量保证人员)或测试组成员与用户共同测试。在整个系统开发完成,即将交付用户使用前进行。在这一阶段,完全采用黑盒法对整个系统进行测试。

3 软件测试方法与软件测试工具

3.1软件测试方法

软件测试方法是软件测试技术的一个重要的组成部分,引入自动化测试可以提高软件质量,节省经费,缩短软件产品的周期。软件测试自动化就是通过测试工具或其他手段,按照测试工程师的预定计划对软件产品进行自动的测试,它是软件测试的一个重要组成部分,能够完成许多手工无法完成或者难以实现的一些测试工作。[3]

3.2软件测试工具

自动化测试工具可以减少测试工作量,提高测试工作效率。在实际应用中,首先是能够选择一个合适的且满足企业信息系统工程坏境的自动化测试工具,因为不同的测试工具,其面向的测试对象是不一样的。按照测试工具的主要用途和应用领域将测试软件做了一个整理归纳,将自动化测试工具分为以下几类:

3.2.1捕获错误用途

用于捕获软件错误或程序调试。常用的软件:一个是开发人员自行编写的测试工具;另一个是利用所使用的开发工具的调试功能或工具;最后就是购买专业的调试软件。如:Compuware NuMega推出的一系列的调试软件。

3.2.2一般用途

一般用途的测试工具在进行测试时,可以适用大部分的软件。如Sysinternals网站提供的一些免费软件。

3.2.3GUI自动化用途

这类软件除了提供在窗口界面中使用外,也有不少是针对浏览器窗口开发的自动化测试工具。主要代表:Rational公司的Robot、Compuware的QARun等。

3.2.4专项用途

以专项用途为主的测试工具,就是某种专项测试的软件。专用代码测试工具:BoundsChecke、CodeReview、JCheck;白盒测试工具:Logiscope和PRQA、DevPartner、Rational Purify系列等;网络测试工具:Network Associates提供的Network Sniffer。

3.2.5软件产品功能、性能测试用途

IBM Rational系列包括多款测试产品,如功能测试工具IBM Rational Manual Tester、IBM Rational Functional Tester和IBM Rational Robot。如性能测试工具:手动测试工具IBM Rational Performance Tester和IBM Rational Robot。(Robot包括功能测试和性能测试)

3.2.6测试管理工具

一般而言,测试管理工具对测试需求、测试计划、测试用例、测试实施进行管理,并且测 试管理工具还包括对缺陷的跟踪管理。测试管理工具能让测试人员、开发人员或其他的IT人员 通过一个中央数据仓库,在不同地方就能交互信息。主要代表:TestDirector MI的测试管理工具、TrackRecord、Bugzilla、QC(quick center)。

3.2.7测试辅助工具

这些工具本身并不执行测试,例如它们可以生成测试数据,为测试提供数据准备。常用工具:SmartDraw、SDemo。

4 结束语

软件测试是软件工程的一个范畴。软件测试是有计划、有目的的工程性的活动。软件测试是使用人工或者自动化的手段来运行或测试某个系统的过程其目的在于检验是否满足某种预期的结果。软件测试目的是发现错误。一个好的测试用例是发现未发现的错误。一个经过测试的软件不能就说是完全正确的。软件测试是保证软件质量的一个重要手段。因此,软件测试应该贯穿与软件工程的始终。

参考文献:

[1]王水.软件工程[M].郑州:河南科学技术出版社,2008.

篇6

Abstract: As an important phrase in software lifecycle,software testing is effective to ensure software quality. This paper analyses the basic ideas of present techniques and discusses the research contents and problems.

关键词: 软件测试;软件质量;Web测试

Key words: software testing;software quality;Web testing

中图分类号:TP31文献标识码:A文章编号:1006-4311(2010)22-0156-01

0引言

软件测试是保证软件质量和可靠性的重要手段。软件测试是软件生命周期的一个重要组成部分,贯穿整个开发过程。软件测试是保证软件达到高质量和高可靠性的关键元素。现有的软件测试技术通常分为静态测试和动态测试。根据测试对象和研究侧重点的不同,目前软件测试技术的研究大多在以下方面:

1白盒测试

白盒测试是对软件的过程性细节做细致的检查,把测试对象看做一个打开的盒子,允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,因此又被称为结构测试或逻辑驱动测试。对白盒测试的研究主要在提高软件的各种覆盖率上,如文献[1、2]。目前一般认为,基于同一测试覆盖准则,测试覆盖率越高,软件的可靠性或可信性就越高。

2黑盒测试

黑盒测试[2]将被测对象看作一个打不开的黑盒,测试人员在不考虑程序内部结构和内部特性的情况下,只依据需求规格说明书,设计测试用例,检查程序的功能是否按照规范说明的规定正确地执行。它着重于验证软件功能和性能的正确性,典型测试项目包括功能测试、性能测试、边界侧试、余量测试、强度测试等。黑盒测试主要缺点是:测试结果取决于测试例的设计,而测试例的设计部分来源于经验,没有状态转换的概念,给寻找和确定程序缺陷带来困难。

3性能测试

性能测试主要测试软件处理事务的速度,一是检验软件性能是否符合要求,二是得到某些客户感兴趣的数据以供软件产品宣传。目前性能测试工具偏向于多用户的并发操作,侧重于负载压力的产生和服务器的监控,忽略负载压力情况下的功能不稳定问题。文献[3]指出性能测试时中间件的license、数据库的用户数有时影响系统的性能,测试时需综合分析,以得到准确结果。

4Web测试

基于Web的系统测试与传统的软件测试不同,它需要检查和验证是否按照设计的要求运行,而且还测试系统在不同用户的浏览器端的显示是否合适,并从最终用户的角度进行安全性和可用性测试。研究人员针对Web应用的交互、动态等特性进行深入分析,探讨Web应用的相关测试方法和技术。

4.1 Web应用模型的研究文献[4]提出一种基于非确定Petri网的链接模型;文献[5]将Web测试模型分为对象内部模型、交互关系模型和体系结构模型3个层次,分别对应测试内容的不同范围和阶段,即单元测试、交互测试和集成测试。

4.2 Web可用性测试方法文献[6]针对目前各Web服务间采用统一的SOAP协议进行通讯,提出基于协议对Web服务程序进行测试的方法;文献通过分析Web站点服务器端的日志文件得到的统计数据,从独特的角度探讨如何进行有效的Web站点测试,提出切实可行的测试方法。

4.3 Web测试自动化的研究目前Web测试的自动化多采用捕捉―回放工具(Capture-Replay)的工作过程和相关技术,但Web应用中有很多动态生成的页面且变动非常频繁,捕捉―回放技术不能完全胜任。因而文献提出通过使用具备一定智能的Agent建立起高效的Web应用测试执行方案。

4.4 其他方面的研究文献利用语义标注和XML描述技术实现Web页面中数据与显示信息的分离,并引入反馈控制机制,把测试结果反馈给Web应用本身。文献提出一种Web服务测试数据自动生成方法;它基于Web服务的功能说明随机地生成初始测试数据,然后使用合约变异技术进行测试数据选择,以生成一组达到一定合约变异充分度的有效测试数据。

5面向对象软件测试

面向对象技术具有多态、继承、封装等特点,使传统测试技术无法对面向对象软件进行有效的测试。宏观上面向对象软件是各个类之间的相互作用,系统的基本构造模块是封装的数据和方法的类和对象。对象中的数据和方法是一个有机的整体,测试过程不仅检查输入数据产生的输出结果是否与预期的吻合,还考虑对象的状态。

为使设计的软件测试工具具有良好的语言无关性,文献设计一种程序划分机制,它针对基于状态的面向对象软件的类测试过程中存在的不可预测、不可达状态、状态组合“爆炸”和测试用例“爆炸”等问题,提出基于EDPN(Event-driven petri network)模型的类测试、类的交互测试和类的层次测试框架,设计相应的测试模型。此外,研究人员对面向对象的测试策略和面向对象的回归测试等方面,根据其特点提出相应的新的思想和方法,如将多Agent系统引入面向对象的测试中等。

6总结

人类发展是一个发现问题,解决问题的改善过程。软件业的发展带来的问题,需要通过软件测试来解决,因此软件测试受到越来越多的关注和推广。同时面向对象、Agent 等新技术的应用为软件测试发展带来新的机遇。

参考文献:

[1]毛志雄.软件测试理论与实践.北京:中国铁道出版社,2008.

[2]曹晓勇.软件测试工具的分类和使用.信息系统工程,2009,9,8: 81-84.

[3]蔡立志,杨根兴.软件系统性能测试方法初探.信息技术与标准化,2005,(7): 44-50.

[4]路晓丽等.Web应用软件测试模型的研究和构建.计算机科学,2006,33(1):175-176,271.

篇7

关键词:软件测试;集成测试;调用图;MM-路径

中图分类号:TP317文献标识码:A文章编号:1007-9599 (2012) 03-0000-02

Analysis of Integration Testing of Software Testing

Hou Yanfang,Chu Shulai

(Zhoukou Vocational and Technical College,Zhoukou466001,China)

Abstract:The integration testing plays a very important role in software testing,the concept of integration testing,integration testing strategy and the main types of integration testing (phase) briefly discusses the analysis of several key integration testing.

Keywords:Software testing;Integration testing;Call graph;MM-path

软件测试作为软件质量保证的关键技术之一,其目的就是能够有效地发现软件中的错误或缺陷。集成测试是软件测试中处于组件测试和系统测试之间一个非常重要的环节,这是因为所有组件都经过测试并能正常运行并不意味着这些组件放到一起经过集成后还能正常运行,正是基于这一点,很多大的软件公司成立了专门关注集成测试的测试团队,如能恰当实施,集成测试能大大减少一些在系统测试阶段才会发现的缺陷。

一、集成测试的概念

(一)集成测试的定义

集成测试是构造软件体系结构的系统化技术,同时也是进行一些旨在发现与接口相关的错误的测试。其目标是利用已通过单元测试的构件建立设计中描述的程序结构。

(二)集成测试遵循的原则

集成测试遵循的原则主要包括:所有公共接口都要被测试到;关键模块必须进行充分的测试;集成测试应当按一定的层次进行;集成测试的策略选择应当综合考虑质量、成本和进度之间的关系;集成测试应当尽早开始,并已总体设计为基础;在模块与接口的划分上,测试人员应当和开发人员进行充分的沟通;当接口发生修改时,涉及的相关接口必须进行再测试;测试执行结果应当如实的记录;集成测试应根据集成测试计划和方案进行,不能随意测试;项目管理者应保证审核测试用例。

(三)集成测试的任务

集成测试的主要任务包括:将各模块连接起来,检查模块相互调用时,数据经过接口是否丢失;将各个子功能组合起来,检查能否达到预期要求的各项功能;一个模块的功能是否会对另一个模块的功能产生不利的影响;全局数据结构是否有问题,会不会被异常修改;单个模块的误差积累起来,是否被放大,从而达到不可接受的程度。

(四)集成测试的文档

软件集成的总体计划和特定的测试描述应该在测试规约中文档化。这个文档包含测试计划和测试规程,它是软件过程的工作产品,也是软件配置的一部分。

下列准则和相应的测试可应用于所有的测试阶段:接口一致性。当每个模块(或簇)引入程序结构中时,要对其内部和外部接口进行测试;功能有效性。执行的测试旨在发现功能错误;信息内容。执行的测试旨在发现与局部或全局数据结构相关的错误;性能。执行的测试旨在验证软件设计期间建立的性能边界。

测试计划主要包括:集成测试的进度,确定每个阶段的开始和结束时间;附加软件(桩模块及驱动模块)的简要描述侧重于专门进行的工作的特征;描述测试环境和资源;特殊的硬件配置、特殊的仿真器和专门的测试工具或技术也是需要讨论的问题;详细测试规程。

测试规约:集成策略(包含在测试计划中)和测试细节(在测试规程中描述)是最基本的成分,因此必须要有。

二、集成测试的策略

驱动模块(Driver):用来模拟待测模块的上级模块。驱动模块在集成测试中接受测试数据,将相关的数据传送给待测模块,启动待测模块,并打印出相应的结果。桩模块(Stub):也称为存根程序,用以模拟待测模块工作过程中所调用的模块。桩模块由待测模块调用,它们一般只进行很少的数据处理,例如打印入口和返回,以便于检验待测模块与下级模块的接口。

一般可分为非增量集成和增量式集成,其中增量集成指的是程序以小增量的方式逐步进行构造和测试,这样错误易于分离和纠正,更易于对接口进行彻底测试,而且可以运用系统化的测试方法,传统的将增量测试策略分为自顶向下集成、自底向上集成以及三明治集成。

三、集成测试的主要类型(阶段)

(一)基于功能分解的集成

在讨论集成测试时,测试方法都基于采用树或文字形式来表示的功能分解。这类讨论不可避免地要深入到将要集成的模块的顺序。

1.自顶向下集成(从树顶开始向下)。深度优先集成是首先集成结构中主控路径下的所有模块。

2.自底向上集成(从树底开始向上)。自底向上集成是自顶向下顺序的“镜像”,不同的是,桩由模拟功能分解树上一层单元的驱动模块替代。在自底向上集成中,首先从分解树的叶子开始,并用特别编写的驱动模块进行测试。驱动模块中的一次性代码比桩中的少。大多数系统在接近叶子节点时都有相当高的扇出数,因此在自底向上集成顺序中,不需要同样数量的驱动模块,不过代价是驱动模块都比较复杂。

3.三明治集成(前两种方法的某种组合)。三明治集成测试是将自顶向下测试与自底向上测试两种模式有机结合起来,采用并行的自顶向下、自底向上集成方式,形成的方法。三明治集成测试更重要的是采取持续集成的策略。桩和驱动的开发工作都比较小,不过代价是作为大爆炸集成的后果,在一定程度上增加了定位缺陷的难度。

(二)基于功能分解方法的优缺点

1.自顶向下集成,其优点:在于它可以自然地做到逐步求精,一开始就能让测试者看到系统的框架。缺点:需要提供桩模块,桩模块是对被调用子模块的模拟,可能不能反映真实情况,因此测试有可能不充分。

由于被调用模拟子模块不能模拟数据,如果模块间的数据流不能构成有向无环图,一些模块的测试数据便难以生成。同时,观察和解释测试输出往往也是困难的。

2.自底向上集成,其优点:由于驱动模块模拟了所有调用参数,即便数据流并未构成有向无环图,生成测试数据也没有困难。如果关键的模块是在结构图的底部,那么自底向上测试是有优越性的。缺点:直到最后一个模块被加入进去之后才能看到整个程序(系统)的框架。

3.三明治集成测试采用自顶向下、自底向上集成相结合的方式,并采取持续集成的策略,有助于尽早发现缺陷,也有利于提高工作效率。

4.功能分解缺点。为了满足项目管理的需要,而不是为了满足软件开发人员的需要。桩或驱动的开发工作量,此外还有重新测试所需工作量的问题。对于自顶向下集成,需要开发(节点-1个)桩模块;对于自底向上集成,需要开发(节点-叶子)个驱动模块。

(三)基于调用图的集成

基于调用图的集成一般分为成对集成和相邻集成。基于调用图方法的优点:偏离了纯结构基础,转向行为基础,因此底层假设是一种改进;这些技术还免除了桩/驱动器开发工作量;与以构建和合成为特征的开发匹配得很好。缺点:缺陷隔离问题,尤其是对有大量邻居的情况;清除缺陷后,意味着以前测试过的包含已变更代码的邻居,都需要重新进行测试。

(四)基于路径的集成

将集成测试的侧重点由测试单独开发并通过测试的单元之间的接口,转移到这些单元的交互上,即它们的“协同功能”上。接口是结构性的,而交互是功能性的。

MM-路径是功能性测试和结构性测试的一种混合,其优点:它与实际系统行为结合紧密,而不依赖于基于分解和调用图集成的结构性推动。基于路径集成测试也适用于面向对象的软件测试。缺点:需要更多的工作量标识MM-路径。这种工作量可能会与桩和驱动的开发所需工作量有偏差。

(五)面向对象环境中的集成测试

两种不同的策略:

1.基于线程的测试(thread-based testing)。

2.基于使用的测试(use-based testing)。

驱动程序和桩程序:驱动程序可用于测试低层中的操作和整组类的测试。驱动程序也可用于代替用户界面以便在界面实现之前就可以进行系统功能的测试。桩程序可用于在需要类间的协作但其中的一个或多个协作类仍未完全实现的情况下。

四、结语

集成测试既是一种测试类型也是一个测试阶段,因为集成定义为一组交互,因此组件之间的所有已定义的交互都需要测试,体系结构和设计可以提供系统内部的交互细节,但是测试一个系统与另一个系统之间的交互要求对这些系统一起工作的方式有深刻理解,此时的集成测试是一个阶段。由于集成测试的目标是模块之间的交互,这种测试就像白盒、黑盒及其它类型的测试一样,也有一套技术和方法,因此集成测试也被看作是一种测试类型。

参考文献:

[1]周燕,宋敬华.面向对象的集成测试顺序的研究[J].计算机测量与控制,2010,9

[2]张云岗,刘春茂.软件测试技术浅析[J].技术与市场,2011,2

[3]朱家云.浅析软件测试[J].信息系统工程,2011,4

[4王丽达.论软件系统的测试[J].经济研究导刊,2011,14

[5]刘欣.软件测试方法分析与实践[D].北京邮电大学,2009

[6]赵,孙宁.软件测试技术:基于案例的测试[M].北京:机械工业出版社,2011

篇8

关键词:软件测试;系统测试;线索;压力测试;性能测试

中图分类号:TP39文献标识码:A文章编号:1007-9599 (2012) 05-0000-02

一、引言

软件测试作为软件质量保证的关键技术之一,其目的就是能够有效地发现软件中的错误或缺陷。系统测试是对完整集成后的系统进行测试的阶段,用来评价系统对具体需求规格说明的符合性,系统测试是在单元、组件和集成测试阶段之后进行的。主要针对软件系统和其他系统元素(及硬件、数据库和人机交互信息)组合构成完整的计算机应用系统中所有的元素配合是否合适以及整个系统的功能、性能、执行强度、安全性等是否达到规定标准而进行的测试。

二、系统测试概述

(一)系统测试概念

所谓系统测试是将通过集成测试的软件系统,作为计算机系统的一个重要组成部分,与计算机硬件、外设、某些支撑软件的系统等其他系统元素组合在一起所进行的测试,目的在于通过与系统的需求定义作比较,发现软件与系统定义不符合或矛盾的地方。

(二)系统测试前的准备工作

系统测试前的准备工作主要包括:对系统各种功能的描述;系统要求的数据处理及传输的速率;对系统性能的要求;对备份及修复的要求;对兼容性的描述;对配置的描述;对安全方面的要求等。

(三)系统测试的测试数据

系统测试所用的数据必须尽可能地像真实数据一样精确和有代表性。可以使用真实数据或者使用真实数据的一个复制,复制数据的质量、精度和数据量必须尽可能地代表真实的数据。

(四)系统测试与确认测试区别

确认测试始于集成测试的结束,那时已测试完单个构件,软件已组装成完整的软件包,且接口错误已被发现和改正。在确认测试时,传统软件与面向对象软件的差别已经消失,测试便集中于用户可见的动作和用户可识别的系统输出。

1.确认测试准则

软件确认是通过一系列表明已符合软件需求的测试而获得的。测试计划和规程都是用于确保满足所有的功能需求,具有所有的行为特征,达到所有的性能需求,文档是正确的、可用的。执行每个确认测试用例之后,存在下面两种可能条件之一:(1)功能或性能特征符合需求规约,因而被接受;(2)发现了与规约的偏差,创建缺陷列表。

2.配置评审

评审的目的是保证所有的软件配置元素已正确开发、编目,且具有支持软件生命周期的支持阶段的必要细节。

3.α测试与β测试

α测试是由最终用户在开发者的场所进行。软件在自然的环境下使用,开发者站在典型用户的后面观看,并记录错误和使用问题。α测试在受控的环境下进行。

β测试是最终用户场所执行。开发者通常不在场,因此,β测试是在不为开发者控制的环境下软件的现场应用。最终用户记录测试过程中遇见的所有问题(现实存在或想象的),并将其定期地报告给开发者。接到β测试的问题报告之后,软件工程师进行修改,然后准备向最终用户软件产品。

二、系统级功能测试技术

(一)线索的概念

线索(thread)的概念很难定义。事实上,一些已经公开的定义都是矛盾、容易产生误导或错误的。可以把线索看作是一种不需要形式化定义的原始概念。以下是对线索的多种看法:一般使用的场景;系统级测试用例;激励/响应对;由系统级输入序列产生的行为;端口输入和输出事件的交替序列;系统状态机描述中的转换序列;对象消息和方法执行的交替序列;机器指令序列;源指令序列;MM-路径序列;原子系统功能序列。

(二)需求规约的基本构造元素

根据一组基本需求规约构造元素,即数据、行动、设备、事件和线索,来讨论系统测试。每个系统都可以使用这五种元素表示。

1.数据

主要包括:变量、数据结构、字段、记录、数据存储和文件、实体关系模型高层数据描述。

2.行动

以行动为中心建模仍然是需求规约的一种常见形式,这是因为有命令式程序设计语言以行动为中心性质的历史原因。行动有输入和输出,这些输入和输出既可以是数据,也可以是端口事件。行动还可以分解为低层活动,例如数据流图。

3.设备

每个系统都有端口设备,这些端口设备是系统级输入和输出(端口事件)的源和目的地。在技术上,端口是I/O设备接入系统的点。

4.事件

事件既有数据方面的一些特征,又有行动方面的一些特征。事件是发生在端口设备上的系统级输入(或输出)。可以是离散的,也可以是连续的(例如温度、高度或压力)。端口输入事件是物理到逻辑的转换,同样,端口输出事件是逻辑到物理的转换。

5.线索

因为要测试线索,因此测试人员通常不能在数据、事件和行动之间的交互中找出线索。线索本身出现在需求规约中的惟一地方,是使用快速原型法并结合场景记录器。

(三)线索测试的结构策略及功能策略

结构策略实际上是基于有限状态机的行为建模中的结构来寻找测试线索的。首先自底向上组织各层次的状态机,然后寻找线索覆盖每个状态机的节点和边,同时还要找出节点与边覆盖指标。

线索测试的功能策略

1.基于事件的线索测试

(1)端口输入事件覆盖指标

五个覆盖指标为覆盖端口输入事件提供了一组线索:

(1)PI1:每个端口输入事件发生。

(2)PI2:端口输入事件的常见序列发生。

(3)PI3:每个端口输入事件在所有“相关”数据语境中发生。

(4)PI4:对于给定语境,所有“不合适”的输入事件发生。

(5)Pl5:对于给定语境,所有可能的输入事件发生。

(2)端口输出事件覆盖指标

根据端口输出事件定义两种覆盖指标:

(1)PO1:每个端口输出事件发生。

(2)PO2:每个端口输出事件在每种原因下发生

2.基于端口的线索测试

基于端口的测试是基于事件测试的有用补充。

对于每个端口都要询问端口上会出现什么事件。然后根据每个端口的事件列表寻找使用输入端口和输出端口的线索。有些需求规约技术要求提供这种端口的事件列表。

设备和事件之间的多对多测试应该在两个方向上进行:基于事件的测试覆盖从事件到端口的一对多关系,反之,基于端口的测试覆盖从端口到事件的一对多关系。SATM系统不能使用这种测试,因为SATM不发生在多个端口上。

三、系统测试的主要内容

系统测试一般要完成以下几种测试:功能测试、性能测试、可靠性、稳定性测试、兼容性测试、恢复性测试、安全性测试、强度测试、面向用户支持方面的测试、其他限制条件的测试。下面就对常用的系统测试做一个介绍:

(一)压力测试

压力测试是指模拟巨大的工作负荷以查看或评估应用程序在峰值或超越最大负载使用情况下如何执行操作。压力测试有如下特点:可以测试系统的稳定性;一般需要对用户的使用情况进行模拟。压力测试的方法包括:并发测试法、增加量级法、重复测试法。

(二)性能测试

性能测试一般需进行:对软件计算的精度有要求时,设计测试用例;对软件有时间要求时,设计测试用例;测试为完成功能所处理的数据量;测试程序运行所占用的空间;测试对系统的负载潜力;测试配置项各部分的协调性;测试软件性能和硬件性能的集成;测试系统对并发事务和并发用户访问的处理能力。

(三)恢复性测试

多数基于计算机的系统必须从错误中恢复并在一定的时间内重新运行。恢复性测试是通过各种方式强制地让系统发生故障并验证其能适当恢复的一种系统测试。若恢复是自动的(由系统自身完成),则对重新初始化、检查点机制、数据恢复和重新启动都要进行正确性评估。若恢复需要人工干预,则估算平均恢复时间(mean-time-to-repair,MTTR)以确定其是否在可接受的范围之内。

(四)安全性测试

安全性测试验证建立在系统内的保护机制是否能够实际保护系统不受非法入侵。系统的安全必须经受住正面的攻击,但是也必须能够经受住侧面和背后的攻击。在安全性测试过程中,测试者扮演试图攻击系统的角色。测试者可以试图通过外部手段获取密码;可以通过瓦解任何防守的定制软件来攻击系统;可以“制服”系统使其无法对别人提供服务;可以有目的地引发系统错误以期在其恢复过程中入侵系统;可以通过浏览非保密数据,从中找到进入系统的钥匙等等。

四、结语

系统测试有助于在其部署中客户发现缺陷之前,尽可能多滴发现缺陷,在系统测试期间要验证完整产品的行为,包括设计多个模块、程序和功能的测试,测试完整产品的行为是很关键的,因为很多人错误地认为经过单独测试的组件放到一起后仍能正常运行。

参考文献:

[1]薛冲冲,陈坚.软件测试研究[J].计算机系统应用,2011,2

[2]陶幸辉,宋志刚.软件系统测试类型及测试用例设计[J].科技经济市场,2011,6

[3]朱家云.浅析软件测试[J].信息系统工程,2011,4

[4王丽达.论软件系统的测试[J].经济研究导刊,2011,14

推荐期刊