软件测试方向介绍什么是软件测试?软件测试是软件工程不可或缺的重要环节之一,是软件质量保证(Software Quality Assurance)的重要手段。
软件测试的定义:“使用人工和自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。
”(IEEE 1983)软件测试的目的,简单的说,是通过寻找错误,尽可能地为修正错误提供更多的信息,从而保证软件系统的可用性。
软件测试是贯穿软件工程始终的一个活动,由测试计划、单元测试、集成测试、系统测试、验收测试组成。
此外,完整的测试活动还要有相应的缺陷跟踪系统,从而完成整个软件工程迭代开发的过程。
测试计划当软件的系统需求确定之后,就可以制定软件的测试计划了。
下面提供了一个测试计划的模版,其内容可以根据实际的项目内容进行调整。
一.引言1、测试目的:说明本测试计划的具体编写目的,职称预期读者范围2、背景:对被测对象及目标进行简要说明3、定义:列出本文件中用到的专门术语的定义和外文首字母组词的原词组4、参考文档:制定本计划所使用的工程文档二.测试计划1、软件说明:以图表形式并逐项说明被测软件的功能、输入和输出等质量指标2、测试进度:测试的进度安排,包括进行测试的日期和工作内容3、测试环境:测试工作对硬件环境、软件环境、测试人员等资源的要求4、测试工具:软件测试所使用的工具5、测试培训:为被测对象的使用提供培训的计划三.测试设计1、数据库测试:对数据库和数据库进程作为一个独立的子系统进行测试2、接口测试:系统各组件之间的接口进行测试3、单元测试:系统的各独立单元进行测试4、集成测试:对软件各子系统进行测试,验证业务流程与数据处理是否达到要求5、系统测试:对系统的功能、性能、压力、安全、用户界面等进行测试6、验收测试:确保系统在交付客户能够正常的安装与配置四.评价准则1、优先级与处理方式:缺陷的分类与响应等级、处理方式2、范围::所选择的测试用例能够检查的范围及其局限性3、尺度:用来判断测试工作是否能通过的评价尺度单元测试在了解单元测试前,首先应掌握白盒测试与黑盒测试的概念。
所谓白盒测试,指盒子(被测对象)是可视的,测试人员对软件系统的内部结构和原理十分清楚。
白盒测试是一种覆盖型的测试,它要求被测模块所有独立的路径都被执行一遍。
相反,黑盒测试是一种功能型测试,它关注被测对象的功能实现,测试人员是不清楚软件的内部逻辑。
单元测试是一种白盒测试,它是对软件基本组成单元进行的一种测试,是整个软件测试过程中最基本的活动,通常由开发人员与测试人员协同完成。
单元测试的对象可以是一个类、一个功能模块或是一个组件。
执行单元测试,需要注意以下几方面:单元测试的目标和任务:明确测试的目标,即被测功能模块能够被顺利的执行。
单元测试的依据与规范:明确测试依据,如系统需求与设计描述。
要有统一代码书写规范。
单元测试的方法与技术:一般采用白盒测试,有手工测试和自动测试等多种方法。
单元测试的过程与结果:应有详细的单元测试描述与计划文档,对测试结果也应编制成结果分析报告。
单元测试的评估与管理:通过缺陷跟踪系统提交测试结果,对于出现的严重的问题应做及时的反馈与跟踪。
集成测试集成测试是在单元测试完成之后开始,是对某个子系统所有功能模块的测试。
集成测试介于白盒测试与黑盒测试之间,因此也被称为灰盒测试。
集成测试是软件测试活动中最为关键的,从上图可以看到,它发生在单元测试完成之后,与系统设计相对应,之后是系统测试,集成测试的成功执行是系统测试开始的基础。
执行集成测试,要把握以下几方面内容:制定集成测试策略:针对被测子系统的特点,制定适合的策略,如自顶向下的集成、自底向上的集成、三明治集成等。
加强集成测试分析:应编制集成测试分析报告,它对集成测试的用例设计具有指导作用,是整个集成测试中最重要的一个步骤。
设计执行测试用例:集成测试的主要内容。
系统测试系统测试是将软件、硬件、数据、人员、文档结合在一起、在正式的运行环境中,进行的一种综合性测试。
系统测试可以分为功能性和非功能性两大类,其中功能测试是系统测试的基础,主要用来验证软件系统是否严格按照需求规格说明的功能要求予以实现。
非功能性测试主要包括性能测试、压力测试、容量测试、用户界面测试、安全性测试、可靠性测试、容错性测试、安装测试等内容。
在进行系统测试之前,要搞清楚系统测试与集成测试的区别。
首先,二者测试的对象不同。
系统测试是对整个系统及其环境进行的综合性测试,集成测试仅对某一个子系统进行测试,不涉及到软件环境。
其次,二者关注的领域不同。
系统测试更多从用户的角度出发,除关注软件功能能否实现外,更注重系统的性能、安全、界面效果等非功能特性。
而集成测试则主要关注各模块间的接口能否实现成功调用。
软件系统的特点是错综纷纭的,因而系统测试的侧重点也有所不同。
对基于J2EE架构的B/S应用软件,系统测试更偏重于性能、压力、用户界面等方面的测试。
因此,系统测试要根据软件特点来制定与执行。
验收测试验收测试发生在系统测试之后,是一种黑盒测试。
它是系统开发人员与用户共同进行的一项测试工作,其目的是按照之前约定的验收标准,通常在需求分析说明书中列出详细标准,使用户对系统进行验收和签字。
软件测试的目的软件测试的目的,第一是确认软件的质量,其一方面是确认软件做了你所期望的事情(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”.)。
作为软件测试这个行业,最重要的一件事就是从客户的需求出发,从客户的角度去看产品,客户会怎么去使用这个产品,使用过程中会遇到什么样的问题。
只有这些问题都解决了,软件产品的质量才可以说是上去了。
测试人员在软件开发过程中的任务1、寻找Bug;2、避免软件开发过程中的缺陷;3、衡量软件的品质;4、关注用户的需求。
总的目标是:确保软件的质量软件测试的现状一, 软件开发中出现错误或缺陷的机会越来越多.市场对软件质量重要性的认识逐渐增强.所以,软件测试在软件项目实施过程得到越来越多的重视。
但也还存在一些认识上的误区。
(1)误区之一:软件开发完成后进行软件测试人们一般认为,软件项目要经过以下几个阶段:需求分析,概要设计,详细设计,软件编码,软件测试,软件发布.据此,认为软件测试只是软件编码后的一个过程.这是不了解软件测试周期的错误认识.软件测试是一个系列过程活动,包括软件测试需求分析,测试计划设计,测试用例设计,执行测试.因此,软件测试贯穿于软件项目的整个生命过程.在软件项目的每一个阶段都要进行不同目的和内容的测试活动,以保证各个阶段的正确性.软件测试的对象不仅仅是软件代码,还包括软件需求文档和设计文档.软件开发与软件测试应该是交互进行的,例如,单元编码需要单元测试,模块组合阶段需要集成测试.如果等到软件编码结束后才进行测试,那么,测试的时间将会很短,测试的覆盖面将很不全面,测试的效果也将大打折扣.更严重的是如果此时发现了软件需求阶段或概要设计阶段的错误,如果要修复该类错误,将会耗费大量的时间和人力.(2)误区之二:软件发布后如果发现质量问题,那是软件测试人员的错这种认识很打击软件测试人员的积极性.软件中的错误可能来自软件项目中的各个过程,软件测试只能确认软件存在错误,不能保证软件没有错误,因为从根本上讲,软件测试不可能发现全部的错误.从软件开发的角度看,软件的高质量不是软件测试人员测出来的,是靠软件生命周期的各个过程中设计出来的.出现软件错误,不能简单地归结为某一个人的责任,有些错误的产生可能不是技术原因,可能来自于混乱的项目管理.应该分析软件项目的各个过程,从过程改进方面寻找产生错误的原因和改进的措施.(3)误区之三:软件测试要求不高,随便找个人多都行很多人都认为软件测试就是安装和运行程序,点点鼠标,按按键盘的工作.这是由于不了解软件测试的具体技术和方法造成的.随之软件工程学的发展和软件项目管理经验的提高,软件测试已经形成了一个独立的技术学科,演变成一个具有巨大市场需求的行业.软件测试技术不断更新和完善,新工具,新流程,新测试设计方法都在不断更新,需要掌握和学习很多测试知识.所以,具有编程经验的程序员不一定是一名优秀的测试工程师.软件测试包括测试技术和管理两个方面,完全掌握这两个方面的内容,需要很多测试实践经验和不断学习精神.(4)误区之四:软件测试是测试人员的事情,与程序员无关开发和测试是相辅相成的过程需要软件测试人员,程序员和系统分析师等保持密切的联系,需要更多的交流和协调,以便提高测试效率.另外,对于单元测试主要应该由程序员完成,必要时测试人员可以帮助设计测试样例.对于测试中发现的软件错误,很多需要程序员通过修改编码才能修复.程序员可以通过有目的的分析软件错误的类型,数量,找出产生错误的位置和原因,以便在今后的编程中避免同样的错误,积累编程经验,提高编程能力.(5)误区之五:项目进度吃紧时少做些测试,时间富裕时多做测试这是不重视软件测试的表现,也是软件项目过程管理混乱的表现,必然会降低软件测试的质量.一个软件项目的顺利实现需要有合理的项目进度计划,其中包括合理的测试计划,对项目实施过程中的任何问题,都要有风险分析和相应的对策,不要因为开发进度的延期而简单的缩短测试时间,人力和资源.因为缩短测试时间带来的测试不完整,对项目质量的下降引起的潜在风险,往往造成更大的浪费.克服这种现象的最好办法是加强软件过程的计划和控制,包括软件测试计划,测试设计,测试执行,测试度量和测试控制.(6)误区之六:软件测试是没有前途的工作,只有程序员才是软件高手由于我国软件整体开发能力比较低,软件过程很不规范,很多软件项目的开发都还停留在"作坊式"和"垒鸡窝"阶段.项目的成功往往靠个别全能程序员决定,他们负责总体设计和程序详细设计,认为软件开发就是编写代码,给人的印象往往是程序员是真正的牛人,具有很高的地位和待遇.因此,在这种环境下,软件测试很不受重视,软件测试人员的地位和待遇自然就很低了,甚至软件测试变得可有可无.随着市场对软件质量的不断提高,软件测试将变得越来越重要,相应的软件测试人员的地位和待遇将会逐渐提高.在微软等软件过程比较规范的大公司,软件测试人员的数量和待遇与程序员没有多大差别,优秀测试人员的待遇甚至比程序员还要高.软件测试将会成为一个具有很大发展前景的行业,软件测试大有前途,市场需要更多具有丰富测试技术和管理经验的测试人员,他们同样是软件专家.这两年来国内软件测试人员的需求不断增大,越来越多的IT企业认识到了软件测试的重要性。