1、 1 第一章 软件工程概述 1.什么 是软件? 软件 是 一系列 按照特定顺序组织的计算机数据和指令 的 集合,包括程序、数据和文档 2.什么 是软件 危机 ,其内容主要是指什么? ( 1)软件危机 指 落后 的软件生产方式无法满足迅速增长的计算机软件需求, 从而 导致软件开发 与 维护过程中 出现 一系列 问题 的现象。 ( 2)主要 表现 开发进度难以预测 开发成本难以控制 用户 对产品功能难以满足 产品质量无法保证,难以维护 缺少适当的文档资料 3.什么是 软件工程? 软件工程 是应用 计算机 科学、数学及 管理科学 等原理开发软件的工程。它 借鉴传统工程 的原则、方法,以 达到 提高软
2、件 质量 , 降低开发 成本 的 目的。 4.软件工程 的目标及其组成部分 ( 1)目标: 在给定成本、进度的前提下,开发出具有适用性、有效性、可修改性、可靠性、可理解性、可维护性、可重用性、可移植性、可追踪性、可互操作性和满足用户需求的软件产品。 2 ( 2)组成 部分 方法 : 是指产生某些结果的形式化过程。 工具 : 是用更好的方式完成某件事情的设备或自动化系统,如各种集成开发环境、编译工具、测试工具等。 过程 : 生产特定产品的工具和技术的结合 5.软件 开发方法的定义 软件开发方法是一种使用早已定义好的技术集及符号表示习惯组织软件生产过程的方法。 主要有:结构化方法、 可视化 开发方
3、法和面向对象的开发方法 等 6. 好的软件的一些主要衡量指标。例如 McCall 的质量模型。 第二章 过程 和生命周期建模 1. 什么是软件生命周期?主要分为哪些阶段?各个阶段的主要任务及产生的主要制品? ( 1)软件生命 周期 是 指 软件的产生直到报废或停止使用的 过程 。 ( 2) 阶段 、任务及制品 问题定义: 弄清 “用户 需要计算机解决什么问题 ”, 提出 关于“系统 目标与范围的说明 ”, 提交3 用户审查和确认。 可行性研究 :了解用户要求和现实环境,从技术、经济、市场等方面研究并论证开发该软件系统的可行性 。 需求分析 : 确定 用户对待开发软件系统的需求,包括功能、性能、
4、运行环境约束。 编写 需求规格说明书和初步的 用户 手册。 概要(总体) 设计 : 根据 SRS 建立 目标软件系统总体结构、设计全局数据库和数据结构,规定设计 约束 ,制定 集成 测试计划 详细 设计 : 细化 概要设计生成的各个模块,详细描述模块的内部细节( 算法 、数据结构 等 ) ,形成可编程的程序模块 ,制定 单元测试计划 程序 编码 :根据 详细设计规格说明书编写源程序 集成 测试: 根据 概要设计规格说明书,将经过单元测试的模块逐步 进行 集成和测试 确认 测试: 根据 软件需求规格说明书,测试软件系统是否满足用户的需求 运行 维护: 对使用 后的软件 进行 维护,包括修正错误,
5、增加功能,搬迁新 环境 等 性能维护 。 2.需求分析的定义。 在软件工程中,需求分析指的是在建立一个新的或改变一个现存的电脑系统时描写新系统的目的、范围、定义和功能时所 要做的所有的工作。 即 确定要计算机 “做什么 ”,要达到什么样的效果。 3.典型的软件开发过程模型的特点(优缺点)及要求,特别是原型法、瀑布模型、螺旋模型、增量和迭代等。 一 、 瀑布 模型 4 需求分析 系统分析 程序设计 编码 单元测试和 集成 测试 系统测试 验收测试 运行 和维护 ( 1)要求: 一个开发阶段必须在另一个开发阶段开始之前完成。 当 客户引发 的所有需求都已经过完整性和一致性分析,并形成需求文档之后,
6、开发团队才能够开始进行 系统 设计活动。 每一个 过程活动 都有 与其 相关联的里程碑和可交付产品。 ( 2)特点 : 优点: 采用 规范 的 结构化 方法;严格规定每个阶段提交的文档;要求每个阶段交出的产品必须经过验证 缺点 : 对如何 处理开发中产品和活动的变化没有提供相关指导;将软件开发视为制造而不是创造;创造一个产品没有迭代的活动;需要等待很长的时间 二、 原型法 原型法是指在获取一组基本的需求定义后,利用高级软件工具可视化的开发环境,快速地建立一个目标系统的最初版本,并把它交给用户试用、补充和修改,再进行新的版本开发。反5 复进行这个过程,直到得出系统的“精确解”,即用户满意为止。
7、( 1)要求 (过程) 确定用户 的基本需求;构造 初始 原形;运行、评价、修改原形 ;形成 最终的管理信息系统 ( 2) 特点 优点:符合人们认识事物的规律,系统开发循序渐进,反复修改, 减少开发 中的风险和不确定性 ;开发周期短, 成本 相对少 。 缺点: 忽略 软件的总体质量和长期的可维护性 ;开发过程 要 经过 多次反复 修改评价, 不便于管理 ;开发人员易将原型取代系统分析;缺乏规范化的文档资料 适用范围:处理过程明确、简单系统;涉及面窄的小型系统 三 、 阶段化 开发: 增量和 迭代 增量开发 :需求文档中指定的系统按功能划分为子系统。定义 发布时 首先定义一个小的功能子系统,然后
8、 在 每一个新的发布中增加 新 功能。 迭代 开发 : 一开始就提交一个完整的系统,然后 在 每一个新的发布中改变每个子系统的功能。 特点:缩短 循环周期 , 客户可以 提前获得 一部分 系统 功能 四、 螺旋模型 螺旋模型的 每个迭代都围绕 4 个 主要活动:计划 ; 确定目标、可选方案及约束 ; 评估可选6 方案及风险 ;开发 与测试 特点 : 优点:有利于 软件重用,重视软件质量;减少过多测试 缺点 : 风险驱动 ,需要丰富的风险评估经验; 主要适用 于内部开发 的 大规模软件项目; 随着 迭代次数增加,工作量加大,开发成本增加 4. 原型法的特点以及分类:探索型 (递增 型 ) 原型、
9、实验型 (抛弃型) 原型和演化型 原型 。 5.敏捷开发方法和极限编程的特点。 ( 1)敏捷 方法 强调灵活性在快速、有效开发 在 软件中的作用 相对于过程和工具,更强调个人和交互的价值 更喜欢在生产运行的软件上投入时间 ,而不是在文档的编写上 注重客户的合作,而不是合同谈判 专注于对变化的反应,而不是创建一个计划而后遵循这个计划 ( 2)极限编程 具有强沟通、简化设计和迅速反馈等特 点,一般只适合于规模小、进度紧、需求不稳定、开发小项目的小团队 。 极限编程的核心有 4 个要点:交流、简单、反馈和勇气 。 第三章 计划 和项目管理 1.了解 项目计划和管理 的 主要 内容和 常用方法 ( 1
10、)项目计划 要列出软件开发要做的主要工作和任务清单,要回答 “软件工程项目做什么 ”。 强调 可调性创造 性 分析性 响应性 ,用于协调项目编制 、指导 项目执行。 7 ( 2) 项目管理 ,就是项目的管理者,在有限的资源约束下,运用系统的观点、方法和理论,对项目涉及的全部工作进行有效地管理。即从项目的 投资决策 开始到项目结束的全过程进行计划、组织、指挥、协调、控制和评价,以实现项目的目标。 主要有:阶段化管理、量化管理和优化管理三个方面。 2. 软件可行性研究的内容。 了解用户要求和现实环境,从技术、经济、市场等方面研究并论证开发该软件系统的可行性 。 第四章 获取 需求 1.了解需求的重
11、要性及需求分析阶段的目标及主要产物。 ( 1)重要性 需求在 软件开发 起到 了决策的作用,提供了开发的方向, 指明了 开发策略 缺少需求 或需求错误会导致项目开发失败 ( 2)目标及 产物 了解 客户要求 分析 系统的数据要求 需求规格说明书 2. 需求工程包括哪些方面? 需求工程包括需求开发和管理,而需求开发又包括:需求获取,需求分析,需求规格说明和需求验证。 3.需求的类型:功能需求、非功能需求或质量需求、设计约束、过程约束。 4. 两种需求文档:需求定义文档和需求规格说明书。 5. 需求规格说明书的主要内容。 略 6. 常用的需求建模表示方法: ER 图、事件跟踪、状态机、 Petri
12、 网、数据流图、 用例图 和8 原型法。 第 五章 UML 部分 1.UML 的作用:是为软件系统的制品进行描述( specifying)、可视化( visualizing)、构造( constructing)、文档化( documenting)的一种语言。 2.UML 中的 4 1 视图:用例视图,设计视图,进程视图,实现视图,分布视图。 用例视图 : 用来支持软件系统的需求分析,它定义系统的边界,关注的是系统的外部功能的描述。 逻辑 视图 (设计 +进程) : 定义系统的实现逻辑 , 描述 实现用例图 描述 的功能 以及设计软件系统的设计概念。 实现 视图 : 描述 组成一个软件系统的 各
13、个 物理 部件 以各种方式组合起来 , 构成一个可实际运行的系统。 分布视图: 描述软件产品在计算机硬件系统和网络上的安装、分发 、分布 。 3.UML 中的三种扩展机制 : 构造型 Stereotype; 标记值 tagged value; 约束 constraint. 构造型 (stereotype): 对 UML 词汇(建模元素)的扩充,用来描述和已有的 UML 建模元素类似,但又对特定的问题领域有特殊意义的建模元素。 (类) 标记值( tagged value) : 对 UML 建模元素的构成 (property)的扩充,用于为此建模元素增加新的规格 说明。 (类的 属性 ) 约束 (
14、 constraint) : 约束用来扩充 UML 建模元素的语义,以便增加新的规则或修改已有的规则 (关系) 9 4.UML 中所包含的 9 种图形及各自的作用。 类图: 包含 类、 接口 、协同及其关系,用来描述逻辑 视图 的静态属性。 对象图 : 包含对象及其关系,用来表示类图的类的对象在系统运行过程中某一时刻的状态 。 组件图: 描述 系统的物理实现,包括构成软件系统的各部件 的 组织和关系。 类图 里的类在实现 时最终会 映射 到组件图的某个组件。一个 组件 可以实现多个类。 分布图 : 描述 系统的组件在运行时在运行节点上 分布 ,一个节点可 包含 一个或多个组件。 用例图:描述系
15、统的边界 和其上的 动态行为 , 包括 用例 、系统作用 者及其 之间的关系 。 序列图和协作图: 用来 描述一组对象之间的动态交互。 状态图 和状态机:用来描述对象的动态特性。前者 强调 对象对外部 事件 的相应及相应的状态变迁,后者描述对象之间 控制 流的转换和同步机制。 5.用例图的作用。 用例图用来描述软件需求模型中的系统功能,通过一组用例可以描述软件系统能够给用户提供的功能。 用例图可以作为整个系统开发过程中的开发依据,指导和驱动其他模型。 6.用例图的主要构成部分。 参与者 用例 系统边界 关系 ( 箭头 ) 10 7.类图 的主要作用 类图是描述 类、 接口 以及它们之间关系的图,它显示了系统中 各个 类的静态结构,是一种静态结构。 8.了解 类之间的 各种关系 : 关联 、 依赖 、 继承或 泛化、组合 &聚合 关联 : 用来表示 两个( 或 多个) 类的 对象之间的结构关系,在代码中表现为一个类以属性的形式包含对 类 的一个或多个对象的引用。 依赖 : 表示 一个类以某种形式依赖于其他类。依赖关系 中, 其中一个类的改编可能会影响另一个类。 在程序代码中,依赖关系意味着一个类的对象出现在另一个类的操作当中。常见的有两种情况:一个类将另一个类的对象作为自己某个操作的参数(形参),或者是操作的局部变量。