第3章 软件测试的基本概念 本章学习目标 .了解软件缺陷与软件测试的基本概念 .理解测试计划与测试用例的基本内容 .理解测试策略的概念及基本测试方法 .理解静态测试与动态测试的区别与联系 .掌握黑盒测试与白盒测试的应用场景 .理解人工测试与自动测试的区别与联系 .了解软件测试规范及专业测试人员要求 本章介绍软件缺陷、软件测试,重点介绍软件测试任务、计划、策略、方法等相关概念。 同时,介绍软件的基本测试方法,测试用例的概念及选择,最后分类介绍几种常用的测试 方法,及其区别与联系。 3软件缺陷与软件测试的主要任务 1. 软件开发的任何一个环节都可能影响整个软件的开发质量和开发效率,甚至是毁掉 整个项目。人总会犯错,在需求阶段、设计阶段、编码阶段,不可避免地会发生一些错误, 这些错误会导致软件存在缺陷,所以在软件开发过程中,由于软件本身的特点和目前的开 发模式,软件缺陷是不可避免的。软件一旦有了缺陷,软件质量就无法保证,可能会丧失 用户满意度,软件测试是发现软件中存在缺陷、保证软件质量的主要手段,因此,软件测试 要求测试人员对软件缺陷要有一个深入的认识。 的由来 1Bug . 1. 3 软件缺陷(Defect), 又被称为Bug。Bug是一个英文单词,本意是臭虫、缺陷、损坏、 窃听器 。 、小虫等,现在,人们将在计算机系统和程序中隐藏的未被发现的缺陷或问题统称 为Bug 在计算机领域,流传着一个有趣的故事。20 世纪40 年代,电子计算机的体积非常庞 第3章 / 软件测试的基本概念 / 81 大,数量非常少,造价非常高,主要应用在军事领域。1947年9月9日,美国水上研究中 心使用马克-Ⅱ型计算机进行数据处理,马克-Ⅱ型计算机在运算时,通过继电器开关执行 二进制指令语句,当指令为“1时,(”) 继电器的电磁铁受到激励带电,使得继电器接点闭合接 通,电流即可通过;当指令为“0时,(”) 继电器的电磁铁不受激励,继电器中的弹簧使得接点 断开,电流不能通过。一位为美国海军工作的电脑专家格蕾丝·赫柏对马克-Ⅱ型计算机 设置170000个继电器进行编程后,技术人员进行整机运行,计算机突然停止工作,于是 工作人员爬上去查找原因,发现这台巨大的计算机内部一组继电器的触点之间有一只飞 蛾,显然是由于天气炎热加上机房无空调设备,飞蛾在机房中乱飞,受光和热的吸引,飞到 正要闭合的继电器触点之间,被继电器触点夹住,且被高电压击死,导致电路中断,造成工 作故障。工作人员只需将飞蛾拿掉,计算机便可以恢复正常工作。在报告中,赫柏用胶条 将飞蛾贴在记事本中,如图3-1所示,在上面加了一行注释———“Firstactualcaseofbugbeingfound”。从此,人们把计算机错误称为Bug,将发现Bug并纠正的过程称为Debug。 Bug这个说法一直沿用至今。 图3- 1 Bug的由来 3..软件缺陷概述 12 在日常的软件测试过程中,经常会遇到与软件问题相关的概念,不同的人对问题的称 呼也不相同。比如错误(r)、缺陷(t)、故障(t)、失效(e)等。这些术语都 erodefecfaulfailur 是指软件中存在的一些问题,但是它们的具体含义和定义却有很大不同。 在ANSI982.2标准中对软件的错误、缺陷、故障和失效进行了定义。 错误:是指编写错误的代码,通常是无意中造成的。错误可分为两类,一类是语法错 误(syntaxeror)。在编译语言中,语法错误在代码编译阶段出现,因为该类错误,代码不 能正常编译通过。另一类是逻辑错误(r),指代码的运行逻辑与预期不同,它 logicalero 82\软\件\测\试\与\质\量\保\证\ 与代码的实际执行密切相关,所以不易被发现。可见,软件错误是人为原因所导致的不正 确结果的过程。它可能是程序的内部错误,也可能是文档内的错误,甚至是环境方面的 问题。 缺陷:是指软件与用户需求不一致,无法正确完成软件需求所要求的功能。 故障:是指由于不当使用计算机软件而引起的故障,以及因系统或系统参数设置不 当而出现的故障。软件故障一般是可以恢复的。例如,软件处于执行一个多余循环过程 时,就可以说该软件出现了故障。此时,若无适当的措施(容错)及时处理,便会导致软件 失效。 失效:ISO/CD10303-226 将失效定义为一个组件、设备、子系统或者系统无法(不具 备相应的能力)完成为它设计的任务。 软件错误是一种人为疏忽而造成的错误,最初的软件错误来自软件文档、软件代码 等,如代码中加法写成减法;一个软件错误必定产生一个或多个软件缺陷,如设计缺陷、代 码缺陷等,也就是软件功能与需求不一致;当程序的某些代码存在错误导致程序执行失败 时,也就是一个软件缺陷被激活,便产生一个软件故障,故障分为内部故障和外部故障;同 一个软件缺陷在不同条件下被激活,可能产生不同的软件故障。软件故障如果没有及时 的容错措施加以处理,或者当程序错误太多时,便不可避免地导致软件在功能操作等方面 失效,同一个软件故障在不同条件下也可能产生不同的软件失效。 假如有一段求最大值的函数程序代码,该程序要求输入两个整数,经过程序运算,可 以输出两个整数中最大的一个整数。例如,当输入两个整数3和5时,应该输出5,但是 实际执行代码后,发现程序输出了3,而不是5,与预期结果不同。所以,可以断定该程序 中存在一个缺陷。经过代码检查发现,程序中错误地将X>Y,写成了X