第1章 高级软件工程.讲述
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.按服务对象的范围划分 (1)项目软件 (2)产品软件 4.按使用频度划分 (1)一次使用软件 (2)频繁使用软件 5.按软件失效的影响进行划分 (1)高可靠性软件 (2)一般可靠性软件
软件的危机
软件危机是指在计算机软件的开发和维护过程中所 遇到的一系列严重问题。 软件危机主要有以下一些典型表现: (1)对软件开发成本和进度的估计常常很不准确 (2)用户对“已完成的”软件系统不满意的现象经常 发生 (3)软件产品的质量往往没有保证 (4)软件常常是不可维护的 (5)软件通常没有适当的文档资料 (6)软件成本在计算机系统总成本中所占的比例逐年 上升 (7)软件开发生产率提高的速度,远远跟不上计算机 应用迅速普及深入的趋势
软件工程目标之间存在的相互关系如 下图所示:
为达到以上软件工程的目标,在软件开发过程中必须遵循下列软件 工程原则: (1)抽象:抽取事物最基本的特性和行为,忽略非基本的细节 (2)信息隐蔽:将模块设计成“黑箱”,实现的细节隐藏在模块内部 ,不让模块的使用者直接访问 (3)模块化:模块是程序中逻辑上相对独立的成分,是独立的编程单 位,应有良好的接口定义 (4)局部化:要求在一个物理模块内集中逻辑上相互关联的计算机资 源,保证模块之间具有松散的耦合,模块内部具有较强的内聚 (5)确定性:软件开发过程中所有概念的表达应是确定的、无歧义性 的、规范的 (6)一致性:整个软件系统(包括程序、文档和数据)的各个模块应 使用一致的概念、符号和术语 (7)完备性:软件系统不丢失任何重要成分,达到可以完全实现系统 所要求功能的程度 (8)可验证性:开发大型的软件系统需要对系统自顶向下、逐层分解
消除软件危机的途径: (1)组织管理:软件开发不是某种个体劳动的神秘技巧 ,软件开发应该是一种组织良好、管理严密、各类人 员协同配合、共同完成的工程项目。 (2)方法:应该推广使用在实践中总结出来的开发软件 的成功的技术和方法,并且研究探索更好更有效的 技术和方法,尽快消除在计算机系统早期发展阶段 形成的一些错误概念和做法。 (3)工具:应该开发和使用更好的软件工具。
(8)软件维护 维护阶段的关键任务是,通过各种必要的维护活动 使系统持久地满足用户的需要。 通常有四类维护活动:改正性维护,也就是诊断和 改正在使用过程中发现的软件错误;适应性维护,即修 改软件以适应环境的变化;完善性维护,即根据用户的 要求改进或扩充软件使它更完善;预防性维护,即修改 软件为将来的维护活动预先做准备。
软件工程的框架可概括为:软件工程目标、软件工 程过程和软件工程原则。 (1)软件工程目标:生产具有正确性、可用性以及代 价合宜的产品 (2)软件工程过程:生产一个最终能满足需求且达到 工程目标的软件产品所需要的步骤 (3)软件工程的原则:指围绕工程设计、工程支持以及 工程管理在软件开发过程中必须遵循的原则
(5)详细设计 回答下面这个关键问题:“应该怎样具体地实现 这个系统呢?”。这个阶段的任务还不是编写程序,而 是设计出程序的详细规格说明。通常用HIPO图(层次 图加输入/处理/输出图)或PDL语言(过程描述语言 )描述详细设计的结果。 (6)编码和单元测试 这个阶段的关键任务是写出正确的容易理解、容 易维护的程序模块。 (7)综合测试 这个阶段的关键任务是通过各种类型的测试(及 相应的调试)使软件达到预定的要求。
主讲教师:
课程的性质、目的与任务
软件工程是计算机科学与技术专业的一门专 业核心课程。通过本课程的学习,使学生掌握系 统的软件开发理论、技术和方法,使用正确的工 程方法开发出成本低、可靠性好并在机器上能高 效运行的软件,为今后从事软件开发和维护打下 坚实的基础。
课程主要内容
本课程比较全面、系统地介绍软件工程的概念、技术与 方法。主要内容包括:软件工程概述、软件生存周期及软件 需求分析、软件设计方法、软件测试技术等。 通过本课程学习,使学生能真正的了解软件开发的整个 过程。为了让学生真正得以实践,结合实际软件开发项目, 让学生从问题定义开始,经过可行性研究、需求分析、概要 设计、详细设计、编码直到最后对自己开发的软件进行测试 ,这样一个软件开发全过程,使学生掌握软件开发的基本技 能。
(4)软件的开发和运行常受到计算机系统的限制,对计算机 系统有着不同程度的依赖性。 (5)软件的开发至今尚未完全摆脱手工艺的开发方式。 (6)软件本身是复杂的。包括实际问题的复杂性和程序逻辑 结构的复杂性。 (7)软件成本是昂贵的。 (8)相当多的软件工作涉及到社会因素。
(a) 硬件失效率曲线
(b) 软件失效率曲线
软件生命常见周期模型
瀑布模型 渐增模型 快速原型模型 螺旋模型 喷泉模型 智能模型
传统的瀑布模型 实际上该瀑布模型过于理想化,人在工作过程中不可能不犯错误。在 设计阶段可能发现规格说明文档中的错误,而设计上的缺陷或错误可能在 实现过程中显现出来,在综合测试阶段也会发现需求分析、设计或编码阶 段的错误。因此,实际的瀑布模型是带“反馈环”的,如下图所示(图中 实线箭头表示开发过程,虚线箭头表示维护过程)。
软件危机的产生主要有以下一些原因: (1)软件不同于硬件,它是计算机系统中的逻辑部件而不是 物理部件 (2)软件规模大,程序的复杂性将随着程序规模的增加而呈 指数上升 (3)与软件开发和维护有关的许多错误认识和作法的形成, 可以归因于计算机系统发展的早期软件开发的个体化 特点 (4)软件的生命周期:一个软件从定义、开发、使用和维护 ,直到最终被废弃,要经历一个漫长的周期 (5)软件维护
实际的瀑布模型
渐增模型
快速原型模型
螺旋模型
喷泉模型
变换模型
智能模型
软件工程的目标和原则
组织实施软件工程项目,从技术上和管理上采 取了多项措施以后,最终希望得到项目的成功。所 谓成功指的是达到以下几个主要的目标: (1)达到要求的软件功能; (2)取得较好的软件性能; (3)开发的软件易于移植; (4)能按时交付使用; (5)付出较低的开发成本; (6)较低的概念
软件的生命周期
软件工程的目标和原则
软件的概念
软件是计算机系统中与硬件相互依存的另一部分,它 是包括程序、数据及其相关文档的完整集合。其中,程序 是按事先设计的功能和性能要求执行的指令序列;数据是 使程序能正常操纵信息的数据结构;文档是与程序开发、 维护和使用有关的图文材料。 软件具有以下8个特点: (1)软件是一种逻辑实体,而不是具体的物理实体, 具有抽象性 (2)软件的生产与硬件不同,在开发过程中没有明显 的制造过程 (3)在软件的运行和使用期间,没有像硬件那样的机 械磨损,老化问题
通常把在软件生命周期全过程中使用的一整套技术 方法的集合称为方法学,也称为范型。 软件工程方法学包含三个要素:方法、工具和过程 。方法是完成软件开发的各项任务的技术方法;工具是 为运用方法而提供的自动的或半自动的软件工程支撑环 境;过程是为了获得高质量的软件所需要完成的一系列 任务的框架,它规定了完成各项任务的工作步骤。 使用得最广泛的软件工程方法学有以下几种: (1)结构化方法学 (2)面向对象方法学 (3)后面向对象方法学
软件的分类
1.按功能划分: (1) 系统软件。如操作系统、编译程序、设备驱动程序等 (2) 支撑软件。如数据库管理系统、网络软件、软件开发 环境等 (3) 应用软件。如工程与科学计算软件、CAD/CAM软件、 CAI软件、信息管理系统等 2.按工作方式划分: (1) 实时处理软件 (2) 分时软件 (3) 交互式软件 (4) 批处理软件
(3)需求分析 确定“为了解决这个问题,目标系统必须做什么 ”,主要是确定目标系统必须具备哪些功能。系统分析 员在需求分析阶段必须和用户密切配合,充分交流信息 ,以得出经过用户确认的系统逻辑模型。通常用数据流 图、数据字典和简要的算法描述表示系统的逻辑模型。 (4)总体设计 这个阶段必须回答的关键问题是:“概括地说, 应该如何解决这个问题?”。首先,应该考虑几种可能 的解决方案。再就是设计软件的结构,也就是确定程序 由哪些模块组成以及模块间的关系。
软件的生命周期
软件有一个孕育、诞生、成长、成熟、衰亡的生存过 程。这个过程即为计算机软件的生存期。软件生存期的八 个步骤如下: (1)问题定义 题定义阶段必须回答的关键问题:“要解决的问题是 什么?” ,通过问题定义阶段的工作,系统分析员应该 提出关于问题性质、工程目标和规模的书面报告。 (2)可行性研究 这个阶段要回答的关键问题:“对于上一个阶段所确 定的问题有行得通的解决办法吗?” ,可行性研究阶段应 该导出系统的高层逻辑模型(通常用数据流图表示),并 且在此基础上更准确、更具体地确定工程规模和目标,然 后分析员更准确地估计系统的成本和效益。对建议的系统 进行仔细的成本/效益分析是这个阶段的主要任务之一。
软件工程介绍
软件工程是一门指导计算机软件系统开发和维护的工 程学科,是一门新兴的边缘学科,主要研究如何应用软件 开发的科学理论和工程技术来指导大型软件系统的开发, 涉及计算机科学、工程科学、管理科学、数学等领域的一 门综合性的交叉学科。它借鉴传统工程的原则、方法,以 提高质量、降低成本为目的。
从1968年提出“软件工程”一术语以来,研究软 件工程的专家学者们陆续提出了100多条关于软件工 程的准则或信条。美国著名的软件工程专家 Boehm 综合这些专家的意见,并总结了TRW公司多年的开 发软件的经验,于1983年提出了软件工程的七条基本 原理,这七条原理是确保软件产品质量和开发效率的 原理的最小集合。 原理1.用分阶段的生命周期计划严格管理 原理2.坚持进行阶段评审 原理3.实行严格的产品控制 原理4.采纳现代程序设计技术 原理5.结果应该能清楚地审查 原理6.开发小组的人员应少而精 原理7.承认不断改进软件工程实践的必要性