软件压力测试技术概述论文

2024-04-10

软件压力测试技术概述论文(精选5篇)

篇1:软件压力测试技术概述论文

软件测试方法概述

随着软件系统规模的持续扩大,需求日益复杂,对软件质量的要求也越来越高。然而,现实中软件系统的质量却不尽如人意,所以采取有效的软件测试是保证软件质量、提高软件可靠性的重要手段。为了保证所提交的软件产品能够满足客户的需求以及在使用中的可靠性,必须对所开发的软件产品进行系统而全面的测试。因此,对软件测试的研究成为计算机技术的一个重要研究课题。下面我们大家一起聊聊软件测试方法概述吧!

摘 要:软件在开发过程中不可避免的要出现各种错误,为了最大限度地确保其质量必须进行软件测试。文章即对软件测试的主要方法进行了介绍与说明,以供参考。

关键词:软件质量;软件测试;黑盒测试;白盒测试

1、引言

随着计算机技术的迅速发展和越来越广泛深入地应用于国民经济和社会生活的各个方面,随着软件系统的规模和复杂性与日俱增,软件的生产成本和软件中存在的缺陷和故障造成的各类损失也大大增加,甚至会带来灾难性的后果。软件质量问题已成为所有使用软件和开发软件的人关注的焦点。

由于软件是人脑的高度智力化的体现和产品这一特殊性,不同于其他科技和生产领域,因此软件与生俱来就有可能存在着缺陷。如何防止和减少这些可能存在的问题呢?回答是进行软件测试。

测试是最有效的排除和防止软件缺陷与故障的手段,并由此促进了软件测试理论与技术实践的快速发展,新的测试理论、测试方法、测试技术手段在不断涌出,软件测试机构和组织也在迅速产生和发展,由此软件测试技术职业也同步完善和健全起来。

无论怎样强调软件测试的重要性和它对软件可靠性的影响都是不过分的。在开发大型软件系统过程中,我们力求在每一个阶段结束之前通过严格的技术审查,尽可能早地发现并纠正差错,如果在软件投入生产性运行之前,没有发现并纠正软件中的大部分差错,则这些差错终究会在生产过程中暴露出来的,那时不仅改正这些差错的代价更高,而且往往会造成很恶劣的后果。测试的目的就是在软件投入生产运行之前,尽可能多地发现错误。

2、软件测试的基本问题

一个软件生命周期包括:制定计划、需求分析定义、软件设计、程序编码、软件测试、软件运行、软件维护、软件停用等8个阶段。

软件测试的根本目的是为了保证软件质量。软件质量是指与软件产品满足规定的和隐含的需求的能力有关的特征或特征的全体。软件质量反映以下三个方面:

1)软件需求是度量软件质量的基础。

2)在各种标准中定义开发准则,用来指导软件人员用工程化的方法来开发软件。

