软 件 工 程 第一章 软件与软件工程 1.1 软件 1.2 软件工程的概念 1.3 软件生存周期 1.4 软件开发模式 1.5 软件开发方法、工具及环境 软 件 工 程 第1章 软件与软件工程 教学题目:1.1 软件 1.2 软件工程的概念 教学目的:1. 了解软件、软件危机等概念 2. 掌握软件工程的定义、原理、目标和原 则. 教学重点:软件工程的定义、原理、目标和原则 教学难点:软件工程的目标和原则 教 具:多媒体教室、电子教案 作 业:看书 软 件 工 程 1.1 软件(Software)1.1.1 软件与软件的组成 计算机软件——与计算机系统操作有关的程序、规程、 规则及任何与之有关的文档和数据。 ∴软件 程序及有关数据—机器可执行; 文档(与软件开发、运行、维护、使用、 培训有关)——不可执行。 程序(program)——用程序设计语言描述的,适合 于计算机处理的语句序列。 软 件 工 程 程序设计语言三种类型: 1.机器语言、汇编语言:依赖于机器,面向机器 2.高级语言:独立于机器,面向过程或面向对象 3.面向问题语言:独立于机器,非过程式语言(4GL) 文档(document)—一种数据媒体和其上所记录的数据。 文档记录软件开发活动和阶段成果,具有永久性,可供 人或机器阅读。 文档可用于 专业人员和用户之间的通信和交流; 软件开发过程的管理; 运行阶段的维护。 面向过程 软 件 工 程 1. 软件的特点 软件是逻辑产品,硬件是物理产品。 特点: (1)软件开发更依赖于开发人员的业务素质、智力、 人员的组织、合作和管理。软件开发、设计几 乎都是从头开始,成本和进度很难估计。 (2)软件存在潜伏错误,硬件错误一般能排除。 (3)软件开发成功后,只需对原版进行复制。 软 件 工 程 1. 软件的特点(续) (4)软件在使用过程中维护复杂: 1)纠错性维护—改正运行期间发现的潜伏错误; 2)完善性维护—提高或完善软件的性能; 3)适应性维护—修改软件,以适应软硬件环境 的变化; 4)预防性维护—改进软件未来的可维护性和 可靠性。 (5)软件不会磨损和老化。 软 件 工 程 2. 软件的发展 第一阶段——20世纪60年代中期以前,软件开发处于 个体化生产状态。在这一阶段中,软件 还没有系统化的开发方法。目标主要集 中在如何提高时空效率上。 第二阶段——从20世纪60年代中期到70年代末期。软 件开发已进入了作坊式生产方式,即出 现了“软件车间”。软件开发开始形成 产 品。到20世纪60年代末,“软件危机” 变 得十分严重。 软 件 工 程 2. 软件的发展 第三阶段——从20世纪70年代中期到20世纪80年代末 期。软件开发进入了产业化生产,即出 现了众多大型的“软件公司”。在这一 阶 段,软件开发开始采用了“工程”的方 法, 软件产品急剧增加,质量也有了很大的 提高。 第四阶段——从20世纪80年代末期开始的。这是一个 软件产业大发展的时期。也是软件工程 大发展的时期,人们开始采用面向对象 的技术和可视化的集成开发环境。 软 件 工 程 1.1.2 软件危机 ——软件危机是指在计算机软件开发、使用与维护 过程中遇到的一系列严重问题和难题。 1.软件危机的表现 1)对软件开发成本和进度的估计常常很不准确。常 常出现实际成本比估算成本高出一个数量级、实 际进度比计划进度拖延几个月甚至几年的现象, 从而降低了开发商的信誉,引起用户不满。 2)用户对已完成的软件不满意的现象时有发生。 3)软件产品的质量往往是靠不住的。 软 件 工 程 1.软件危机的表现 4)软件常常是不可维护的。 5)软件通常没有适当的文档资料。文档资料不全或不 合格,必将给软件开发和维护工作带来许多难以想 象的困难和难以解决的问题。 6)软件成本在计算机系统总成本中所占比例逐年上升。 特别是软件维护成本迅速增加,已经占据软硬件总 成本的40%~75%,如图1-1-1所示。 7)开发生产率提高的速度远跟不上软件需求。 100% 80% 软件开发 硬 件 60% 40% 软件维护 20% 1955年 1970年 图1-1-1 软件、硬件成本变化趋势 1985年 软 件 工 程 2.产生软件危机的原因 1)用户对软件需求的描述不精确。 2)软件开发人员对用户需求的理解有偏差,这将导致 软件产品与用户的需求不一致。 3)缺乏处理大型软件项目的经验。开发大型软件项目 需要组织众多人员共同完成。一般来说,多数管理 人员缺乏大型软件的开发经验,而多数软件开发人 员又缺乏大型软件项目的管理经验,致使各类人员 的信息交流不及时、不准确、容易产生误解。 软 件 工 程 2.产生软件危机的原因 4)开发大型软件易产生疏漏和错误。 5)缺乏有力的方法学的指导和有效的开发工 具的支持。软件开发过多地依靠程序员的 “技巧”,从而加剧了软件产品的个性化。 6)面对日益增长的软件需求,人们显得力不 从心。从某种意义上说,解决供求矛盾将 是一个永恒的主题。 软 件 工 程 3.缓解软件危机的途径 • 到了20世纪60年代末期,软件危机已相当严 重。这促使计算机科学家们开始探索缓解软 件危机的方法。他们提出了“软件工程”的 概念,即用现代工程的原理、技术和方法进 行软件的开发、管理、维护和更新。于是, 开创了计算机科学技术的一个新的研究领域。 软 件 工 程 1.2 软件工程的概念1.2.1 软件工程的定义 1968年,北大西洋公约组织在原西德召开计算机科学会 议,由Fritz Bauer首次提出了“软件工程”的概念。 软件工程——用工程、科学和数学的原则与方法开发、 维护计算机软件的有关技术和管理方法。 软件工程由方法、工具和过程三部分组成,称软件工程 的三要素。 软 件 工 程 1.2.1 软件工程的定义 软件工程中的各种方法是完成软件工程项目的技 术手段,它们支持软件工程的各个阶段。 软件工程使用的软件工具能够自动或半自动地支 持软件的开发、管理和文档的生成。 软件工程中的过程贯穿于整个工程的各个环节, 在这一过程中,管理人员应对软件开发的质量、 进度、成本等进行评估、管理和控制,包括计划 跟踪与控制、成本估算、人员的组织、质量保证、 配置管理等 软 件 工 程 1.2.2 软件工程的基本原理 • 著名的软件工程专家B. W. Boehm于1983年综 合了软件工程专家学者们的意见并总结了开 发软件的经验,提出了软件工程的7条基本原 理。这7条原理被认为是确保软件产品质量和 开发效率的原理的最小集合,又是相互独立、 缺一不可、相当完备的最小集合。下面就简 单介绍软件工程的这7条原理: 软 件 工 程 1.用分阶段的生存周期计划严格管理 • 这条基本原理是应该把软件生存周期划分成若 干个阶段,并相应地制定出切实可行的计划, 然后严格按照计划对软件开发与维护工作进行 管理。应该制定的计划有项目概要计划、里程 碑计划、项目控制计划、产品控制计划、验证 计划和运行维护计划等。各级管理人员都必须 严格按照计划对软件开发和维护工作进行管理。 据统计,不成功的软件项目中,有一半左右是 由于计划不周造成的。 软 件 工 程 2.坚持进行阶段评审 • 据统计,在软件生存周期各阶段中,编码阶段 之前的错误约占63%,而编码错误仅占37%。 另外,错误发现并改正得越晚,所花费的代价 越高。坚持在每个阶段结束前进行严格的评审, 就可以尽早发现错误,从而可以最小的代价改 正错误。因此,这是一条必须坚持的重要原理。 软 件 工 程 3.实行严格的产品控制 • 决不能随意改变需求,只能依靠科学的产品控制技 术来顺应用户提出的改变需求的要求。为了保持软 件各个配置成分的一致性,必须实行严格的产品控 制。其中主要是实行基准配置管理(又称为变动控 制),即凡是修改软件的建议,尤其是涉及基本配 置的修改建议,都必须按规程进行严格的评审,评 审通过后才能实施。 • 这里的“基准配置”是指经过阶段评审后的软件配 置成分,即各阶段产生的文档或程序代码等。 软 件 工 程 4.采用现代程序设计技术 • 实践表明,采用先进的程序设计技术既可以提 高软件开发与维护的效率,又可以提高软件的 质量。多年来,人们一直致力于研究新的“程 序设计技术”。比如,20世纪60年代末提出的 结构程序设计技术;后来又发展出各种结构分 析(SA)和结构设计(SD)技术;之后又出现 了面向对象分析(OOA)和面向对象设计 (OOD)技术等等。 软 件 工 程 5.结果应能清楚地审查 • 软件产品是一种看不见、摸不着的逻辑产品。 因此,软件开发小组的工作进展情况可见性 差,难于评价和管理。为了更好地进行评价 与管理,应根据软件开发的总目标和完成期 限,尽量明确地规定软件开发小组的责任和 产品标准,从而使所得到的结果能清楚地审 查。 软 件 工 程 6.开发小组的人员应少而精 • 软件开发小组人员素质和数量是影响软件质量 和开发效率的重要因素。实践表明,素质高的 人员与素质低的人员相比,开发效率可能高几 倍至几十倍、而且所开发的软件中的错误也要 少得多。另外,开发小组的人数不宜过多,因 为随着人数的增加,人员之间交流情况、讨论 问题的通信开销将急剧增加,这不但不能提高 生产率,反而由于误解等原因可能增加出错的 概率。 软 件 工 程 7.承认不断改进软件工程实践的必要性 • 遵循上述六条基本原理,就能够较好地实现软件的 工程化生产。但是,软件工程不能停留在已有的技 术水平上,应积极主动地采纳或创造新的软件技术, 要注意不断总结经验,收集工作量、进度、成本等 数据,并进行出错类型和问题报告的统计。这些数 据既可用来评估新的软件技术的效果,又可用来指 明应优先进行研究的软件工具和技术。 软 件 工 程 1.2.3 软件工程的目标 • 软件工程的目标是在给定成本、进度的前提 下,开发出具有可修改性、有效性、可靠性、 可理解性、可维护性、可重用性、可适应性、 可移植性、可追踪性和可互操作性并满足用 户需求的软件产品。 软 件 工 程 名词解释 1)可修改性(modifiability),允许对软件系统进行 修改而不增加其复杂性。它支持软件调试与维护。 2)有效性(efficiency),指软件系统的时间和空间 效率。这是一个应当努力追求的重要目标。 3)可靠性(reliability),是指在给定的时间间隔内, 程序成功运行的概率。可靠性是衡量软件质量的一 个重要目标。 软 件 工 程 名词解释 4)可理解性(understandability),指系统具有清晰的结 构,能直接反映问题的需求。可理解性有助于控制软件 系统的复杂性,并支持软件的维护、移植和重用。 5)可维护性(maintainability),是指软件产品交付使用 后,在实现改正潜伏的错误、改进性能等属性、适应环 境变化等方面工作的难易程度。由于软件的维护费用在 整个软件生存周期中占主要的比重,因此,可维护性是 软件工程中的一个十分重要的目标。软件的可理解性和 可修改性支持软件的可维护性。 软 件 工 程 名词解释 6)可重用性(reusability),是指软部件可以在多种场 合使用的程度。 概念或功能相对独立的一个或一组相关模块可构 成一个软部件。软部件应具有清晰的结构和注释、正 确的编码和较高的时空效率。可将各种软部件按照某 种规则放在软部件库中供开发人员选用。 广义地讲,可重用性还应包括应用项目、规格说 明、设计、概念和方法等等的重用。一般来说,重用 的层次越高,带来的效益越大。 可重用性有助于提高软件产品的质量和开发效率、 降低软件开发和维护费用。 软 件 工 程 名词解释 7)可适应性(adaptability),是指软件在不同的系统约束 条件下,使用户需求得到满足的难易程度。 选择广为流行的软硬件支持环境、采用广为流行的程序设 计语言编码、采用标准的术语和格式书写文档可增强软 件产品的可适应性。 8)可移植性(portability),是指软件从一个计算机系统 或环境移植到另一个上去的难易程度。 采用通用的运行支持环境和尽量通用的程序设计语言的标 准部分可提高可移植性。而应将依赖于计算机系统的低 级(物理)特征部分相对独立、集中起来。可移植性支 持软件的可重用性和可适应性。 软 件 工 程 名词解释 9)可追踪性(traceability),是指根据软 件需求对软件设计、程序进行正向追踪, 或根据程序、软件设计对软件需求进行 逆向追踪的能力。软件开发各阶段的文 档和程序的完整性、一致性、可理解性 支持软件的可追踪性。 10)可互操作性(interoperability),是指 多个软件元素相互通信并协同完成任务 的能力。 软 件 工 程 1.2.4 软件工程的原则 1.抽象(abstraction),抽取各个事物中共同的最基本的 特征和行为,暂时忽略它们之间的差异。一般采用分层 次抽象的方法来控制软件开发过程的复杂性。抽象使软 件的可理解性增强并有利于开发过程的管理。 2.信息隐藏(information hiding),将模块内部的信息 (数据和过程)封装起来。其他模块只能通过简单的模 块接口来调用该模块,而不能直接访问该模块内部的数 据或过程,即将模块设计成“黑箱”。信息隐藏的原则 可使开发人员把注意力集中于更高层次的抽象上。 软 件 工 程 1.2.4 软件工程的原则 4.局部化(localization),即在一个物理模块内集 中逻辑上相互关联的计算资源。局部化支持信息 隐藏,从而保证模块之间具有松散的耦合、模块 内部有较强的内聚。这有助于控制每一个解的复 杂性。 5.一致性(consistency),整个软件系统(包括程 序、数据和文档)的各个模块应使用一致的概念、 符号和术语;程序内部接口应保持一致;软件与 环境的接口应保持一致;系统规格说明应与系统 行为保持一致;用于形式化规格说明的公理系统 应保持一致。 软 件 工 程 1.2.4 软件工程的原则 6.完全性(completeness),软件系统不丢失任何重要 成分,完全实现所需的系统功能的程度。为了保证 系统的完全性,在软件的开发和维护过程中需要严 格的技术评审。 7.可验证性(verifiability),开发大型软件系统需要 对系统逐层分解。系统分解应遵循易于检查、测试、 评审的原则,以使系统可验证。 抽象、信息隐藏、模块化和局部化的原则支持可理 解性、可修改性、可靠性等目标,并可提高软件产 品的质量和开发效率; 一致性、完全性和可验证性等原则可以帮助软件开 发人员去实现一个正确的系统。 软 件 工 程 第一章 软件与软件工程 教学题目:1.3 软件生存周期 ~ 1.5 方法、 工具及环境 教学目的:掌握软件生存周期的划分, 了 解各个阶段的任务;熟悉几种软件开发模 型、了解CASE工具及环境。 教学重点:软件生存周期、软件开发模型。 教学难点:开发模型 教 具:多媒体教室、电子教案 作 业:看书 软 件 工 程 1.3 软件生存周期 • 软件从定义开始,经过开发、使用和维护, 直到最终退役的全过程称为软件生存周期。 • 可将软件生存周期划分为3个过程共9个阶段。 • 3个过程是:软件定义过程、软件开发过程、 软件使用与维护过程。 • 9个阶段有:可行性研究、需求分析、概要设 计、详细设计、实现、组装测试、 验收测试、使用与维护、退役。 它们之间的关系如图1-3-1所示。 定义过程 可行性研究 需求分析 概要设计 详细设计 开发过程 实现 组装测试 验收测试 使用与维护 使用与维护过程 退役 图1-3-1 软件生存周期阶段的划分 软 件 工 程 1.3.1 软件定义 • 软件定义的基本任务是确定软件系统的 工程需求,也就是要搞清“做什么”。 • 软件定义过程可通过软件系统的可行性 研究和需求分析两个阶段来完成。 软 件 工 程 1.可行性研究 本阶段的任务是根据用户提出的工程项目的性质、目标和 规模,进一步了解用户的要求及现有的环境及条件,从技 术、经济和社会等多方面研究并论证该项目的可行性。即 该项目是否值得去解决,是否存在可行的解决办法。 此时,系统分析人员应在用户的配合下对用户的要求和现 有的环境进行深入调查并写出调研报告。进而进行可行性 论证。可行性论证包括经济可行性、技术可行性、操作可 行性、法律可行性等。在此基础上还要制定初步的项目计 划,包括需要的软硬件资源、定义任务、风险分析、成本/ 效益分析以及进度安排等。 可行性研究的结果将是使用部门负责人做出是否继续进行 该项目决定的重要依据。 软 件 工 程 2.需求分析 1)需求分析的任务 需求分析的任务是确定待开发的软件系统 “做什么”。 具体任务包括确定软件系统的功能需求、 性能需求和运行环境约束,编制软件需求 规格说明书、软件系统的验收测试准则和 初步的用户手册。 软 件 工 程 2.需求分析 2)需求分析的实现途径 软件系统需求一般由用户提出。系统分析员和 开发人员在需求分析阶段必须与用户反复讨论、 协商,充分交流信息,并用某种方法和工具构建 软件系统的逻辑模型。为了使开发方与用户对待 开发软件系统达成一致的理解,必须建立相应的 需求文档。有时对大型、复杂的软件系统的主要 功能、接口、人机界面等还要进行模拟或建造原 型,以便向用户和开发方展示待开发软件系统的 主要特征。确定软件需求的过程有时需要反复多 次,最终得到用户和开发者的确认。 软 件 工 程 2.需求分析 3)需求分析的阶段成果 需求分析阶段的主要成果有软件需求规格说明、 软件验收测试计划和准则、初步的用户手册等。其 中 , 软 件 需 求 规 格 说 明 ( Software Requirements Specification,即SRS),是一个关键性的文档。多 数场合,面向开发者的软件需求用需求规格说明语 言来描述,它是软件开发人员进行软件设计的依据; 另一方面,从某种意义上讲,SRS又起到与用户签定 合同的合同书的作用。因此,在SRS中应包括软件系 统的全部功能需求、性能需求、接口需求、设计需 求、基本结构、开发标准和验收准则等等。 软 件 工 程 1.3.2 软件开发 软件开发过程由概要设计、详细设计、实现(即编 码与单元测试)、组装测试、验收测试共5个阶段组 成。 其中,概要设计和详细设计统称为设计;编码即编 程;单元测试、组装测试和验收测试统称为测试。 开发者通常可提出多种设计方案,并对各种方案在 功能、性能、成本、进度等方面进行比较和折衷, 从中选出一种“最佳方案”。 下面将简单地介绍软件开发过程中各阶段的任务, 实现的途径和阶段成果。 软 件 工 程 1.3.2 软件开发 1.概要设计——总体设计 任务: 是对需求规格说明中提供的软件系统逻辑模型进行 进一步的分解,从而建立软件系统的总体结构和各 子系统之间、各模块之间的关系,定义各子系统接 口界面和各功能模块的接口,设计全局数据库或数 据结构,规定设计约束,制定组装测试计划,进而 给出每个功能模块的功能描述、全局数据定义和外 部文件定义等。 软 件 工 程 1.概要设计 实现的途径: 选择某种方法和工具。设计的软件系统应具有 良好的总体结构、尽量降低模块接口的复杂度, 并力争做到各功能模块之间的低耦合度、而功 能模块内部具有较高的内聚度。 阶段性成果: 概要设计说明书、 数据库或数据结构说明书、 组装测试计划等文档。 软 件 工 程 2.详细设计 任务:是将概要设计产生的功能模块进一步细化,形成可 编程的程序模块,然后设计程序模块的内部细节,包括算 法、数据结构以及各程序模块间的接口信息,并设计模块 的单元测试计划。 途径:可以采用结构化的设计方法,采用结构化的程序流 程图、N-S图、过程设计语言(PDL,Procedure Design Language)等工具进行描述,也可以采用面向对象的设计 方法等等。 阶段成果:应提供“详细设计规格说明”(或称“模块开 发卷宗”)和单元测试计划等详细设计文档。 软 件 工 程 3.实现——编码和单元测试。 编码的主要任务是根据详细设计规格说明,用某种选 定的程序设计语言把详细设计的结果转化为机器可运 行的源程序模块,这是一个编程和调试程序的过程。 一般来说,对软件系统所采用的分析方法、设计方法、 编程方法以及所选用的程序设计语言应尽可能保持一 致。 编码阶段应注意遵循编程标准、养成良好的编程风格, 以便编写出正确的便于理解、调试和维护的程序模块。 软 件 工 程 3.实现——编码和单元测试。 单元测试:每编写出一个程序模块的源程序, 调试通过后,即对该模块进行测试,这称为单 元测试。 实现阶段的成果: 按一定规则存在盘上的通过单元测试的各功能 模块的集合 详细的单元测试报告等文档。 软 件 工 程 4.组装测试 组装测试:根据概要设计提供的软件结构、各功能 模块的说明和组装测试计划,把经过单元测试检验 的模块按照某种选定的策略逐步进行组装和测试。 主要任务:测试系统各模块间的连接是否正确,系 统或子系统的正确处理能力、容错能力、输入/输 出处理是否达到要求。 阶段成果: ①应是满足概要设计要求、可运行的软件系统 和源程序清单; ② 组装测试报告等文档。 软 件 工 程 5.验收测试——确认测试 任务:按照验收测试计划和准则对软件系统进行测 试,看其是否达到了需求规格说明中定义的全部功 能和性能等方面的需求。 确认测试结束时,应生成验收测试报告、项目开发 总结报告,并向用户提交源程序清单、最终用户手 册、操作手册等文档资料。 最后,由专家、用户负责人、软件开发和管理人员 组成的软件评审小组要对软件验收测试报告、测试 结果和软件进行评审,通过后,软件产品正式通过 验收(即完成了开发合同),可以交付用户使用了。 软 件 工 程 1.3.3 软件的使用与维护 1.软件使用与维护阶段 任务: 通过各种维护活动使软件系统持久地 满足用户的需求。 每项维护活动实质上都是一次压缩和简化 了的软件定义和软件开发过程。都要经历 提出维护要求、分析维护要求、提出维护 方案、审批维护方案、确定维护计划、修 改软件设计、修改程序、测试程序、评审、 验收等步骤。 软 件 工 程 1.软件使用与维护阶段 应当指出,软件在使用的过程中,应及时收集被发现 的软件错误,并定期撰写“软件问题报告”;而每一 项维护活动都应该准确地记录下来,并作为正式的文 档资料保存。 据统计,软件维护人员为了分析和理解原软件系统所 花费的工作量约占整个维护工作量的60%以上。在软 件开发的过程中应重视对软件可维护性的支持 2 .退役 运行与维护 可行性研究 需求分析 验收测试 (验收测试计划) 概要设计 组装测试 (组装测试计划) 详细设计 单元测试 (单元测试计划) 编码与调试 图1-3-2 软件研制与软件测试的层次对应关系 软 件 工 程 1.4 软件开发模型 软件开发模型(又称为软件生存周期模型) —软件项目开发和维护的总体过程思路的框架。 它指出了软件开发过程各阶段之间的关系和顺序,是 软件开发过程的概括。它为软件开发过程提供原则和 方法,并为软件工程管理提供里程碑和进度表。因此, 软件开发模型也是软件工程的重要内容。 软 件 工 程 1.4 软件开发模型 软件开发模型的几种类型: 以软件需求完全确定为基础的瀑布模型; 在开发初期仅给出基本需求的渐进式模型,如原型模型、 螺旋模型、喷泉模型等; 以形式化开发方法为基础的变换模型、基于四代技术的 模型; 基于知识的智能模型等等。 在实际开发时,应根据项目的特点和现有的条件选取合 适的模型,也可以把几种模型组合起来使用以便充分利 用各模型的优点。 软 件 工 程 1.4.1 瀑布模型 瀑布模型(waterfall model)是由W. Royce于 1970年提出来的。又称为软件生存周期模型。 瀑布模型严格按照软件生存周期各个阶段来进 行开发,上一阶段的输出即是下一阶段的输入, 并强调每一阶段的严格性。它规定了各阶段的 任务和应提交的成果及文档,每一阶段的任务 完成后,都必须对其阶段性产品(主要是文档) 进行评审,通过后才能开始下一阶段的工作。 因此,它是一种以文档作为驱动的模型。 可行性研究 需求分析 概要设计 详细设计 实现 组装测试 验收测试 使用与维护 图1-4-1 带反馈的瀑布模型 退役 软 件 工 程 瀑布模型优点 提供了软件开发的基本框架,有利于大型软件开 发过程中人员的组织、管理,有利于软件开发 方法和工具的研究与使用,因此,在软件工程 中占有重要的地位。 软 件 工 程 瀑布模型缺点 1)在软件开发的初期阶段就要求做出正确、全面、完 整的需求分析对许多应用软件来说是极其困难的。 2)在需求分析阶段,当需求确定后,无法及时验证需 求是否正确、完整。 3)作为整体开发的瀑布模型,由于不支持产品的演化, 缺乏灵活性,对开发过程中很难发现的错误,只有 在最终产品运行时才能暴露出来,从而使软件产品 难以维护。 软 件 工 程 瀑布模型适应场合 瀑布模型一般适用于功能、性能明确、完 整、无重大变化的软件系统的开发。例如操 作系统、编译系统、数据库管理系统等系统 软件的开发。应用有一定的局限性。 软 件 工 程 1.4.2 原型模型 原型模型(prototyping model)的基本框架是软件 开发人员根据用户提出的软件基本需求快速开发一 个原型,以便向用户展示软件系统应有的部分或全 部功能和性能,在征求用户对原型的评价意见后, 进一步使需求精确化、完全化,并据此改进、完善 原型,如此迭代,直到软件开发人员和用户都确认 软件系统的需求并达成一致的理解为止。软件需求 确定后,便可进行设计,编码、测试等以后的各个 开发步骤。 开始 停止 需求的采集和细化 快速设计 产品样品 (需求确认) 对原型加工 (需求精确化) 建造原型 用户评价原型 图1-4-2 使用原型确定需求的过程 软 件 工 程 快速原型的开发途径有三种: 1)仅模拟软件系统的人机界面和人机交互方式。 2)开发一个工作模型,实现软件系统中重要的或容易产生 误解的功能。 3)利用一个或几个类似的正在运行的软件向用户展示软件 需求中的部分或全部功能。 总之,建造原型应尽量采用相应的软件工具和环境, 并尽量采用软件重用技术,在运行效率方面可做出让步, 以便尽快提供。同时,原型应充分展示软件系统的可见 部分,如人机界面、数据的输入方式和输出格式等。 软 件 工 程 原型模型的适应场合 原型模型比瀑布模型更符合人们认识事物的 过程和规律,是一种较实用的开发框架。 它适合于那些不能预先确切定义需求的软件 系统的开发,更适合于那些项目组成员(包 括分析员、设计员、程序员和用户)不能很 好交流或通信有困难的情况。 软 件 工 程 1.4.3 螺旋模型 螺旋模型(spiral model)是B. Boehm于 1988年提出的。它综合了瀑布模型和原型 模型的优点,即将两者结合,并加入了风 险分析机制。螺旋模型的基本框架如图14-3所示。 成本 计划: 明确目标、约束条件 选择方案 风险分析 构造原型 顺时针为进展方向 风险分析 实现计划 风险分析 开发计划 风险分析 需求精化计划 评审 生命周期计划 需求计划 需求评价 风险分析 原型3 原型2 原型1 可操作 的原型 决策 建模 操作概念 模拟 评价 软件需求 验收测试计划 组装测试计划 用户评价;阶段评审 软件产品 设计 需求确认 设计验证与确认 实现 验收 测试 组装 测试 图1-4-3 螺旋模型 单元 测试 详细 设计 编码 工程实现 软 件 工 程 1.4.3 螺旋模型 螺旋模型的每一个周期都包括计划(需求定义)、 风险分析、工程实现和评审4个阶段。 1.计划(需求定义) 第一周期开始利用需求分析技术理解应用领域,获取 初步用户需求,制定项目开发计划(即整个软件生 命周期计划)和需求分析计划。经过一个周期后, 根据用户和开发人员对上一周期工作成果评价和评 审,修改、完善需求,明确下一周期软件开发的目 标、约束条件,并据此制定新一轮的软件开发计划 。 软 件 工 程 1.4.3 螺旋模型 2.风险分析 根据本轮制定的开发计划,进行风险分析,评估可选 方案,并构造原型进一步分析风险,给出消除或减少 风险的途径。此时根据风险分析的结果决策项目是否 继续。所以,螺旋模型是一个风险驱动的模型。 3.工程实现 利用构造的原型进行需求建模或进行系统模拟,…, 直至实现软件系统。 软 件 工 程 1.4.3 螺旋模型 4.用户评价与阶段评审 将原型提交用户使用并征求改进意见。开发人 员应在用户的密切配合下进一步完善用户需求, 直到用户认为原型可满足需求,或对软件产品 设计进行评价或确认等。 螺旋模型从第一个周期的计划开始,一个周期、 一个周期地不断迭代,直到整个软件系统开发 完成。 软 件 工 程 螺旋模型的优点 支持用户需求的动态变化。这就要求构造的原型的总体结构、 算法、程序、测试方案应具有良好的可扩充性和可修改性。 也支持软件系统的可维护性,每次维护过程只是沿螺旋模型 继续多走一两个周期。 原型可看作形式的可执行的需求规格说明,易于为用户和开 发人员共同理解,还可作为继续开发的基础,并为用户参与 所有关键决策提供了方便。 螺旋模型特别强调原型的可扩充性和可修改性,原型的进化 贯穿整个软件生存周期,这将有助于目标软件的适应能力。 螺旋模型为项目管理人员及时调整管理决策提供了方便,进 而可降低开发风险。 软 件 工 程 螺旋模型的缺点和适应场合 缺点: ①如果每次迭代的效率不高,致使迭代次数过多, 将会增加成本并推迟提交时间; ②使用该模型需要有相当丰富的风险评估经验和 专门知识,要求开发队伍水平较高。 适应场合:支持需求不明确、特别是大型软件 系统的开发,并支持面向规格说明、面向过程、 面向对象等多种软件开发方法,是一种具有广 阔前景的模型。 演化 软 件 工 程 1.4.4 喷泉模型 维护 测试 实现 设计 分析 图1-4-4 喷泉模型 喷泉模型是近几年提 出来的软件生存周期 模型。它是以面向对 象的软件开发方法为 基础,以用户需求为 动力,以对象来驱动 的模型。 软 件 工 程 喷泉模型的特点 1.软件系统可维护性较好; 2.各阶段相互重叠,表明了面向对象开发方法各 阶段间的交叉和无缝过渡; 3.整个模型是一个迭代的过程,包括一个阶段内 部的迭代和跨阶段的迭代; 4.模型具有增量开发特性,即能做到分析一点、 设计一点、实现一点,测试一点,使相关功能随 之加入到演化的系统中。 5.模型是对象驱动的,对象是各阶段活动的主体 ,也是项目管理的基本内容。 6.该模型很自然地支持软部件的重用。 软 件 工 程 1.4.5 变换模型 变换模型(transformational model)主要用于软件的形式 化开发方法。 在软件需求分析确定以后,便用形式化的规格说明语言将 其描述为“形式化软件规格说明”,然后对其进行一系列 自动或半自动的变换,最终得到软件系统的目标程序。 模型检查 需求分析 形式化软件规 格说明(M0) 形式化软件设 计说明(M1) … (M2) 变换 图1-4-5 变换模型 变换 目标程序(M ) 变换 软 件 工 程 1.4.5 变换模型 变换模型也应引入迭代机制。即将第一次用变换模 型得来的目标程序作为“原型”,让用户评价,以 便使用户需求精确化、完全化,再把精化后的需求 作为输入,第二次用变换模型进行变换,等等。 以形式化开发方法为基础的变换模型需要逻辑、代 数等严格的数学理论和诸如形式化的需求规格说明 语言、程序变换工具、定理证明工具等一整套开发 环境的支持。 形式化开发方法提出的比较早,但到目前为止,其 在理论和实践等方面离工程实际应用还有较长一段 距离。 软 件 工 程 1.4.6 基于四代技术的模型 1981年R. Ross提出了第四代编程语言(即4GL), 它是一种面向问题而非面向过程的语言。 四代技术(4GT)是以第四代语言(4GL)为核 心的软件开发技术。基于四代技术的模型是指用 4GT工具将开发者做出的软件规格说明自动转换 成程序代码。 目前,支持4GT的软件开发工具已经有了一些, 如屏幕生成器、报表生成器、数据库查询语言、 代码生成系统等。 软 件 工 程 1.4.6 基于四代技术的模型 收集需求 设计策略 4GL实现 测试 维护 图1-4-6 基于四代技术的模型 软 件 工 程 1.4.7 基于知识的智能模型 它可综合几个模型的特点,并与支持分析、设计、测试、维护等的应用 领域的基于规则的专家系统相结合,构成了应用领域的开发系统。 用户概念 分析 专家系统 需求分析 设计 设计 专家系统 编码 测试 专家系统 测试 维护 专家系统 图1-4-7 基于知识的智能模型 维护 软 件 工 程 1.5 软件开发方法、工具及环境 1.5.1 软件开发方法 软件开发方法是一种使用早已定义好的技术集及符号表示 组织软件生产过程的方法。工程实用的软件开发方法是达 到软件工程目标和克服软件危机的主要途径。 其中,具有代表性的有结构化方法(包括面向数据流的开 发方法、面向数据的开发方法等)、面向对象的开发方法、 形式化开发方法、维也纳开发方法(VDM,Vienna Development Method)、适于实时事务处理系统的有限状 态机方法(FSMM,Finite State Machine Method)、适于 并发软件系统的Petri网方法等等。 软 件 工 程 1.5.2 软件开发工具与环境 软件开发的工具软件:支持软件项目的开发、管理、维 护活动的软件 例如,项目管理工具、需求分析工具、设计工具、编码 工具、测试工具、维护工具等等。 随着软件开发工具数量的不断增加,为了便于使用和管 理,就将各种工具简单地组合起来构成“工具箱”。 人们将工具按照统一的数据结构、标准的程序界面集成, 从而构成了完整的软件开发环境。 这种集成的软件开发环境能够有效地支持软件生存周期 所有阶段的活动,而且不仅支持技术工作,还支持各种 管理工作,从而可高效、高质量地进行软件开发与维护。 软 件 工 程 1.5.3 计算机辅助软件工程 在软件工程活动中,人们按照软件工程的原则和方法, 利用计算机及其集成的软件开发环境,辅助软件项目的 开发、维护及管理的过程,称为计算机辅助软件工程 (即CASE,Computer-Aided Software Engineering)。 CASE工具和环境的核心是软件工程信息库。这些工具和 环境应遵循统一的标准,在操作系统、网络和数据库的 支持下工作,以便使开发者们方便地相互通信并协同工 作。 软 件 工 程 CASE工具按功能可划分为九大类 支撑类工具(如操作系统、数据库管理工具、质量保证工具 、软件配置管理工具、文档工具等); 事务系统规划类(如事务系统规划工具); 项目管理类(如项目计划工具、需求追踪工具、度量和管理 工具等); 分析和设计类(如结构化分析/结构化设计即SA/SD工具、界 面设计工具、原型/模拟即PRO/SIM工具等); 程序设计与编码类(如各种编辑器、调试器、编译器、四代 语言、面向对象语言工具等); 软 件 工 程 CASE工具按功能可划分为九大类 原型建造类(如航空等某些领域的原型工具); 测试类(测试数据获取工具、程序静态或动态测量工 具、测试管理工具等); 维护类(如从程序到规格说明的逆向工程工具、代码 的重构和分析工具等); 框架类(指支持数据库管理、配置管理和CASE工具 集成的工具等)。 CASE工具和环境的进一步开发和使用,已经成为软 件工程的重要研究课题。 软 件 工 程 习题思考题 什么是软件工程?构成软件工程的要素是什么? 软件工程的7条原理都是什么? 软件工程的目标是什么? 软件工程的7条原则是什么?说明这些原则的作 用。 1.8 软件生存周期由哪几个过程组成?每个过程分别 包括哪几个阶段? 1.13 软件开发模型、软件开发方法、集成的CASE工 具与环境在软件工程中各有什么作用? 1.3 1.4 1.5 1.7 返回目录
© Copyright 2025 ExpyDoc