软件基础-软件工程简介.ppt_第1页
软件基础-软件工程简介.ppt_第2页
软件基础-软件工程简介.ppt_第3页
软件基础-软件工程简介.ppt_第4页
软件基础-软件工程简介.ppt_第5页
已阅读5页,还剩116页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 软件工程概述软件生存周期软件质量与质量保证软件工程管理软件开发环境 软件工程 2 软件发展的三个阶段软件工程相关概念软件工程目标软件工程三要素 软件工程概述 3 软件发展的三个阶段 程序设计时代 50 60年代 软件指程序 软件开发关注程序编写 用汇编及机器语言 程序系统时代 60 70年代 软件指程序及说明书 软件开发包括程序设计和测试 用高级语言 软件工程时代 70年代以后 软件指程序 文档 数据 软件开发包括软件生命期 用软件语言 包括需求定义语言 软件功能语言 软件设计语言 程序设计语言等 4 软件工程相关概念 软件危机 摆脱软件危机的出路 软件开发的工程化和标准化 在软件开发过程中遇到的问题找不到解决的办法 致使问题积累起来形成了日益尖锐的矛盾 危机实例 IBM公司1963 1966年开发IBM360操作系统 项目花了5000人 年的工作量 最多时有1000人投入开发工作 写出100万行源程序 但发行的每一新版本都是上一版1000个错误的修正 事后负责人F D Brooks总结教训时说 正象一只逃亡的野兽落到泥潭中做垂死的挣扎 越是挣扎 陷的越深 最后无法逃脱灭顶的灾难 程序设计工作正像这样一个泥潭 一批批程序员被迫在泥潭中拼命挣扎 谁也没料到问题竟会陷入这样的困境 5 软件工程相关概念 软件工程 软件工程是用科学知识和技术原理来定义 开发 维护软件的一门综合性的交叉学科 软件工程是开发与维护软件的规范化系统方法 它综合应用计算机科学 数学及管理科学等原理开发软件的工程 其中计算机科学 数学用于构造模型与算法 工程科学用于制定规范 设计范型 评估成本及确定权衡 管理科学用于用于计划 资源 质量 成本等管理 6 软件工程的目标 能按时完成开发任务 及时交付使用 付出较低的开发成本 达到要求的软件功能 取得较好的软件性能 开发的软件易于移植 需要较低的维护费用 开发的软件可靠性高 7 软件工程三要素 软件工程方法软件工具软件工程过程 为软件开发提供 如何做 的技术 如怎样定项目计划 怎样实施需求分析 如何测试等 为软件工程方法提供自动或半自动软件支撑环境 如软件开发工具 测试工具等 软件开发的不同阶段可使用不同的工具 将软件工程划分为若干阶段 分配方法和工具 定义每个阶段的先后顺序和完成标志 8 软件生存周期 生存周期概念生存周期模型生存周期各阶段 9 软件生存周期 软件生存周期 softwarelifecycle 又称为软件生命期 生存期 是指从形成开发软件概念起 所开发的软件使用以后 直到失去使用价值消亡为止的整个过程 一般来说 整个生存周期包括计划 开发 运行三个时期 每一个时期又划分为若干阶段 每个阶段有明确的任务 这样使规模大 结构复杂和管理复杂的软件开发变得容易控制和管理 软件生存周期概念 10 软件生存周期 软件生存周期模型描述软件开发过程中各种活动如何执行的模型 是软件工程过程的简化的抽象描述 瀑布模型演化模型螺旋模型喷泉模型增量模型 11 软件生存周期模型 瀑布模型 优点 支持结构化软件开发 控制软件开发复杂性 促进软件开发工程化 缺点 阶段间具有顺序性 各阶段依赖性强 缺乏灵活性 适用于系统需求明确 技术成熟工程管理较严格的场合 对需求不明确的问题 开发完成后才发现不是用户所需 要纠正偏差会付出高额代价 12 软件生存周期模型2 演化模型 快速原型化方法 优点 与用户见面快 开发成功率高 缺点 开发周期长 开发成本较高 适用于需求不太明确的大系统 13 软件生存周期模型3 螺旋模型 结合了瀑布模型和演化模型的优点 加入了风险分析的因素 沿着螺旋线在坐标系的四个象限分别表达四个方面的活动 制定计划 风险分析 实施工程 客户评估 每转一圈表示一个新的版本的开发 适用于大型软件开发 14 软件生命周期 软件生命期各阶段 软件计划与可行性研究软件系统需求分析软件设计软件编码软件测试与调试软件运行与维护 软件生命期一般包括以下各阶段 15 一 软件计划与可行性研究 目的 用最小的代价在尽可能短的时间内确定该软件项目是否能够开发 是否值得去开发 然后给出可行性研究报告 成本 效益分析以及项目开发计划 可行性研究报告等文档 16 一 软件计划与可行性研究 首先需要进行概要的分析研究 初步确定项目的规模和目标 确定项目的约束和限制 把它们清楚地列举出来 然后 分析员进行简要的需求分析 抽象出该项目的逻辑结构 建立逻辑模型 从逻辑模型出发 经过压缩的设计 探索出若干种可供选择的主要解决办法 对每种解决方法都要研究它的可行性 可从以下三个方面分析研究每种解决方法的可行性 1 技术可行性2 经济可行性3 社会可行性 内容 17 软件可行性研究 1 技术可行性对要开发项目的功能 性能 限制条件进行分析 确定在现有的资源条件下 技术风险有多大 项目是否能实现 这里的资源包括已有的或可以搞到的硬件 软件资源 现有技术人员的技术水平和已有的工作基础 2 经济可行性进行开发成本的估算以及了解取得效益的评估 确定要开发的项目是否值得投资开发 经济可行性研究范围较广 包括成本 效益分析 公司经营长期策略 开发所需的成本和资源 潜在的市场前景 3 社会可行性要开发的项目是否存在任何侵犯 妨碍等责任问题 要开发项目的运行方式在用户组织内是否行得通 现有管理制度 人员素质 操作方式是否可行 三个方面的可行性 18 软件可行性研究 1 复查项目规模和目标2 研究正在使用的系统3 得到新系统的概括的逻辑模型4 导出和评价各种方案5 推荐可行的方案6 编写可行性研究报告 可行性研究的具体步骤 19 软件可行性研究 1 引言 2 可行性研究前提 3 对现有系统的分析 4 所建议系统的技术可行性分析 5 所建议系统的经济可行性分析 6 社会因素的可行性分析 7 其他可供选择方案 8 结论意见 可行性研究报告内容 20 二 软件系统需求分析 需求分析概念需求分析的基本任务结构化分析方法 21 二 软件系统需求分析 指开发人员要准确理解用户的要求 进行细致的调查分析 将用户非形式的需求陈述转化为完整的需求定义 再由需求定义转换到相应的形式功能规约 需求规格说明 的过程 近年来已提出许多软件需求分析与说明的方法如结构化分析方法和面向对象分析方法 1 需求分析概念 22 是要准确地定义新系统的目标 满足用户需要 回答系统必须 做什么 的问题 本阶段要进行以下几方面的工作 1 分析人员和用户对问题识别 双方商定对问题的综合需求 这些需求包括 功能需求 性能需求 环境需求和用户界面需求 另外还有可靠性 安全性 保密性 可移植性 可维护性等方面的需求 这些需求一般通过双方交流 调查研究来获取 并达到共同的理解 2 分析与综合 导出软件的逻辑模型 分析人员对获取的需求 进行一致性的分析检查 在分析 综合中逐步细化软件功能 划分成各个子功能 这里也包括对数据域进行分解 并分配到各个子功能上 以确定系统的构成及主要成分 并用图文结合的形式 建立起新系统的逻辑模型 3 编写文档 这一阶段的文档有 需求规格说明书 初步用户使用手册 确认测试计划 2 需求分析的基本任务 23 3 结构化分析方法 SA方法利用图形等半形式化的描述方式表达需求 简明易懂 用它们形成需求说明书中的主要部分 这些描述工具是 1 数据流图 DFD 2 描述加工逻辑的工具 结构化语言 判定表 判定树 3 数据字典 结构化分析 StructuredAnalysis 简称SA 是面向数据流进行需求分析的方法 SA是一种建模活动 该方法使用简单易读符号 根据软件内部数据传递 变换的关系 自顶向下逐层分解 描绘出满足功能需求的软件模型 24 3 结构化分析方法 1 数据流图 DFD 数据流图 DataFlowDiagram 是SA方法中用于表示系统逻辑模型的一种工具 它以图形的方式描绘数据在系统中流动和处理的过程 由于它只反映系统必须完成的逻辑功能 所以它是一种功能模型 数据流图的作用 需求分析时 作为自顶向下的工具 描述系统组成部分 为技术员 用户间交流提供有力方法 25 3 结构化分析方法 1 数据流图 DFD 数据流图由数据流 加工 又称为数据处理 数据存储 又称为文件 数据源点或终点四种基本成分组成 数据流图实例 银行取款过程 数据流 加工 数据存储 数据源点 终点 26 描述银行取款过程的数据流图 27 基本加工逻辑说明 对数据流图的每一个基本加工 必须有一个基本加工逻辑说明基本加工逻辑说明必须描述基本加工如何把输入数据流变换为输出数据流的加工规则加工逻辑说明必须描述实现加工的策略而不是实现加工的细节加工逻辑说明中包含的信息应是充足的 完备的 有用的 无冗余的 28 2 用于写加工逻辑说明的工具 结构化英语判定表判定树 3 结构化分析方法 29 1 结构化英语 结构化英语的词汇表由英语命令动词数据词典中定义的名字有限的自定义词逻辑关系词IF THEN ELSE CASE OF WHILE DO REPEAT UNTIL等组成 30 是一种介于自然语言和形式化语言之间的语言语言的正文用基本控制结构进行分割 加工中的操作用自然语言短语来表示其基本控制结构有3种 简单陈述句结构 避免复合语句重复结构 while do或repeat until结构判定结构 if then else或case of结构 31 商店业务处理系统中 检查发货单 if发货单金额超过 500thenif欠款超过了60天then在偿还欠款前不予批准else 欠款未超期 发批准书 发货单else 发货单金额未超过 500 if欠款超过60天then发批准书 发货单及赊欠报告else 欠款未超期 发批准书 发货单 32 2 判定表 如果数据流图的加工需要依赖于多个逻辑条件的取值 使用判定表来描述比较合适 33 以 检查发货单 为例 34 3 判定树 判定树也是用来表达加工逻辑的一种工具 有时侯它比判定表更直观 35 3 数据字典 数据词典 DataDictionary 简称DD 就是用来定义数据流图中的各个成分的具体含义的 对数据流图中出现的每一个数据流 文件 加工给出详细定义 3 结构化分析方法 数据字典主要有四类条目 数据流 数据项 数据存储 基本加工 数据项是组成数据流和数据存储的最小元素 36 3 数据字典 数据字典词条内容表 3 结构化分析方法 数据项 数据流 数据文件名称 别名 取消及定义 组成 组织 备注 37 实例 计算机售书系统模型 3 数据字典 3 结构化分析方法 38 售书系统数据流词条实例 发票 数据流名 发票别名 购书发票组成 学号 姓名 书号 单价 数量 总价 书费合计备注 3 数据字典 3 结构化分析方法 39 数据文件词条实例 各班学生用书表 文件名 各班学生用书表别名 组成 系编号 专业和班级编号 年级 书号 组织 按系 专业和班编号从小到大排列备注 3 数据字典 3 结构化分析方法 40 三 软件设计 1 软件概要设计2 软件详细设计 主要完成软件系统结构设计和确定各组成部分之间的相互关系 主要确定每个模块的具体执行过程 也称为过程设计 41 1 软件概要设计 概要设计基本任务概要设计基本原理 42 1 概要设计基本任务 进行软件系统总体结构设计进行软件中所使用的数据结构及数据库的设计编写概要设计文档进行概要设计的评审 43 1 概要设计基本任务 1 软件系统总体结构设计 采用某种设计方法 将一个复杂的系统按功能划分成模块 确定每个模块的功能 确定模块间的调用关系 确定模块间的接口 即模块间传递的信息 评价模块结构的质量 44 1 概要设计基本任务 2 数据结构及数据库的设计 对数据结构的设计 采用逐步细化的方法 对需求分析阶段获得的数据字典中的数据的结构特性等加以细化 对数据库的设计是指数据存储文件的设计 主要进行概念设计 逻辑设计 物理设计3方面设计 45 1 概要设计基本任务 3 概要设计文档主要包括 概要设计说明书 数据库设计说明书 进一步补充需求分析阶段编写的用户手册 修订测试计划 对测试策略 方法 步骤提出明确要求 46 1 概要设计基本任务 4 进行概要设计的评审 对设计部分是否完整地实现了需求中规定的功能 性能等要求 设计方案的可行性 处理关键的内外部接口定义的正确性 有效性 各部分间的一致性等等都一一进行评审 47 2 概要设计的基本原理 l 模块化2 抽象3 信息隐藏4 模块独立性 48 2 概要设计的基本原理l 模块化 在软件的体系结构中 模块是可组合 分解和更换的单元 模块具有以下几种基本属性 接口 功能 逻辑 状态 功能 状态与接口反映模块的外部特性 逻辑反映它的内部特性 模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程 每个模块完成一个特定的子功能 所有的模块按某种方法组装起来 成为一个整体 完成整个系统所要求的功能 49 2 概要设计的基本原理2 抽象 抽象是认识复杂现象过程中使用的思维工具 即抽出事物本质的共同的特性而暂不考虑它的细节 不考虑其他因素 软件工程过程中的每一步部可以看作是对软件解决方法的抽象层次的一次细化 在进行软件设计时 抽象与逐步求精 模块化密切相关 帮助我们定义软件结构中模块的实体 由抽象到具体地分析和构造出软件的层次结构 提高软件的可理解性 50 2 概要设计的基本原理3 抽象信息隐藏 信息隐藏指在设计和确定模块时 使得一个模块内包含的信息 过程或数据 对于不需要这些信息的其他模块来说 是不能访问的 隐藏 的意思是 有效的模块化通过定义一组相互独立的模块来实现 这些独立的模块彼此之间仅仅交换那些为了完成系统功能所必需的信息 而将那些自身的实现细节与数据 隐藏 起来 信息隐蔽为软件系统的修改 测试及以后的维护都带来好处 通过抽象 可以确定组成软件的过程实体 通过信息隐藏 可以定义和实施对模块的过程细节和局部数据结构的存取限制 51 2 概要设计的基本原理4 模块独立性 模块独立性是指每个模块只完成系统要求的独立的子功能 并且与其他模块的联系最少且接口简单 是模块化 抽象 信息隐藏这些软件工程基本原理的直接产物 如何衡量软件的独立性呢 根据模块的外部特征和内部特征 提出了两个定性的度量标准 耦合性和内聚性 将软件系统划分模块时 尽量做到高内聚低耦合 提高模块的独立性 为设计高质量的软件结构奠定基础 52 2 概要设计的基本原理4 模块独立性 耦合性 耦合性也称块间联系 指软件系统结构中各模块间相互联系紧密程度的一种度量 模块之间联系越紧密 其耦合性就越强 模块的独立性则越差 模块间耦合高低取决于模块间接口的复杂性 调用的方式及传递的信息 模块的耦合性有以下七种类型 非直接耦合 数据耦合 标记耦合 控制耦合 外部耦合 公共耦合 内容耦合 它们的耦合程度由低到高 53 2 概要设计的基本原理4 模块独立性 内聚性 又称块内联系 指模块的功能强度的度量 即一个模块内部各个元素彼此结合的紧密程度的度量 若一个模块内各元素 语句之间 程序段之间 联系的越紧密 则它的内聚性就很高 内聚性有以下七类类型 偶然内聚 逻辑内聚 时间内聚 过程内聚 通信内聚 顺序内聚 功能内聚 它们的内聚程度由低到高 54 2 软件详细设计 1 详细设计基本任务 2 结构化程序设计方法 55 1 详细设计基本任务 为每个模块进行详细的算法设计 为模块内的数据结构进行设计 对数据库进行物理设计 即确定数据库的物理结构 其他设计 根据软件系统的类型 还可能要进行以下设计 代码设计 输人输出格式设计 人机对话设计 编写详细设计说明书 为每一个模块设计一组测试用例 评审 对处理过程的算法和数据库的物理结构都要评审 56 2 结构化程序设计方法 结构化程序设计是E W Dijikstra在1965年提出的 它的主要观点是采用自顶向下 逐步求精的程序设计方法 使用3种基本控制结构构造程序 任何程序都可由顺序 选择 重复3种基本控制结构构造 详细描述处理过程常用3种工具 图形 表格和语言 图形 程序流程图 N S图 PAD图表格 判定表语言 过程设计语言 PDL 57 四 软件编码 软件编码是将上一阶段的详细设计得到的处理过程的描述转换为基于某种计算机语言的程序 即源程序代码 需注意根据项目的应用领域选择适当的编程语言 编程的软硬件环境以及编码的程序设计风格等事项 58 五 软件测试与调试 一 软件测试 软件测试概念及目的软件测试的原则软件测试方法软件测试对象测试与软件开发各阶段的关系软件测试过程测试用例设计 59 软件测试 1 软件测试概念及目的 测试阶段的基本任务 是根据软件开发各阶段的文档资料和程序的内部结构 精心设计一组 高产 的测试用例 利用这些实例执行程序 找出软件中潜在的各种错误和缺陷 软件测试是为了发现错误而执行程序的过程 在IEEE提出的软件工程标准术语中 软件测试是指使用人工或自动手段 运行或测试某个系统的过程 其目的是检验她是否满足规定的需求 或是清楚了预期结果与实际结果之间的差异 60 软件测试 2 测试的原则 在软件测试中 应注意以下指导原则 测试用例应由输入数据和预期的输出数据两部分组成 测试用例不仅选用合理的输入数据 还要选择不合理的输入数据 除了检查程序是否做了它应该做的事 还应该检查程序是否做了它不应该做的事 应制定测试计划并严格执行 排除随意性 长期保留测试用例 对发现错误较多的程序段 应进行更深入的测试 程序员避免测试自己的程序 61 软件测试 3 测试方法 一般分为两大类 动态测试方法与静态测试方法 1 静态测试静态测试指被测试程序不在机器上运行 而是采用人工检测和计算机辅助静态分析的手段对程序进行检测 2 动态测试动态测试指通过运行程序发现错误 对软件产品进行动态测试时 根据测试用例的设计方法不同一般有2种方法 分别称为黑盒测试法和白盒测试法 62 4 软件测试的对象 软件测试并不等于程序测试 软件测试应贯穿于软件定义与开发的整个期间 需求分析 概要设计 详细设计以及程序编码等各阶段所得到的文档 包括需求规格说明 概要设计规格说明 详细设计规格说明以及源程序 都应成为软件测试的对象 63 为把握软件开发各个环节的正确性 需要进行各种确认和验证工作 确认 Validation 是一系列的活动和过程 目的是想证实在一个给定的外部环境中软件的逻辑正确性 需求规格说明确认程序确认 静态确认 动态确认 验证 Verification 试图证明在软件生存期各个阶段 以及阶段间的逻辑协调性 完备性和正确性 64 65 测试信息流 66 测试信息流 软件配置 软件需求规格说明 软件设计规格说明 源代码等 测试配置 测试计划 测试用例 测试程序等 测试工具 测试数据自动生成程序 静态分析程序 动态分析程序 测试结果分析程序 以及驱动测试的测试数据库等等 67 测试结果分析 比较实测结果与预期结果 评价错误是否发生 排错 调试 对已经发现的错误进行错误定位和确定出错性质 并改正这些错误 同时修改相关的文档 修正后的文档再测试 直到通过测试为止 68 通过收集和分析测试结果数据 对软件建立可靠性模型利用可靠性分析 评价软件质量 软件的质量和可靠性达到可以接受的程度所做的测试不足以发现严重的错误如果测试发现不了错误 可以肯定 测试配置考虑得不够细致充分 错误仍然潜伏在软件中 69 5 测试与软件开发各阶段的关系 软件开发过程是一个自顶向下 逐步细化的过程软件计划阶段定义软件作用域软件需求分析建立软件信息域 功能和性能需求 约束等软件设计把设计用某种程序设计语言转换成程序代码 测试过程是依相反顺序安排的自底向上 逐步集成的过程 70 测试过程是依相反顺序安排的自底向上 逐步集成的过程 71 软件测试 6 软件测试过程 软件测试一般要经过以下4步测试 1 单元测试主要针对模块的5个基本特征进行测试 模块接口 局部数据结构 重要的执行路径 错误处理 边界条件 2 集成测试也称组装测试 是在单元测试的基础上将所有模块按照设计要求组装成一个完整的系统进行的测试 3 确认测试又称有效性测试 是检查软件的功能与性能是否与需求规格说明书中确定的指标相符合 4 系统测试是将确认通过的软件作为计算机系统的一个元素 与计算机硬件 外设 某些支持软件 数据和人员等其他元素结合在一起 在实际的使用环境下 对计算机系统进行一系列的组装测试和确认测试 72 73 7 测试用例设计 两种常用的测试方法黑盒测试白盒测试 74 黑盒测试 这种方法是把测试对象看做一个黑盒子 测试人员完全不考虑程序内部的逻辑结构和内部特性 只依据程序的需求规格说明书 检查程序的功能是否符合它的功能说明 黑盒测试又叫做功能测试或数据驱动测试 75 黑盒测试方法是在程序接口上进行测试 主要是为了发现以下错误 是否有不正确或遗漏了的功能 在接口上 输入能否正确地接受 能否输出正确的结果 是否有数据结构错误或外部信息 例如数据文件 访问错误 性能上是否能够满足要求 是否有初始化或终止性错误 76 用黑盒测试发现程序中的错误 必须在所有可能的输入条件和输出条件中确定测试数据 来检查程序是否都能产生正确的输出 但这是不可能的 77 假设一个程序P有输入量X和Y及输出量Z 在字长为32位的计算机上运行 若X Y取整数 按黑盒方法进行穷举测试 可能采用的测试数据组 232 232 264如果测试一组数据需要1ms 一年工作365 24小时 完成所有测试需5亿年 78 白盒测试 此方法把测试对象看做一个透明的盒子 它允许测试人员利用程序内部的逻辑结构及有关信息 设计或选择测试用例 对程序所有逻辑路径进行测试 通过在不同点检查程序的状态 确定实际的状态是否与预期的状态一致 因此白盒测试又称为结构测试或逻辑驱动测试 79 软件人员使用白盒测试方法 主要想对程序模块进行如下的检查 对程序模块的所有独立的执行路径至少测试1次 对所有的逻辑判定 取 真 与取 假 的两种情况都至少测试1次 在循环的边界和运行界限内执行循环体 测试内部数据结构的有效性等 80 对一个具有多重选择和循环嵌套的程序 不同的路径数目可能是天文数字 给出一个小程序的流程图 它包括了一个执行20次的循环 包含的不同执行路径数达520条 对每一条路径进行测试需要1ms 假定1年工作365 24小时 要想把所有路径测试完 需3170年 81 82 逻辑覆盖 语句覆盖判定覆盖条件覆盖 判定 条件覆盖条件组合覆盖路径覆盖 逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的技术 它属白盒测试 83 84 L1 a c e A 1 and B 0 and A 2 or X 1 A 1 and B 0 and A 2 or A 1 and B 0 and X 1 A 2 and B 0 or A 1 and B 0 and X 1 85 L2 a b d not A 1 and B 0 andnot A 2 or X 1 not A 1 ornot B 0 and not A 2 andnot X 1 not A 1 andnot A 2 andnot X 1 ornot B 0 andnot A 2 andnot X 1 86 L3 a b e not A 1 and B 0 and A 2 or X 1 not A 1 ornot B 0 and A 2 or X 1 not A 1 and A 2 ornot A 1 and X 1 ornot B 0 and A 2 ornot B 0 and X 1 87 L4 a c d A 1 and B 0 andnot A 2 or X 1 A 1 and B 0 andnot A 2 andnot X 1 88 语句覆盖 语句覆盖就是设计若干个测试用例 运行被测程序 使得每一可执行语句至少执行1次 在图例中 正好所有的可执行语句都在路径L1上 所以选择路径L1设计测试用例 就可以覆盖所有的可执行语句 L1 a c e L2 a b d L3 a b e L4 a c d 89 测试用例的设计格式如下 输入的 A B X 输出的 A B X 为图例设计满足语句覆盖的测试用例是 2 0 4 2 0 3 覆盖ace L1 A 2 and B 0 or A 1 and B 0 and X 1 L1 a c e L2 a b d L3 a b e L4 a c d 90 判定覆盖 判定覆盖就是设计若干个测试用例 运行被测程序 使得程序中每个判断的取真分支和取假分支至少经历1次 判定覆盖又称为分支覆盖 对于图例 如果选择路径L1和L2 就可得满足要求的测试用例 L1 a c e L2 a b d L3 a b e L4 a c d 91 2 0 4 2 0 3 覆盖ace L1 1 1 1 1 1 1 覆盖abd L2 A 2 and B 0 or A 1 and B 0 and X 1 not A 1 andnot A 2 andnot X 1 ornot B 0 andnot A 2 andnot X 1 L1 a c e L2 a b d L3 a b e L4 a c d 92 如果选择路径L3和L4 还可得另一组可用的测试用例 2 1 1 2 1 2 覆盖abe L3 3 0 3 3 0 1 覆盖acd L4 not A 1 and X 1 ornot B 0 and A 2 ornot B 0 and X 1 A 1 and B 0 andnot A 2 andnot X 1 L1 a c e L2 a b d L3 a b e L4 a c d 93 条件覆盖 条件覆盖就是设计若干个测试用例 运行被测程序 使得程序中每个判断的每个条件的可能取值至少执行1次 在图例中 我们事先可对所有条件的取值加以标记 如 对于第1个判断 条件A 1取真为T1 取假为条件B 0取真为T2 取假为 L1 a c e L2 a b d L3 a b e L4 a c d 94 对于第2个判断 条件A 2取真为T3 取假为条件X 1取真为T4 取假为测试用例覆盖分支条件取值 2 0 4 2 0 3 L1 c e 1 0 1 1 0 1 L2 b d 2 1 1 2 1 2 L3 b e 或 对于第1个判断 条件A 1取真为T1 取假为条件B 0取真为T2 取假为 条件覆盖 95 对于第2个判断 条件A 2取真为T3 取假为条件X 1取真为T4 取假为测试用例覆盖分支条件取值 1 0 3 1 0 4 L3 b e 2 1 1 2 1 2 L3 b e 对于第1个判断 条件A 1取真为T1 取假为条件B 0取真为T2 取假为 条件覆盖 96 判定 条件覆盖判定 条件覆盖就是设计足够的测试用例 使得判断中每个条件的所有可能取值至少执行1次 每个判断中的每个分支至少执行1次 97 测试用例覆盖分支条件取值 2 0 4 2 0 3 L1 c e 1 1 1 1 1 1 L2 b d A 2 and B 0 or A 1 and B 0 and X 1 not A 1 andnot A 2 andnot X 1 ornot B 0 andnot A 2 andnot X 1 98 and or A 1 T B 0 T X X A T F F A 2 T F X 1 F X X 1 99 条件组合覆盖 条件组合覆盖就是设计足够的测试用例 运行被测程序 使得每个判断的所有可能的条件取值组合至少执行1次 记 A 1 B 0作 A 1 B 0作 A 1 B 0作 A 1 B 0作 100 A 2 X 1作 A 2 X 1作 A 2 X 1作 A 2 X 1作测试用例覆盖条件覆盖组合 2 0 4 2 0 3 L1 2 1 1 2 1 2 L3 1 0 3 1 0 4 L3 1 1 1 1 1 1 L2 101 路径测试 路径测试就是设计足够的测试用例 覆盖程序中所有可能的路径 测试用例通过路径覆盖条件 2 0 4 2 0 3 ace L1 1 1 1 1 1 1 abd L2 1 1 2 1 1 3 abe L3 3 0 3 3 0 1 acd L4 102 测试和 测试 在软件交付使用之后 用户将如何实际使用程序 对于开发者来说是无法预测的 测试是由1个用户在开发环境下进行的测试 也可以是公司内部的用户在模拟实际操作环境下进行的测试 103 测试的目的是评价软件产品的FLURPS 即功能 局域化 可使用性 可靠性 性能和支持 尤其注重产品的界面和特色 测试可以从软件产品编码结束之时开始 或在模块 子系统 测试完成之后开始 也可以在确认测试过程中产品达到一定的稳定和可靠程度之后再开始 104 测试是由软件的多个用户在实际使用环境下进行的测试 这些用户返回有关错误信息给开发者 测试时 开发者通常不在测试现场 因而 测试是在开发者无法控制的环境下进行的软件现场应用 在 测试中 由用户记下遇到的所有问题 包括真实的以及主观认定的 定期向开发者报告 105 测试主要衡量产品的FLURPS 着重于产品的支持性 包括文档 客户培训和支持产品生产能力 只有当 测试达到一定的可靠程度时 才能开始 测试 它处在整个测试的最后阶段 同时 产品的所有手册文本也应该在此阶段完全定稿 106 五 软件测试与调试 二 调试 1 调试的目的调试的目的是确定错误的原因和位置 并改正错误 因此调试也称为纠错 软件调试是在进行了成功的测试之后才开始的工作 它与软件测试不同 调试的任务是进一步诊断和改正程序中潜在的错误 调试活动由两部分组成 确定程序中可疑错误的确切性质和位置 对程序 设计 编码 进行修改 排除这个错误 107 调试工作是一个具有很强技巧性的工作 软件运行失效或出现问题 往往只是潜在错误的外部表现 而外部表现与内在原因之间常常没有明显的联系 如果要找出真正的原因 排除潜在的错误 不是一件易事 可以说 调试是通过现象 找出原因的一个思维分析的过程 108 五 软件测试与调试 二 调试 2 调试技术 1 简单的调试方法 在程序中插入打印语句或运行部分程序 2 归纳法调试 从测试结果发现的线索 错误迹象 征兆 入手 分析它们之间的联系 导出错误原因的假设 然后再证明或否定这个假设 3 演绎法调试 是列出所有可能的错误原因的假设 然后利用测试数据排除不适当的假设 最后再测试数据验证余下的假设确实是出错的原因 4 回溯法调试 从程序产生错误的地方出发 人工沿程序的逻辑路径反向搜索 直到找到错误的原因为止 109 六 软件运行与维护 一 运行 提交用户使用 根据用户反馈意见进行下一步的系统维护 110 六 软件运行与维护 二 维护 软件维护的内容有4种 校正性维护适应性维护完善性维护预防性维护 维护阶段是软件生存周期中最后的一个阶段 也是时间最长 所花费的精力和费用最多的一个阶段 所以如何提高可维护性 减少维护的工作量和费用 这是软件工程的一个重要任务 111 软件质量与质量保证 1 软件质量软件质量是与所确定的功能和性能需求的一致性 与所成文的开发标准的一致性 与所有专业开发的软件所期望的隐含特性的一致性 2 软件质量保证软件的质量保证就是向用户及社会提供满意的高质量的产品 确保软件产品从诞生到消亡为止所有阶段的质量的活动 即确定 达到和维护需要的软件质量而进行的所有有计划 有系统的管理活动 112 软件质量与质量保证 2 软件质量保证软件的质量保证包括的主要功能有 质量方针的制定 质量保证方针和质量保证标准的制定 质量保证体系的建立和管理 明确各阶段的质量保证工作 各阶段的质量评审 确保设计质量 重要质量问题的提出与分析 总结实现阶段的质量保证活动 整理面向用户的文档 说明书等 产品质量鉴定 质量保证系统鉴定 质量信息的收集 分析和使用 113 软件工程管理 软件工程管理是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论