《软件测试》教学课件(6个学时).ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《软件测试》教学课件(6个学时).ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件测试 软件 测试 教学 课件 学时
- 资源描述:
-
1、 软件测试6学时引言-o 据新华社洛杉矶2002年月报道,美国一家研究所公布的调查结果表明,软件错误使美国每年损失高达亿美元。同时指出,如能做好检测工作,即在软件开发的早期发现漏洞并进行弥补每年能给美国企业节省成本亿美元。然而,目前软件中一半以上的错误是在开发的后期或者售后使用中才被发现的。第9章 软件测试1)软件测试的概念2)黑盒测试和白盒测试方法3)单元测试过程4)集成测试,系统测试,验收测试的基本过程5)面向对象的测试概念和方法掌握掌握 理解了解了解要求要求9.1软件测试的概念9.1.1测试的定义n 从广义上讲是指软件产品生存周期内所有的检查、评审和确认活动n 从狭义上讲,软件测试是为了
2、发现错误而执行程序的过程n 软件测试是根据软件开发各阶段的规格说明和程序内部结构而精心设计的一批测试用例,用这些测试用例运行程序,以发现程序错误的过程。o 一个测试用例是一组输入数据及其对应的预期输出结果。测试的工作量o 一般性软件其测试工作量大约占整个开发工作量的40%o 系统软件或关系到人的生命财产安全的重要软件,其测试工作量通常可能达到整个开发工作量的35倍 软件测试的目标o 优秀的测试用例:以最小的代价、在最短的时间内,尽可能多地发现软件中的错误。o 测试并不仅仅是为了要找出错误,通过分析错误产生的原因和错误的分布特征,来帮助评价软件的质量、进一步发现软件的缺陷,同时也有助于设计出更有
3、针对性的测试方法,提高测试效率。测试原则o应该把测试贯穿在整个开发过程之中。事实上从需求分析阶段开始,每个阶段结束之前都要进行阶段审查,目的是尽早发现和纠正错误。o每个测试用例都应该包括测试输入数据和这组数据输入作用下的预期输出结果。在实际操作中可以列出一张电子表格,包括每个测试用例的编号、类型、输入数据、预期输出结果、实际输出结果、出错原因分析。测试原则续o 程序员应该尽量避免检查自己编写的代码。测试工作需要严格的工作作风,程序员在测试自己编写的代码时往往会带有一些倾向性,使得他们工作中常常出现一些疏漏。而且程序员对设计规格说明书的理解错误而引入的错误更是难于发现。测试原则续o 在设计测试用
4、例时,应该包括有效的、期望的输入情况,也要包括无效的和不期望的输入情况。即能够验证程序正常运行的合理输入,也能够验证对异常情况处理的不合理输入数据以及临界数据输入。o 在测试时,人们常常过多地考虑合法和期望的输入条件,以检查程序是否做了它应该做的事情,而忽视了不合法的和预想不到的输入条件。o 用户在使用系统时,输入一些错误指令和参数是经常发生的,如果软件遇到这种情况不能做出适当的反应,给出相应的提示信息,可能会误导用户,甚至会造成严重损失。测试原则续o 软件中遗留的错误数量与已经发现的错误数量成正比。根据这个规律对测试中发现错误成堆的模块更要仔细测试。例如,在某个著名的操作系统中,44%的错误
5、仅与4%的模块有关。o 回归测试的关联性要特别引起注意,修改一个错误而引起更多错误的现象并不少见。测试原则续o 严格执行测试计划。在测试之前应该有明确的测试计划,内容包括:要测试的软件功能和内容、测试用例和预期结果、测试的进度安排、需要的工具和资源、测试控制方式和过程等。o 做好测试记录,为统计和维护提供基础数据测试的层次和类型层次o 单元测试:针对模块代码的测试,测试的粒度最小o 集成测试:把经过单元测试的模块组合在一起,重点测试模块之间的接口。o 系统测试:系统集成后,对整个系统包括硬件等环境的综合测试。o 验收测试:以用户为主,对软件功能、性能进行全面测试。验证软件是否满足需求规格说明书
6、的要求,检查所有的配置成份是否齐全。测试的层次和类型类型(续)o 静态测试:主要通过代码审查和静态分析,检查源代码中存在的问题。o 过程:代码审查由有经验的程序设计人员根据软件详细设计说明书,阅读程序来发现源程序中类型、引用、参数传递、表达式等不必运行程序就能够发现的错误。o 特点:这种方法不需要专门的测试工具和设备,一旦发现错误就能定位,但是此方法具有一定的局限性。静态分析主要对程序进行控制流分析、数据流分析、接口分析和表达式分析等 测试的层次和类型类型(续)o 动态测试:在指定的环境上运行被测程序,输入测试数据,获得测试结果,将获得的测试结果与预期的结果进行比较,发现程序的错误。o 过程:
7、设计测试用例,运行被测程序。o 特点:需要有程序的运行环境,必要时要编写测试驱动程序和桩程序。测试的层次和类型类型(续)o 功能测试:验证软件是否提供了预期服务。o 过程:根据软件需求规格说明书设计测试用例,并按照测试用例的要求运行被测程序。o 特点:将被测程序看成是一个黑盒子,着重验证软件功能和性能的正确性,其典型测试方法包括价类划分、边值分析、因果分析、猜测错误等。测试的层次和类型类型(续)o 结构测试:对程序结构的检查,也称为白盒测试。采用这种测试方法,测试者需要了解被测程序的内部结构。白盒测试通常根据覆盖准则设计测试用例,有语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖和条件组合覆盖等。
8、测试的层次和类型类型(续)o 用户界面测试:对软件提供的用户界面、系统接口的测试。验证其正确性、可操作性、可理解性。o 性能测试:测试程序的响应时间、并发性、吞吐量、处理精度。o 负载测试:测试一个软件在重负荷下的运行情况。例如,测试一个 Web应用软件在大量的负荷下,何时系统的响应会退化或失败o 强度测试:在异乎寻常的重载下系统运行情况,如某个动作或输入的不断重复;大量数据的输入;对一个数据库应用系统大量的复杂查询等。测试的层次和类型类型(续)o 安全性测试:检查系统对非法侵入的防范能力。测试人员假扮非法入侵者,采用各种办法试图突破防线。例如,截取或破译口令、破坏系统的保护机制、故意导致系统
9、失败、试图通过浏览非保密数据,推导所需信息等o 网络通信测试:软件中的网络通信的速度、容量、安全性、延迟处理等方面的测试。测试的层次和类型类型(续)o 恢复测试:恢复测试主要检查系统的容错能力。当系统出错时,能否在指定时间内修正错误并重新启动系统。o 恢复测试首先要采用各种办法强迫系统失败,然后验证系统是否能尽快恢复。对于自动恢复需验证重新初始化、数据恢复、重新启动等机制的正确性;对于人工干预的恢复系统,还需估测平均修复时间,确定其是否在可接受的范围内。软件历史上最严重的10大bug之一o 1962年年7月月28日,日,Mariner I空间探测空间探测器事件。器事件。Mariner 1航空软
10、件的bug导致火箭在发射时偏离了其的预期轨道。任务控制器在大西洋上空将整个火箭摧毁。在对这起事故进行调查中发现,使用铅笔撰写下的一个公式被不正确的录入到计算机代码中,直接导致计算机错误的计算了火箭的运行轨道。软件历史上最严重的10大bug之二o 1982年年苏联的石油管道事件。苏联的石油管道事件。根据CIA(美国中央情报局)的陈述,为其工作的间谍们在苏联购买的用来控制跨西伯利亚石油管道的加拿大计算机系统中种下了一个bug。当时是苏联通过秘密购买或者偷窃美国的敏感技术来获取到了该系统。据说CIA发现了这个存在bug的程序,决定对可以通过苏联人检查的设备做一个让苏联人事与愿违的破坏,使得该设备一旦
11、运行起来将会失败。该事件的结果据说在历史上造成了最大的非原子破坏。软件历史上最严重的10大bug之三o1985-1987年间年间-Therac-25医疗加速器事件。医疗加速器事件。一个放射疗法的设备故障造成了在几个医疗设备中发出了致命的射线。Therac-25是一个在以前设计的基础上改进的治疗设备,该设备可能会发出两种射线:或者是一个低功耗的电子束或者是X射线。Therac-25的X射线是通过猛烈的高能电子束撞击到一块位于电子枪和患者之间的金属目标而产生的。第二项改进是对于更旧的Therac-20电动保险联动装置采取软件控制的方式代替,做这项改进是因为软件被认为更加可靠。然而工程师所不知道的是
12、20和25型号都是建立在有一个没有经过正规培训的程序员所开发的操作系统上的。由于这个不易察觉的叫做race condition,的bug,一个快速的打字员很可能会很偶然的配置Therac-25从而导致电子束将会在高能模式下启动。但是强烈的X射线偏移了目标。最后直接导致了五名患者死亡;其余患者受到了严重伤害。软件历史上最严重的10大bug之四o 1988年年-伯克莱伯克莱UNIX操作系统操作系统finger守护进程守护进程缓冲器溢出事件。缓冲器溢出事件。第一个网络蠕虫,莫里斯蠕虫利用缓冲器溢出在一天之内感染了2000到6000台计算机,起因是一个标准输入输出库函数gets(),原来设计为从网上获
13、取一段文本,但遗憾的是,gets()函数没有规定输入文本的长度。过长的文本导致蠕虫入侵任何接入的计算机。程序员们试图用工作码来取代gets()函数的功能,但是他们拒绝从C语言的标准输入输出库中删除它,直到今天还保留着。软件历史上最严重的10大bug之五o 1988-1996年间年间-Kerberos随机数字发随机数字发生器事件。生器事件。Kerberos安全系统的作者忽略了产生真正的程序随机码时使用恰当的种子,导致长达八年依赖Kerberos验证的计算机可被轻易入侵。如果漏洞不被利用,就一直不会被发现。软件历史上最严重的10大bug之六o 1990年年1月月15日,日,AT&T网络瘫痪。网络瘫
14、痪。利用一个新发布软件的bug可以控制AT&T#4ESS远程交换机,在邻近计算机之间发送信息引起大型计算机瘫痪,机器恢复时发送信息又导致邻近计算机当机。一天纽约的一台交换机当机并且重启,引起它邻近交换机瘫痪,由此及彼,一个连着一个,很快,114台交换机每六秒当机重启一次,六万人九小时内不能打长途电话。当时的解决方式:工程师重装了软件以前的版本。软件历史上最严重的10大bug之七o 1993年年-Intel奔腾浮点指数除法事件。奔腾浮点指数除法事件。一个硅片上的错误导致Intel高性能奔腾芯片在一段范围内计算浮点指数除法时发生错误。例如4195835.0/3145727.0产生的是1.33374
15、而不是1.33382,产生了0.006偏差。尽管该bug仅仅影响了几个用户,然而他却成了整个公众的噩梦。估计流通中的三百万到五百万的芯片存在着这样的缺陷,起初Intel仅仅为那些能够证明他们确实有高精度计算需求的用户提供了取代奔腾的芯片。最后,Intel公司只好妥协为任何投诉的人提供替代芯片。该bug给Intel最终造成了4亿7千5百万损失。软件历史上最严重的10大bug之八o 1995/1996年年致命的致命的ping命令。命令。由于缺乏对IP段组装代码的完整性检查和错误的执行使得有可能通过从互联网的任意位置发送恶意的”ping”数据报而攻击多个操作系统。大部分受明显影响的是运行Windwo
16、s的计算机,当他们接受到数据报后,他们就会死锁同时显示所谓的“蓝屏死机”。但是攻击同时也影响很多Macintosh和Unix系统。软件历史上最严重的10大bug之九o 1996年年6月月4号号501航天飞机爆炸事件。航天飞机爆炸事件。对于Ariane 4火箭的工作代码在Ariane 5中被重新使用,但是Ariane 5更高速的运算引擎在火箭航天计算机中的算法程序中触发了一个bug。该错误存在于将64位浮点数转换为16位带符号整数的程序中。更快的运算引擎导致了Ariane 5中的64位数据要比Ariane 4中更长,直接诱发了溢出条件,最终导致了航天计算机的崩溃。首先501航天飞机的备份计算机崩
17、溃,然后0.05秒之后,主计算机也崩溃了。这些计算机崩溃直接导致了火箭的主要处理器使火箭的运算引擎过载,同时导致火箭在发射40秒后解体破碎。软件历史上最严重的10大bug之十o2000年年11月月 巴拿马市国家肿瘤中心事件。巴拿马市国家肿瘤中心事件。在这一系列事故中,由一家美国公司Multidata Systems International所开发的治疗软件错误的计算了对于正处于放射治疗中的病人所应该使用的合适剂量。Multidata的软件允许放射治疗师利用计算机屏幕的一个叫做blocks的金属装置来保护健康组织以免受射线的伤害。但是该软件仅仅允许治疗师使用4个屏蔽块,但是巴拿马的医生希望用5
18、块来保护。医生发现他们可以通过将所有的屏蔽块画成一个在中间有孔的大块来欺骗该软件。然而医生们没有意识到的是Multidata软件在这种配置中根据该空画法的不同给出了不同的答案:如果该孔是在一个方向绘制的,则给出正确的计算出的剂量,如果是在另外不同的方向绘制的,软件就会推荐出要比必须需要暴露的射线的两倍剂量。至少有8个病人在这次事故中丧生,同时接受了过多剂量放射的20个病人产生了严重的健康问题。被要求手动两次检查计算机的计算的医生被以谋杀罪起诉。软件错误的一些事例1o 1991年2月25日在海湾战争中,一个软件故障扰乱了“爱国者”导弹的雷达跟踪系统,产生了1/3秒的时间误差,结果未能击中伊拉克发
19、射来的飞毛腿导弹,造成美军28名士兵死亡,98人受伤。o 爱国者导弹连在载赫蓝已经连续工作了100小时,导弹的时钟已经偏差了三分之一秒,相等于600米的距离误差。由于这个时间误差,使雷达系统侦察到飞毛腿导弹并且预计了它的弹道,系统却找不到实际来袭的导弹,雷达发现的目标被视为一次假警报,侦测到的目标也从系统中删除。软件错误的一些事例2o 美国丹佛新国际机场投资1.93亿美元的自动化行李系统,由于其中的软件错误,致使该机场的开放时间推迟了半年以上,造成巨大损失。软件错误的一些事例2o 1996年6月4日,欧洲航空航天局耗资67亿美元研制的Ariane501火箭在首次飞行试验中,点火后仅37秒即在空
20、中爆炸。o 事故调查委员会经过调查分析后认为,灾难是由惯性制导系统软件中的一个错误引起的。测试的难点o 测试用例是设计者对测试对象的理解,因此,其质量很大程度上取决于设计者的分析、理解和设计能力。这是一种缺乏指导性方法的、不易制订标准规范的、需要“技巧”的设计活动。o 开发组织与测试组织难一很好的配合。长期以来,大都数软件开发人员认为测试活动是对开发人员劳动成果的不断“挑剔”。但实际上,测试工作的出发点是确保开发人员的劳动成果成为可接收的、高品质的软件产品。o 有效的测试工作需要投入足够的人力和物力,需要对工作的难度和消耗有充分的估计。测试的产品o 软件测试工作所产生的文档、程序、服务、以及相
21、关的文件总和称之为软件测试产品。o 测试配置包括:测试计划;测试方案(包括测试输入数据、测试的功能、测试预期结果);文档审查项列表;代码审查项列表;软件测试报告;软件问题报告;软件变更报告;软件测试日志。测试的信息流测试可靠性模型调试评价软件配置测试配置测试结果预期结果错误错误率数据正确可靠性预测9.2设计测试用例o 测试用例是用于软件测试的输入数据及预期结果。o 一个好的测试用例有以下几个特征:n 是最有可能发现错误的;n 不是重复的、多余的;o 通常先按黑盒测试法设计基本测试用例,发现软件功能和性能上的问题,然后再用白盒测试方法补充一些测试用例,发现程序逻辑结构的错误。黑盒测试法o 等价类
22、划分o 边值分析o 因果分析o 猜测错误白盒测试法介绍三种方法o 语句覆盖o 判定覆盖o 条件覆盖o 判定/条件覆盖o 多条件覆盖白盒测试o 语句覆盖测试语句覆盖测试用足够多的测试用例使程序的每条语句至少执行一次。这是一个非常弱的测试方法。因为每条语句都执行一次,仍然会有许多错误测试不出来。例子BEGIN o.o If(A1)AND(B=0)THEN DO o X:=X/A;o IF(A=2)OR(X1)THEN DO o X:=X+1;o ENDA1&B=0X=X/AA=2 OR X1X=X+1abcdeA=2,B=0,X=3每条语句都执行一次A1&B=0X=X/AA=2 AND X1X=X
23、+1abcdeA=2,B=0,X=3无法发现第二个判定语句中的错误每条语句都执行一次,程序中第二个判定OR写成AND仍然不能被发现错误 o 判定覆盖法判定覆盖法设计足够多的测试用例,不仅使每条语句都至少执行一次,还要使程序中每个判定分支都至少执行一次,也就是说,设计的测试用例使每个判定都有一次取“真”和“假”的机会。A1&B=0X=X/AA=2 OR X1X=X+1abcdeA=2,B=0,X=3A=3,B=1,X=1每条判定语句取一次“真”一次“假”A1&B=0X=X/AA=2 OR X 1A1B=0B0A=2,B=0,X=4A=2,B=1,X=1A=1A=1B=0B0A=1,B=0,X=2
24、A=1,B=1,X=1A=2A=2X1X=1A=2,B=0,X=4A=2,B=1,X=1A2A2X1X1&B=0X=X/AA=2 OR X 1X=X+1abcdeA=2,B=0,X=3A=2,B=1,X=1A=1,B=0,X=3A=1,B=1,X=1每个条件组合出现一次A1&B=0X=X/AA=2 OR X 1X=X+1abcdeA=2,B=0,X=3A=2,B=1,X=1A=1,B=0,X=3A=1,B=1,X=1第二个判定中的错误由第三个测试用例发现黑盒测试o 功能测试中如果能够穷尽所有的有效输入和无效输入,那么也可以得到正确的程序,但是,实际上我们不可能也没有必要穷尽所有的输入。我们要力
展开阅读全文