1、软件测试技术课程性质:专业必修课学时安排:54+10任课教师:联系电话:QQ:办公地点:1软件测试技术软件测试,What?软件测试是为了发现错误而执行程序,软件测试通过的程序可以认为是基本安全的。2软件测试技术软件测试师的“钱”景:软件测试一般占整个项目开销的30%到50%!一般软件企业目前没有专门的软件测试师!国家的目标是软件测试师与程序员1:1!对软件测试师的要求更高!3软件类型开发成本按阶段分布%需求与设计实现测试控制软件462034航空航天软件342046操作系统331750科技计算软件442630商业应用软件442828课程导论本课程的学习任务本课程的主要教学内容学习本课程后达到的目
2、的学习本课程所需的铺垫知识本课程的学习方法本课程的考核方法4本课程的学习任务通过学习本课程来了解软件测试领域的新知识、新技术和关键技能,同时学习软件测试领域最常用的相关工具软件的使用。5本课程的主要教学内容1 软件测试基础2 测试用例设计(单元测试)3 软件缺陷管理4 软件测试管理5 软件功能测试6 软件性能测试7 测试实践6本课程的主要教学内容1 软件测试基础2 2 测试用例设计(单元测试)测试用例设计(单元测试)3 软件缺陷管理4 软件测试管理5 5 软件功能测试软件功能测试6 6 软件性能测试软件性能测试7 7 测试实践测试实践7重点内容学习本课程后达到的目的能针对一个小型的被测试软件独
3、立地或与他人协作完成测试工作。8学习本课程所需的铺垫知识软 件 工 程 和 程 序 设 计 语 言(C/C+、Java)。9本课程的学习方法本课程所涉及的软件工具较多,而且有的软件工具还涉及到在不同操作系统环境中的使用。要在理解的基础上学习这些软件工具,并且在学习过程中要学会举一反三。10本课程的考核方法期末考试占50%,平时占30%,实验占20%。说明:说明:平时成绩评定见平时成绩考核方案。11第1章软件测试基础1.1 软件与软件危机1.2 软件测试基本概念1.3 软件测试的分类1.4 软件测试流程121.1软件与软件危机例1用C语言编写的实现“计算每个同学各门课程成绩的平均分”的程序。13
4、程序在什么地方完成输入和输出?#includevoid main()int scores40;int total,average;int i;total=0;for(i=0;i40;i+)scanf(%d,&scoresi);total=total+scoresi;average=total/40;printf(%d,average);getch();缺陷一:输入、输出没有提示。1.1软件与软件危机例1用C语言编写的实现“计算每个同学各门课程成绩的平均分”的程序。14能完成一个学生多少门课程的平均分求取?这个值是怎么提供的?#includevoid main()int scores40;int
5、 total,average;int i;total=0;for(i=0;i40;i+)scanf(%d,&scoresi);total=total+scoresi;average=total/40;printf(%d,average);getch();缺陷二:课程门数不能改变。1.1软件与软件危机例1用C语言编写的实现“计算每个同学各门课程成绩的平均分”的程序。15当输入学生成绩时不小心输入了负数或非法字符,有没有应对方案?#includevoid main()int scores40;int total,average;int i;total=0;for(i=0;i40;i+)scanf(
6、%d,&scoresi);total=total+scoresi;average=total/40;printf(%d,average);getch();缺陷三:输入成绩为负或非法字符,没有错误提示,只是不能得到合理的结果。1.1软件与软件危机16既然程序有问题,那我修改!你的程序需要一个个输入成绩,但我的成绩保存在数据库。好,我再修改!我的成绩在教务处的服务器中,要通过网络访问,这个程序应该是web方式,在浏览器中运行。这么多要求,你怎么不早说?你在编程之前有真正了解过我的要求吗?。1.1软件与软件危机什么是软件?17软件=程序?1.1软件与软件危机18软件=程序+数据结构+文档程序是能够完
7、成事先设计的功能和性能的可执行的指令序列。数据是使程序能正常操纵信息的数据结构。文档是程序开发、维护和使用有关的图文资料。1.1软件与软件危机19软件是:人的智力劳动成果;人的思维结果;计算机的逻辑部件,而不是物理部件。1.1软件与软件危机20软件的特性:(1)软件是一种逻辑实体,具有抽象性。(2)软件的开发和制造是一个统一的过程。(3)软件开发是一项经济活动。(4)软件不会磨损、老化,但会退化。(5)软件的复杂度随着规模的增大迅速增加。1.1软件与软件危机21软件危机:自20世纪60年代以来,软件的应用越来越广泛,需求越来越迫切,规模也越来越大,但是软件的生产率一直得不到提高,甚至出现了种种
8、难以解决的问题,严重影响了软件产业的健康发展,这一系列现象被称为“软件危机”。随着硬件水平的不断提高、软件规模的不断扩大,维护软件成为了系统管理员的噩梦!1.1软件与软件危机22软件危机的表现:(1)软件开发的进度和成本难以预估和控制。1995年,美国共取消了810亿美元的商业软件项目,其中31的项目未做完就被取消,53的软件项目进度通常要延长50%的时间,只有9的软件项目能够及时交付并且费用也控制在预算之内。1.1软件与软件危机23软件危机的表现:(1)软件开发的进度和成本难以预估和控制。微软公司2001年10月发布了Windows XP系统,同时宣布启动Vista的开发,最初预计2003年
9、完成。在经历了2005年初、2006年中的多次推迟,直到2007年1月31日才正式发布,历时五年,投入了60亿美元。1.1软件与软件危机24软件危机的表现:(1)软件开发的进度和成本难以预估和控制。2008年上半年的统计数据显示,中国软件开发商不能按时完成软件开发任务的比率超过50%,只有6.7%的企业对项目有严格的基于预算的财务管理和核算体系。1.1软件与软件危机25软件危机的表现:(2)软件的质量和可靠性差。1996年6月4日,欧洲航天局研制的阿里亚娜五型火箭(Ariane 5)的初次航行产生了灾难性的后果。发射后仅仅37秒,火箭偏离它的飞行路径,爆炸并解体了。火箭上载有价值5亿美元的通信
10、卫星,连同火箭本身6亿美元付之一炬。后来的调查显示,控制惯性导航系统的计算机向控制引擎喷嘴的计算机发送了一个无效数据。在将一个64位浮点数转换成16位有符号整数时,产生了溢出。在设计Ariane 4火箭的软件时,软件开发人员小心地分析了数字值,并且确定该数据绝不会超出16位。不幸的是,他们在Ariane 5火箭的系统中简单地重新使用了这一部分,而没有检查它所基于的假设。1.1软件与软件危机26软件危机的表现:(3)软件开发的结果常常不能满足用户需求。美国政府统计署(GAO)2000年的数据:全球最大的软件消费商-美国军方-每年要花费数十亿美元购买软件,其中可直接使用的只占5%,另外5%需要做一
11、些修改,其余90%都成了垃圾(Rubbish)。1.1软件与软件危机27软件危机的表现:(4)软件维护费用逐渐升高。1992年惠普公司的数据显示,80的人员和60的费用用于软件维护。维护需求来源于软件错误、硬件系统的迅速更新和用户需求的快速变化。1.1软件与软件危机28软件危机的表现:(5)软件产业发展落后于硬件的发展速度。软件开发的生产率提高速度则远远慢于硬件,平均只有硬件的6,导致信息系统中软件的成本逐年上升,20世纪50年代,软件成本在整个计算机系统成本中所占的比例为10%-20%。目前已经达到85以上。1.1软件与软件危机29软件危机的表现:(6)对软件的需求越来越强,软件规模越来越大
12、。1992年,微 软 发 布 的 第 一 个 成 功 的 Windows系 统Windows 3.1,其代码规模是250万行,Windows 95上升到1500万行,Windows 98有1800万行,Windows XP则为3500万行,Windows Vista的代码行数达到了惊人的5000万行。Windows 7 开发从2006年开始启动,2009年10月22日正式发布,历时3年。1.1软件与软件危机30软件危机产生的原因:(1)软件开发人员继承下来的不良传统。不注重软件开发过程,忽视了分析、设计、测试、维护的工作。软件确实容易修改,但难以正确地修改且不引入新的错误。越到软件开发后期,软
13、件修改的代价越大。对于进度已落后的软件开发计划,增加人员只会让其更加落后(Brooks法则)。缺少规范性,不注意信息交流,导致开发人员难以合作,软件难以维护。1.1软件与软件危机31软件危机产生的原因:(2)大型软件开发问题。大型软件开发项目需要组织很多的人力共同完成,而多数管理人员缺乏开发大型软件系统的经验,而多数软件开发人员又缺乏管理方面的经验。各类人员的信息交流不及时、不准确,有时还会产生误解。软件项目开发人员不能有效地、独立自主地处理大型软件开发的全部关系和各个分支,因此容易产生疏漏和错误,这也是导致软件危机产生的一个原因。1.1软件与软件危机32软件危机产生的原因:(3)用户需求难以
14、明确。在软件开发出来之前,用户自己也不清楚软件开发的具体需求;用户对软件开发需求的描述不精确,可能有遗漏、有二义性,甚至有错误;在软件开发过程中,用户还提出修改软件开发功能、界面、支撑环境等方面的要求;软件开发人员对用户需求的理解与用户本来愿望有差异。1.1软件与软件危机33软件危机产生的原因:(4)缺乏正确的理论指导,缺乏有力的方法学和工具方面的支持。由于软件开发不同于大多数其他工业产品,其开发过程是复杂的逻辑思维过程,其产品极大程度地依赖于开发人员高度的智力投入。由于过分地依靠程序设计人员在软件开发过程中的技巧和创造性,缺乏正确的理论指导,缺乏有力的方法学和工具方面的支持,从而加剧了软件开
15、发产品的个性化,这也是产生软件危机的一个重要原因。1.1软件与软件危机34消除软件危机的方法:(1)应该对计算机软件有一个正确的认识。(2)必须充分认识到软件开发应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。还有最重要的一点,及早开展软件测试及早开展软件测试工作对消除软件危机有很大的作用!1.2软件测试基本概念35软件测试的发展历史:软件测试是伴随着软件的产生而产生的。早期因为软件规模小、复杂程度低,测试的含义比较狭窄,开发人员将测试等同于“调试”。到了20世纪80年代初,软件趋向大型化、复杂化,软件的质量越来越重要。这个时候,一些软件测试的基础理论和实用技术开始形成。1
16、.2软件测试基本概念36软件测试的概念:Bill Hetzel在软件测试完全指南中指出:“测试是以评价一个程序或者系统属性为目标的任何一种活动。测试是对软件质量的度量”。1983年IEEE提出的软件测试的定义是:“使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。”1.2软件测试基本概念37软件测试的概念:软件测试(Software Testing),描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。换句话说,软件测试是一种实实际际输输出出与与预预期期输输出出间间的的审核或者比较审核或者比较过程。百度软件测试的
17、经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。1.2软件测试基本概念38软件测试的意义:软件测试的意义在于保证发布出去的产品达达到到了了一一定定的的质质量量标标准准。软件测试是帮助识别开发完成的计算机软件的正确度、完全度和质量 的 软 件 过 程;是 SQA(software quality assurance)的重要子域。1.2软件测试基本概念39软件测试的目的:软件测试的最终目的确保最终交给用户的产品的功能符符合合用用户户的的需需求求,把尽可能多的问题在产品交给用户之前发现并改正。1.2软件测试基本概念40软件测试的原则:(
18、1)所有的测试都应追溯到用户需求。(2)应尽早地和不断地进行软件测试。(3)在有限的时间和资源下进行完全测试。(4)测试只能证明软件存在错误而不能证明软件没有错误。(5)充分关注测试中的集群现象。(6)程序员应避免检查自己的程序。(7)尽量避免测试的随意性。1.2软件测试基本概念41软件测试的质量度量:软件测试质量度量的目的是改进软件测试的质量,提高测试效率,改进测试过程的有效性。开展软件测试质量度量,最关键的一项工作就是对软件测试人员的工作质量度量。1.3软件测试的分类42软件测试的分类:“白盒”测试与“黑盒”测试根据是针对软件系统的内部结构,还是针对软件系统的外部表现行为来采取不同的测试方
19、法,分别称为“白盒”测试方法和“黑盒”测试方法。1.3软件测试的分类43软件测试的分类:静态测试与动态测试 根据程序是否运行,测试可以分为静态测试和动态测试。1.3软件测试的分类44软件测试的分类:手工测试与自动化测试:根据用人工的方法手动运行被测试软件还是用工具自动控制被测试软件运行将测试分为手工测试和自动化测试。1.3软件测试的分类45软件测试的分类:基于生命周期的软件测试:生命周期测试伴随着整个软件开发周期,此时测试的对象不仅仅是程序,需求、功能和设计同样要测试。如在项目需求分析阶段就要开始参与,审查需求分析文档、产品规格说明书;在设计阶段,要审查系统设计文档、程序设计流程图、数据流图等
20、;在代码编写阶段,需要审查代码,看是否遵守代码的变量定义规则、是否有足够的注释行等。测测试试与与开开发发同同步步进进行行,有利于尽早地发现问题,同时缩短项目的开发建设周期。1.3软件测试的分类46其它软件测试的分类方法:按测试层次,可以将测试分为底层测试(单元测试),接口层次(集成测试),系统层次(系统测试),用户层次(验收测试)4个。1.3软件测试的分类47其它软件测试的分类方法:按被测试的对象,可以将测试分为单元测试,程序测试,系统测试,文档测试,Web应用测试,客户端测试,数据库测试,服务器测试等。1.3软件测试的分类48其它软件测试的分类方法:按测试目的,可以将测试分为功能测试,压力测试,性能测试,可靠性测试,灾难恢复性测试,安全性测试,兼容性测试,回归测试,安装测试等。491.需求评审阶段2.测试计划阶段3.测试方案阶段4.测试设计阶段5.测试执行阶段1.4软件测试流程50软件开发模式以及对软件测试的影响:1.大棒开发模式5.螺旋开发模式2.边写边改模式6.RUP模型3.瀑布开发模式7.IPD流程开发模式4.快速原型法8.敏捷开发模式 不同的过程模型,适合于不同的类型的软件项目。所选择不同的过程模型对软件测试都有着直接的影响。1.4软件测试流程