软件测试基础1-1软件测试基础知识1软件测试行业的优势?软件测试的根本目的?QA,你懂得?2回顾什么是软件缺陷?缺陷产生的原因?什么是软件测试?本节学习内容软件无处不在先看一下软件在我们生活中的位置及作用:公路上的代码带翼的软件“设计飞机需要数千名专家,加上许多人工智能,在完成之前,美国和日本的1700个工作站已经运行了专门的CAD软件,一旦飞机飞在空中,有400万条完全没有错误的指令在驱动他。”“当您启动BMW7系列时,您激活了20兆字节的计算能力……这比阿波罗11号的登月之旅中所用的还要多。”软件无处不在5衣住食行软件无处不在6抢票神器,助你回家软件软件无处不在实现家电智能控制必不可少InternetofThings软件无处不在有了PS,你会发现,什么都可以改变什么是软件缺陷?由此得出软件已经成为我们的工作、生活中不可或缺的重要部分。软件质量已经成为决定产品质量或企业成败的最重要的因素。软件不能正常工作所带来的问题对我们的工作和生活带来很多不便,甚至会造成时间、金钱、信誉等方面的重大损失,严重时会危及生命。臭名昭著的软件错误案例什么是软件缺陷?迪斯尼并不总是带来笑声1994-19951994年圣诞节前夕,迪斯尼公司发布了第一个面向儿童的多媒体光盘游戏“狮子王童话”圣诞节后的第一天,迪斯尼客户支持部电话开始响个不停,不断有人咨询、抱怨为什么游戏总是安装不成功,或没法正常使用这个游戏软件只能在少数系统中正常运行兼容性问题什么是软件缺陷?11英特尔奔腾浮点除法缺陷1994(4195835/3145727)×3145727-4195835=?在计算机的“计算器”程序中输入以上算式,如果结果是0,那表明你的计算机没有问题。测试工程师在芯片发布之前的内部测试时已发现了这个问题,但管理层认为没有严重到要修复的程度。用户在1994年10月30日报告了这个缺陷,Intel承诺更换有问题的芯片,但要求用户必须证明自己受到了软件缺陷的影响。最终,Intel公开道歉并花费4亿多美元更换坏芯片。什么是软件缺陷?12美国航天局(NASA)火星极地探测器着陆坠毁1999在设计中,在飞船的脚上装了一个的触点开关,当飞船的脚着地时,触发开关,通过计算机中设置的一个数据位来关掉燃料。然而,在飞船的脚张开时,由于震动,开关被触发,并通过数据位关掉燃料,没有反助推器的帮助,飞船下坠1800米后冲向地面必然坠毁。原因:其中一个小组测试飞船的脚落地过程,并不注意着地数据位(接口)是否置位,另一个小组测试此后的着陆过程,他们每次测试前都要重置计算机、清除数据位。他们从未一起工作过!没有合在一起测试过。系统测试衔接问题什么是软件缺陷?13爱国者导弹防御系统19911991年2月25日在海湾战争中,美国的爱国者导弹在发射时产生了0.33秒的时间误差,这个软件故障扰乱了导弹的雷达跟踪系统,结果拦截失败,被沙特阿拉伯发射的飞毛腿导弹击中,造成美军28名士兵死亡、98人受伤。1991年2月16日,制造商向美国陆军提供了更新软件。这个软件最终在飞毛腿导弹击中军营后的一天才运抵部队。当爱国者导弹防御系统的时钟累计运行超过14小时后,跟踪定位系统就不准确。在这场战役中,爱国者系统已经连续运行超过100个小时,导致了累计的时间误差。系统时钟误差积累什么是软件缺陷?14国内的软件失效案例360存在严重缺陷,后果导致系统崩溃(查杀木马后无法查看桌面和任务栏)什么是软件缺陷?软件留有“后门”什么是软件缺陷?缺点:defect故障:fault问题:problem、issue错误:error毛病:incident异常:anomaly偏差:variance失败:failure矛盾:inconsistency特殊:feature缺陷:bug软件测试人员,在不同环境下用不同的术语描述软件失败的现象:什么是软件缺陷?什么是软件缺陷?术语:缺陷(Defect)可能会导致软件组件或系统无法执行其定义功能的瑕疵,如错误的语句或数据定义。缺陷可能会导致失效(Failure)。术语:错误(Error)•人为的、产生不正确结果的动作。•比如程序逻辑错误、代码错误、文档错误等术语:故障(Fault)指缺陷在软件运行时的表现形式。故障一定是缺陷,但缺陷不一定是故障。术语:失效(Failure)组件或系统与预期的交付、服务或结果之间存在的实际偏差。什么是软件缺陷?缺陷错误故障失效缺陷因果链“千年虫”事件什么是软件缺陷?请思考:系统中一旦引入了缺陷,一定会引起失效吗????请用之前讲过的例子说明!什么是软件缺陷?判别缺陷之前需了解的一个术语—产品说明书产品说明书(productspecification)软件开发小组的一个协定,定义了要开发的产品的功能和特征,细化了产品的细节,产品如何反应,要做什么,不做什么等。这种协定的范围从口头说明到正式书写的文档有多重形式。怎么样去判别软件缺陷?什么是软件缺陷?怎么样去判别软件缺陷?只要符合下列5个规则的,我们称之为软件缺陷:1.软件未达到产品说明书标明的功能。2.软件出现了产品说明书指明不会出现的错误。3.软件功能超出产品说明书指明范围。4.软件未达到产品说明书虽未指出但应达到的目标。5.软件测试员认为软件难以理解、不易使用、运行速度缓慢,或者最终用户认为不好。什么是软件缺陷?23讨论1、假如计算器的产品说明书声称能够准确无误地进行加、减、乘、除运算。测试:测试员拿到计算器后,按下(+)键,结果什么反应也没有。这算缺陷吗?什么是软件缺陷?24讨论2、假如在对计算器的加、减、乘、除进行测试完后,测试员发现该计算器还可以求平方根,而说明书没有提此功能。这是哪种缺陷呢?什么是软件缺陷?25讨论3、假如计算器的产品说明书声称计算器永远不会崩溃、死锁或停止反应。测试:测试员拿到计算器后,狂敲键盘使计算器停止接受输入。这算缺陷吗?什么是软件缺陷?26讨论4、假如软件测试员觉得按键太小;“=”键布置的位置使其极其不好按;也许在明亮光下显示屏难以看清。这是哪种缺陷呢?什么是软件缺陷?27讨论5、在测试计算机时,会发现电池没有电会导致计算不正确。没有人考虑到这种情况下计算机如何反应,而是假定充足了电。测试应该考虑到让计算器持续工作到电池没电。电力不足时无法正确使用,但产品说明书未指出这个问题。这是何种缺陷呢?什么是软件缺陷?28缺陷产生的原因?主要根源是什么?什么是软件缺陷?29缺陷产生的原因?29产生软件缺陷的原因很多,其中最大的原因是软件产品规格说明书(ProductSpecification)Figure1.1.Bugsarecausedfornumerousreasons,but,inthissampleprojectanalysis,themaincausecanbetracedtothespecification.什么是软件缺陷?为什么产品说明书是最大的罪魁祸首什么是软件缺陷?为什么产品说明书是最大的罪魁祸首-根本就没有产品说明书-产品说明书描述不够彻底-产品说明书频繁变化-不能及时与整个开发团队沟通“Ifyoucan'tsayit,youcan'tdoit.”什么是软件缺陷?软件缺陷的第二大来源是设计随意易变沟通不足……•32什么是软件缺陷?•33软件为什么会有缺陷呢?(Somereasons-butnotall)MiscommunicationNocommunicationSoftwarecomplexityProgrammingerrorsPoorrequirementsChangedrequirementsTimepressuresChangedenvironmentsPoorlydocumentedcodeMisuseoftoolsErrorsinsystemsupportsoftwarePoorplanningEgosLackofexperienceInadequatetesting什么是软件缺陷?软件缺陷在什么时候修复最经济?什么是软件缺陷?软件缺陷的修复(fix)费用在软件开发的各个阶段,都有可能发现缺陷,但不同的时间发现缺陷,其消除缺陷的费用却有着非常大的区别。随着时间的推移,缺陷的修复费用呈几何级数增长。什么是软件缺陷?软件缺陷的修复费用Figure1.2.Thecosttofixbugscanincreasedramaticallyovertime.对待缺陷最好的办法•开发过程中没有任何的缺陷——不可能!•通过“测试”,尽可能减少缺陷!什么是软件测试?软件测试的定义软件测试的目的软件测试的对象测试与调试的区别什么是软件测试?1979,G.J.Myers在他的《软件测试的艺术》一书中给出了软件测试的定义:程序测试是为了发现错误而执行程序的过程。狭义的定义,其主要目的是发现缺陷。什么是软件测试?G.J.Myers三个关于测试的重要观点测试是为了证明程序有错,而不是证明程序正确。一个好的测试用例在于它能发现以前未发现的错误。一个成功的测试是发现了以前未发现的错误的测试。Q:我按照用户的需求测试了实际的系统,却一个缺陷也没有发现,我所做的测试工作有意义吗?A:当然有意义,因为我至少证明了该系统基本符合用户的需求。什么是软件测试?广义的定义软件测试是指软件产品生存周期内所有的检查、评审和确认活动,如设计评审和系统测试。在软件生命周期早期设计测试的思考过程可防止将缺陷引入代码,对文档的审查也同样可防止将缺陷引入代码。什么是软件测试?验证和确认(V&V)软件测试通过验证和确认活动来进行。验证(Verification):是保证软件符合产品说明书的过程。Arewebuildingthesystemright?确认(Validation):是保证软件满足用户要求的过程。Arewebuildingtherightsystem?验证:“我们是否正确地完成了产品?”确认:“我们是否完成了正确的产品?”-----Boehm问题讨论玩电脑游戏是不是软件测试?玩手机是不是软件测试?用户使用软件是不是软件测试?什么是软件测试?软件测试的对象软件测试贯穿于软件定义和开发的整个期间。需求分析,概要设计,详细设计,以及程序编码等各个阶段所得到的文档,包括需求规格说明,概要设计规格说明,详细设计规格说明以及源程序,都是软件测试的对象.软件测试≠程序测试什么是软件测试?软件测试的目的尽早发现软件产品中的缺陷并确保其被修复评估、确认软件的质量预防缺陷具体实施软件测试时,要在发现缺陷和保证质量两个目的之间做出平衡。什么是软件测试?测试与调试测试:Test目的是发现缺陷,通常在受控的条件下(正常的条件和异常的条件)运行程序并评估结果。调试:Debug目的是定位并修复故障,属于开发活动。调试是软件开发人员的工作1、什么是软件缺陷?2、软件缺陷产生的原因。3、软件测试的概念。4、软件测试的对象及目的。5、测试和调试的区别以组为单位完成以下任务:(100分)1、软件质量模型,软件产品有哪些质量属性?2、尝试举例说明每个软件质量属性3、思考软件质量保证与测试之间的关系4、你知道哪些软件测试的原则?