《软件测试基础理论知识.》由会员分享,可在线阅读,更多相关《软件测试基础理论知识.(45页珍藏版)》请在金锄头文库上搜索。
1、测试基础理论一、 软件测试概论1.1 基础概念【定义】软件测试是使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。它是帮助识别开发完成(中间或最终的版本)的计算机软件(整体或部分)的正确度 、完全度和质量的软件过程。【内容】软件测试主要工作内容是验证(verification)和确认(validation )。验证是保证软件正确地实现了一些特定功能的一系列活动,即保证软件做了你所期望的事情。(Do the right thing)确认是一系列的活动和过程,目的是想证实在一个给定的外部环境中软件的逻辑正确性。即保证软件以正确的方
2、式来做了这个事件(Do it right)软件测试的对象不仅仅是程序测试,软件测试应该包括整个软件开发期问各个阶段所产生的文档,如需求规格说明、概要设计文档、详细设计文档,当然软件测试的主要对象还是源程序。【目的】软件测试的目的是想以最少的人力、物力和时间找出软件中潜在的各种错误和缺陷,通过修正错误和缺陷提高软件质量,回避软件发布后由于潜在的软件缺陷和错误造成的隐患带来的商业风险。软件测试的出发点就是质量,软件测试的一切工作应该围绕质量而开展,测试是保证质量的重要手段之一,测试本身就是为质量服务的。【原则】(1) 测试的标准是用户的需求所有的软件测试都应追溯到用户需求,测试人员要始终站在用户的
3、角度去看问题、去判断软件缺陷的影响,系统中最严重的错误是那些导致程序无法满足用户需求的缺陷。(2) 事先定义好产品的质量标准有了质量标准,才能依据测试的结果对产品的质量进行正确的分析和评估,例如,进行性能测试前,应定义好产品性能的相关的各种指标。同样,测试用例应确定预期输出结果,如果无法确定测试结果,则无法进行校验。(3) 应当“尽早地和不断地进行软件测试”作为测试者的座右铭在软件开发生命周期早期引入的错误占软件过程中出现所有错误(包括最终的缺陷)数量的50%60%。,缺陷存在放大趋势。如需求阶段的一个错误可能会导致N个设计错误,因此,越是测试后期,为修复缺陷所付出的代价就会越大。(4) 制定
4、测试计划,排除随意性在进行实际测试之前,应制定良好的、切实可行的测试计划并严格执行,特别要确定测试策略和测试目标。测试计划应包括:所测软件的功能,输入和输出,测试内容,各项测试的进度安排,资源要求,测试资料,测试工具,测试用例的选择,测试的控制方法和过程,系统的配置方式,跟踪规则,调试规则,以及回归测试的规定等以及评价标准。(5) 周密的测试用例,不可将测试用例抛开要根据测试的目的,采用相应的方法去设计测试用例,从而提高测试的效率,更多地发现错误,提高程序的可靠性。除了检查程序是否做了应该做的事,还要看程序是否做了不该做的事;不仅应选用合理的输入数据,对于非法的输入也要设计测试用例进行测试。(
5、6) 充分注意群集现象抓住80/20原则可以有针对性的优化测试,在最短的时间内发现更多的问题,同时也能保证测试者对测试过程的整体把握。特别是当项目时间紧、复杂度高时,可以分时间、阶段、模块解决问题,是有效的解决问题的方式之一。(7) 避免测试自己的程序由于心理因素,人们潜意识都不希望找到自己的错误。基于这种思维定势,人们难于发现自己的错误。因此,软件开发者应尽量避免测试自己的产品,应由第三方来进行测试,当然开发者需要在交付之前进行相关的自测。一定程度的独立测试(可以避免开发人员对自己代码的偏爱),可以更加高效的发现软件缺陷和软件存在的失效。但独立测试不是完全的替代物,因为开发人员也可以高效的在
6、他们的代码中找出很多缺陷。在软件开发的早期,开发人员对自己的工作产品进行认真的测试,这也是开发人员的一个职责之一。(8) 完全测试是不可能的,测试需要终止穷尽测试是不可能的,应结合当前实际情况当满足一定的测试出口准则时测试就应当终止。(9) 回归测试修改程序后,应该重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。(10) 妥善保存一切测试过程文档1.2 软件测试要素(1) 质量:软件质量是软件测试的目标,也是软件测试工作的中心,一切从质量出发,也就是一切从客户需求出发。任何违背质量的东西都是问题,测试就是要找出这些问题。(2) 人员:人是决定的因素,测试人员的态度、素质、能力决定
7、着测试的效果,对测试产品的质量也有很大的影响。测试人员因素包括测试组织结构、角色和责任的定义。(3) 技术:软件测试技术,包括方法、工具。(4) 资源:主要是指测试环境中所需要的硬件设备、网络环境,甚至包括测试数据。另外一个重要因素就是测试时间,时间也是测试的资源,但测试人员不能看做资源,每个人的能力千差万别,不同的测试人员担任不同的角色,不能相互代替。这也是软件图书的经典之作人件的作者反对将人作为资源对待的原因。(5) 流程:从测试计划和测试用例的创建、评审到测试的执行、报告,设定每个阶段的进出标准。1.3 软件测试与质量保证1.3.1 软件质量软件产品质量评价国际标准ISO 14598 把
8、软件质量定义为:软件特性的总和,软件满足规定或潜在用户需求的能力。上述定义反应如下3个方面的问题:(1) 软件需求是度量软件质量的基础;(2) 软件人员必须遵循软件过程的规范;(3) 如果软件只是满足规定的需求,而不能满足可能存在的隐含需求,软件质量也不能保证。1.3.2 软件测试与软件质量保证的区别软件测试只是质量保证工作中的一个环节,软件质量保证与软件测试是软件质量工程的两个不同层面的工作。质量保证是通过预防、检查与改进来保证软件质量,采用全面质量管理和过程改进的原理来开展质量保证工作,主要关注软件质量的检查与测试,主要着眼于软件开发活动的过程、步骤和产物;软件测试是通过执行软件来对过程中
9、的产物(开发文档和程序)进行走查,发现问题,报告质量。具体说来,软件测试盒软件质量保证的区别体现在:从性质上看,软件测试属于技术性工作,而软件质量保证属于管理性工作;从对象上看,软件测试的对象是软件产品,而质量保证的对象是整个软件过程,覆盖公司层面的各个领域;从手段上看,软件测试以事后检验为主,而软件质量保证则强调缺陷的预防。质量不是测试人员测试出来的,糟糕的早期设计结合最优的后期质量保证往往颇费力气,仍然打造不出用户满意度高的产品。二、 软件测试过程管理 2.1 测试团队2.1.1 测试团队的基本责任(1) 发现软件程序、系统或产品中所有的问题(2) 尽早地发现问题(3) 督促和协助开发人员
10、尽快地解决程序中的缺陷(4) 帮助项目管理人员制定合理的开发计划(5) 对缺陷进行跟踪、分析和分类总结,以便让项目的管理人员和相关的负责人员能够及时、清楚地了解产品当前的质量状态(6) 帮助改善开发流程、调高产品开发效率(7) 促进程序编写的规范性、易读性、可维护性等2.1.2 测试团队的组成如何组织一个测试团队,应当视企业的人力资源而定。一般,一个比较健全的测试组,所具有的角色包括测试组长、实验室管理人员、自动化测试工程师、资深测试工程师、初级测试工程师。测试组长:业务专家,负责项目的管理、测试计划的制定、项目文档的审查、测试用例的设计和审查、任务的安排、与项目经理和开发组长的沟通等实验室管
11、理人员:设置、配置和维护实验室的测试环境,主要是服务器和网络环境等资深测试工程师:负责产品设计规格说明书的审查、测试用例的设计和技术难题的解决,主要参与数据库、系统性能和安全性等技术难度较高的测试自动化测试工程师:负责测试工具的开发、测试脚本的开发等初级测试工程师:执行测试用例和相关的测试任务,侧重功能测试用例的设计和执行2.1.3 软件测试团队与开发团队的关系软件测试与软件开发具有天然的联系。软件测试的输入是软件开发的产品,测试输出的结果需要开发人员相应处理,处理后的结果再次需要测试人员的验证。因此,软件测试与软件开发如影相随,互为服务对象。开发人员和测试人员需要不断的沟通合作,才能持续优化
12、项目。对于开发人员而言,利用测试人员对需求的理解,越早将测试提到项目周期,帮助就越大;对于测试人员而言,搞好和开发人员的关系,则可以在测试方向上获得更多的帮助:编写测试用例时询问可能遗漏的用例,在测试即将结束时询问测试是否有风险。2.2 软件测试风险分析(1) 风险类型项目风险:指潜在的预算、进度、人力、资源、客户、需求等方面的问题,以及它们对软件项目的影响技术风险:指潜在的设计、实现、接口、验证和维护等方面的问题商业风险:商业风险威胁到要开发软件的生存能力(2) 识别风险识别风险是试图系统化地确定对项目计划的威胁,识别风险的一个方法是建立风险条目检查表,检查表包括:产品规模:与要建造或要修改
13、的软件的总体规模相关的风险商业影响:与管理或市场所加诸的约束相关的风险客户特性:与客户的素质以及开发者和客户定期通信的能力相关的风险过程定义:与软件过程被定义的程度以及它们被开发组织所遵守的程度相关的风险开发环境:与用以建造产品的工具的可用性及质量相关的风险建造的技术:与待开发软件的复杂性及系统所包含技术的“新奇性”相关的风险人员数目及经验:与参与工作的软件工程师的总体技术水平及项目经验相关的风险(3) 评估风险影响风险的性质:当风险发生时可能产生的问题风险的范围:结合了严重性及整体分布情况风险的时间:主要考虑何时能够感到风险,风险会持续多长时间(4) 风险应对风险分析活动的目的是辅助项目组建
14、立处理风险的策略,一个有效的策略必须考虑如下3各问题:风险避免风险监控风险管理及意外事件计划2.3 软件测试成本管理【测试费用有效性】测试的策略由商业的经济利益来决定,对风险测试过少,会造成软件的缺陷和系统的瘫痪,测试的过多,会增加测试成本。下图的测试费用-质量曲线可以形象的表示测试费用的有效性:【测试成本】测试实施成本:测试准备成本、测试执行成本、测试结束成本【缺陷探测率】缺陷探测率DDP是另一个衡量测试工作效率的软件质量成本的指标。缺陷探测率DDPBugs(tester)/ (Bugs(tester)+ Bugs(customer)缺陷探测率越高,也就是测试者发现的错误多,发布后客户发现的
15、错误就越少,降低了外部故障不一致成本,达到节约总成本的目的,可获得较高的测试投资回报率。三、 测试流程3.1 测试过程软件测试过程一般包括:测试计划、测试设计、测试准备、测试执行、测试评估和缺陷跟踪等阶段,每个阶段都有一系列的任务。测试过程具有以下几个特点:(1) 测试工作开始于需求分析之后;(2) 测试经过评估后,达到了结束的标准后才能结束;(3) 测试也是迭代过程;(4) 测试需求来自于软件需求;(5) 测试过程与开发过程的关系;(6) 都是软件过程的有机组成部分;(7) 测试过程与开发过程同步进行;(8) 测试过程与开发过程相互依赖,又相互独立;(9) 开发过程、测试过程、项目管理过程以及其他支撑过程相互交织共同组成了软件过程。3.2 测试过程的常见模型3.2.1 V模型映出了测试活动与分析设计活动的关系。从左到右描述了基本的开发过程和测试行为,非常明确的标注了测试过程中存在的不同类型的测试,并且清楚的描述了这些测试阶段和开发过程期间各阶段的对应关系。但V模型存在一定的局限性,它仅仅把测试作为在编码之后的一个阶段,是针对程序进行的寻找错误的活动,而忽视了测试活动对需求分析、系统设计等活动的验证和确认的功能。3.2.2 W模型W模