1给我们造成麻烦的不是我们不知道的东西,而是我们已知的东西原本不是这样!2教师自我介绍林跃进linyuejin@neusoft.edu.cn办公室电话:84832263A3220软件工程教研室计算机科学与技术系3教学要求1、考核类型:考试2、考核方式:闭卷3、期末考试所用时间:120分钟4、平时成绩、实践(实验)成绩、期末成绩的比例:20:30:505、记分方式:百分制4平时成绩给分标准平时分数50,占总成绩的50%其中,实验成绩30+平时分20平时分要注意不包括考勤,但是,考勤的评价以学院的文件为准(重点解释)平时分=作业分10+课堂提问5+学习态度55软件缺陷例子1事件1996年6月4日,Arane5发射40秒后爆炸。原因将一个64位浮点值转换为16位有符号整数值时,超出了16位整数的表示范围,而这个异常未得到正确解决6软件缺陷例子2事件1999年;火星气象卫星(MarsClimateOrbiter)到达火星之后不久就消失;火星极地登陆者(MarsPolarLander)在火星上着陆时坠毁原因地面系统软件和飞行器上软件分别使用公制和英制两种单位。7神舟七号:测试用例3万多。确保稳定,确保万无一失。基本消除缺陷8软件缺陷1、什么是软件缺陷?(1)软件未达到产品说明书中已经标明的功能;(2)软件出现了产品说明书中指明不会出现的错误;(3)软件未达到产品说明书中虽未指出但应当达到的目标;(4)软件功能超出了产品说明书中指明的范围;(5)软件测试人员认为软件难以理解、不易使用,或者最终用户认为该软件使用效果不良。9计算器的例子计算器说明书:该计算器将准确无误地进行加、减、乘、除运算。计算器不会出现崩溃、死锁或停止反应。(1)2+3,没有反应?(2)随意敲击键盘后,没有了反应?(3)还能计算某数的平方根(4)因为电池没有电,所以计算错了(5)按键很小、显示屏看不清楚102、为什么会产生软件缺陷?(1)产品需求说明书(2)设计方案(3)编写代码(4)其他图1-1软件缺陷产生的原因分布•软件产品说明书(需求)56%•其他10%•设计27%113、软件缺陷修复的费用软件在从需求、设计、编码、测试一直到交付用户公开使用后的过程中,都有可能产生和发现缺陷。随着整个开发过程的时间推移,更正缺陷或修复问题的费用呈几何级数增长。12020406080100编制说明书设计阶段编写代码测试发布13Thecostarelogarithmic$1$10$100specificationdesigncoderelease$1000+14软件测试的引入软件产品质量是企业的重要目标。软件缺陷不可能避免软件测试是发现缺陷的手段。15行业需求IT职场调查之软件测试工程师一、两大因素助推软件测试跻身IT抢手人才之列企业对测试“经济价值”的认可。国家政策的大力扶植也是软件测试大力发展二、职业前景广阔却面临人才短缺的严峻考验与开发人员比率:1:1,微软:1.7:1国内120多万软件从业者中,真正能担当测试职位的不足5万,人才缺口已超20万,并随需求逐年增长。16行业需求三、软件测试人员四大魅力元素1。就业竞争小2。高薪没商量3。多元化发展4。无性别歧视17职业现状薪金待遇测试工程师一般会分为以下几个等级:初级测试工程师、中级测试工程师、高级测试工程师和测试管理人员。不同的级别的测试工程师薪资差异很大。初级测试工程师年薪约在2-4万元左右。测试工程师年薪约在5-6万元左右。高级测试工程师年薪约8-10万元左右。18职业现状TeamLeader(测试主管)年薪在8-15万测试经理年薪在12-20万计划经理年薪在20-30万19职业现状职业特色20第一章软件测试概述1.1软件测试定义1.2软件测试技术发展1.3软件测试模型1.4软件测试技术分类1.5软件测试用例1.6软件测试原则1.7软件测试关键问题1.8软件测试与质量保证211.1软件测试定义完整定义软件测试是发现并指出软件(包含软件经过建模、需求、设计等阶段所产生的大量输出工件及程序代码)中存在缺陷的过程,这个过程指明和标注问题存在的正确位置,详细记录导致问题出现的操作步骤,及时存储当时的错误状态,以上组合在一起便于测试后问题能够准确再现。22发现问题记录问题跟踪问题再现问题历史数据231.1软件测试定义1.2软件测试技术发展1.3软件测试模型1.4软件测试技术分类1.5软件测试用例1.6软件测试信息流程1.7软件测试与验证和确认的关系1.8软件测试原则1.9软件测试中的误区1.10测试项目背景介绍241.2软件测试的发展二十世纪70年代以前;边想边测试。70年代末~80年代中期;基础理论已经形成,作为质量保证。80年代末~90年代中期;测试工具在质量和数量上不断增长,测试自动化开始广泛应用。90年后期;关注有效的过程管理对软件测试的重要性,形成各种测试模型。二十一世纪初;软件开发活动应该以测试为主导的思想。随着软件测试分工的细化和成熟,促使大量的软件测试服务机构涌现,从单一第三方测试到参与整个软件过程的测试服务。251.3软件测试模型零售店里的服装模特是一个模型会计的公式:资产=债务+所有者权益也是一个模型模型是对现实的抽象概括,对某些真实事件的简化表征。261.3软件测试模型瀑布测试模型需求设计开发测试27线性模型是最早出现的软件工程模型,又称瀑布模型waterfallmodel28问题定义可行性研究需求分析概要设计详细设计编码测试运行维护评价返回计划维护阶段开发阶段定义阶段定义做什么的问题结构设计如何做的体系结构修改设计需求说明书设计说明书源程序清单测试报告维护报告29线性模型(瀑布模型)--优点(1)易于理解(2)调研开发呈阶段性(3)强调早期计划及需求调查(4)确定何时能够交付产品及何时进行评审与测试30线性模型(瀑布模型)--缺点(1)需求调查只进行一次,不能适应需求的变化(2)顺序的开发流程,使得开发中的经验教训不能反馈到该项目中去(3)不能反映出软件开发过程的反复性和迭代性(4)没有包含任何类型的风险评估(5)开发中出现的问题直到开发后期才能显露,因此失去了及早进行纠正的机会31原型模型初步需求分析快速设计建造原型用户评估原型(新需求)对原型加工开发产品开始结束原型模型(rapidprototypemodel)是为了确定需求而提出的实际模型。打破传统的自顶向下结构化开发模型方法,在计划和需求分析后,把系统主要功能接口做为设计依据,快速开发出软件样机,及时征求用户意见,正确确定系统需求,然后再进一步准确地进行系统设计与实现。优点:与用户见面快;开发成功率高,适合于需求不确定的大系统。缺点:周期长,开发成本高。32螺旋模型螺旋模型沿着螺线旋转(一个螺旋式周期),在四个象限上分别表达四个方面的活动,即:制定计划──确定软件目标,选定实施方案,弄清项目开发的限制,选定完成目标的策略风险分析──分析所选方案,考虑如何识别和消除风险,风险角度分析该策略实施工程──实施软件开发,启动一个开发阶段客户评估──评价前一步开发工作,提出修正建议,计划下一轮的工作特点瀑布模型+快速原型+风险分析迭代过程3334软件测试模型“V”模型时间用户需求系统需求总体设计详细设计编码单元测试集成测试系统测试验收测试方案系统测试方案集成测试方案单元测试方案设计人员开发人员用户代表和系统测试人员系统测试人员开发人员用户代表验收测试开发/测试人员35“V”模型36“V”模型V模型:20世纪80年代后期,PaulRook提出了著名的软件测试的V模型,是瀑布模型的变种,它反映了测试活动与分析和设计的关系,非常明确的表明了测试过程中存在的不同级别,以及各测试阶段与开发过程中的各阶段的对应关系,图中的箭头代表了时间方向,左边下降的是开发各阶段,右边上升的是测试过程的各个阶段。37“V”模型V模型指出:单元测试和集成测试应检测程序的执行是否满足软件设计的要求;系统测试应检测系统功能,性能的质量特性是否达到系统要求的指标;验收测试确定软件的实现是否满足用户需要或合同的要求.38“V”模型V模型的缺陷仅仅把测试过程作为在需求分析、系统设计及编码之后的一个阶段忽视了测试对需求分析,系统设计的验证,一直到后期的验收测试才被发现。39“W”模型Evolutif公司提出了W模型的概念,增加了软件各开发阶段中应同步进行的验证和确认活动,明确了测试与开发的并行性.40“W”模型41W模型测试伴随着整个软件开发周期测试的对象不仅仅是程序,需求、设计和功能同样要测试根据W模型的要求,一旦有文档提供,就要及时确定测试的条件、编写测试用例42W模型的局限性在W模型中,需求、设计、编码等活动被视为串行的,同时,测试和开发活动也保持着一种线性的前后关系,上一阶段完全结束,才可正式开始下一个阶段工作。无法支持迭代、自发性以及变更调整。43H模型这个示意图仅仅演示了在整个生产周期中某个层次上的一次测试“微循环”。图中的其他流程可以是任意开发流程。测试就绪点测试流程其他流程(如设计流程)测试准备测试执行44H模型软件测试不仅仅指测试的执行,还包括很多其他的活动。软件测试是一个独立的流程,贯穿产品整个生命周期,与其他流程并发的进行。软件测试要尽早准备,尽早执行。软件测试是根据被测物的不同而分层进行的。不同层次的测试活动可以按照某个次序先后进行的,但也可能是反复的。451.4软件工程与软件测试的关系46测试在开发阶段的作用如下:(1)项目规划阶段:负责从单元测试到系统测试的整个测试阶段的监控。(2)需求分析阶段:确定测试需求分析、系统测试计划的制定。其中,测试需求分析是对产品生命周期中测试所需求的资源、配置、每阶段评判通过的规约;系统测试计划则是依据软件的需求规格说明书,制定测试计划和设计相应的测试用例。(3)概要设计和详细设计阶段:确保集成测试计划和单元测试计划完成。(4)编码阶段:由开发人员进行自己负责部分的测试代码。软件工程与软件测试的关系471.5软件测试的分类按照开发阶段划分单元测试:模块测试,检查每个程序单元是否正确实现详细设计说明中的模块功能等。集成测试:组装测试,将所有的程序模块进行有序、递增的测试,检验程序单元或部件的接口关系系统测试:检查完整的程序系统能否和系统(包括硬件、外设和网络、系统软件、支持平台等)正确配置、连接,并满足用户需求。确认测试:证实软件是否满足特定于其用途的需求,是否满足软件需求说明书的规定。验收测试:按照项目任务或合同,供需双方签订的验收依据文档进行的对整个系统的测试与评审,决定是否接受或拒收系统。48软件测试的分类按照测试技术划分白盒测试:通过对程序内部结构的分析、检测来寻找问题。检查是否所有的结构及逻辑都是正确的,检查软件内部动作是否按照设计说明的规定正常进行。--结构测试黑盒测试:通过软件的外部表现来发现错误,是在程序界面处进行测试,只是检查是否按照需求规格说明书的规定正常实现。灰盒测试:介于白盒测试与黑盒测试之间的测试,关注输出对输入的正确性;同时,也关注内部表现,不像白盒那样详细,只是通过一些表征性现象、事件、标志来判断内部的运行状态。49软件测试的分类按照测试实施组织划分开发方测试:开发方通过检测和提供客观证据,证实软件的实现是否满足规定的需求,在开发环境下,开发方对提交的软件进行全面的自我检查。用户测试:在用户的应用环境中,用户通过运行软件,检测软件实现是否符合自己预期的要求,这里指用户的使用性测试。第三方测试:介于软件开发方和用户方之间的测试组织的测试。50定义所谓测试用例,就是指对一项特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,并形成文档。软件测试用例51软件测试用例用例的作用指导测试的实施规划测试数据的准备编写测试脚本的设计规格说明书