1、测试计划与软件缺陷测试计划与软件缺陷北大青鸟专用陶陶2009-3-15本课程是软件测试重点课程。本课程主要介绍软件测试的基本概念和基础知识、如何编写测试计划、识别软件缺陷、编写缺陷报告等。通过学习,学员可以掌握软件测试的流程、软件测试的策略和分类,掌握缺陷的分类和优先级等,从而对测试有一个整体的认识。本课程中介绍了 Bugzilla 缺陷跟踪管理系统(测试工具)。总体来说,本课程将使学员掌握软件测试相关的大部分基础知识。目录第1章 什么是软件测试 4软件的定义 4软件测试的产生 4软件测试的意义 4软件测试的概念 4软件测试的定义 4软件测试活动一般包含 4软件测试的目的 5测试的目的 5测试
2、与调试的区别 5软件测试员必备的素质 5第2章 识别和描述缺陷 5产生缺陷的原因 5判断发现的问题是否是缺陷的方法 6再现(又叫重现)与优化缺陷的必要性 6再现与优化缺陷的方法 6怎样有效记录缺陷 6第3章 识别和描述缺陷实践(略) 7第4章 编写和管理缺陷报告 7缺陷报告的用途 7缺陷分类 7缺陷报告的分类 7缺陷报告的处理流程 8使用Bugzilla缺陷跟踪系统 9小结 9第5章 使用缺陷跟踪系统(略) 9第6章 编写软件测试计划 9软件生命周期 9软件生命周期的瀑布模型 10软件生命周期的螺旋模型 10软件测试的生命周期 11测试计划内容 11风险和问题 11第7章 制定软件测试计划实战
3、(略) 12第8章 软件测试流程和分类 12软件测试流程图(需求阶段) 12软件测试流程图(设计编码阶段) 12软件测试流程图(集成、系统、验收) 12软件测试的过程 13软件测试的分类 13第9章 编写缺陷报告实战(略) 14第10章 正确理解软件测试 14软件测试的原则 14什么是评审 14软件质量与软件过程的关系 14软件测试与软件过程的关系 15软件测试与软件质量的关系 15正确认识软件测试 15关于处理缺陷 16第11章 编写缺陷报告实战(略) 16第12章 软件测试计划 16什么是测试计划 16为什么要制定测试计划 16什么时候开始制定测试计划 16软件测试计划的基本结构 16第1
4、3章 调整测试计划实战(略) 17第14章 软件与软件测试 17软件的特点 17软件的分类 17关于单元测试 17单元测试的意义 17桩模块(Stub)和驱动模块(Driver) 18关于集成测试 18第15章 处理缺陷报告实战(略) 18第16章 软件测试经验分析(略) 18第17章 处理缺陷报告实战(略) 18第18章 软件测试评估总结文档组织 18评估的方法 18第19章 编写测试总结实战(略) 19第20章 软件测试过程改进 19过程改进的步骤 19软件测试的六个要点 20第1章 什么是软件测试软件的定义软件(software)是计算机系统中与硬件(hardware)相互依存的另一部分
5、,它是包括程序(program)、文档(document)的完整集合。 软件与程序的区别软件=程序+文档软件测试的产生原因一:程序规模的爆炸式增长 程序代码规模显著增大 程序结构和算法更加复杂 程序模块间接口增多原因二:在程序员与用户需求间寻找平衡点 程序员在开发过程关注什么? 设计需求 技术内涵 用户关注什么? 满足自身特定的需求 优秀的软件产品的特点是什么? 在程序自身的技术内涵和用户特定领域的需求间找到平衡点软件测试的意义解放程序员和售后服务人员软件测试可以降低软件质量风险,使程序员能够更专心于解决程序的算法和效率;同时经过严格检验的完整产品也减轻了售后服务人员的工作量。 软件测试的概念
6、1. 是为了发现错误而执行程序的过程。2. 应关心程序的效率和鲁棒性等因素。3. 检验软件是否满足规定的需求。4. 弄清预期与实际结果之间的差别。备注:所谓“鲁棒性”,是英文“robust”的译音,指强壮、健壮的意思。软件的“鲁棒性”,是指系统在一定条件下维持某些性能的特性,简单地说,就是适应各种各样的变化的能力。鲁棒性越强,系统精确度就愈高,性能越好。 软件测试的定义使用人工或自动手段,来运行或测试某个系统的过程。其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。软件测试活动一般包含1. 制订测试计划2. 设计测试用例3. 实施测试4. 提交缺陷报告5. 测试总结 软件测
7、试的目的测试是程序的执行过程,目的在于发现错误。一个成功的测试用例在于发现至今未发现的错误。一个成功的测试是发现了至今未发现的错误的测试。测试的目的1. 确保产品完成了它所承诺或公布的功能,并且用户可以访问到的功能都有明确的书面说明。2. 确保产品满足性能和效率的要求3. 确保产品是健壮的和适应用户环境的测试与调试的区别测 试调 试发现软件的错误(测试人员不负责修改错误)确定程序中错误的确切位置,对程序(设计,编码)进行修改,排除错误。贯穿整个软件生命周期主要在开发阶段测试人员和程序员参与程序员参与软件测试员必备的素质 责任心 沟通能力 团队合作精神 耐心、细心、信心 时时保持怀疑态度,并且有
8、缺陷预防的意识 具备一定的编程经验第2章 识别和描述缺陷缺陷:不满足用户确定需求注:缺陷不仅仅特指那些我们常见的程序错误,那些“不符合设计要求”和“不满足用户需求的”的问题也是缺陷,而且是更加严重的缺陷。产生缺陷的原因1. 人员之间的沟通交流不够,交流上有误解或者根本不进行交流2. 文档不完善3. 需求不断的变化4. 参与人员的过度自信5. 程序设计本身有错误6. 软件复杂性7. 工期短,任务重,时间压力大8. 软件开发工具与系统软硬件的支持判断发现的问题是否是缺陷的方法1. 通过参考文档来确认缺陷(辅助工具:需求分析书、用户手册、联机帮助)2. 通过了解软件产品的行业背景(或参考同类典型软件
9、)来发现缺陷3. 通过沟通来确认和识别缺陷再现(又叫重现)与优化缺陷的必要性 优化缺陷并不是指优化缺陷本身,而是优化缺陷的再现步骤。 关于软件中“随机”出现的缺陷。所谓“随机”软件缺陷不过是对软件缺陷重现状态的一种描述方法,将产生这种“随机”缺陷的所有输入条件筛选出来之后,这种在测试中的“随机”出现的缺陷就会百分之百地重现。再现与优化缺陷的方法1. 不要想当然的接受任何假设2. 查找时间依赖和竞争条件的问题3. 与压力和负荷相关的边界条件软件缺陷、内存泄漏和数据溢出缺陷的发生有一定的前提条件4. 状态缺陷仅在特定软件状态中显露,状态缺陷的例子是软件缺陷仅在软件第一次运行或者在此第一次运行之后出
10、现5. 考虑资源依赖性和内存、网络、硬件共享的相互作用6. 关注硬件的失效问题,硬件可能不按照预定方式工作7. 关注软件的失效问题,对缺陷的修改可能会引发新的缺陷8. 从阅读缺陷报告入手怎样有效记录缺陷1. 保证重现缺陷2. 分析故障,使用最少步骤复现故障3. 包含所有重现缺陷的必要步骤4. 方便阅读5. 尽量简单一个缺陷一个报告6. 注意自己的语气7. 值得注意的经验第3章 识别和描述缺陷实践(略)第4章 编写和管理缺陷报告缺陷报告的用途1. 记录缺陷2. 缺陷分类3. 缺陷跟踪缺陷分类1. 按问题引出不同1) 按功能(模块)2) 按缺陷的严重程度3) 影响进度的问题4) 死机5) 功能问题
11、6) 界面问题7) 建议 2. 按修复缺陷的优先级1) 应立即修复的问题2) 在产品发布之前必须修复的问题3) 如果时间允许应该修复的问题4) 可以在发布版本中存在的问题备注:缺陷的严重程度和优先级各软件公司可根据实际情况自行确定。缺陷报告的分类1) 按缺陷所处状态分类待确认的新提交的已分配的问题未解决的待返测的待归档的已归档的 2) 按处理意见分类已修改的不是问题无法修改以后版本解决保留重复无法重现缺陷报告的处理流程测试经理或测试人员测试人员测试人员开发人员测试经理或开发经理缺陷报告处理流程一缺陷报告处理流程二缺陷报告处理流程三使用Bugzilla缺陷跟踪系统v Bugzilla各项内容含义
12、 硬件平台和操作系统 版本 报告优先级 严重程度 报告人 指定处理人 概述 邮件抄送列表 从属关系 附加描述v Bug报告检索小结1. 缺陷报告的分类1) 按处理意见分类2) 按处理状态分类2. 缺陷报告处理流程1) 提交缺陷报告2) 处理缺陷报告3) 返测缺陷报告4) 关闭缺陷报告第5章 使用缺陷跟踪系统(略)第6章 编写软件测试计划软件生命周期软件开发全部过程、活动和任务的结构框架,是从可行性研究到需求分析、软件设计、编码、测试、软件发布维护的过程。软件生命周期的瀑布模型计划、需求分析、软件设计(概要设计和详细设计)、编码、测试、运行和维护。特点:1. 非常强调产品的定义2. 分立的,没有
13、交叉的3. 无法回溯4. 测试软件是生命周期的一个阶段软件生命周期的螺旋模型确定目标、可选方案和限制条件-指出并解决风险-评估方案-本阶段开发和测试-计划下一阶段-确定进入下一阶段的方法。特点:1. 开始不必详细定义所有细节2. 从小开始,定义重要功能,努力实现3. 接受反馈,进入下一次循环4. 测试活动贯穿于每个循环 首先螺旋模型是遵从瀑布模型的.即需求-架构-设计-开发-测试的路线.螺旋模型最大的价值在于整个开发过程是迭代和风险驱动的.通过将瀑布模型的多个阶段转化到多个迭代过程中,以减少项目的风险. 螺旋模型的每一次迭代都包含了以下六个步骤:1. 决定目标,替代方案和约束2. 识别和解决项
14、目的风险3. 评估技术方案和替代解决方案4. 开发本次迭代的交付物和验证迭代产出的正确性.5. 计划下一次迭代6. 提交下一次迭代的步骤和方案. 软件测试的生命周期制定测试计划、测试设计和开发、实施测试、评估测试。测试计划内容1. 测试目的与项目简介(目的、背景、范围)2. 测试参考文档和提交文档3. 测试策略(功能测试、界面测试、值域测试、压力测试、负载测试、安装测试、安全测试、版本测试、恢复测试、裸机测试等)4. 确认测试5. 资源(角色、系统)6. 测试进度(资源要求与时间安排、项目里程碑)7. 测试人员分配8. 风险分析风险和问题 市场的压力 测试时间不够,主要是功能冻结后的系统测试的
15、时间可能不够 测试资源是否能及时到位(设备和人员) 测试人员的培训 开发进度的变化,需求或设计的变更 测试人员的基础培训 开发组的版本控制第7章 制定软件测试计划实战(略)第8章 软件测试流程和分类软件测试流程图(需求阶段)软件测试流程图(设计编码阶段)软件测试流程图(集成、系统、验收)软件测试的过程软件测试的分类v 按测试策略分类v 黑盒/白盒测试、动态/静态测试、手工/自动测试v 按测试阶段分类v 单元测试、集成测试、(确认测试)、系统测试、验收测试v 按测试方法分类v 功能测试、性能测试、压力测试、负载测试、易用性测试、安装测试、界面测试、配置测试、文档测试、兼容性测试、安全性测试、恢复
16、测试单元测试:又称模块测试,是最小单位的测试,单元测试是在系统开发过程中进行的测试活动。目的是确保每个模块能正常工作。集成测试:又称综合测试,是在单元测试的基础上将通过测试的单元模块按照设计要求组装成系统或子系统,再进行测试。目的在于检验与软件设计相关的程序结构问题。确认测试:软件在由集成测试进入系统测试之前,需要对软件是否可以进入系统测试进行评估过程的测试。系统测试:是将通过确认测试的软件,作为整个基于计算机系统的一个元素,与计算机的硬件、外设、某些支持软件、数据和人员等其他系统元素结合在一起,在实际的运行环境下,对计算机系统进行全面的功能覆盖。验收测试:是软件产品交付用户正式使用前的最后一
17、头工序,是以用户为主的测试。目的是向客户和承包人证明产品是可靠的。黑盒测试:又称功能测试、数据驱动测试或基于规格说明书的测试。白盒测试:又称结构测试、逻辑驱动测试或基于程序本身的测试。冒烟测试:对应用程序关键的功能进行的测试。回归测试:对某些已经进行过的测试的某些子集再重新进行一遍,已保证上述改变不会传播无法预料的副作用或引发的问题。Alpha测试:由用户在开发者的场所进行,并且在开发者对用户的“指导”下进行测试。Beta测试:由软件的最终用户们在一个或多个客房场所进行。手工测试与自动测试的区别:略第9章 编写缺陷报告实战(略)第10章 正确理解软件测试软件测试的原则1. 尽早地进行软件测试,
18、并把软件测试贯穿于整个软件生命周期。2. 软件测试应追溯需求。3. 测试应由第三方来构造。4. 穷举测试是不可能的,要遵循Good-enough原则。5. 必须确定预期输出结果。6. 必须彻底检查每个测试结果。7. 充分注意测试中的群集现象。8. 其他值得注意的规律和经验。什么是评审在正式的会议上将软件项目的成果(包括各阶段的文档、产生的代码等)提交给用户、客户或有关部门人员对软件产品进行评审和批准。其目的是找出可能影响软件产品质量、开发过程、维护工作的适用性和环境方面的设计缺陷,并采取补救措施,以及找出在性能、安全性和经济方面的可能的改进。 软件质量与软件过程的关系 软件质量:软件产品的特性
19、可以满足用户的功能、性能需求的能力。 软件过程:软件生命周期中的活动,一般包括软件需求分析、软件设计、软件编码、软件测试、交付、安装和软件维护。 软件过程的优劣决定了软件质量的高低,好的过程是高效高质量的前提。人员和过程是决定软件质量的关键因素,高质量的人员和好的过程应该得到好的产品。软件测试与软件过程的关系 在软件过程中注意把握测试的对象 软件测试在软件生存周期中的位置 软件测试在软件生存周期中占有非常重要的位置,是对软件规格说明、设计和编码的最后终审。软件测试与软件质量的关系 软件系统的开发包括一系列生产活动,其中由人带来的错误因素非常多。错误可能出现在程序的最初 ,其实目标可能是错误的或
20、描述不完整,也可能在后期的设计和开发阶段 ,因为人们不能完好无缺地工作和交流,软件开发过程中必须伴有质量保证活动。 软件测试是软件质量保证的重要手段,是规约、设计和编码的最终检查正确认识软件测试1. 软件的质量不是靠测出来的2. 软件测试真的比开发容易么? 测试人员发现缺陷是测试的初步,还要分析定位缺陷;而且测试人员需要发现潜在的难以被发现的缺陷 测试人员需要开发测试工具和自动测试脚本 测试人员必须精通整个业务 3. 软件测试需要开发与测试人员的共同努力 破坏性、建设性 考虑角度不同4. 软件测试不是软件开发过程中的一个阶段(V模型)计划验收测试计划系统测试计划集成测试计划单元测试关于处理缺陷
21、1. 注意缺陷报告的处理成本2. 修改缺陷要量力而行3. 关注被推迟修改的缺陷4. 如果决定据理力争就一定要赢第11章 编写缺陷报告实战(略)第12章 软件测试计划什么是测试计划软件测试计划就是在软件测试工作正式实施之前明确测试的对象,并且通过对资源、时间、风险、测试范围和预算等方面的综合分析和规划,保证有效的实施软件测试。为什么要制定测试计划1. 把知识和经验直接转化为执行任务的具体方法2. 促进团队间关于测试任务和过程的交流3. 为组织、安排和管理测试项目提供一个整体框架4. 对项目执行过程中的风险进行分析,并制定相关的应对策略什么时候开始制定测试计划1. 软件测试计划应当尽早的制定2.
22、软件测试计划在测试活动中处于中心位置3. 它设定了测试准备工作和执行测试的必备的条件4. 同时形成了测试过程质量保证的基础软件测试计划的基本结构v 测试计划的简介v 测试项目说明v 需要测试的项目清单v 测试手段和策略v 项目通过或失败的标准v 暂停和重新启动测试的标准v 测试的可交付性v 测试任务v 环境的需求v 职责v 人员和培训需求v 进度表v 风险及偶然事故的预测第13章 调整测试计划实战(略)第14章 软件与软件测试软件的特点v 软件是一种逻辑实体v 软件的生产与硬件的生产不同v 软件运行和使用没有机械磨损和老化问题v 开发和运行对计算机系统有一定的依赖v 目前还没有摆脱手工艺的开发
23、方式v 软件是复杂的v 软件成本相当昂贵v 软件的作用越来越突出v 相当多的软件工作涉及到社会因素软件的分类按软件的技术特点划分 业务(Business)软件v 管理信息系统(MIS)v 企业资源规划系统(ERP)v 决策支持系统(DSS) 科技计算软件(图形计算) 嵌入式(Embedded)软件v 首先在宿主机(HOST)上用某种语言开发,经交叉编译后成为单片机的机器码程序,“烧入”单片机,称为嵌入式。 实时(Real-time)软件(火灾自动报警系统) 个人计算机软件 人工智能软件人工智能是相对于人类智能而言的。它是指用机械和电子装置来模拟和代替人类的某些智能。人工智能也称“机器智能”或“
24、智能模拟”。当今人工智能主要是利用电子技术成果和仿生学方法,从大脑的结构方面模拟人脑的活动,即结构模拟。 关于单元测试v 单元测试多采用白盒测试技术v 静态审查代码v 动态单元测试单元测试的意义 一个好的单元测试将会在产品开发的阶段发现大部分的缺陷,并且修改它们的成本也很低 在软件开发的后期阶段,缺陷的发现并修改将会变得更加困难,并要消耗大量的时间和开发费用 无论什么时候做出修改都要进行回归测试 经过单元测试的系统,系统集成过程将会大大地简化 选择正确的测试策略桩模块(Stub)和驱动模块(Driver) 桩模块:集成测试前要为被测模块编制一些模拟其下级模块功能的“替身”模块,以代替被测模块的
25、接口,接受或传递被测模块的数据,这些专供测试用的“假”模块称为被测模块的桩模块。 驱动模块在大多数场合称为“主程序”,它接收测试数据并将这些数据传递到被测试模块。关于集成测试v 非增式集成方法v 增式集成方法 自顶向下测试 自底向上测试第15章 处理缺陷报告实战(略)第16章 软件测试经验分析(略)第17章 处理缺陷报告实战(略)第18章 软件测试评估总结文档组织评估的方法1. 覆盖评测 基于需求的测试覆盖 测试覆盖(已执行的)Tx/RfT 成功的测试覆盖(已执行的)Ts/RfT 基于代码的测试覆盖 测试覆盖Tc/Tiic 2. 质量评测 缺陷报告 缺陷分布(密度)报告 缺陷状态与优先级 缺陷状态与严重性 缺陷龄期报告 缺陷趋势报告 性能评测 动态监测 响应时间/吞吐量 百分位报告 比较报告 追踪报告第19章 编写测试总结实战(略)第20章 软件测试过程改进过程改进的步骤 填写附录表格(步骤一) 拟订改进目标(步骤二) CMM 把过程改进当项目处理(步骤四) 逐步引入变更(步骤六)软件测试的六个要点 测试过程的质量决定测试工作的成败 使用早期软件生存周期测试技术可避免缺陷转移到后续阶段 测试工具应用(捕获/回放工具、结构覆盖工具) 改进测试过程必须有专人负责 测试是一个专业技术学科,要求富有经验的专门技术人员 培养创新的、积极的合作精神
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1