1、软件测试教程 - Ch.1 软件测试概述,,陈涵生,内容概览,全书共四篇,分十三章软件测试的原理,二章,阐述软件测试的重要性、基本概念和方法等 软件测试的技术,七章,介绍典型的软件测试技术,和在各开发阶段的测试方法(单元测试、集成测试、系统测试、验收测试、性能测试和回归测试等) 软件测试的实践,三章,介绍面向对象测试以及自动化测试工具与应用 软件测试技术前沿,一章,.,主要参考书:软件测试技术基础教程 ISBN:987-7-121-13705-1 电子工业出版社,21世纪什么最贵软件测试工程师,软件测试工程师,目前IT行业极端短缺的金贵人才,未来5年IT行业最炙手可热的高薪职位。中国软件业每年
2、新增约20万测试岗位就业机会,而企业、学校培养出的测试人才却不足需求量的1/10,这种测试人才需求与供给间的差距仍在拉大。软件测试产品质量的保证软件测试控制成本的关键软件测试软件可靠性确认软件测试让企业具备国际竞争的实力,,课程目标,本课程是计算机或软件专业课程,重在培养我们的实践能力,适应软件企业的工作环境和业界标准,并和国际先进的软件开发理念和测试技术保持同步。 通过本课程的学习,了解并掌握软件产品质量保证的基本思想和科学体系、软件测试技术的基本内容,以及软件测试的方法、技术和工具的使用,为全面掌握软件测试技术和软件质量管理打下坚实的基础。 本课程属于“职业技能” 类型的课程,具有基础性、
3、实用性和可操作性特点。强调软件工程师常用的软件测试方法和技术的学习和应用,以及实践动手能力的培养!,,课程目标,通过本课程的学习,我们还可以了解并掌握:有效的测试策略、方法和技术测试计划和测试用例的设计测试自动化的引入、应用更清楚、准确地报告测试缺陷对软件产品质量的正确评估软件测试和质量保证的关系和区别 ,,课程服务于,- 测试工程师 Test engineerQA工程师/经理 QA Engineer/Manager软件工程过程组成员 The member of SEPG项目经理 Project manager程序员 Programmer软件分析师 Software Analyst软件咨询顾问
4、 Software Consultant,,课程安排,2-3 学分,建议: 60 学时,,课程安排,课程安排 (2),,课程安排,课程安排 (3),,第一章 软件测试概述,,1.1 软件定义 1.2 软件开发过程的特性 1.3 软件测试的定义和目的 1.4 软件缺陷 1.5 测试用例 1.6 软件质量 1.7与测试相关的几个概念 1.8 软件测试技术的发展趋势和测试人员职业要求,1.1 软件定义,,软件定义:软件是计算机系统中与硬件相结合的一部分,包括程序、数据及其相关文档。简单地表示为: 软件 = 程序 + 数据 + 文档 “程序”是指能够实现某种功能和性能要求的指令集合 “数据”是使程序能
5、正常操纵信息的数据结构 “文档”指的是软件在开发、使用和维护过程中产生的图文集合,如:系统需求规格说明,用户手册 readme等,软件特点,软件是一种逻辑实体,而不是具体的物理实体,具有抽象性 软件是把知识与技术转化为信息的一种产品 软件在运行和使用中不会“磨损”,而是逐步完善 . 软件的开发和运行常常受到计算机系统的限制 软件的开发至今尚未摆脱手工制作的开发方式 软件是复杂的 软件成本相当昂贵 相当多的软件工作涉及到社会因素,,软件的分类,按照功能划分 系统软件:能够直接操作底层的硬件、并为上层软件提供支持的软件,如:操作系统、各种硬件驱动程序等 应用软件:能够为用户提供某种特定的应用服务的
6、软件。这类软件也是我们测试的重点 按照技术构架划分 单机版软件:直接在单个计算机上安装并运行的软件。这类软件的测试较简单,不需要考虑网络传输。,软件的分类,C/S(客户/服务器)结构软件:这种软件是基于局域网或互联网的。 C/S结构软件过去比较流行,但是不便于升级和维护(升级时需要重新安装一个客户端),现在逐渐被B/S结构软件所取代。 B/S(浏览器/服务器)结构软件。这种软件同样是基于局域网或互联网的,它与C/S结构软件的主要区别在于不需要安装客户端,只需有IE等浏览器即可。 B/S结构软件是现在软件的主流,也是我们测试的重点。,软件的分类,按照用户划分 产品软件:目标用户是大众用户,而不是
7、某一特殊群体。测试这类软件相对来说比较麻烦,需要考虑硬件和软件的兼容性测试。 项目软件:目标用户是具体的用户,而不是千家万户。国内80以上的软件都属于项目软件。这也是我们测试的重点。 按照开发的规模划分 小型:10人以下, 14个月(开发时间) 中型:10100人, 1年以下 大型:100人以上, 1年以上,1.2 软件开发过程的特性,1.2.1 软件的生命周期 1.2.2 软件开发的基本过程,1.2.1 软件的生命周期,软件生命周期是指软件从概念形成开始,经过开发、使用和维护,直到最终被废弃的整个过程。 软件生命周期一般包括:软件定义、软件开发以及软件使用和维护3部分。,图1-1 软件生命周
8、期的阶段划分,1.2.1 软件的生命周期,软件的定义包括: 问题定义:通过对系统实际用户和使用部门负责人的访问调查,明确要解决的问题的性质、工程目标和规模 可行性分析:了解用户的要求及实现环境,从技术、经济和社会等多个方面研究并论证软件系统的可行性 需求分析:确定所要开发软件的功能需求、性能需求和运行环境约束,编制软件需求规格说明、确认软件系统的测试准则,1.2.1 软件的生命周期,2. 软件开发:按照需求规格说明的要求,从抽象到具体,逐步生成软件的过程。一般包括: 设计:又可分为:总体设计(概要设计)和详细设计。总体设计主要是设计软件的结构,确定软件的模块构成及模块之间的关系。详细设计是把解
9、决方案具体化,设计出程序的详细规格说明,并给出细节信息。 编码:将详细设计文档翻译成高级编程语言的源程序 测试:通过测试与调试,使软件达到预期的要求 3. 软件使用与维护:将通过测试后的软件安装在用户确定的运行环境中,移交给用户使用,并在使用过程中负责软件修改和对软件需求变化的维护!,1.2.2 软件开发过程,图1-2 软件开发过程,软件开发过程,需求分析: 根据客户的要求,清楚了解客户需求中的产品功能、特性、性能、界面和具体规格等,然后进行分析,确定软件产品所能达到的目标。这一阶段结束时,应提交软件需求规格说明(SRS)文档 设计: 根据需求分析的结果,考虑如何在逻辑、程序上去实现所定义的产
10、品功能、特性等,可以分为概要设计和详细设计,也可分为数据结构设计、软件体系结构设计、应用接口设计、模块设计、界面设计等。设计阶段生成设计文档,该文档将作为后续阶段工作的输入。,软件开发过程(续),编程: 将设计转换成计算机可执行的编程语言代码。这一阶段的输出是软件的源代码,可作为测试和维护阶段的输入 测试: 对设计、编程进行验证和用户需求确认的过程。测试阶段的输出是测试报告,记录测试中发现的错误。 维护:维持软件运行,修改软件缺陷、增强已有功能、增加新功能、升级等。,软件测试,实践证明:对软件进行充分的测试才能够有效的保证软件质量,对软件产品进行充分测试,找出其中的缺陷(Bug),并进行修复(
11、Fix)。,,,软件测试成本占有开发成本的近一半,1.3软件测试的含义,软件的质量就是软件的生命,为了保证软件的质量,人们在长期的开发过程中积累了许多经验并形成了许多行之有效的方法。但是借助这些方法,我们只能尽量减少软件中的错误和不足,却不能完全避免所有的错误。 如果把所开发出来的软件看作一个企业生产的产品,那么软件测试就相当于该企业的质量检测部分。简单地说,我们在编写完一段代码之后,检查其是否如我们所预期的那样运行,这个活动就可以看作是一种软件测试工作。新的测试理论、测试方法、测试技术手段在不断涌出,软件测试机构和组织也在迅速产生和发展,由此软件测试技术职业也同步完善和健全起来。,1.3.1
12、软件测试的定义,Myers曾对软件测试下过如下定义:“软件测试就是为了发现错误而执行程序或系统的过程” 。这个定义有不完善的地方,如: 测试文档属于软件测试,但它不一定需要执行程序 我按照用户需求测试了实际的系统,却一个Bug也没有发现。那么,我的测试工作算不算测试呢?当然算的,因为我至少证明了该系统基本符合用户需求。,,软件测试的定义,上面定义把软件测试的目的和手段搞混了。 发现错误仅仅试软件测试的手段而已。 软件测试的最终目的是检验实际的软件系统是否符合用户需求,测试不只是为了发现错误。 当然,上面定义在当时环境下还说得通,因为那时对用户需求的认识比较模糊,测试仅仅是编码后的一个阶段,测试
13、的主要工作也就是用来发现错误。,,软件测试的定义,标准定义:使用人工或自动手段,来运行或测试某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。1983,IEEE软件工程标准术语该定义明确指出:软件测试的目的是为了检验软件系统是否满足需求。它再也不是一个一次性的、只是开发后期的活动,而是与整个开发流程融合成一体。 此外,还有Bill Hetzel, 1983,他将测试的定义:“评价一个程序和系统的特性或能力,并判断它是否达到预期的结果,软件测试就是以此为目的的任何行为”,,软件测试的定义,从软件测试的定义我们可以得出:软件测试的目的是通过科学的测试方法,找
14、出软件中存在的缺陷,最终得到一个高质量的软件产品,那么确保用户满意将是我们的服务宗旨,如何找出更多的软件缺陷,是我们的工作重点。所以,我们要从客户的角度出发,按照正确的业务流程尽最大可能去模拟用户的行为习惯,找出产品中缺陷。在此过程中应以为基本依据,结合软件产品的设计文档,以及项目经验设计高效的测试用例,只有这样才能达到我们测试的目的 从广义上讲,软件测试是指软件产品生命周期内所有检查、评审和确认的活动。如:设计评审、文档审查、单元测试、集成测试、系统测试、验收测试等。 从狭义上讲,软件测试是对软件产品质量的检验和评价。它一方面检查、揭露软件产品质量中存在的质量问题,同时又需对产品质量进行客观
15、的评价并提出改进意见。,1.3.2软件测试的目的,软件测试的目的 基于不同的立场,存在着两种完全不同的测试目的。 从用户的角度出发,测试的目的就在于在软件投入运行之前,尽可能地多发现软件中的错误以考虑是否可以接受该产品。验证该软件已正确地实现了用户的要求,确立人们对软件质量的信心 从软件开发者的角度出发,软件测试是对软件规格说明、设计和编码的最后复审,是软件质量保证的关键步骤。 综上所述,软件测试的目的有以下3点: 测试是程序的执行过程,目的在于发现错误,而不是证明程序的正确性。 一个好的测试用例在于可以发现还未曾发现的错误。 一个成功的测试是发现了至今还没有发现的错误。,1.4软件缺陷(Bu
16、g),我们常将软件测试活动中寻找软件缺陷的过程称为找Bug 今天的计算机的Bug之多难以令人置信。例如,微软的Windows98操作系统改正了Windows95里面5000多个Bug!全世界有数千亿个Bug在计算机中飞来飞去! 计算机含有这么多Bug有一个技术原因,就是软件越来越庞大复杂。 软件Bug是指:软件(包括程序和文档)中不符合用户需求的问题。 这里的软件Bug意思相当于我们的软件缺陷,,软件缺陷案例,人们常常不把软件当回事,没有真正意识到它已经深入渗透到我们的日常生活中,软件在电子信息领域里无处不在。现在有许多人如果一天不上网查看电子邮件,简直就没法过下去。我们已经离不开24小时包裹
17、投递服务、长途电话服务和最先进的医疗服务了。 然而软件是由人编写开发的,是一种逻辑思维的产品,尽管现在软件开发者采取了一系列有效措施,不断地提高软件开发质量,但仍然无法完全避免软件(产品)会存在各种各样的缺陷。软件中的缺陷有时会造成相当严重的损失和灾难! 下面用4个软件缺陷的案例来说明!,软件缺陷案例,(1)迪斯尼的狮子王游戏软件缺陷。 1994年秋天,迪斯尼公司发布了第一个面向儿童的多媒体光盘游戏狮子王动画故事书(The Lion King Animated Storybook)。尽管已经有许多其他公司在儿童游戏市场上运作多年,但是这次是迪斯尼公司首次进军这个市场,所以进行了大量促销宣传。结
18、果,销售额非常可观,该游戏成为孩子们那年节假日的“必买游戏”。然而后来却飞来横祸。12月26日,圣诞节的后一天,迪斯尼公司的客户支持电话开始响个不停。很快,电话支持技术员们就淹没在来自于愤怒的家长并伴随着玩不成游戏的孩子们哭叫的电话之中。报纸和电视新闻进行了大量的报道。 后来证实,迪斯尼公司未能在软件上对市前将投入使用的许多不同类型的PC机型进行兼容性测试。该软件在极少数系统中工作正常-例如在迪斯尼程序员用来开发游戏的系统中但在大多数公众使用的系统中却不能运行。,软件缺陷案例,(2)美国航天局火星登陆探测器事故 1999年12月3日,美国航天局的火星极地登陆者号探测器试图在火星表面着陆时失踪。
19、 从理论上看,登陆的计划是这样的:在飞船降落到火星的过程中,打开降落伞减缓飞船的下降速度。降落伞打开后的几秒钟内, 飞船的3条腿将迅速撑开,并在预定地点着陆。当飞船离地面1800米时,它将丢弃降落伞,点燃着陆推进器,缓缓地降落到地面。 美国航天局为了省钱,简化了确定何时关闭着陆推进器的装置。为了替代其他太空船上使用的贵重雷达,他们在飞船的脚上装了一个廉价的触点开关,通过在计算机中设置一个数据位来关闭燃料。很简单,飞船的脚不“着地”,引擎就会点火。,软件缺陷案例,遗憾的是,故障评估委员会在事后的测试中发现,当飞船的脚迅速撑开准备着陆时,机械震动在大多数情况下也会触发着陆开关,进而会设置一个的错误
20、数据位。这样飞船开始着陆时,计算机极有可能关闭着陆推进器,这样飞船开始着陆时,计算机极有可能关闭推进器,而火星登陆飞船下坠1800米之后冲向地面,必然会撞成碎片。 结果是灾难性的,但背后的原因却很简单。登陆飞船经过了多个小组测试。其中一个小组测试飞船的脚着落过程,但不检查那个关键的数据位,因为那不是这个小组负责的范围;另一个小组测试着陆过程的其他部分。但这个小组总是在开始测试前重置计算机,清除数据位。双方本身工作都没有什么问题,就是没有没有合在一起进行集成测试,后一个小组从来没有注意到数据位已经被错误设定,最终导致了灾难性事故的发生。,软件缺陷案例,(3) 英特尔奔腾浮点除法缺陷 在计算机的“
21、计算器”程序中输入以下算式:(4195835/3145727)*3145727-4195835 如果答案是0,就说明计算机浮点运算没有问题。如果得出别的结果,就表示计算机浮点除法存在软件缺陷。英特尔为此缺陷拿出4亿多美元来支付更换芯片的费用! 1994年10月30日,弗吉利亚州Lynchburg学院的Thomas R .Nicely博士在他的一个实验中,用奔腾PC机解决一个除法问题时,记录了一个想不到的结果,得出了“错误”的结论。他把发现的问题放到因特网上,随后引发了一场风暴,成千上万的人发现了同样的问题,以及其他得出错误结果的情形。万幸的是,这种情况很少见,仅仅在进行精度要求很高的数学、科学
22、和工程计算中才会导致错误。大多数用来进行税务处理和商务应用的用户根本不会遇到此类问题。 事实上,英特尔软件测试工程师在芯片发布之前进行内部测试时已经发现了这个问题。但管理层认为这没有严重到一定要修正,甚至需要公开的程度。 这个事故不仅说明软件缺陷所带来的问题,更重要的是,发现软件缺陷后,要有正确对待软件缺陷的态度!,,软件缺陷案例,(4)北京奥运门票被迫暂停销售 2007年10月9日上午9点,北京奥运会门票向境内公众的第二阶段预售正式启动。公众纷纷抢在第一时间订票,致使票务官网压力激增,承受了超过自身设计容量的8倍的流量,导致系统瘫痪。 为此次门票销售提供技术系统平台的是北京歌华特玛捷票务有限
23、公司。该票务官网设计的流量容量是每小时100万次,但瞬间承受了每小时800万次的流量压力,访问数量过大造成网络堵塞,使系统在启动后不久就出现了处理能力不足的问题。 Web压力测试可以有效地测试一些web服务器的运行状态和相应时间等,对于WEb服务器的承受力测试是个非常好的手法!,软件缺陷,IEEE (1983) 729 软件缺陷一个标准的定义:从产品内部看,软件缺陷是软件产品开发或维护过程中所存在的错误、毛病等各种问题;从外部看,软件缺陷是系统所需要实现的某种功能的失效或违背。,软件缺陷的主要类型/现象:功能、特性没有实现或部分实现设计不合理,存在缺陷实际结果和预期结果不一致运行出错,包括运行
24、中断、系统崩溃、界面混乱数据结果不正确、精度不够用户不能接受的其他问题,如存取时间过长、界面不美观,,软件缺陷的定义,,软件缺陷即计算机系统或程序中存在的任何一种破坏正常运行能力的问题、错误,或者隐藏的功能缺陷、瑕疵。缺陷会导致软件产品在某种程度上不能满足用户的需求。对于软件缺陷的精确定义,通常有以下5条: 软件未达到产品说明书要求的功能 软件出现了产品说明书指明不会出现的错误 软件功能超出了产品说明书规定的功能 软件未实现产品说明书虽未明确指出但应该实现的目标 软件难以理解,不易使用,运行缓慢或者最终用户认为使用效果不好,软件缺陷,为了更好地理解每一条规则,我们以计算器为例进行说明。 计算器
25、的产品说明书声称它能够准确无误地进行加、减、乘、除运算。当你拿到计算器后,按下()键,结果什么反应也没有,根据第条规则,这是一个缺陷。假如得到错误答案,根据第条规则,这同样是一个缺陷。 若产品说明书声称计算器永远不会崩溃、锁死或者停止反应。当你任意敲键盘,计算器停止接受输入,根据第条规则,这是一个缺陷。 若用计算器进行测试,发现除了加、减、乘、除之外它还可以求平方根,说明书中从没提到这一功能,根据第条规则,这是软件缺陷。软件实现了产品说明书未提到的功能 若在测试计算器时,发现电池没电会导致计算不正确,但产品说明书未指出这个问题。根据第4条规则,这是个缺陷 第5条规则是全面的。如果软件测试员发现
26、某些地方不对劲,无论什么原因,都要认定为缺陷。如“”键布置的位置使其极其不好按;或在明亮光下显示屏难以看清。根据第条规则,这些都是缺陷。,软件缺陷属性,软件缺陷属性包括缺陷标识、缺陷症状、缺陷类型、缺陷严重程度等。 缺陷标识:是标记某个缺陷的唯一的表示,可以使用数字序号表示。 缺陷症状:包括界面缺陷、不友好行为、非法输入、文档缺陷、无效操作、数据错误、功能设计缺陷、系统崩溃、意外行为等 缺陷类型:是根据缺陷的自然属性划分缺陷种类。见软件缺陷类型列表:,软件缺陷属性,4. 缺陷严重程度:是指因缺陷引起的故障对软件产品的影响程度,所谓“严重性”我指的是在测试条件下,一个错误在系统中的绝对影响。见软
27、件缺陷严重等级列表:,软件缺陷类型列表,软件缺陷状态,软件缺陷除了严重性之外,还存在反映软件缺陷处于一种什么样的状态,便于跟踪和管理某个产品的缺陷,可以定义不同的bug状态。 激活状态:问题还没有解决,测试人员新报的bug,或验证后bug仍然存在。 已修正状态:开发人员针对所存在的缺陷,修改程序,认为已解决问题,或通过单元测试。 关闭或非激活状态:测试人员验证已经修正的bug后,确认bug不存在以后的状态。,软件缺陷产生的原因,5软件缺陷的原因 软件本身 文档错误 数据考虑不周全引起强度或负载问题 对边界考虑不周全,漏掉某几个边界条件造成的错误 对一些实时应用系统,保证精确的时间同步,否则容易
28、引起时间上不协调、不一致性带来的问题 没有考虑系统崩溃后的安全性、可靠性的隐患 硬件或系统软件上存在的错误 软件开发标准或过程上的错误,软件缺陷产生的原因,2 技术问题 算法错误 语法错误 计算的精度问题 系统接口不合理,造成系统性能问题 接口参数不匹配,导致模块集成出问题 3 团队工作 系统分析时对客户的需求不是十分清楚,或者与用户沟通存在一些困难 不同阶段的开发人员相互理解不一致,软件设计的需求分析结果的理解偏差,编程人员对系统设计规格说明书中某些内容重视不够,或存在误解 设计或编程上的一些假定或依赖性,没有得到充分地沟通。,,软件缺陷在不同阶段的分布,在真正的程序测试之前,通过审查、评审
29、会可以发现更多的缺陷。 规格说明书的缺陷在需求分析审查、设计、编码、测试等过程中会逐步发现,而不能仅在需求分析一个阶段发现,,缺陷成本,,软件缺陷造成的修复费用随着时间的推移呈指数级增长!,软件缺陷,,6软件缺陷的组成我们知道软件缺陷是由很多原因造成的,如果把它们 按需求分析结果规格说明书,系统设计结果,编程的代码等归类起来, 比较后发现,结果规格说明书是软件缺陷出现最多的地方,见下图。,软件缺陷,为什么产品规格说明书是软件缺陷最多的地方?其主要原因是: 由于软件产品的设计、开发的特性的描述不够清晰! 软件开发人员与用户沟通存在较大困难,开发人员对要开发的产品功能理解与用户不一致! 需求变化的
30、不一致性 对规格说明书不够重视! 没有整个开发队伍中进行充分的沟通!,软件缺陷的分类,按性质可将软件缺陷分为5类: 功能缺陷:规格说明缺陷,实现的功能与用户要求不一致等 系统缺陷:外部、内部接口缺陷,硬件结构缺陷、OS缺陷等 加工缺陷:算术和操作缺陷、控制缺陷、静态逻辑缺陷等 数据缺陷:动态、静态数据缺陷、数据结构缺陷等 代码缺陷: 语法缺陷等 按软件生命周期不同阶段可将软件缺陷分类为: 问题定义(需求分析)缺陷。分析员研究用户的要求后所编写的文档中出现的缺陷 规格说明缺陷。规格说明说明与问题定义不一致所产生的缺陷 设计缺陷。系统设计与需求规格说明中的功能说明不相符。 编码缺陷。,与缺陷相关的
31、几个概念,软件错误(error):在软件生命周期内出现的不可接受的人为错误; 软件缺陷(bug):是软件错误的结果,指软件产品预期属性的偏离现象; 对产品规格说明的偏离。如:规格说明规定了a+b=c,而软件产品实际上做的不是这样。 对客户(customer)/用户(user)期望的偏离,即用户要求未体现在产品中(可能是规格说明有疏漏,也可能是实现中的问题。) 软件失效(failure):当缺陷执行时会发生失效,是指软件运行时产生的不可接受的外部行为结果; 软件故障(fault):是指软件运行过程中产生的不可接受的内部状态。 常见的软件错误有:软件需求错误,功能和性能错误,软件结构错误,数据错误
32、,软件实现和编码错误,软件集成错误,软件系统结构错误,测试定义和测试执行错误。,1.4测试用例(Test Case),测试用例就是为了高效率地发现软件缺陷而精心设计的少量测试数据。好的测试用例应该能发现尚未发现的软件缺陷。通常在测试设计阶段就要进行测试用例的设计! 测试用例是为某个特殊目标而编制的一组测试输入、执行条件、预期结果,用于核实是否满足某个特定软件的需求。 IEEE610.12给出测试用例的定义如下: 测试用例是一组输入(运行前提条件)和为某特定目标而生成的预期结果及与之相关的测试规程的集合,或称为为有效地发现缺陷的最小测试执行单元 测试用例是一个文档,详细说明测试的输入、期望输出和
33、为一测试项所准备的一组执行条件,,测试用例(Test Case),测试用例指的是:在测试执行之前设计一套详细的测试方案,包括:测试环境、测试步骤、测试数据和测试结果。 可用一个简单等式来表示: 测试用例输入输出测试环境 “输入”包括测试数据和操作步骤 “输出”指的是期望结果 “测试环境”指的是系统环境设置,测试环境,测试软件的第一件事就是搭建软件的测试环境 软件测试环境就是软件运行的平台: 测试环境软件硬件网络 硬件:主要包括PC机、笔记本、服务器、各种PDA终端 软件:这里主要指软件运行的操作系统 网络:主要针对的是C/S结构和B/S结构的软件 一个合格测试工程师,不仅要熟悉软件知识,还要了
34、解硬件和网络的相关知识。,,怎么搭建测试环境,搭建测试环境的几个要点: 真实 项目软件:参考系统的最终使用环境。例如:搭建测试环境时就要按照上面的配置来进行. 产品软件:这个相对来说比较复杂,工作量也大。比如,现在要测试微软Word2000,怎样来搭建测试环境呢? 由于最终用户使用什么样的系统都有可能,如:,,怎么搭建测试环境,2. 干净:测试环境尽量不要安装其他与被测软件无关的软件一般我们测试一款软件时,都要求在一个刚刚装好操作系统的机器上测试. 3. 无毒:测试环境不会中毒 4. 独立:测试环境和开发环境独立,,软件环境的分类,软件开发环境:软件在开发过程中使用的环境,一般包括:VB 、V
35、C等一些开发工具 软件生产环境:最终用户使用的环境 软件测试环境要与软件生产运行环境保持一致,要从开发环境中独立出来。,,163邮箱登录测试用例,上面只写了3条用例,其实如果全面考虑的话,可写出20条以上用例,,测试用例模板,常用测试模板有两种:Excel模板和Word模板,以Excel模板的应用更普遍些! 两种模板比较 Excel模板:每个用例占一行,便于集中管理和维护,一般适合写功能用例 Word模板:每个用例独占一页,描述的较清楚,但比较分散,适合写性能用例,,测试用例模板(Excel模板),,测试用例模板(Excel模板),项目/软件:需要填写项目或软件的名称 程序版本:该软件目前的版
36、本号 测试环境:测试的硬件/软件和网络环境 编制人:略 编制时间:略 功能模块:被测模块的名称 功能特性:被测模块的主要功能 测试目的:测试所期望达到的目标 预置条件:在测试该模块之前需要做哪些前期工作,,测试用例模板(Excel模板),参考信息:测试该模块需要参考的需求文档的章节 特殊规程说明:相当于备注 用例编号:每个用例有唯一编号, 一般为拼音缩写+数字, 比如:DL001表示登录模块的第一个测试用例 测试步骤:操作描述 输入数据:测试数据 预期结果:程序应输出的结果 测试结果:程序实际输出的结果,,,测试用例模版(WORD模版),测试用例的设计原则,测试用例除了应该符合基本的测试用例编
37、写规范,还要遵守以下几条基本设计原则: (1)保证测试用例的明确性。 测试人员要尽量避免测试用例存在含糊的因素,否则会影响测试工作的进行,影响测试结果的准确性。清晰的测试用例会使测试人员在测试过程中不会出现模棱两可的测试结果。在测试过程中,测试用例的测试结果是唯一的,即通过、没通过或未进行测试。如果测试没有通过,一般会生成相应的测试错误报告;如果测试没有进行,也会生成相应的原因说明报告,如测试用例本身具有错误性、测试用例的不适用性等等。 例如,测试用例这样描述: 用户正确操作,系统正常运行; 用户进行非法操作,系统不能正常运行。 在这里,测试用例没有具体说明什么是正确的操作,什么是非法的操作。
38、另外,从测试用例描述中也无法知道什么是系统的正常或不正常的运行状态。这就必然导致测试人员对测试用例的不确定理解,从而引发测试中的错误问题。,测试用例的设计原则,(2)保证测试用例的代表性。尽量将具有相似功能的测试用例抽象合并。这样,每一个测试用例都具有代表性,可以测试一类或一系列的系统功能。 (3)保证测试用例的简洁性。冗长和复杂的测试用例是不应该出现的,因为这样的用例可读性差、不利于测试人员理解和操作。简洁的测试用例可以让测试过程目的明确,让测试结果具有唯一性。,编写测试用例的注意事项,为什么要写测试用例 便于团队交流 便于重复测试 便于跟踪统计 便于用户自测 什么时候写用例 通常在测试设计
39、阶段来写测试用例,即在需求规格说明书和测试计划都已完成之后 谁来写测试用例 一般测试用例是由测试设计人员来编写,由测试执行人员来执行 根据什么写测试用例 编写测试用例的唯一依据是用户需求,具体的参考资料是和软件原型.原型一般指没有嵌入全部源代码的软件界面.,,软件质量的内涵,软件质量是客户满意度的体现,客户 + 质 + 量?,,1.5软件质量 (Quality),IEEE 软件质量:软件产品具有满足规定的和潜在用户需求的能力的特性与特性总和(ISO 8492) 软件质量:软件产品满足使用要求的程度 软件质量是一个复杂的多层面概念: 从用户角度出发,质量是对需求的满足。软件需求是度量软件质量的基
40、础。 从软件产品角度出发,质量是软件的内在特征。 从软件开发过程出发,质量是对过程规范的符合。,,软件质量,通常,软件质量由以下几个方面进行评价: 软件需求是衡量软件质量的基础,不符合需求的软件就不具备质量。设计的软件应在功能、性能等方面都符合要求,并能可靠地运行。 软件结构良好、易读、易于理解,并易于修改、维护 软件系统具有友好的用户界面,便于用户使用 软件生命周期中各阶段的文档齐全、规范,高质量软件标准体系,产品质量: 是人们实践产物的属性和行为,是可以认识,可以科学地描述的。并且可以通过一些方法和人类活动,来改进质量.质量模型: McCall 模型, Boehm 模型, ISO 9126
41、 模型 过程质量: 软件能力成熟度模型 CMM ( Capability Maturity Model).国际标准过程模型 ISO 9000软件过程改进和能力决断 SPICE ( Software Process Improvement and Capability dEtermination) 在商业过程中有关的质量内容: 培训、成品制作、宣传、发布日起、客户、风险、成本、业务等,,软件质量标准,新版GB/T 16260标准在总标题软件工程 产品质量下共分为4个部分: 质量模型:GB/T 16260.1 外部度量: GB/T 16260.2 内部度量: GB/T 16260.3 使用质量的度
42、量: GB/T 16260.4 GB/T 16260.1:质量模型部分描述了关于软件产品质量的两部分模型: 内部质量与外部质量的模型 使用质量的模型。,外部质量和内部质量模型,第一个模型由6个质量特性和21个子特性组成。 当用软件本身的内部属性(如软件的规模、复杂性或模块间的独立性等)来刻画软件产品质量时,所体现的是内部质量; 而当软件在特定环境下运行时所表现的行为则代表了产品的外部质量。,外部质量和内部质量模型,1.5.1质量管理,质量管理,制定计划,需求评审,设计审查,程序代码审查,测试用例审查,测试,跟踪,监督,质量保证,质量控制,质量管理,质量管理是指以组织为质量中心,以企业全员参与为
43、基础,为追求客户满意和组织所有受益者满意而建立和形成的一整套质量方针、目标和体系。 软件质量管理包括两个核心过程: 质量保证(QA):评估整个项目满足相关的质量要求,目标是预防缺陷和错误的发生。 质量控制(QC):监控是否符合相应的质量标准、满足项目管理者以及整个项目组的要求,用于查找缺陷和错误。,质量保证和质量控制,什么是QA? QA是一组计划好的系统化预防活动,用来监控和改善软件开发过程。QA活动对软件产品在多大程度上符合预定义标准作出评价,并为软件开发定义规程。这里所说的规程由一系列活动组成,设计这些活动的目标在于预防软件缺陷 什么是QC? QC是将产品质量与指定标准进行比较的过程,若质
44、量与标准不符,则采取相应的措施。QC面向缺陷检查,而非预防缺陷,质量保证和质量控制,QA面向过程,QC面向产品。 QA着重于通过对软件开发过程持续的监管和改进来防范缺陷,QC则着重于对产品进行缺陷检查。 换言之,QA确保你按正确的方式做正确的事,而QC则确保你所做的结果符合预先的期望,1.5.2软件质量保证的目的,软件质量保证(SQA):是指为了保证软件质量而对软件开发过程和被开发的软件产品进行的有计划、有系统的管理活动。其目的是使软件开发过程对于管理人员来说是可见的。它通过对软件产品和活动进行评审和审计,验证软件是符合标准的。软件质量保证在项目开始时就一起参与建立计划、标准和过程,以使软件项
45、目满足用户要求!,,1.5.3软件质量保证的工作内容,软件质量保证工作有以下几个方面的工作: 参与制定软件质量要求 组织正式评审 软件测试管理 对软件的变更进行控制 对软件的质量进行度量 对软件质量情况及时记录和报告,,软件质量保证的工作内容,软件质量保证和质量管理当前相关的标准有: ISO 9000 系列标准。软件测试人员可以以此系列标准规范、约定软件的开发过程,提高软件产品质量 C软件能力成熟度模型,此为软件行业标准模型。它具体等级划分为5个等级:等级1(初始级),等级2(可重复级),等级3(已定义级),等级4(已管理级),等级5(优化级)。,1.5.3软件开发各阶段SQA的目标,软件质量
46、保证组在项目开始时就一起参与建立计划、标准和过程。软件开发各阶段SQA的目标如下: 需求分析阶段 确保客户所需的系统是可行的 确保客户指定的需求确实能够满足他们的真正要求 避免开发者与客户之间的误解 向客户提供为满足所提出的需求而实际构建的适当的软件系统 软件规格说明书编制阶段 通过建立需求跟踪文档,确保规格说明书与系统需求保持一致 确保规格说明书能适当地改进系统的灵活性、可维护性及性能 确保已经建立了测试策略 确保已经建立了现实的开发进度表,包括预定的评审 确保已经为系统设计了正式的变更规程,,1.5.3软件开发各阶段SQA的目标,3 软件设计阶段 确保已建立用于描述设计的标准,并确保遵循这
47、些标准 确保适当地控制并用文档记录对设计进行的变更 确保在系统设计组建立按照商定的准则得到批准之后才开始编程 确保对设计的评审按照进度进行 编码阶段 确保代码遵循已建立的风格、结构和文档标准 确保代码经过适当测试和集成,同时对编码模块的修改得到适当的标识 查看代码编写是否遵循既定的进度 确保代码评审按照进度进行,1.5.3软件开发各阶段SQA的目标,5 测试阶段 确保测试计划的建立和遵循 确保创建的测试计划能够满足所有系统规格说明书的要求 确保经过测试和返工后的软件与规格说明书保持一致 6 维护阶段 确保代码和文档的一致性 确保对已建立的变更控制过程进行监测,包括将变更集成到软件的产品版本中的过程 确保对代码的修改遵循编码标准,并且要对其进行评审,不要破坏整个代码结构 确保代码评审按照进度进行,,1.5.4软件质量保证与软件测试的关系,软件质量保证与软件测试的关系 软件质量保证与软件测试二者之间既存在包含又存有交叉的关系。软件测试能够找出软件缺陷,确保软件产品满足需求。但是测试不是质量保证,二者并不等同。测试可以查找错误并进行修改,从而提高软件产品的质量。软件质量保证则是避免错误以求高质量,并且还有其他方面的措施以保证质量问题。 从共同点的角度看,软件测试和软件质量保证的目的都是尽力确保软件产品满足需求,从而开发出高质量的软件产品。两个流程都是贯穿整个软件开发生命周期中。,