软件测试课件1绪论.ppt
软件测试,你懂测试吗?,编程大师说:没有错误的程序世间难求。(编程之道)临时抱佛脚行吗?以为有文档模板就会测试了吗?如果不懂得有效地进行测试,你不仅得不到功劳,也没人欣赏你的苦劳,你拥有最多的将只是疲劳。职业软件工程师应当掌握需求开发、系统设计、编程、测试、维护所有技能。,机遇和挑战并存,Project/Quality Manager,目前国内软件业的弱点正是发展的前沿,Test Engineer,QA/Supervisor,21世纪什么最贵软件测试工程师,软件测试工程师,目前IT行业极端短缺的金贵人才,未来5年IT行业最炙手可热的高薪职位。中国软件业每年新增约20万测试岗位就业机会,而企业、学校培养出的测试人才却不足需求量的1/10,这种测试人才需求与供给间的差距仍在拉大。软件测试产品质量的保证 软件测试控制成本的关键 软件测试软件可靠性确认 软件测试让企业具备国际竞争的实力,人力市场的测试人员位置?,课程目标,了解软件缺陷不可避免和软件测试的必要性掌握进行软件测试的数学知识掌握软件测试的基本理论和基本分析方法掌握功能性测试、结构性测试、单元测试、集成测试、系统测试的基本方法和基本步骤了解面向对象测试的基本流程能够较为熟练的编写测试用例了解常用的软件测试工具,课程服务于,测试工程师 Test engineer QA工程师/经理 QA Engineer/Manager 软件工程过程组成员 The member of SEPG 项目经理 Project manager 程序员 Programmer 软件分析师 Software Analyst 软件咨询顾问 Software Consultant,教材与参考书,教材:软件测试(第2版)Paul C.Jorgensen 著 韩柯 杜旭涛 译 机械工业出版社参考书软件测试与质量管理 许育诚等 电子工业出版社软件测试技术 郑人杰 清华大学出版社软件测试方法和技术朱少民 清华大学出版社论坛,软件测试所需知识,高级语言程序设计(如:C/C+)离散数学图论软件工程,课程考核,1.该课程为考试2.比例构成实验:15%;平时成绩15%;期末考试:70%;3.关于平时成绩作业和考勤;,绪论,学习目标,了解课程由来掌握软件测试的相关概念了解国内外现状掌握软件测试目的和作用了解软件测试技术组成了解软件测试工具了解软件测试原则和经验了解软件测试人员的素质要求,1.1课程由来,软件是人编的所以不完美背景实例:,软件大危机,生病的狮子王英特尔的陷落 人造陨石坑生命的代价 千年虫 微软的学费,课程由来,软件危机(1960s)软件危机主要包含两方面的问题一是如何开发软件以满足社会对软件日益增长的需求二是如何维护数量不断增长的已有软件 表现:(1)软件发展速度跟不上硬件的发展和用户的需求(2)软件成本高,开发进度不能预先估计,用户不满意(3)软件产品质量差,可靠性不能保证(4)软件产品可维护性差(5)软件没有合适的文档资料,课程由来(续),软件危机(1960s)解决:使用好的软件开发技术和方法。使用好的软件开发工具,提高软件生产率。有良好的组织、严密的管理,各类人员相互配合共同完成任务。,软件测试与软件项目的关系,软件测试是为软件项目服务的目的:提高软件质量,降低软件项目的风险软件测试只能证明软件存在错误,而不能证明软件没有错误,认识过程,人们对软件测试认识的五个阶段:阶段1 测试=调试阶段2 测试是证明软件正确阶段3 测试是发现软件中错误阶段4 测试是减小软件不工作的风险(是度量软件质量要素的过程)阶段5 测试可产生低风险的软件的一种认识上的训练,测试是为了度量和提高被测软件的质量,对测试件进行工程设计、实施和维护的整个生命周期过程。,人们对软件测试的误解,误解一:设计-实现-测试,测试是开发后期的一个阶段软件测试不等于程序测试。软件测试贯穿整个软件产品生命期。误解二:软件测试技术要求不高,比编程容易多了好的测试人员不仅要掌握各种测试技术和测试工具,还要具备丰富的编程经验和对BUG的敏感。,人们对软件测试的误解,误解三:软件测试随便找一个能力差的人就能做。误解四:有时间就多测试一些,来不及就少测试一些。误解五:软件测试是测试人员的事,与开发人员无关。误解六:软件测试就是运行一下软件,看看结果对不对。,千万不要将“测试”与“演示”混为一谈。,SQA,SQA:软件质量保证过程改进:预防错误软件测试:发现错误SQA涉及的工作岗位过程改进工程师测试工程师开发工程师测试经理,1.2 软件测试概况与定义,概况软件开发过程必须伴有质量保证活动。软件测试是软件质量保证的关键元素,代表了规约、设计和编码的最终检查。测试有助于提高软件的质量,但是提高软件的质量不能依赖于测试。软件的高质量是设计出来的,而不是靠测试修补出来的。,1.2 软件测试概况与定义,定义测试是以评价一个程序或者系统属性为目标的任何一种活动。测试是对软件质量的度量。测试是为了度量和提高被测软件的质量,对测试件进行工程设计、实施和维护的整个生命周期过程。软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例,并利用这些测试用例去运行程序,以发现程序错误的过程。软件测试是软件质量控制的重要手段,属于软件工程领域。,1.3国内外软件测试的现状及发展,国外软件测试的现状国内软件测试的现状软件测试的发展,国外软件测试的现状,软件测试在软件公司中占有重要的地位软件测试理论研究蓬勃发展,引领软件测试理论研究的国际潮流软件测试市场繁荣,国内软件测试的现状,我国著名的软件公司都已经或者正在建立独立的专职软件测试队伍国家开始对软件测试职业高度重视和认可对软件产品进行登记认证制度,所有软件除备案登记外,且要经过测试在计算机系统集成和监理论证中,软件测试能力成为评价公司技术能力的重要指标通过测试对软件产品进行质量监督抽查,各部委,行业正通过测试规范行业软件的健康发展用户对软件质量要求越来越高,通过第三方测试机构的严格测试来判定以测代评正成为我国科技项目择优支持的一项重要举措软件测试正式成为部分软件学院的一门独立课程第三方测试机构得到了蓬勃发展,国内软件测试的现状,软件测试基本停留在手工进行的功能性测试上,大部分是在软件开发的后期介入。大部分的软件测试工作没有明确的目标和可量化的质量要求,对质量的控制基本上靠测试人员自己的经验和责任心。测试理论和测试方法并没有全面的掌握,没有将测试同公司目前的开发流程紧密的绑定起来。,续,目前状况软件测试的实践性大于理论性软件测试理论体系尚不成熟软件测试工具尚不成熟软件测试效果对于个人的依赖性比较大软件测试的发展趋势软件架构师,开发工程师,QA人员,测试工程师将进行更好的融合测试职业将得到充分的尊重设置独立的软件测试部门将成为越来越多的软件公司的共识测试外包服务将快速增长,1.3软件缺陷,缺陷:最终产品同用户的期望不一致缺陷的分类错误遗漏超出需求的部分,世上不存在没有缺陷的软件,缺陷产生的原因,硬件方面软件方面数据问题环境方面,缺陷产生的原因(续),测试原因导致的缺陷:测试目标定义错误在开发生命周期中,错误的选择了测试介入时期选择了低效的测试技术测试人员专业知识培训不够,工作低效计划不够详细,测试的随意性很大测试人员同开发人员沟通困难,1.4 软件测试目的和作用,目的为了寻找错误,并尽可能地为修正错误提供更多的信息为了证明软件有错误,而不证明软件没有错误推论:成功的测试在于发现了迄今尚未发现的缺陷。,测试的“成功”与“失败”就在于能否发现错误!,1.4 软件测试目的和作用,作用发现并管理缺陷度量质量评价工作效率和效果预期项目风险,缺陷!,微软的经验:Windows 95/98 Windows 2000 系统的稳定性有了明显改善,DEV:QA=1:2,软件测试衡量标准,衡量标准多能够找到尽可能多的、以至于所有的BUG快能够尽可能早地发现最严重的BUG好找到的BUG是关键的、用户最关心的省能够用最少的时间、人力和资源发现BUG测试的过程和数据可以重用,什么才是好的测试属性,“好”测试的属性发现错误的可能性高不冗余在目的相似的测试中,使用最可能找到错误的测试每一个测试应独立执行,1.5 软件测试技术组成(概况),软件测试技术分类,按测试阶段分 单元测试测试中的最小单位,测试特殊的功能或代码模块。集成测试测试应用程序结合的部分,确定它们的功能结合到一起是正确的。系统测试主要测试系统是否符合“需求规格说明书”。验收测试与系统测试非常相似,主要区别是测试人员不同,验收测试由用户执行。,1.6 软件测试工具,单元测试工具的种类静态分析工具代码规范审核工具内存和资源检查工具测试数据生成工具测试框架工具测试结果比较工具测试度量工具测试文档生成和管理工具,常用软件测试工具(举例),美国Rational公司的著名套装软件SQASuiteSQASuite是美国优秀自动测试工具,它是针对Windows客户机服务器环境中,目前占据着世界Windows自动测试市场65%的市场份额。SQASuite的各组件(SQAManager、SQARobot、SQALoadTest)各司其职,又紧密集成,有效地完成了整个测试生命周期。,常用软件测试工具,QuickTest:是一个功能测试自动化工具,主要应用在回归测试中。QuickTest针对的是GUI应用程序,包括传统的Windows应用程序,以及现在越来越流行的Web应用。WinRunner(简称WR):是基于MS Windows的功能测试工具。LoadRunner:是一种预测系统行为和性能的工业标准级负载测试工具。,1.7 软件测试原则和经验,软件测试原则(1)所有的测试都应追溯到用户需求最严重的错误(从用户角度)是那些导致软件无法满足需求的错误。程序中的问题根源可能在开发 前期的各阶段解决、纠正错误也必须追溯到前期工作。,软件测试原则,(2)概要设计时应完成测试计划,详细的测试用例定义可在设计模型确定后开始,所有测试可在任何代码被产生之前进行计划和设计。(3)Bug的80-20原则:测试发现的错误中80%很可能起源于20%的模块中。,软件测试原则,(4)穷举测试是不可能的。(5)应由独立的第三方来构造测试。(开发和测试队伍分别建立)(6)测试用例应由输入数据和预期的输出结果两部分组成。(7)兼顾合理的输入和不合理的输入数据。(8)程序修改后要回归测试。(9)应长期保留测试用例,直至系统废弃。,测试原则举例,例:测试计算器程序加法测试1+0=1+99999999999999999999999999999999=2+0=2+99999999999999999999999999999999=99999999999999999999999999999999+99999999999999999999999999999999=1.0+0.1=减法测试乘法测试除法测试求平方根百分数倒数,测试原则之一:完全测试是不可能的,软件测试经验,经验心理素质最重要开发人员我不会犯错任何人都可能犯错这种错误不能算作错误质量是由用户来评价的发现我的错误是对我工作的否定是对我的工作的帮助 测试人员没有创造性、枯燥总结经验,培养敏锐度,提升个人价值和权威反正测试是不可能发现所有错误的,责任心不够职业教育+激励措施 技术比开发人员差,自信心不足代表用户,决定成功的是用户满意,软件测试经验(续),经验2、测试前必须明确预期的输出结果否则实际的输出结果很可能成为检验的标准,测试失去意义3、必须检查每一个实际输出结果很可笑,但是却是事实:不认真检查输出结果,这样的测试是没有意义的。,软件测试经验(续),经验4、一段程序中存在错误的概率与这段程序中已经发现的错误数成正比5、可能的情况下,避免测试自己的软件发现不了思路错误发现不了环境错误心理因素导致测试可能不够彻底和全面,在自已的工作中找出缺陷往往是人的心理状态所不容的。,软件测试经验(续),经验6、依照用户的要求、配置环境和使用习惯进行测试并评价结果,因为产品最终是交给用户的使用的,并为用户服务的7、测试设计决定了测试的有效性和效率,测试工具只能提高测试效率,不能完全依赖测试工具8、注意保留测试设计,并注意测试设计的可重用性和说明文档,软件测试经验(续),经验9、测试活动要有组织、有计划、有选择穷举测试是不可能的不充分的测试是不负责任,过度的测试是浪费资源,同样也是一种不负责任的表现。计划的活动提高效率10、不要放弃随机测试的方法测试的不成熟性和艺术性,1.8 软件测试人员的素质要求,职业素质要求包括开发人员和测试人员1.责任心包括坚持原则2.怀疑精神和学习能力包括好奇3.沟通能力用户、项目组4.专注力至少需要耐心和记忆力5.洞察力来源于经验、逻辑思维能力和敏感度:6.团队精神,谢谢!,奔腾芯片缺陷,(4195835/3145727)*3145727 4195835 0$450 million 4.5亿美元损失.2000年 另外一个缺陷发生在1.13 MHz Pentium III,生病的狮子王,1994 年的秋天,迪斯尼公司发布了(狮子王历险记),1994 年 12 月 26 日起,陷入迪斯尼的“恐慌”。兼容性问题,人造陨石坑,1999 年 12 月 03 日,美国宇航局的火星登陆飞船在试图登陆火星表面时意外失踪经宇航局内部错误评定委员会检查,元凶是:登陆飞船携带的电脑某个数据位为意外的更改了!,生命的代价,美国的爱国者导弹系统一次拦截的错误让 28 名在多哈战斗的美国士兵瞬间失去了生命。分析专家对系统分析后发现问题-系统时钟,千年虫,1999 年到 2001 年,整个世界不幸还遗留在地球上,并且为这位程序员的“错误”支付了超过 200 多亿美元的代价。,微软的学费,在 80 年代初期,Microsoft 公司的许多软件产品出现了“Bug”。Microsoft 公司的经理们发觉很有必要引进更好的内部测试与质量控制方法。但是遭到很多程序设计师甚至一些高级经理的坚决反对。Microsoft损失20万美元,可谓惨重。1986 年月发行的 Mac 机的 Word 3.0,千呼万唤方于 1987 年 2月问世。这套软件竟然有 700 多处错误,有的错误可以破坏数据甚至摧毁程序。一下子就使Microsoft 名声扫地。公司不得不为用户免费提供升级版本,费用超过了 100 万美元。,