软件测试第1讲软件测试概述1机遇和挑战并存2TestEngineerQA/SupervisorProject/QualityManagerSeniorEngineer软件行业是朝阳行业,软件测试是软件行业的朝阳行业。•软件行业由卖方市场转入买方市场,激烈的竞争要求软件的产品质量越来越高。•欧美国家的软件项目,软件测试的工作量占项目总工作量40%,软件测试的经费占项目总经费30%。•测试人员和开发人员的比例国外:1:1--2:1,国内1:5—1:3,当前国内高素质软件测试人员的市场需求大约50万人左右。网络资源软件工程组织(技术文章)软件测试(注册下载需技术分)中国软件测评中心中国测试员网站中国软件测试在线3第1讲软件测试概述为什么要进行软件测试?什么是软件测试?软件测试学科的发展45为什么要进行软件测试?软件缺陷与软件故障案例迪斯尼并不总是带来笑声火星探测飞船坠毁爱国者导弹防御系统2008北京奥运会售票系统6迪斯尼并不总是带来笑声1994年圣诞节前夕,迪斯尼公司发布了第一个面向儿童的多媒体光盘游戏“狮子王童话”圣诞节后的第一天,迪斯尼客户支持部电话开始响个不停,不断有人咨询、抱怨为什么游戏总是安装不成功,或没法正常使用这个游戏软件只能在少数系统中正常运行7兼容性问题火星探测飞船坠毁机械震动在大多数情况下也会触发着地开关,设置错误的数据位。设想飞船开始着陆时,计算机极有可能关闭推进器,而火星登陆飞船下坠1800米之后没有反推进器的帮助,冲向地面,必然会撞成碎片两个小组本身的工作都没什么问题,就是没有合在一起测试,其接口没有被测,而问题就在这里8系统测试衔接问题爱国者导弹防御系统当爱国者导弹防御系统的时钟累计运行超过14小时后,系统的跟踪系统就不准确。从而导致拦截伊拉克飞毛腿导弹的几次失败,其中一枚在沙特阿拉伯的多哈爆炸的飞毛腿导弹造成28名美国士兵死亡9系统时钟误差积累2008北京奥运会售票系统2007年10月30日上午11时,2008北京奥运会售票系统软件瘫痪。北京奥运会的指定独家票务供应商-北京歌华特玛捷票务有限公司成立于2006年9月,由美国特玛捷公司、中体产业股份有限公司及北京歌华文化发展集团三家出资构建而成。售票系统瘫痪事件发生后,公众普遍质疑歌华特玛捷公司是否具备承担2008北京奥运会的票务销售能力。用户常常在软件开发初期就发现软件可能跟他们的需求有不一致的地方。在开发软件之前,需要进行必要的需求分析。开发完成之后,也要进行必要的测试工作。虽然这些软件故障的后果程度不一,但可以肯定的是,通过严格的软件测试可以极大地降低故障及因此而引发的种种恶果。1011最好的办法•开发过程中没有任何的缺陷——不可能!•通过“测试”,尽可能减少缺陷!为什么要进行软件测试?软件总存在缺陷。只有通过测试,才可以发现软件缺陷。也只有发现了缺陷,才可以将软件缺陷从软件产品或软件系统中清理出去。软件失败时,也许仅仅给我们带来了不便,也可能是灾难性的。我们需要软件测试,来保障软件质量。12什么是软件测试?软件测试学科的形成正反两方面的争辩软件测试的定义软件测试的其它观点13软件测试学科的发展从测试的思想导向来划分为4个阶段:1957~1978年,以功能验证为导向,测试是证明软件是正确的(正向思维)。1978~1983年,以破坏性为为导向,测试是为了找到软件中的错误(逆向思维)。1983~1987年,以质量评估为导向,测试是提供产品的评估和质量度量。1988年起,以缺陷预防为导向,测试是为了展示软件符合设计要求,发现缺陷、预防缺陷。14更好的阶段划分分为3个阶段——初期阶段、发展阶段和成熟阶段初级阶段(1957~1971)测试通常被认为是对产品进行事后检验,缺乏有效的测试方法发展阶段(1972~1982),1972年第一次关于软件测试的正式会议,促进了软件测试的发展成熟阶段(1983到现在),国际标准Std829-1983,形成一门独立的学科和专业,成为软件工程学科中的一个重要组成部分15软件测试的正面性BillHetzel博士(正向思维的代表):软件测试就是为程序能够按预期设想那样运行而建立足够的信心。“软件测试是一系列活动以评价一个程序或系统的特性或能力并确定是否达到预期的结果”测试是为了验证软件是否符合用户需求,即验证软件产品是否能正常工作16软件测试的反面性GlenfordJ.Myers(反向思维的代表):测试是为了证明程序有错,而不是证明程序无错误一个好的测试用例是在于它能发现至今未发现的错误一个成功的测试是发现了至今未发现的错误的测试17软件测试定义的两面性18评价一个程序或系统的特性或能力并确定是否达到预期的结果测试是为发现错误而针对某个程序或系统的执行过程软件测试正向思维-验证软件正常工作逆向思维-假定软件有错误在设计规定的环境下运行软件的所有功能,直至全部通过。寻找容易犯错误的地方和系统的薄弱环节,试图破坏系统,直至找不出问题。软件测试是什么?测试=“测”+“试”什么是“测”?Measure、测量知道结果的验证行为测什么是“试”?Try、试验不知道结果的尝试行为试软件测试测:验证软件功能、性能试:验证软件是否有非功能性的异常在规定的条件下对程序进行操作,以发现程序错误,对其是否能满足设计要求进行评估的过程Myers软件测试的定义软件测试是为了发现软件缺陷而执行程序或系统的过程。20Q:我按照用户的需求测试了实际的系统,却一个缺陷也没有发现,我所做的测试工作有意义吗?1979年GlenfordJ.Myers在《软件测试艺术》(Theartofsoftwaretesting)书中给出的定义:传统意义上的测试定义,是狭义的。A:当然有意义,因为我至少证明了该系统基本符合用户的需求。IEEE软件测试的定义1983年IEEE的定义:使用人工或自动手段运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。21明确提出软件测试以检验是否满足需求为目标。软件测试的定义软件测试也可以定义为是“验证(Verification)”和“有效性确认(Validation)”活动构成的整体。验证:是检验软件是否已正确地实现了产品规格书所定义的系统功能和特性有效性确认:是确认所开发的软件是否满足用户真正需求的活动22验证:“我们是否正确地完成了产品?”确认:“我们是否完成了正确的产品?”-----Boehm软件测试的其它观点软件测试被认为是对软件系统中潜在的各种风险进行评估的活动。基于风险的软件测试可以被看作是一个动态的监控过程,对软件开发全过程进行检测,随时发现问题、报告问题测试的经济观点就是以最小的代价获得最高的软件产品质量。经济观点也要求软件测试尽早开展工作,发现缺陷越早,返工的工作量就越小,所造成的损失就越小。23问题讨论玩电脑游戏是不是软件测试?玩手机是不是软件测试?用户使用软件是不是软件测试?242525