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.3 GUI自动化用途
这类软件除了提供在窗口界面中使用外,也有不少是针对浏览器窗口开发的自动化测试工具。主要代表: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、结束语
软件测试是软件工程的一个范畴。软件测试是有计划、有目的的工程性的活动。软件测试是使用人工或者自动化的手段来运行或测试某个系统的过程其目的在于检验是否满足某种预期的结果。软件测试目的是发现错误。一个好的测试用例是发现未发现的错误。一个经过测试的软件不能说是完全正确的。软件测试是保证软件质量的一个重要手段。因此,软件测试应该贯穿与软件工程的始终。