软件工程-08
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
系统测试/接受测试执 集成测试执行
软件设计 集成测试设计
程序编码
单元测试设计
单元测试
软件工程
16
软件测试文档
V图
验证系统需求 系统需求规格说明
以此为接受测试的依据 验证软件需求
回归测试
接受测试
软件需求规格说明
系统测试 以此为系统测试的依据 验证软件设计 集成测试
软件设计规格说明
以此为集成测试的依据
软件工程
10
用户要求 用户: 我要什么?
运行结果 计算机: 相符吗? 程序运行得 到的结果
理解正确性 表达正确性
需求说明书 分析员 我可以提供 什么?
运行正确性 输入正确性 源程序 程序员 我要让计算 机怎么做?
理解正确性 设计正确性 表达正确性 设计说明书 设计员 我要让软件 做什么?
测试不能表明软件中不存在错误,它只能说明软件中 存在错误。 8 软件工程
软件测试的原则
1) 2) 3) 4) 5) 应当把“尽早地和不断地进行软件测试”作为软件开发者的座 右铭。 测试用例应由测试输入数据、执行条件和对应的预期输出结果 组成。 程序员应避免检查自己的程序。 在设计测试用例时,应包括合理的输入条件和不合理的输入条 件。 所有的测试都应当追溯到用户要求,导致程序不能满足用户要 求的错误是严重错误。
描述测试过程的主要阶段,如单元和模块测试、子系统集成测 试,… 对每一项需求进行单独的确认测试 定义在软件过程需要进行的测试 给出总的测试时间安排并相应地安排资源分配。这与整个项目 的时间安排有关。 系统地记录测试结果。然后对测试结果和测试过程进行检查, 看测试用例是否得到正常的执行。 列出测试所使用的软件工具和硬件设施。 预料可能影响测试过程的约束(如人员短缺等)
软件工程
6
8.1 软件测试的任务
软件测试的目的和定义
基于不同的立场,有两种完全不同的测试目的。 从用户的角度出发,普遍希望通过软件测试暴露软件中隐藏的错 误和缺陷,以考虑是否可接受该产品。 从软件开发者的角度出发,则希望测试成为表明软件产品中不存 在错误的过程,验证该软件已正确地实现了用户的要求。
就是为了这样一个简单的设计缺陷,全世界付出几十亿美元。
千年虫问题并不一定非要在2000年、2010年这样的“整年”爆发, 关键不在于物理时间,而在于计算机内部时间是如何表示的。只 要内部的时间表示发生了数字溢出、错位、清零等问题,千年虫 5 问题就会现身。 5 软件工程
澳大利亚昆士兰州的银行系统,由于系统从2009年12月31 日直接跳到了2016年1月1日,导致大量用户的信用卡提前 失效。同时,各种定期交易也 陷入瘫痪,银行系统不得 不紧急启用手工审核流程来处理巨潮般的交易流水。紧接 着,德国银行协会(BdB)发表警告,说该协会下发行的 高达3000万张银行 卡由于“千年虫延期十年发作的原因” 而可能有部分功能无法使用。 中国也遭遇了类似的问题,但问题目前看来集中于出租车 行业。据悉,安徽芜湖、新疆乌鲁木齐、湖北随州、辽宁 沈阳和锦州等地的几万辆出租车的计价器忽然 在2010年1 月1日出现了价格归零的故障。
•建立测试脚本
系统测试 评估测试
集成测试
•分析测试结果,提出变更请求 •分析测试情况,建立测试分析报告
•执行系统测试 •记录测试结果 •回归测试
•执行集成测试 •记录测试结果 •回归测试
软件工程
15
软件测试生存周期模型的V模型
项目计划 SVVP(软件验证和确认计划)
需求分析 行
确认测试设计/系统测试设计
软件工程
23
B.Beizer的错误统计
功能 错误
系统 错误
程序
规格说明书 功能 测试 总计 内部接口 硬件 操作系统 软件结构 控制与顺序 资源 总计 编写错误
404 147 7 558 27% 29 63 2 193 43 8 338 16% 78 4%
加工 错误
数据 错误
文档
算术 初始化 控制与次序 静态逻辑 其他 总计 类型 结构 初始值 其他 总计 和其他错误
2) 软件测试:通过执行测试数据观察系统的操 作特征(行为)是否符合要求。
软件工程 12
静态和动态的 V&V
静态验证
需求规约
概要设计
形式规约
详细设计
程序
原型
动态确认
软件工程
13
测试信息流
修改后的软件 测试结果 错误 调试
软件 配臵 测试 配臵
测试
结果 分析
测试 工具
预期结果
出错率数据
可靠性 预测的可靠性 分析
软件工程课件
第八章 软件测试工程
1
第八章 软件测试工程
8.1 软件测试的任务 8.2 软件错误 8.3 人工测试 8.4 在软件开发生存周期中的测试活动 8.5 面向对象的测试 8.6 单元测试 8.7 集成测试 8.8 系统测试 8.9 程序调试
软件工程 2
软件工程
3
软件工程
4
千年虫 (Y2K-BUG)
数据结构错误是指结构说明错误及误用数据结构的错误。数 据属性错误是指对数据属性不正确地解释而导致的错误。
动态数据错误:动态数据是在程序执行过程中暂时存 在的数据。各种不同类型的动态数据在程序执行期间 将共享一个共同的存储区域,若程序启动时对这个区 域未初始化,就会导致数据出错。 静态数据错误:静态数据在内容和格式上都是固定的。 由编译程序或其它专门程序对它们做预处理。但预处 理也会出错。 数据内容、结构和属性错误:数据内容错误是由于内 容被破坏或被错误地解释而造成的错误。
理解正确性 编码正确性
软件工程
11
在整个生存周期中各个阶段都必须应用V & V技 术。两个主要给定的操作环境下系统是否可用;
V & V技术分为两种:
1) 软件检查:对系统的各种表示进行静态分析, 以发现问题。这些检查可以借助工具进行文 档和代码分析。
6)
7) 8) 9)
测试后程序中残存的错误数目与该程序中已发现的错误数目成 正比。 严格执行测试计划,排除测试的随意性。 应当对每一个测试结果做全面检查。 妥善保存测试计划,测试用例,出错统计和最终分析报告,为 9 软件工程 维护提供方便。
软件测试的对象
软件测试并不等于程序测试。软件测试应贯穿于软件定义与开发的整个期间。 需求分析、概要设计、详细设计以及程序编码等各阶段所得到的文档,包括 需求规格说明、概要设计规格说明、详细设计规格说明以及源程序,都应成 为软件测试的对象。 测试的两个方面: 缺陷测试 V & V(验证和确认) 验证(Verification),检查软件生存期各个阶段过程活动的结果是否满足规格 说明的描述,证实各阶段和阶段之间的逻辑协调性、完备性和正确性。 确认(Validation),是比验证更广泛的过程活动。目的是想证实在一个给定的 外部环境中软件的逻辑正确性,即是否满足用户的要求。 Boehm给出两者的区分: 验证:我们是否在正确地建造一个产品 确认:我们是否在建成一个正确的产品
在上个世纪70年代,程序员为了节约非常宝贵的内存资源和硬盘 空间,在存储日期时,只保留年份的后两位,如“1980”被存为 “80”。当2000年到来的时候,问题就会出现,比如银行存款程 序在计算利息时,应该用现在的日期“2000年1月1日”减去当时 存款的日期,比如“1989年1月1日” ,结果应该是21年,如果 利息是3%,银行要付给顾客每100元,大约86元利息。如果程序 没有纠正年份只存储两位的问题,其存款年数就变为-89年,变 成顾客反要付银行1288元的巨额利息。
鉴于以上观点,IEEE在其软件工程术语标准中给软件 测试下的定义是“用人工或自动的手段来执行和评价系 统或系统部件的过程,以检验它是否满足规定的需求, 或识别期望的结果和实际的结果之间有无差别”。 测试的目的是
想以最少的时间和人力,系统地找出软件中潜在的各 种错误和缺陷。如果我们成功地实施了测试,我们就 能够发现软件中的错误。 测试的附带收获是,它能够证明软件的功能和性能与 需求说明相符合。 实施测试收集到的测试结果数据为可靠性分析提供了 依据。
软件工程
19
(2) 系统错误 外部接口错误:外部接口协议有错或太复杂,致使在 使用中出错。还包括对输入/输出格式错误理解,对 输入数据不合理的容错等。 内部接口错误:内部接口协议错、输入/输出格式错、 数据保护不可靠、子程序访问错等。 硬件结构错误:与硬件结构有关的软件错误与误用硬 件工作机制有关。 操作系统错误:与操作系统有关的软件错误与误用操 作系统工作机制有关。 软件结构错误:由于软件结构不合理或不清晰而引起 的错误。 控制与顺序错误:与事件时序、执行条件、处理优先 级及步骤错误有关。 资源管理错误:由于不正确地使用资源而产生的错误 软件工程 20
v软件工程14测试信息流可靠性分析可靠性分析测试结果分析预测的可靠性结果分析预测的可靠性调试修改后的软件调试修改后的软件软件配置软件配置测试配置测试配置测试工具测试工具测试结果预期结果错误出错率数据测试结果预期结果错误出错率数据软件工程15测试的生存周期模型??确定测试需求??制定测试策略??明确测试准则??明确资源和进度明确资源和进度??评审测试计划制定测试计划?设计测试用例输入输出环境配置设计测试用例输入输出环境配置?定义测试过程规定测试步骤验证方法评审并完善测试过程定义测试过程规定测试步骤验证方法评审并完善测试过程测试设计?建立测试脚本实施测试?执行单元测试?记录测试结果?回归测试单元测试?执行集成测试?记录测试结果?回归测试集成测试?执行系统测试?记录测试结果?回归测试系统测试?分析测试结果提出变更请求?分析测试情况建立测试分析报告评估测试软件工程16软件测试生存周期模型的v模型划项目计划??svvp软件验证和确认计划需求分析??确认测试设计计系统测试设计?系统测试接受测试执行接受测试执行计软件设计??集成测试设计?集成测试执行程序编码??计单元测试设计?单元测试软件工程17v图以此为单元测试的依据以此为集成测试的依据验证软件设计验证软件需求以此为接受测试的依据验证系统需求以此为单元测试的依据以此为集成测试的依据验证软件设计验证软件需求以此为接受测试的依据验证系统需求回归测试验证模块设计以此为系统测试的依据系统测试系统需求规格说明软件需求规格说明软件设计规格说明模块设计规格说明软件编程单元测试集成测试接受测试软件测试文档软件工程18软件测试计划?软件测试计划是制定测试过程的标准而不是描述具体的测试内容?测试计划给所有相关人员一个总的系统测试的概貌安排测试人员参加到测试中来
(3) 加工错误
算术与操作错误:在算术运算、函数求值和一 般操作过程中发生的错误。 初始化错误:初始化工作区,寄存器和数据区 有错,或数据初始化有错。
控制和次序错误:与执行路径、循环嵌套、返 回和终止条件、处理步骤有关。
静态逻辑错误:语句和表达式中的逻辑不正确。
软件工程
21
(4) 数据错误
而Glenford J. Myers则认为应该首先认定软件是有错误的,然后 用测试去发现尽可能多的错误。他于1979年提出了对软件测试的 定义:“测试是为发现错误而执行的一个程序或者系统的过程。” Myers还给出了与测试相关的三个重要观点: 测试是为了证明程序有错,而不是证明程序无错误; 一个好的测试用例是在于它能发现至今未发现的错误; 一个成功的测试是发现了至今未发现的错误的测试; 7 软件工程
软件工程
14
测试的生存周期模型
制定测试计划 •确定测试需求 •制定测试策略 •明确测试准则 •明确资源和进 度 •评审测试计划 测试设计 实施测试 单元测试 •执行单元测试 •记录测试结果 •回归测试
•设计测试用例
(输入、输出、 环境配置) •定义测试过程 (规定测试步骤、 验证方法,评 审并完善测试 过程)
114 15 271 13 120 533 26% 36 34 51 120 241 12% 322 16%
24
软件工程
8.3 人工测试
经验表明,人工测试能相当有效地查找缺陷,因 此,为了有效的保证软件质量,在一个软件的开 发过程中应至少使用一种或多种人工测试技术。 所谓人工测试,就是不用在计算机上动态执行的 测试。有统计表明,在查找缺陷方面人工测试方 法是非常有效的,它能够有效地发现30%到70% 的逻辑设计和编码缺陷。 人工测试方法主要包括桌面检查、走查、代码检 查和同行评审技术。
(5) 代码错误 代码错误主要包括:语法错误;打字错误;对语句或指令不正 确理解所产生的错误。 22 软件工程
2.
按软件生存周期阶段分类
(1) 需求错误:需求定义不合理或不正确;需求不完全;需求中含有 逻辑错误;需求分析的文档有错误等。 (2) 功能与性能错误:功能或性能规定有错误;遗漏了某些功能;规 定了某些冗余的功能;为用户提供的信息有错;信息不确切;对 异常情况处理有错误等。 (3) 程序结构错误:程序控制流或控制顺序有错误;处理过程有错误 等。 (4) 数据错误:数据定义或数据结构有错误;数据访问或数据操作有 错误等。 (5) 实现和编码错误:编码时违反编码风格要求或编码标准,包括语 法错误、数据名错误、局部变量与全局变量混淆,或程序逻辑错 误等。 (6) 集成错误:程序的内部接口、外部接口有错误;程序各相关部分 在时间配合、数据吞吐量等方面不协调。 (7) 系统结构错误:操作系统调用错误或使用错误;恢复错误;诊断 错误;分割及覆盖错误,以及引用环境的错误等。 (8) 测试定义与测试执行错误
软件工程
18
8.2 软件错误
从不同的角度有不同的分类。同一个错误可能有多个征兆,因 而它可以被归入不同的类。下面从不同角度对错误分类。 1. 按错误的性质和范围分类 (1) 功能错误 规格说明错误:规格说明未反映用户需求,不完全,有二义 性或自身矛盾。 功能错误:程序实现的功能与规格说明及用户要求的不一致。 测试错误:软件测试设计与实施发生错误。 测试标准引起的错误:对软件测试的标准要选择适当,若测 试标准太复杂,则可能导致测试过程出错。
验证模块设计
模块设计规格说明
单元测试
以此为单元测试的依据 软件编程
软件工程
17
软件测试计划
软件测试计划是制定测试过程的标准,而不是描述具体的测试内容 测试计划给所有相关人员一个总的系统测试的概貌,安排测试人员参加到测试 中来。
测试计划结构:
测试过程 需求跟踪 测试项目 测试时间安排 测试记录规程 硬件与软件需求 约束