软件工程学出现后,软件开发被视为一项工程,以工程化的方法来进行规划和管理软件的开发。事实上,不论采用什么技术和什么方法,软件中出现错误总是难免的。采用新的语言、先进的开发方式、完善的开发过程,可以减少错误的引入,但是不可能完全杜绝软件中的错误,这些引入的错误需要测试来找出。测试是软件开发的重要部分。统计表明,在典型的软件开发项目中,软件测试工作量往往占软件开发总工作量的40%以上。而在软件开发的总成本中用在测试上的开销要占30%到50%。如果把维护阶段也考虑在内,讨论整个软件生存时期时,测试的成本比例也许会有所降低,但实际上维护工作相当于二次开发,仍至多次开发,其中必定还包含有许多测试工作。系统的问题越早发现,改正成本越低,破坏性越小,所以,在系统前要尽量多地把系统问题找出来,其手段就是有计划、有组织地进行充分的测试。
软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一组测试数据,并利用这些测试数据运行程序,以发现程序错误的过程。根据测试数据设计方法,软件测试可分为结构测试和功能测试。在结构测试过程中,测试者对程序的语句、分支和逻辑路径进行各种覆盖测试,可以在不同点检查程序的状态,以确定实际状态与预期状态是否一致。软件测试的目的是发现错误,而不是确认其正确性,而对已进行的测试过程的程度进行评估。
2测试方法
2.1软件测试实质
软件测试是一项逻辑性强、且极具条理的工作,也是具有风险性的行为。由于软件的输入量、输出结果、软件实现途径都很多,而且软件产品说明书没有客观的标准,导致从不同的角度看,软件缺陷的标准不同,因而无法对软件实施完全测试,这样,就无法通过软件测试显示隐藏的软件缺陷,只能尽量查找软件缺陷,找到的软件缺陷越多,说明软件本身的缺陷就越多,况且还有一些是未发现、不能断定的缺陷,这就是软件测试的局限性。软件测试与软件开发过程的关系如图1所示。
图1软件测试与软件开发的关系
所有的软件测试都有2个关键的问题组成:建立能测试应用程序的环境,并在该环境中测试软件能力。测试员必须理解和重新生成软件所在的复杂软件环境,并运用其能力确保正常的测试。
2.2软件测试手段
从测试是否针对系统的内部结构和具体实现算法的角度来看,可分为白盒测试和黑盒测试。2.2.1黑盒测试
黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能情况下,通过测试来检测每个功能是否都能正常使用。在测试时,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息并且保持外部信息(如:数据库或文件)的完整性。黑盒法着眼于程序外部结构,不考虑内部逻辑结构,只针对软件界面和软件功能进行测试,它主要用于软件验收测试。黑盒法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。测试情况实际上有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。
2.2.2白盒测试
白盒测试也称结构测试或逻辑驱动测试,它是在已知产品内部工作过程情况下,通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都能按预定要求正确工作,而不顾它的功能。白盒测试的主要方法有逻辑驱动、基路测试等,白盒法是穷举路径测试,主要用于软件验证。
(2)由于当前软件开发有时不是很正规,在没有产品说明书时应使用试探性测试:首先要分步骤地弄清软件特性,记录软件运行情况,详细描述软件功能,然后运用静态和动态黑盒测试两种方式来测试软件,发现软件缺陷,在这种情况下,可以将一些非法、错误和垃圾数据作为输入数据,以检验软件的输出结果。测试时可采用反复测试、边界值测试和不合条件等方法。
(3)对有些软件实施状态测试:首先是熟悉软件的逻辑流程,可能的话,建立状态转换图,尽量清晰地描绘软件可能的独立状态,从一种状态到另一种状态所允许的输入和条件,以及进入或退出某种状态时的设置条件和输出结果;如果要测试的软件规模较大、复杂性较高,那么建立状态转换图将是非常艰巨的任务,这时减少要测试的状态及状态的数量,但是必须保证每种状态都必须测试一次,也可以在状态测试时选择那些不常用的分支,因为这是最容易被忽略的。在此基础上,测试所有的错误状态及返回值,测试随机状态转换。
①两个不同的程序同时保持或打开同一个文档。
②共享同一台设备。
③当软件处于读取或者修改状态时按键或者单击鼠标。
④同时关闭或者启动同一个软件的多个实例。
⑤使用不同的程序同时访问同一个数据库。
类似这样的竞争条件还有很多,不一一举例。
(6)测试软件的另一种有效方法就是进行正式审查,其中包括以下几个方面:确定问题、制定审查规则、准备工作以及编写报告,进行审查的主要方法就是组织熟悉该类软件的人员逐一检查代码,其中重要的软件还需要按能力成熟度(CMM)中的要求进行同行评审。
(7)在实际测试中经常采用一种称之为动态白盒测试的方法,其意义是指利用查看代码功能和实现方式得到的信息来确定哪些要测试,哪些不需要测试,以及如何开展测试。其中不仅是查看代码,还包括直接测试和控制软件。包括以下几个部分:
①直接测试底层功能、过程、子程序和库。
②根据软件运行的实际情况不断地调整测试用例。
③对软件中的部分变量和状态信息进行访问,确定测试与预期结果是否相符,并强制软件以正常测试难以实现的方式运行。在具体实施时应分阶段地进行测试,即遵循单元测试、集成测试、配置项测试和系统测试的步骤。目前,灰盒测试逐渐为大家认同,灰盒测试综合了白盒测试和黑盒测试的优点,模糊了两者的界限,在做法上仍然把软件当成黑盒来测试,但是通过简单地查看(不像白盒那样进行完整地查看)软件内部工作机制作为补充。现在的网页制作就很适合灰盒测试。
3结束语
软件测试的目的不是为了仅仅找出错误,而是通过它发现错误、分析错误,找到错误的分布特征和规律,从而帮助项目管理人员发现当前所采用的软件开发过程的缺陷,以便改进;同时也能够通过设计有针对性的检测方法,改善软件测试的有效性。即使测试没有发现任何错误,也是十分有价值的,因为完整的测试不仅可以给软件质量进行一个正确的评价,而且是提高软件质量的重要方法之一。
参考文献
关键词:软件测试;软件测试技术;自动化测试;测试工具
中图分类号:TP311.5文献标识码:A
TheStatusQuoofSoftwareTestingTechnology
LIJing,GUOXiao-lei
(SoftwareVocationalandTechnicalCollege,KaifengUniversity,HenanKaifeng475004)
Keywords:softwaretesting;softwaretestingtechniques;automatedtestin;testingtools
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捕获错误用途
用于捕获软件错误或程序调试。常用的软件:一个是开发人员自行编写的测试工具;另一个是利用所使用的开发工具的调试功能或工具;最后就是购买专业的调试软件。如:CompuwareNuMega推出的一系列的调试软件。
3.2.2一般用途
一般用途的测试工具在进行测试时,可以适用大部分的软件。如Sysinternals网站提供的一些免费软件。
3.2.3GUI自动化用途
这类软件除了提供在窗口界面中使用外,也有不少是针对浏览器窗口开发的自动化测试工具。主要代表:Rational公司的Robot、Compuware的QARun等。
3.2.4专项用途
以专项用途为主的测试工具,就是某种专项测试的软件。专用代码测试工具:BoundsChecke、CodeReview、JCheck;白盒测试工具:Logiscope和PRQA、DevPartner、RationalPurify系列等;网络测试工具:NetworkAssociates提供的NetworkSniffer。
3.2.5软件产品功能、性能测试用途
IBMRational系列包括多款测试产品,如功能测试工具IBMRationalManualTester、IBMRationalFunctionalTester和IBMRationalRobot。如性能测试工具:手动测试工具IBMRationalPerformanceTester和IBMRationalRobot。(Robot包括功能测试和性能测试)
3.2.6测试管理工具
一般而言,测试管理工具对测试需求、测试计划、测试用例、测试实施进行管理,并且测试管理工具还包括对缺陷的跟踪管理。测试管理工具能让测试人员、开发人员或其他的IT人员通过一个中央数据仓库,在不同地方就能交互信息。主要代表:TestDirectorMI的测试管理工具、TrackRecord、Bugzilla、QC(quickcenter)。
3.2.7测试辅助工具
这些工具本身并不执行测试,例如它们可以生成测试数据,为测试提供数据准备。常用工具:SmartDraw、SDemo。
4结束语
软件测试是软件工程的一个范畴。软件测试是有计划、有目的的工程性的活动。软件测试是使用人工或者自动化的手段来运行或测试某个系统的过程其目的在于检验是否满足某种预期的结果。软件测试目的是发现错误。一个好的测试用例是发现未发现的错误。一个经过测试的软件不能就说是完全正确的。软件测试是保证软件质量的一个重要手段。因此,软件测试应该贯穿与软件工程的始终。
参考文献:
[1]王水.软件工程[M].郑州:河南科学技术出版社,2008.
关键词:软件测试;系统测试;线索;压力测试;性能测试
一、引言
软件测试作为软件质量保证的关键技术之一,其目的就是能够有效地发现软件中的错误或缺陷。系统测试是对完整集成后的系统进行测试的阶段,用来评价系统对具体需求规格说明的符合性,系统测试是在单元、组件和集成测试阶段之后进行的。主要针对软件系统和其他系统元素(及硬件、数据库和人机交互信息)组合构成完整的计算机应用系统中所有的元素配合是否合适以及整个系统的功能、性能、执行强度、安全性等是否达到规定标准而进行的测试。
二、系统测试概述
(一)系统测试概念
所谓系统测试是将通过集成测试的软件系统,作为计算机系统的一个重要组成部分,与计算机硬件、外设、某些支撑软件的系统等其他系统元素组合在一起所进行的测试,目的在于通过与系统的需求定义作比较,发现软件与系统定义不符合或矛盾的地方。
(二)系统测试前的准备工作
系统测试前的准备工作主要包括:对系统各种功能的描述;系统要求的数据处理及传输的速率;对系统性能的要求;对备份及修复的要求;对兼容性的描述;对配置的描述;对安全方面的要求等。
(三)系统测试的测试数据
系统测试所用的数据必须尽可能地像真实数据一样精确和有代表性。可以使用真实数据或者使用真实数据的一个复制,复制数据的质量、精度和数据量必须尽可能地代表真实的数据。
(四)系统测试与确认测试区别
确认测试始于集成测试的结束,那时已测试完单个构件,软件已组装成完整的软件包,且接口错误已被发现和改正。在确认测试时,传统软件与面向对象软件的差别已经消失,测试便集中于用户可见的动作和用户可识别的系统输出。
1.确认测试准则
软件确认是通过一系列表明已符合软件需求的测试而获得的。测试计划和规程都是用于确保满足所有的功能需求,具有所有的行为特征,达到所有的性能需求,文档是正确的、可用的。执行每个确认测试用例之后,存在下面两种可能条件之一:(1)功能或性能特征符合需求规约,因而被接受;(2)发现了与规约的偏差,创建缺陷列表。
2.配置评审
评审的目的是保证所有的软件配置元素已正确开发、编目,且具有支持软件生命周期的支持阶段的必要细节。
3.α测试与β测试
α测试是由最终用户在开发者的场所进行。软件在自然的环境下使用,开发者站在典型用户的后面观看,并记录错误和使用问题。α测试在受控的环境下进行。
β测试是最终用户场所执行。开发者通常不在场,因此,β测试是在不为开发者控制的环境下软件的现场应用。最终用户记录测试过程中遇见的所有问题(现实存在或想象的),并将其定期地报告给开发者。接到β测试的问题报告之后,软件工程师进行修改,然后准备向最终用户软件产品。
二、系统级功能测试技术
(一)线索的概念
线索(thread)的概念很难定义。事实上,一些已经公开的定义都是矛盾、容易产生误导或错误的。可以把线索看作是一种不需要形式化定义的原始概念。以下是对线索的多种看法:一般使用的场景;系统级测试用例;激励/响应对;由系统级输入序列产生的行为;端口输入和输出事件的交替序列;系统状态机描述中的转换序列;对象消息和方法执行的交替序列;机器指令序列;源指令序列;MM-路径序列;原子系统功能序列。
(二)需求规约的基本构造元素
根据一组基本需求规约构造元素,即数据、行动、设备、事件和线索,来讨论系统测试。每个系统都可以使用这五种元素表示。
1.数据
主要包括:变量、数据结构、字段、记录、数据存储和文件、实体关系模型高层数据描述。
2.行动
以行动为中心建模仍然是需求规约的一种常见形式,这是因为有命令式程序设计语言以行动为中心性质的历史原因。行动有输入和输出,这些输入和输出既可以是数据,也可以是端口事件。行动还可以分解为低层活动,例如数据流图。
3.设备
每个系统都有端口设备,这些端口设备是系统级输入和输出(端口事件)的源和目的地。在技术上,端口是I/O设备接入系统的点。
4.事件
事件既有数据方面的一些特征,又有行动方面的一些特征。事件是发生在端口设备上的系统级输入(或输出)。可以是离散的,也可以是连续的(例如温度、高度或压力)。端口输入事件是物理到逻辑的转换,同样,端口输出事件是逻辑到物理的转换。
5.线索
因为要测试线索,因此测试人员通常不能在数据、事件和行动之间的交互中找出线索。线索本身出现在需求规约中的惟一地方,是使用快速原型法并结合场景记录器。
(三)线索测试的结构策略及功能策略
结构策略实际上是基于有限状态机的行为建模中的结构来寻找测试线索的。首先自底向上组织各层次的状态机,然后寻找线索覆盖每个状态机的节点和边,同时还要找出节点与边覆盖指标。
线索测试的功能策略
1.基于事件的线索测试
(1)端口输入事件覆盖指标
五个覆盖指标为覆盖端口输入事件提供了一组线索:
(1)PI1:每个端口输入事件发生。
(2)PI2:端口输入事件的常见序列发生。
(4)PI4:对于给定语境,所有“不合适”的输入事件发生。
(5)Pl5:对于给定语境,所有可能的输入事件发生。
(2)端口输出事件覆盖指标
根据端口输出事件定义两种覆盖指标:
(1)PO1:每个端口输出事件发生。
(2)PO2:每个端口输出事件在每种原因下发生
2.基于端口的线索测试
基于端口的测试是基于事件测试的有用补充。
对于每个端口都要询问端口上会出现什么事件。然后根据每个端口的事件列表寻找使用输入端口和输出端口的线索。有些需求规约技术要求提供这种端口的事件列表。
设备和事件之间的多对多测试应该在两个方向上进行:基于事件的测试覆盖从事件到端口的一对多关系,反之,基于端口的测试覆盖从端口到事件的一对多关系。SATM系统不能使用这种测试,因为SATM不发生在多个端口上。
三、系统测试的主要内容
系统测试一般要完成以下几种测试:功能测试、性能测试、可靠性、稳定性测试、兼容性测试、恢复性测试、安全性测试、强度测试、面向用户支持方面的测试、其他限制条件的测试。下面就对常用的系统测试做一个介绍:
(一)压力测试
压力测试是指模拟巨大的工作负荷以查看或评估应用程序在峰值或超越最大负载使用情况下如何执行操作。压力测试有如下特点:可以测试系统的稳定性;一般需要对用户的使用情况进行模拟。压力测试的方法包括:并发测试法、增加量级法、重复测试法。
(二)性能测试
(三)恢复性测试
(四)安全性测试
安全性测试验证建立在系统内的保护机制是否能够实际保护系统不受非法入侵。系统的安全必须经受住正面的攻击,但是也必须能够经受住侧面和背后的攻击。在安全性测试过程中,测试者扮演试图攻击系统的角色。测试者可以试图通过外部手段获取密码;可以通过瓦解任何防守的定制软件来攻击系统;可以“制服”系统使其无法对别人提供服务;可以有目的地引发系统错误以期在其恢复过程中入侵系统;可以通过浏览非保密数据,从中找到进入系统的钥匙等等。
四、结语
系统测试有助于在其部署中客户发现缺陷之前,尽可能多滴发现缺陷,在系统测试期间要验证完整产品的行为,包括设计多个模块、程序和功能的测试,测试完整产品的行为是很关键的,因为很多人错误地认为经过单独测试的组件放到一起后仍能正常运行。
参考文献:
[1]薛冲冲,陈坚.软件测试研究[J].计算机系统应用,2011,2
[2]陶幸辉,宋志刚.软件系统测试类型及测试用例设计[J].科技经济市场,2011,6
[3]朱家云.浅析软件测试[J].信息系统工程,2011,4
[4王丽达.论软件系统的测试[J].经济研究导刊,2011,14
关键词软件测试软件生命周期软件测试评估
中图分类号:TP311文献标识码:A
0前言
1软件测试的发展历程
2软件测试的理论基础
2.1软件测试的定义
软件测试是在软件生命周期内运用技术手段保证软件质量的一门学科。其主要内容包括软件验证技术、软件确认技术和软件测试管理技术这三大部分。软件测试是根据软件开发各阶段的规格说明和程序的内部结构精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例运行程序以及发现错误的过程,即执行测试步骤。
(1)测试是为了证明程序有错,而不是证明程序无错。
(2)一个好的测试用例在于它能发现至今未发现的错误。
(3)一个成功的测试是发现了至今未发现的错误的测试。
2.3软件测试的主要方法
随着软件测试技术的日臻成熟,软件测试方法与技术已经发展得较为完善,现今软件测试的方法很多,以下主要介绍几种常用的软件测试方法。
静态测试不对代码进行运行,而是借助专业的软件测试工具评审软件文档或程序,度量静态复杂度,通过分析或检查源程序的文法、结构、过程、接口等来检查程序的正确性,借以发现程序的不足之处,降低程序出现错误的概率。静态测试包括代码审查、静态结构分析、代码质量度量等。
动态测试是通过人工或使用工具运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能。该方法有三部分组成:构造测试实例、执行程序、分析程序的输出结果。
黑盒测试是在软件的功能知道的前提下,通过测试来检测每个功能是否正常使用,是一种验证性方法。测试的过程中程序的内部是不可见的,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息,并且保持外部信息的完整性。
白盒测试又称为结构测试,与黑盒测试不同,它是在知道产品的内部工作过程,检测产品内部动作是否按照规格说明书的规定正常运行、按照程序内部的结构测试程序,检验程序中的每条通路是否都能按预定的要求正确工作。白盒测试的主要方法有逻辑驱动、路径测试等,主要用于软件验证。
3软件测试的评估
软件测试评估是在测试结束后对整个测试过程与产品进行评估的过程,主要包括对于测试工作的总结、缺陷数据的分析及测试过程的评估。
由图1可知,加入了测试评估的测试过程能形成一个完整的测试反馈系统,由此可见测试评估非常的重要。软件测试评估是对软件测试工作整体进展状况的监督和评价,是保证测试完整性和有效性的重要工作。软件测试评估贯穿于软件测试的整个过程,软件测试评估的方法主要包括覆盖评估和质量评估。
4结语
虽然在近年来,中国的软件产业得到了飞速地发展,但国内很少开发出世界范围内通用的软件,且开发出的软件在性能和质量上也无法和国外大公司开发的产品相比较。软件测试作为软件开发过程中的一个重要环节,长期以来一直滞后于中国软件产业的发展。软件测试作为一种保障软件质量的一种技术,应该贯穿于软件生命周期的整个过程,通过严格的软件测试可以将软件中的错误减少到可以接受的程度,从而提高软件的质量。
参考文献
[1]秦航,杨强.软件质量保证与测试[M].北京:清华大学出版社,2012(1).
关键词:软件测试;软件工程;软件质量;可靠性
中图分类号:TP311
1软件可靠性分析
1.1软件可靠性定义
(2)规定的环境条件
环境条件是指软件运行所处的环境。它包括支持软件系统运行的各种要素,例如,运行软件的操作系统、支持运行的硬件、其它的支持软件、输入的数据格式及范围等。在不同的环境条件运行同一个软件,得出的是不同的可靠性。详细的说,假定其他的因素是理想的,规定的环境条件主要包括支持软件运行的计算机的配置以及数据的输入格式等要求。在明确了软件规定的运行环境下,有利于准确的判断软件失效是研制方还是客户方的责任。
(3)规定的功能
软件规定的任务和功能也是影响软件可靠性的一个因素。当完成不同的任务时,会有不同的软件运行剖面,软件调用的子模块,即程序选择的路径,就会不同,就可能会得到不同的可靠性。所以明确软件的任务和功能是准确度量软件系统的可靠性的一个最重要的先决条件。
1.2软件可靠性度量
软件可靠性是软件的一个固有特性,是衡量软件在按照设计目标和用户的要求执行其特定的功能的正确程度。软件可靠性不仅与软件本身的缺陷有关,也和系统的输入和使用有一定的关系。从理论上来讲,一个可靠的软件必须是具有以下四个性质:正确性、一致性、完整性和健壮性。然而在实际中,没有软件能够保证完全正确,也无法准确的度量其精确度。通常情况下,是通过测试软件系统来估计其可靠性的。
为了进行软件可靠性评估,首先需要了解软件的可靠性模型。软件可靠性一般需要通过建立数学模型和可靠性框图而进行估算,这些数学模型和可靠性框图就是软件的可靠性模型。建立可靠性模型的目的是把较为复杂的可靠性分解为多个简单的系统的可靠性,从而方便评价复杂系统的可靠性。
1.3软件可靠性的测试实施
1.4可靠性数据收集
对软件进行可靠性评估的依据是软件的可靠性数据。为了收集软件的可靠性数据,应该建立一个具有软件错误报告、分析与纠正功能的系统。根据行业标准的规定,编制完成软件错误报告、可靠性数据收集、分析与处理的规则,准确、完整的收集软件测试阶段的可靠性数据。
1.5编写测试报告
软件测试结束后,下面的工作便是编写《软件可靠性测试报告》,总结和归纳软件测试中的测试项和测试结果。测试报告的内容一般包括下面的几个方面内容:软件的标识;软件测试时的计算机软件和硬件的配置;测试所使用的文档;对软件的说明;程序和数据的测试结果;软件的测试最终日期。采用规范的管理控制,能够保证在软件测试阶段获得真实的可靠性数据,从而能够客观的评价软件的可靠性。
2软件测试
软件测试是保证软件质量的一个关键步骤,也是软件生存期中一个阶段。简单来讲,软件测试就是通过对软件需求的分析、设计的规格以及编码进行的最后的审核活动。软件测试的定义为:使用某种手段通过运行软件系统来检查软件系统是否满足设计的要求或者是测试结果是否与实际要求的功能相满足。从定义可以看出,软件测试的目的是确定软件是否与设计的需求相满足。
现在,从客户的角度来看,软件测试的目的是希望通过这个测试过程,发现软件中隐藏的错误和缺陷。因此,也可以说,软件测试是为了发现软件系统中的错误而执行程序的一个过程。为了达到这个目的,需要设计出一批测试用的输入数据及其预期的输出结果,通过这些测试用例去测试运行的程序能否输出预期的结果。
2.2软件测试的方法
软件测试方法包括两类:黑盒测试方法和白盒测试。黑盒测试是在不考虑程序内部结构及其特性的情况下检查输入与输出是否达到预期的结果的测试,所以又称为功能测试等。而白盒测试则是在已知程序内部结构的情况下而设计测试用例的测试方法,又称为结构测试等。一般情况下,如果进行的是独立测试,则适合采用黑盒测试方法,如果进行的是单元测试,则采用白盒测试法。
测试用例是对客观存在的程序的一种抽象,是对程序中的目标、运动和结果等的一种描述。设计测试用例是对软件的某种功能而设计出的测试方案,以文档的形式编制。在设计测试用例时,不仅能够考虑到普通的情况,还应该考虑到边界值以及极限值等特殊情况。为了达到测试时发现软件系统中的隐藏缺陷,所以在选择输入输出数据和测试用例时,必须结合软件的运行环境,尽可能的选择出所有具有代表性的测试用例和数据,从而全面的判断输入输出结果与实际设计是否符合。得到软件测试的数据后,对其进行处理,以此为依据来判断软件系统能否满足设计需求。
3结束语
综上所述,本文通过对软件测试与可靠性评估方法进行了分析与研究。根据多年的经验表明,采用现场试验的方法是评估软件可靠性的最好的方法。影响软件的可靠性的因素有很多,最大的一个因素是关于可靠性的数据不足。所以在实际的软件测试与可靠性分析时,必须根据丰富的历史可靠性试验信息统计来评估全系统的可靠性。
[1]潘立武,杨健.谈应用软件测试方法[J].福建电脑,2007,7.
1软件开发和软件测试
软件开发和软件测试都是软件工程定义里的重要阶段。软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程。软件开发人员主要工作是对用户需求进行分析,根据需求分析进行系统设计、程序编码、单元测试和软件缺陷的修复。
2软件开发和软件测试的关系
在软件项目团队中,软件开发和软件测试都是其重要的项目成员,两者都有共同的目标就是实现用户需求,保证软件高品质的交付到用户手中。有开发就会有测试,开发人员先实现软件,测试人员对软件进行测试找出程序错误和缺陷,并提交开发进行修复。软件开发和软件测试通过这样互相合作,逐步解除软件隐藏的程序错误和潜在风险,使软件产品更逼近于用户需求。
软件开发和软件测试的工作交集就是软件缺陷,在软件缺陷的定义和处理上往往容易发生意见分歧。在这个时候,作为软件测试人员,如何处理和应对好和软件开发的关系,保持高效的团队协作能力就显得尤为重要。
3软件测试对软件开发关系的处理方法及技巧
3.1尊重开发成果
3.2提交缺陷技巧
日常工作中测试与开发打交道最多的莫过于在软件缺陷的定义和处理上了。怎样能够让开发人员更乐于接受测试提交的缺陷并改进它,测试人员要注意以下几点:
3.2.1换位思考,多站在开发人员的角度想
开发人员将软件提交测试后,他们最焦急等待的测试结果基本上都是系统逻辑跑不跑得通,数据流转是否正确。测试人员在这方面就要注意测试技巧和提交Bug的优先顺序。测试时优先按业务流程测试整个系统逻辑,把影响系统逻辑的错误找出来优先提交给开发人员,这时候的开发人员会很喜欢修改这些问题。测试中碰到一些不影响系统逻辑的Bug我们先暂且记录下来,待第一批都修改完毕,测试才提交如界面美观、输入输出控制等改进型的Bug,这样有主次的提交Bug顺序,开发更易于接受。
3.2.2Bug描述要清晰准确
3.2.3避免提交重复和无效的Bug
测试人员在遇到Bug时,要先进行问题分析,这个问题是独立出现还是整个系统都普遍存在,如果是普遍问题,只需要提交一个Bug即可。过多的同一问题根源的Bug会令开发人员厌烦。另外,测试人员不但要熟悉业务需求,还要熟悉软件系统的操作和使用,提交由于操作错误而非程序问题引起的Bug,容易导致开发对测试失去信任。如果测试人员在不确定是否Bug的时候,可先向开发人员进行询问确认。
3.3注重沟通
(1)测试人员与开发人员最容易产生分歧的就是对缺陷的定义,这时候面对面的讨论比在即时通讯工具上数十个来回的争论来得直接、有效、清晰。讨论的时候,测试人员应说说自己的测试方法,让开发明白你的测试内容和做法都是站在用户的角度去测试和看待问题。
(3)平时多与开发人员交流,了解他们负责的模块和实现方法,这样有助于自己对系统有更深入的认识,改善测试方法和测试技巧,帮助开发改进软件质量。
4总结
软件测试与软件开发保持良好的合作关系,能够使项目团队具备更高的凝聚力,极大的提升团队协作能力,是顺利、高效的实施软件项目的有力保障。