3)往往会有一些隐含的`需求没有明确地提出。如果软件只满足那些精确定义的需求,而没有满足这些隐含的需求,软件质量也不能得到保证。

软件质量内涵包括:正确性、可靠性、可维护性、可读性、结构化、可测试性、可移植性、可扩展性、用户界面友好性、易学、易用、健壮性。

3、软件测试的原则

1)尽早地和及时地测试应作为软件开发人员的座右铭,测试应当从软件产品开发初始阶段即开始。

2)测试用例应当由测试数据和与之对应的预期结果这两部分组成。

3)在程序提交测试后,应当由专门的测试人员进行测试,避免由程序设计者自行检查程序。

4)测试用例应包括合理的输入条件和不合理的输入条件。

5)严格执行测试计划,排除测试的随意性。

6)充分注意测试当中的群体现象,测试经验表明,约一半(47%)的错误仅与系统中4%的程序模块有关。

7)应对每一个测试结果做全面的检查。

8)保存测试计划、测试用例、出错统计和最终分析报告,为维护工作提供充分的资料。

4、软件测试的种类及方法

软件测试的种类大致可以分为人工测试和基于计算机的测试。而基于计算机的测试又可公为黑盒测试和白盒测试。这些测试方法在软件开发的最后检测阶段有着重要的作用。

4.1黑盒测试

黑盒测试又称功能测试。黑盒测试顾名思义就是将被测系统看成一个黑盒,完全不考虑程序的内部结构和处理过程,从外界取得输入,然后再输出。也就是,黑盒测试是在程序接口进行的测试,它只是检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据产生正确的输出信息,并保持外部信息的完整性。

黑盒测试在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。黑盒测试方法主要有等价类划分、边值分析、因果图、错误推测等。

4.2白盒测试

白盒测试也称结构测试,白盒测试需要知道产品内部工作过程,可以通过测试来检测产品内部动作是否按照规格说明书的规定正常进行。也就是说,完全了解程序的结构和处理过程。这种方法按照程序内部的逻辑测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能。白盒测试的主要方法有逻辑驱动、基本路径测试等,主要用于软件验证。

粗略看起来,不论采用上述哪种测试方法,都不可能把所有可能的输入数据都拿来进行所谓的穷举测试,因为可能的测试输入数据数目往往达到天文数字。因为不可能穷尽测试,所以软件测试不可能发现程序中的所有错误,也就是说,通过测试并不能证明程序是正确的。但是,我们的目的是要通过测试保证软件的可靠性,尽可能地发现错误并纠下错误,提高软件的质量,因此,必须仔细考试设计测试方案,力争用尽可能多的测试发现尽可能多的错误。

参考文献:

[1]许静,陈宏刚,王庆人等.软件测试方法简述与展望[J].计算机工程与应用,,39(13):75-78.

[2]戴凌宸,张朕荣,黎丰泽等.传统的软件测试方法浅析[J].科技风,,(16):136-137.

篇2:软件压力测试技术概述论文

看完这篇《软件测试概述》培训文档,总体感觉这篇文章对测试的主要理论介绍得很不错,值得大家学习。本文主要介绍了软件测试的基本概念,测试技术,测试方法,测试流程,测试过程及微软软件测试简介。这是一本综合性的文档,有助于测试人员对软件测试理论知识有一个整体全方位的了解,通过从中的学习,我受益良多,同时也为我将后做好测试工作提供了不错的参考依据。

该书从理论知识上给我们提供了强有力的指导方向,其课程目标意在表明-要做好测试工作,测试人员必须掌握以下几点:

1、掌握软件测试的基本概念

2、理解测试对于软件质量保障的重要性

3、了解软件测试的基本流程和过程

4、理解白盒测试、黑盒测试的含义和方法

5、理解测试的分类和内容

只有把坚实的理论基础打好了,才能更自如的将所学知识运用到实际工作中。其实,测试说易也易,因为进入门槛低;说难也难,因为测深测精不简单。黑盒测试很讲究策略,测试也是一门学问。测试讲究很多方法和策略,要测的精,问题定位的及时准确,规律找的准确有效,那是需要下一番功夫的。

在中控软件测试部工作也有不短的时间了,主要工作就是运用黑盒测试的方法对公司产品进行测试,验证产品每个功能的有效性,尽量减少发布产品中的错误,满足用户需求的功能和性能。随着工作中不断地磨合,以及测试经验的不断积累,对工作的认识也逐步深入,现已基本能够独立完成上级布置的各项任务。以下是我在测试过程中的一点心得体会:

做好测试工作必须要做到几条:首先,要努力培养起对测试的兴趣,要培养对所测产品的感情;其次,要胆大并心细。要敢于怀疑,大胆假设而小心求证。再次,要有耐心,戒骄戒躁,心要安静。为了更好的做好测试工作,在测试过程中,我们更应该把握以下几点:

一、测试需求的理解

测试首先要准确的了解系统是干什么的,要达到一个什么样的效果。设计阶

段中就已经确定了什么事情系统是能够完成的,什么事情是系统不能够做的。测试不但是各个功能单独的测试,最好能够从整体上了解整个系统的结构,流程等等,对需求的准确理解是验证程序正确性的最重要要求。

二、产品知识的掌握

测试人员不仅要掌握软件测试技术相关知识,对产品相关的业务知识也要学习。只有了解了产品的结构和功能,测试人员才能在测试中更好的上手,才能更好的对所负责的项目进行测试,这样有利于节约测试时间与成本。

三、测试重点的明确

测试的重点把握较好,把很多严重问题,在测试前期就给暴露出来了;测试整个系统的过程中,对一些关键的重要功能的测试,必须重视它,反复进行测试。根据可能出现的种种情况进行测试。因为这些关键的部分有问题会引起其他相关的一连串的错误。

四、测试流程的把握

测试人员必须明确测试流程中各个阶段的工作,软件测试是一个系列过程活动,包括软件测试需求分析,测试计划设计,测试用例设计,执行测试,测试结果分析。因此,软件测试贯穿于软件项目的整个生命过程。测试人员必须把握好测试进度,才能在规定时间内,甚至提前完成了测试任务。

五、良好沟通的重视

沟通的时机主要是一个测试前,一个在测试后。测试前务必了解清楚系统的功能点。测试员在问开发人员问题之前,最好先熟悉相关文档结构,心中有底之后,再带着疑问去咨询,会取得比较好的效果。测试问题提交后,可能被开发人员驳回或拒绝修改。这时候,只能对开发人员晓之以理,做到有理、有据,有说服力。测试人员打算说服开发人员之前,考虑是否能够先说服自己,在保证可以说服自己的前提下,再开始与开发人员交流。沟通及时也是测试的一个关键因素,合适的沟通,不但可以节省开发确认bug的时间,也可以帮助测试人员有更多的测试思路。与开发人员保持良好的沟通,有助于问题能够较顺利的解决,双方合作愉快。

软件测试是一个重要的阶段,也是非常复杂的一个过程,测试过程及方法灵活多变,并不是固定不变的。一个好的测试人员不仅能发现问题、从发现的错误中分析错误出现的原因,更应能拟定软件测试计划、编制软件测试大纲、编写测

试用例,从而提高的工作效力,降低了开发产品的成本,更好的保证软件的质量。软件测试的前途不可估量的,学习掌握软件测试方法与测试技术并能应用到测试过程中是非常重要的,应用好的测试方法与测试技术进行测试对于一个测试人员来说是十分重要的,制定好的测试计划、测试大纲与测试用例同样如此。测试工作不仅要有耐心,更要细心。

篇3:软件压力测试技术概述

压力测试关注的对象是软件的性能, 所以首先介绍一下软件性能的有关知识。一般来说, 软件性能是一种指标, 表明软件系统或构建对于其及时性要求的符合程度;同时, 软件性能也是软件产品的一种特性, 可以用时间来度量。软件性能的及时性用软件的响应时间或吞吐量来衡量。软件的响应时间是指软件产品从收到请求到响应请求所需要的时间。

在实际软件项目中, 不同的角色对软件性能的关注是不同的。从软件产品用户的角度来看, 他们关注的是软件产品处理请求的效率, 也就是软件的响应时间。从管理员的角度来看, 他们不仅会关注软件的响应时间, 还会关注软件产品运行时系统资源的使用状态和系统的可扩展性。从产品开发人员的角度来看, 他们关注的就更全面更深入了。他们除了会关注用户和管理员关注的内容, 还会关注对软件性能不佳的原因和大量并发用户同时访问而引起的软件故障。如何通过修改设计和代码来消除系统的性能瓶颈也是他们所关注的。那么, 正是由于不同角色对软件性能有着不同的关注, 压力测试就应该为不同的角色提供可靠的测试结果, 以便他们分析软件性能。

2. 压力测试的概念

软件系统的负载压力是指系统在某种指定软件、硬件及网络环境下承受的流量, 例如并发用户数、持续运行时间、数据量等。其中并发用户数是负载压力的重要指标。

负载测试是通过逐步增加系统负载, 测试系统性能的变化, 并最终确定在满足性能指标的情况下, 系统所能承受的最大负载量的测试。其中还有一种特定类型的负载测试, 它是通过逐步增加软件系统的负载, 测试系统性能的变化, 并最终确定在什么负载条件下系统性能处于失效状态, 以此来获得系统提供的最大服务级别。

并发性能测试通过逐渐增加并发用户数负载, 直到系统的瓶颈或者不能接收的状态, 综合分析交易执行指标、资源监控指标等来确定系统并发性能的过程。并发性能测试是负载压力测试的重要内容。

疲劳强度测试是指构建系统稳定运行情况下能够支持的最大并发用户数或者日常运行用户数, 使其在持续一段时间内执行业务, 保证到达系统疲劳强度需求的业务量, 通过综合分析交易执行指标和资源监控指标, 来确定系统在处理业务上的最大工作强度的过程。

大数据量测试包括针对系统存储、传输、统计、查询等业务进行的独立数据量测试, 以及结合压力性能测试、负载性能测试、疲劳性能测试相结合的综合数据量测试。

3. 并发性能测试

系统的并发性能是负载压力性能的最主要的组成部分。目前广泛应用的网上购物系统、在线订票系统、资源查询统计系统等系统, 都存在着大量用户同时访问这样的并发操作。这些并发操作可能会暴露软件系统在设计和开发时的缺陷, 这些缺陷会使系统网络性能降低, 加剧服务器资源互斥访问冲突, 造成应用层程序和数据库表单的死锁等等, 给系统带来不同程度的破坏, 给用户带来经济损失。因此, 为了保证系统的性能可靠, 实施有效的并发性能测试是非常重要的。并发性能测试是从客户端性能、网络性能、服务器性能三个方面去进行测试和监测的。下面将分别介绍这三个方面。

应用在客户端的性能测试主要是采用负载压力测试工具模拟大量并发用户访问被测系统, 执行不同业务操作, 来达到实施负载压力的目的。测试系统通常包括一台主控机、多台压力生成器和被测服务器, 各部分采用系统要求的网络类型连接。主控机负责管理压力生成器, 同步时间, 部署测试脚本和收集测试结果, 在整个测试系统中有且仅有一台主控机。压力生成器负责通过多线程的方式来模拟虚拟用户 (VU) 向被测系统施加压力, 在测试系统中可以有多台压力生成器。

应用在网络上的性能测试主要是对网络应用性能的监控和应用网络故障的分析, 可以为性能优化、带宽需求确定、应用程序和网络故障的定位等方面提供依据。其监控系统是由探针主控机和探针机组成。探针主控机主要用于配置管理探针, 同步探针机时间, 收集并处理监测数据, 并且提供监测数据的展示平台, 在整个监控系统中有且仅有一台探针主控机。探针分布在被测系统的整个应用网络环境中, 采集并存储相应的数据, 在监控系统中可以有多台探针机。

应用在服务器上的性能测试主要是对被测系统服务器的操作系统、数据库、中间件等组成部分进行监控。目前常用的操作系统、数据库和中间件自身都提供了良好的监控工具, 测试者可以适时地收集需要的信息。

4. 压力测试自动化

压力测试可以采取手工测试和利用自动化工具测试两种方式。采用手工测试不仅需要大量的测试人员和机器设备, 还要考虑同步操作和对被测系统的同步监控的问题, 所以执行起来有一定的局限性, 测试结果不一定能够有效地为系统调优提供服务, 而且还会耗费巨大的人力和物力。相比之下, 在压力测试中采用自动化测试工具能更快捷地解决问题。自动化测试工具可以在一台或多台机器上模拟成百上千的用户同时执行业务操作的场景, 并可以很好地同步用户的执行时间, 进行有效的实时监测。因此越来越多的压力测试项目中都用到了自动化的测试工具, 自动化测试工具也在压力测试多方面的要求中得到了发展和改良。

目前, 利用自动化测试工具进行压力测试是压力测试发展的主流趋势。在实际的测试项目实施中, 大都使用三类自动化测试工具, 它们分别是商业化压力测试工具、开源压力测试工具和自主研发的压力测试工具。.

商业化压力测试工具适用范围广, 大都经过全面的检测, 测试系统本身比较稳定, 测试结果比较准确, 在业界能得到大多数人的认可, 并且还有厂商的技术支持和版本升级服务。但是商业化的压力测试工具一般价格都比较昂贵, 适用于大规模的、长期性的、专业标准要求高的测试项目。现在常用的商业化压力测试软件主要有HP Load Runne、Borland Silk Performer等, 它们都是业内优秀的性能测试软件。

开源压力测试工具一般都是免费的, 用户可以在不侵犯任何专利权和著作权的情况下访问、修改测试工具的源代码。目前常用的开源压力测试软件主要有Apache JMester、opens TA等。Apache JMester是一个完全用Java编写的压力测试软件, 用于负载测试和性能度量, 最初它适用于Web应用测试,

目前己经扩展到其他的测试领域。open STA是一个基于CORBA的分布式软件测试架构。Web LOAD是一个由Radview软件支持的开源的负载压生成引擎。

自主研发的压力测试工具是测试开发人员根据被测系统的特点而开发的, 适用于被测系统的测试工具。商业化的测试工具和开源的测试工具虽然比较通用, 但是也有其局限性, 比如说对一些协议、脚本、控件等兼容性不好, 在一些性能点上缺乏监测, 模拟负载的情况不够理想, 性能监测定位不够准确。所以很多测试工程师不得不去编写一些适用于实际测试项目的程序和工具。在设计和实现压力测试工具时, 主要的难点是模拟用户操作、控制并发访问和设置监测点。

摘要:随着软件规模的不断扩大和复杂程度的不断提高, 软件产品面临着大量的并发用户和业务运算, 因此软件的性能越来越受到业内的重视。在这种情况下, 为了验证系统性能而执行的压力测试变得尤为重要。本文对目前的研究热点--软件压力测试技术进行了概述。

关键词:软件性能,压力测试,自动化

参考文献

[l]段念.软件性能测试过程详解与案例剖析[M].北京:清华大学出版社, 2006.

篇4:手机应用软件测试方法概述

关键词:外部质量;内部质量;手机应用软件;测试

中图分类号:TP311.53

1 手机软件测试背景

随着科技的进步,众多的手机应用软件像雨后春笋般地涌现出来,这些软件不仅丰富了手机的功能,也为人们的生活提供了便捷,并且已经从单一的通讯工具发展成为了个人信息收集和处理的移动平台,然而,这些软件在为人提供方便的同时,由于其本身所存在的问题,也会给人们带来无法估量的损失,例如:个人资料泄露、个人银行信息泄漏、信息丢失等,如果能提前发现这些问题,便可以降低其带来的经济损失。所以为了能够提早发现手机软件中存在的问题,对其进行软件测试便是唯一的方法。然而手机应用软件与传统软件存在着很大的不同,如何能够有效、正确和便捷地对手机应用软件进行测试是急待解决的问题。本文主要结合GB/T17544-1998《信息技术软件包质量要求和测试》对手机应用软件测试的类型和方法进行总结和概述。

2 手机应用软件测试概述

2.1 手机应用软件与传统软件的比较

与传统应用程序相比,手机应用软件的不同主要表现在运行平台和运行网络两个方面。

(1)运行平台的不同。传统软件主要支持Windows、IOS和Unix三款操作系统,软件运行平台较单一,软件版本较少,然而与传统软件相比,手机应用软件支持Symbian、Palm、BlackBerry、WindowsMobile、Android和iOS六款操作系统,软件版本较多,测试复杂性和重复性较大。

(2)运行网络环境的不同。传统软件主要运行在联通、电信和移动三家运营商提供的上网服务,网络环境差异性较小,然而与传统软件相比,手机应用软件需支持2G网络:GSM、CDMA、3G网络:WCDMA、TD-SCDMA、CDMA2000和Wifi,网络环境种类较多,测试难度较大。

2.2 手机应用程序测试标准和流程

目前手机应用软件测试主要遵循的标准的是由信息产业部电信研究院牵头制定的YD/T1438-2006《数字移动台应用层软件功能要求和测试方法》,该标准是以大量测试实验为基础上,综合移动通信技术的特点而制定的测试技术规范。除此之外,从软件测试的角度出发,手机软件测试还应遵循GB/T17544-1998《信息技术软件包质量要求和测试》中规定的要求。所以主要对手机应用软件的测试也主要从功能性、安全性、可靠性、可移植性、效率和易用性六个方面进行测试。其中功能性主要测试手机应用软件功能实现的正确性和对软件设计文档的依从性;可靠性主要测试软件在错误输入或不稳定网络环境下,软件能够正常运行的能力。

手机应用软件测试虽然属于软件测试的一种,所以针对传统应用软件的测试过程也适用于手机应用软件的测试,测试过程包括需求分析、计划、实现、执行、评审5个过程。

3 手机应用软件测试类型概述

3.1 功能性测试:

(1)功能模块测试:功能测试的主要目的是发现软件实现的功能对软件设计文档或行业标准的满足程度。在进行功能测试时,首先要结合软件的需求分析、设计文档或行业标准等文档对软件功能的输入、输出数据进行分析,在此基础上确定功能测试需求,通过使用等价类划分法、功能划分法等测试用例设计方法进行测试用例的设计,最后通过执行测试用例来发现软件中存在的问题。

(2)功能交叉测试:随着手机智能化程度的不断提高,基于手机的应用程序也逐渐增多,由于各种程序对手机硬件资源的需求不同,所以便会导致多个程序同时争夺一个硬件资源的情况,这种情况可能会导致各应用程序因为争夺资源而产生死锁现象,致使手机操作系统崩溃,所以为了避免这种情况的发生,在进行功能测试时,需要進行功能交叉测试,通过在执行被测功能的过程中,执行其他应用程序的方法来发现和预防该问题的发生。

3.2 安全性测试

手机应用软件中存储的数据信息如:个人信息、账户信息等,已经成为了众多黑客和不法人员窥探的资源,这些人通过手机应用程序本身的安全漏洞可以轻松地获得用户存储在手机中的私密信息。所以必须通过安全漏洞扫描工具、应用程序代码分析和功能安全性测试的方法来发现手机应用软件中存在的安全漏洞,对于软件安全性和用户数据信息的保密性具有重要的作用。

3.3 可靠性测试:

随着手机应用软件功能的逐渐增强,人们对手机的依赖程度也逐渐提高,个人重要数据信息、行程信息等数据都被存储在手机上,所以要对手机应用软件的可靠性进行测试,手机应用软件的可靠性测试主要从以下几个方面考虑:

(1)测试手机应用软件避免因为部分功能模块的失效而导致整个应用软件的崩溃的能力;

(2)测试手机应用软件在长时间工作情况下,能够正常工作的能力;

(3)测试手机应用软件在发生崩溃后,能够快速恢复数据和运行的能力。

3.4 兼容性测试:

目前市场上的手机种类、手机操作系统种类较多,手机应用软件运行的硬件环境和软件环境各不相同,这使的手机应用软件可能在不同的运行平台下产生不同的运行结果,这是手机应用软件生产厂商和用户都不想看到的,所以在手机应用软件上市之前就要对其兼容性进行测试,测试过程主要从软件和硬件两个方面来进行。在软件方面主要是通过将软件运行在不同的手机操作系统下来对其功能表现进行评价,在硬件方面主要是通过将手机应用软件运行在不同手机厂商生产的手机上来对其功能表现进行评价。

4 总结

在对手机应用软件进行测试时,可以借鉴针对传统软件的测试过程和方法进行手机应用软件测试用例的设计和测试过程来进行测试,但是与传统软件测试相比,还需另外考虑软件在不同手机操作系统和不同硬件环境下的表现,而且还缺乏相应的自动化测试工具,测试过程较复杂和繁琐。所以如何开发和利用自动化测试工具进行手机应用软件测试方面,还需要进行不断的探索和研究。

参考文献:

[1]贺晓能,薛涛.手机应用层软件的功能要求和测试方法[J].现代电信科技,2007,3.

[2]崔启亮,胡一鸣.国际化软件测试[M].电子工业出版社,2006,4.

[3]朱少民.全程软件测试[M].北京:电子工业出版社,2008,7.

作者简介:张鑫(1985-),男,江南机电设计研究所,研究生,助理工程师,研究方向:软件开发与测试。

篇5:计算机软件测试技术概述

关键词:计算机,软件测试,概述

1975年, Good enough等首次提出了软件测试理论, 同年Hua ng全面讨论了测试过程和测试准则。1 9 8 2年在美国北卡莱纳大学召开了第一次软件测试技术会议, 这次会议成为软件测试发展史上的一个重要里程碑。随后, 各国学者在测试理论与测试方法上百花齐放, 使得软件测试理论和方法逐步应用到软件开发过程中来。但从实际应用效果看来, 无论是测试技术还是测试方法都远远不能满足现在软件测试的需求。

软件测试的定义是在1983年由IEEE在软件工程标准术语中给出的:使用人工或自动手段来运行或评价某个系统或系统部件的过程, 其目的在于检验它是否满足规定的需求;或是弄清预期结果和实际结果之间的差别。该定义非常明确地指出了软件测试是以检验是否满足需求为目标。G..J.Myers认为软件测试是为了找出错误和缺陷而进行的, 而不是为了证明软件的正确性。

1 软件质量保证与软件测试

随着对计算机需求与依赖的与日俱增, 计算机软件数量激剧膨胀, 软件系统的规模也更加庞大, 如地震预测、天气预报、太空飞行等都是极其复杂的软件系统, 代码规模均在百万行以上, 如Windows NT操作系统的代码就大约有3 2 0 0万行。软件质量保证的技术发展水平对世界经济有重大的影响。1996年Ariane5运载火箭的发射失败等都是由软件故障引起的。2 0 0 2年美国国家标准与技术局研究发现, 全美每年软件测试的花费估计在2 2 2~5 9 5亿美元, 大约占美国国内总产值0.6%。这个数字还不包括由关键任务软件的灾难性故障所造成的损失。

随着软件在各行各业的广泛应用, 软件质量已经越来越受到社会的普遍关注。随着软件规模的不断扩大, 复杂程度也不断提高, 特别是随着软件开发技术迅猛发展, 面向对象软件开发等方法的出现和软件开发工具的使用, 使得软件质量更加难以度量。

软件质量保障涉及到软件开发生命周期的各个阶段, 从需求获取开始延续到软件维护。软件测试是保证软件质量, 提高软件可靠性的关键。G..J.Myers在软件测试经典著作《The Art of Software Testing》中给出了软件测试的定义:软件测试是指通过执行程序去找出软件错误的过程。Bill Hetzel在1983年也给出测试定义:测试是指为评价一个程序或系统展开的各种活动, 测试是度量软件质量的一个过程。虽然他们的定义目前看来具有一定的局限性, 但仍然具有指导意义。

软件测试是一项费时费力的过程, G..J.M y e r s指出软件测试所花费的代价大约占软件开发总代价的5 0%以上, 随着人们对软件测试重要性的认识越来越深刻, 软件测试阶段在整个软件开发周期中所占的比重日益增大。现在有些软件开发机构将研制力量的4 0%以上投入到软件测试之中;对于某些性命攸关的软件, 其测试费用甚至高达所有其他软件工程阶段费用总和的3到5倍。尽管人们在软件开发过程中也采用形式化方法描述和证明软件规约, 并采用程序正确性证明、模型检验等方法保证软件质量, 但是这些方法都存在一定的局限性, 尚未达到广泛实用阶段。因此, 程序代码最终体现了软件的质量, 无论是从软件开发方法学还是软件测试自身的效益看, 软件测试在今后较长时间内仍将是保证软件质量的重要手段。

2 基于结构的测试用例生成技术

结构化的测试属于白盒测试范畴, 测试用例是根据程的内部结构来设计, 如程序的语句、路径、分支、条件或其他特定容易导致程序出错的节点。结构测试有三种测试用例生成方法:随机测试用例生成方法、面向目标的测试用例生成方法和面向路径的测试用例生成方法。对于给定的程序结构 (如分支、路径等) , 随机测试的数据生成方法是在输入域内随机选取测试用例, 使得给定语句或分支被执行。

面向路径的测试用例生成分为基于符号执行和基于实际程序执行的测试用例生成两类。符号执行允许程序输入常量、符号值、符号表达式等, 以符号计算代替实际执行的数值计算, 产生一个符号输入值的代数表达式-路径约束, 它是选定路径的谓词系统。实际上是对输入数据的限制要求, 由多个不等式 (等式) 组成。通过求解不等式, 求取满足路径上各限制谓词的测试数据。若不等式无解, 则相应的路径为不可行路径。D e M i l l o等提出一种基于故障的测试产生方法, 用代数约束来描述检测特定类型故障的测试数据。

符号执行能够判定路径的可行性, 一次符号测试的结果代表了一类普通测试的运行结果。但在遇到循环、过程调用、动态数据结构、数组和指针处理时, 符号执行实现困难。基于程序实际执行的测试数据生成方法中, Korel提出对于选定路径上不满足要求的分支, 利用分支函数极小化, 确定新的输入值, 直至找到输入数据, 使程序执行沿选定路径进行。K o r e l提出的程序执行和分支函数极小化方法解决了符号执行中对数组和指针难于处理的缺陷, 但由于每次测试都只考虑一个谓词和一个输入变量, 因此即便路径中的分支条件是输入的线性函数时, 也需要进行大量的叠代才能自动生成一个满足条件的新输入。

G u p t a等利用迭代逼近法, 求取满足选定路径上所有谓词的输入值。每次迭代中, 执行与选定路径谓词有关的语句, 得到一个线性约束集, 用高斯消去法求解线性约束集, 获得一个输入增量, 进而得到下次迭代的输入值, 最终产生选定路径的测试数据。Gupta提出的算法同时考虑多个谓词和多个输入变量, 利用随机选择的一组初始输入通过叠代自动生成一组满足该给定路径的新输入, 该算法由于只采用线性函数来进行叠代, 因此只对线性函数有效, 而对于非线性函数则效果较差。Gotlieb等提出用约束求解的方法生成测试数据, 利用“静态单一指派” (Static Single Assignment) 和控制依赖, 将被测程序转化成一个约束系统, 然后寻找经过给定语句的路径, 生成相应的测试数据。基于程序实际执行的测试数据生成方法, 在程序执行的每一步中数组下标、指针值都是确定的。因此, 针对数组、指针处理不存在困难, 但其测试数据生成与路径选择有关, 而判定所选路径是否为可行路径也是一件非常困难的事情。

H o w d e n认为程序错误分为:计算错误 (Computation error) 、丢失路径错误 (Missing path error) 和域差错 (Domain error) 。对于某一特定输入, 程序执行的是正确的路径, 但由于赋值语句的错误而导致输出结果不正确, 这样的错误称为计算错误。由于程序某处少了一个判定谓词而引起的错误称为丢失路径错误。由于程序控制流错误, 而导致某一特定输入执行了一条错误路经, 这种错误称为域错误。对大多数域错误, H o w d e n认为符号测试和实际数据测试是不可靠的。只有当测试者幸运地从不正确的定义域部分选取一个测试数据时, 实际数据测试才能发现这些错误。针对程序域错误, White、Clarke等专家提出了域测试策略, 以后发展成为一个有效的模块测试方法。

结构测试的测试数据生成方法大多只是单纯利用了控制流信息生成测试数据, 这往往是不够的。数据流测试将数据流信息应用到路径选择中, 并定义了相应的测试覆盖准则。无论哪一种结构测试, 即使其覆盖率达到百分之百, 也不能保证把所有隐藏的程序缺陷都揭露出来。

3 基于功能的测试用例生成技术

目前, 关于功能测试测试数据生成的研究主要有:T s a i等提出的从关系代数查询表示的规格说明中生成测试数据的方法。该方法针对关系代数查询表示的规格说明设计测试用例, 因而只适合于数据库和数据处理系统。W e y u k e r等提出的基于布尔规格说明的测试数据生成方法, 该方法将L o v e s o n等的基于过程控制的形式化规格说明方法进行了改进, 用A N D/O R表来描述规格说明中的条件, 因此, 该方法只适合于过程控制系统。随着需求的形式化描述方法的应用, 基于形式化规约的测试研究也得以展开, 就测试用例生成取得了相当多的成果, 但这些方法要求测试人员具有很高的素质和专业水平, 尤其对于大型系统的形式化描述本身就存在困难。

接口测试是功能测试的主要任务之一。基于接口参数的黑箱测试用例选择方法是对系统每个接口参数采用边际值分析法和等价类划分法等选取一组典型的值, 然后在这些取值组合中随机选取一组测试用例, 或者使用一些启发式方法从中进行筛选。但这些方法的缺点是带有主观倾向性, 不具有普遍性。组合覆盖是一种重要的接口参数测试方法。这种方法充分考虑了系统中各种因素以及因素间相互作用可能产生的影响, 可以根据实际需要, 用尽可能少的测试数据尽可能多地覆盖一些影响系统的因素。同时, 这些不完全测试的结果能够反映完全测试的内在规律, 具有代表性。这种方法对于由系统中某些因素相互作用而导致的软件故障具有较强的检测能力。

根据覆盖程度的不同, 组合覆盖方法可以区分为单因素覆盖、两两组合覆盖、三三组合覆盖等。目前, 两两组合覆盖方法已经在软件测试领域得到了成功的应用。人们应用这种方法对软件系统进行测试时, 发现了很多传统测试方法难以发现的错误。其中, 两两组合覆盖的测试数据生成一直是人们研究的重要课题, 至今还没有得到很好的解决。

4 面向对象的测试及测试用例生成

1989年, Fiedler从面向对象的测试与传统测试的差异出发, 提出了面向对象单元测试的解决方案, 拉开了面向对象软件测试的研究序幕。

面向对象的测试通常根据程序的内部结构和形式规范自动或者半自动地生成测试用例, 相应的测试用例生成方法分为基于外部行为的生成方法和基于内部结构的生成方法。基于外部行为的测试用例生成主要是根据类的接口规范构造测试用例, 一般采用代数规范或者基于模型规范来描述被测类的外部接口。

Tsai等应用反向工程, 根据程序源代码获取相应的状态图, 用状态机测试方法执行功能测试, 以遍历所有的状态转移;同时使用数据流覆盖准则来测试类的数据成员, 保证它们满足数据流覆盖。由于采用数据流测试和状态机测试技术, 这种方法可以发现类的成员函数和数据成员内的错误, 但不能发现额外状态。

陈火炎教授等提出了一种黑盒和白盒相结合的面向对象测试的集成方法论。该方法采用黑盒技术用来选择测试用例, 白盒技术主要用来判断从执行测试用例得到的两个对象是否可见性等价, 在某些情况下也用它来选择测试用例。还进一步改进和完善了D o o n g和F r a n k l的A S T O O T工具的方法, 详细论证了他们在将非等价基项作为测试用例的方法和断言中所存在的重大问题, 提出了基于代数规格说明并利用状态转换图产生非等价对作为测试用例的一种新方法, 然后通过白盒技术来确定运行这样的测试用例得到的对象是否可见性等价, 并补充一些测试用例, 对类进行测试。

参考文献

[1]王红峰.软件测试风险的分析与对策[J].中国金融电脑, 2009, 2.

[2]钱超.软件性能测试的流程探析[J].中国金融电脑, 2009, 2.

上一篇:学生会干部考核内容下一篇:的叙事作文300字