软件工程基础1-软件工程基本概念与原理.ppt_第1页
软件工程基础1-软件工程基本概念与原理.ppt_第2页
软件工程基础1-软件工程基本概念与原理.ppt_第3页
软件工程基础1-软件工程基本概念与原理.ppt_第4页
软件工程基础1-软件工程基本概念与原理.ppt_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

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

文档简介

软件工程基础教程软件工程基础教程 1/86 一、课程的性质、任务 o “软件工程”是专业核心基础课程,它是研究软件开 发和软件管理的一门工程科学。 o 它的主要任务是掌握支持软件开发和管理的理论、 方法、技术、标准以及计算机辅助软件工程的工具 (Visio或Rose)环境等知识;使学生具有软件开发 能力(包括熟练进行程序设计语言的结构化编码与 可视化设计能力;UML的阅读和建模能力;培养用软 件工程化及项目化的思想处理解决问题的能力等) 。 2/86 二、通过学习应能达到如下目标: 1. 接受一种思想。掌握软件工程的基本原理、概念与方法-主要包 括软件系统的可行性研究、需求分析、概要设计、详细设计、编码 、测试、维护、面向对象、项目管理等方面的基本知识与方法。 2. 掌握软件工程中的一些基本技术方法,如数据流图、数据字典、结 构分析方法,面向对象分析方法、集成测试方法、项目管理的基本 方法等。 3. 结合模拟案例,要求学生从实际中掌握从面向过程到面向对象思想 理论的基本方法和技巧。掌握软件开发文档的组织编写等。 4. 掌握一种工具。学期末能用Visio或Rose软件完成大作业的设计(画 各种软件工程图)(指定或自找题目) 5. 把目前或以后要学的程序设计知识(C、Java、VC+、 C#、ASP.NET )提高到一定理论高度认识。 小提示: 学会思想比掌握一种工具更为重要。 3/86 “现在大家都已认识到,如果有哪个项 目不遵循软件工程原则必定会受到实践 的惩罚。” “软件工程课是我们参加工作以后最 能直接应用的一门专业课。” 一位刚毕业参加工作的计算 机专业学生 三、体会: 4/86 目目 录录 第1章 软件工程的基本概念与原理 第2章 软件开发过程 第3章 软件项目管理 第4章 可行性分析与初步计划 第5章 需求分析 第6章 总体设计 第7章 详细设计 第8章 软件实现 第9章 软件维护 第10章 从结构化到面向对象 第11章 面向对象的需求获取 第12章 面向对象的分析与设计 第13章 面向对象的测试 5/86 第第1 1章章 软件工程的基本概念与原理软件工程的基本概念与原理 6/86 先接受2个正确观点 1、“开发软件不等于编写程序” 开发软件应该完成的工作远远多于编写程序应该完成的工作。 设计算法(即完成指定功能的步骤),然后用程序设计语言(例如:C 语言)表达该算法。 而开发软件并非就是编写程序,事实上编写程序仅仅是开发软件所应完 成的工作的一部分,而且只占一小部分。 为了开发出一个符合用户需要、质量合格的软件,软件工程师必须首先 弄清楚用户面临的问题是什么,也就是要明确软件的“主攻”方向; 接下来应该进行可行性研究方案,分析用户面临的问题是否有行得通的 解决方案。为避免浪费资源,仅在该软件的开发是可行的前提下,才进 行实质性的开发工作; 7/86 先接受2个正确观点 然后应该进行需求分析工作,通过与用户的反复交流,搞清 楚用户对该软件的具体需求,这些需求是进行软件设计的依 据;在编写程序之前需要先进行设计。 通常,大型软件的设计工作又分成两个阶段进行,先进行总 体设计(又称为概要设计),再进行详细设计; 编写程序实质上是把设计结果翻译成用某种程序设计语言书 写的程序; 程序编写出来之后,还需要经过严格的测试过程(需要的工 作量通常占软件开发全部工作量的40%50%) ,软件确实 符合用户需求而且质量合格,才能交付给用户使用。8/86 先接受2个正确观点 2、“错误做法会导致软件危机”。 开发软件不等于编写程序。但是,迄今为止,仍然有不少人 错误地认为开发软件就是编写程序,或者认为开发软件主要 就是编写程序。人们之所以有错误的认识并在开发软件时采 用了错误的做法,主要可归因于在计算机系统发展的早期阶 段“开发软件”的个体化特点。 所谓软件危机是指在计算机软件的开发和维护过程中所遇到 的一系列严重问题。这些问题绝不仅仅是不能正常运行的软 件才具有的,实际上,几乎所有软件都不同程度地存在这些 问题。 9/86 1.1 软件工程学科的诞生 1.1.1 1.1.1 软件的特点软件的特点 oo 1.1.2 1.1.2 软件生产的发展软件生产的发展 oo 1.1.3 1.1.3 软件危机软件危机 oo 1.1.4 1.1.4 软件工程的诞生软件工程的诞生 10/86 1.1.1 软件的特点 o软件的概念: n20世纪60年代提出的, (软件=程序+文档) n程序是指令的集合; n文档有关程序功能、设计、编程使用的文字或图形资料。 o软件产品的特殊性: n软件与硬件构成完整的计算机系统; n软件产品与硬件产品的主要区别包括: o 逻辑产品、无形、脑力劳动的结果,以程序和文档的形式体现 ,保存在特殊介质上,被计算机执行才能体现出它的功能和作 用 o 软件生产成本集中在研制阶段; o 软件不会被用坏、不存在磨损和消耗,但会过时; o 是脑力创造的结果,还未完全摆脱手工开发方式,大部分是” 定做”; o 软件生产与维护费用不断增加; 11/86 1.1.1 软件的特点 软件是计算机系统中与硬件相互依存的另一部分 ,它是包括程序,数据及其相关文档的完整集合 。 程序是按事先设计的功能和性能要求执行的指令 序列。计算机程序包括源程序和目标程序。 数据是使程序能正常操纵信息的数据结构(即数 据的组织形式)。 文档是与程序开发,维护和使用有关的图文材料 。 12/86 1.1.1 软件的特点 面向过程的程序=算法+数据结构 面向对象的程序=对象+消息 面向构件的程序=构件+构架 软件=程序+数据+文档 13/86 软件的维护曲线软件的维护曲线 修改点 图1-3 实际的软件故障曲线图 故障率 时间 由于副作用造成故障 率的提高 14/86 1.1 1.1 软件软件工程的产生工程的产生 o 1.1.1 软件的特点 1.1.2 软件生产的发展 o 1.1.3 软件危机 o 1.1.4 软件工程 15/86 1.1.2 1.1.2 软件生产的发展软件生产的发展 oo软件生产经历了三个阶段:软件生产经历了三个阶段: 程序设计时代(程序设计时代(4646年年-56-56年)年) 软件开发时代(软件开发时代(5656年年-68-68年)年) 软件工程时代(软件工程时代(6868年以后)年以后) 16/86 程序设计时代(程序设计时代(4646年年-56-56年)年) n 个体手工方式; n 低级语言、编程效率低、难,编程是聪 明人的事; n 追求编程技巧和程序运行效率; n 代码不规范,不易读,不易维护; n 只重视编码,不重视设计和文档; n 硬件资源紧缺; 17/86 程序系统时代(程序系统时代(5656年年-68-68年)年) n 作坊式小团队开发; n 出现高级语言,编程效率有所提高; n 追求写代码技巧,但提出了结构化程序设计方法; n 软件复杂性增加,需求增加,但软件开发方法和软件 项目管理技术跟不上,开发速度慢,与计算机硬件发 展速度拉大距离; n 软件数量猛增,但质量差,可维护性差,维护成本急 剧增加; n 上述矛盾越来越显著,最终导致了软件危机; 18/86 软件工程时代(软件工程时代(6868年以后)年以后) n 软件工程学科诞生,引入了“工程化”思想; n 结构化和面向对象的方法成熟; n 使用数据库、开发工具、开发环境、网络、分 布式技术开发软件; n 软件开发技术有了很大进步,但没有突破性, 软件价格不断上升,没有完全摆脱软件危机; 19/86 计算机软件发展的三个时期及特点 程序设计程序系统软件工程 现代软件工 程 软件的范 畴 程序程序及说明书产品软件 (项目软件) 项目工程 主要程序 设计语言 汇编及机器语言高级语言高级语言系统、 程序设计语言 面向对象可 视化设计语言 软件工作 范围 程序编写包括设计和测试软件生存期整个软件生 存期 需求者 程序设计者本人少数用户市场用户面向所有用 户 20/86 计算机软件发展的三个时期及特点 21/86 1.1 1.1 软件软件工程的产生工程的产生 o 1.1.1 软件的特点 o 1.1.2 软件生产的发展 1.1.3 软件危机 o 1.1.4 软件工程诞生 22/86 1.1.3 1.1.3 软件危机软件危机 软件危机的产生 o 软件危机的表现 o 软件危机的原因 23/86 1.1. 软件危机的产生软件危机的产生 o 软件生产的第二个阶段,硬件生产成本下降 、效率提高、性能提高,激发了软件需求; o 软件复杂性要求提高、生产效率低,与硬件 生产进一步拉开距离; o 软件质量差,难维护,成本急剧增加; o 软件项目成功率低; 上述矛盾的进一步激化,暴发了软件危机 24/86 1.1.3 1.1.3 软件危机软件危机 o软件危机的产生 o软件危机的表现 o爆发软件危机的原因 25/86 2. 2. 软件危机的表现软件危机的表现 o(1)经费超预算,项目一再拖延; o(2)开发的软件不能满足用户要求 ; o(3)软件可维护性差; o(4)软件可靠性差; 26/86 3. 3. 软件危机产生的原因软件危机产生的原因 o (1) 软件规划越来越大; o (2) 软件开发管理困难且复杂; o (3) 软件开发费用不断增加; o (4) 软件开发技术落后; o (5) 软件生产方式落后; o (6) 软件开发工具落后; 27/86 1.1 1.1 软件软件工程的产生工程的产生 o 1.1.1 软件的特点 o 1.1.2 软件生产的发展 o 1.1.3 软件危机 1.1.4 软件工程的诞生 28/86 1.1.4 1.1.4 软件工程诞生软件工程诞生 o 软件危机促使软件工程学科诞生; o 借鉴硬件生产的“工程化”思想,1968 年,北大西洋公约组织提出了“软件工 程”的概念,主张“用工程化思想来开 发软件”。 29/86 第第1 1章章 软件工程的基本概念与原理软件工程的基本概念与原理 p 1.1 软件工程的产生 1.2 软件工程的基本概念与原理 1. 软件工程的定义、性质 n 2. 软件工程关注的主要问题 n 3. 软件工程的目标 n 4. 软件的生命周期 n 5. 软件工程的基本原理 30/86 软件工程定义、性质软件工程定义、性质 o 软件工程是用科学知识、技术、原理来定义、开发、维 护软件的一门学科。 o 概括地说,软件工程是指导软件开发和维护的一门工程 学科。 o 软件工程学科的根本要求:采用工程化的思想、原理、 技术和方法来开发与维护软件,把好的管理技术和开发 技术方法结合起来,追求可靠性、可维护性、满足用户 需求、高的开发效率。 o 用工程学科中的观点进行费用估算、进度控制、制定计 划和方案;用管理科学中的方法和原理进行软件生产过 程的管理;用数学的方法建立软件开发中的各种模型和 算法。 31/86 软件工程关注的关键问题软件工程关注的关键问题 (1)关注于大型程序的构造 (2)中心课题是控制复杂性 (3)软件需求经常变化 (4)开发软件的效率非常重要 (5)有效的沟通是合作开发软件的关键 32/86 (1 1)软件工程关注于大型程序的构造)软件工程关注于大型程序的构造 u“大”与“小”的分界线并不十分清晰。通 常把一个人在较短时间内写出的程序称为小 型程序,而把多人合作用时半年以上才写出 的程序称为大型程序。 u传统的程序设计技术和工具是支持小型程序 设计的,不能简单地把这些技术和工具用于 开发大型程序。 33/86 (2 2)软件工程中心课题是控制复杂性)软件工程中心课题是控制复杂性 u通常,软件所解决的问题十分复杂,以致于不能 把问题放在一起试图一步解决。人们不得不把问 题分解,使得分解出的每个部分是直观、明了、 可理解的,而且各部分之间保持简单的联系。用 这种方法并不能降低问题的整体复杂性,但是却 可使它变成容易解决。 u注意,许多软件的复杂性主要不是由问题的内在 复杂性造成的,而是由必须处理的大量细节,让 人看上去觉得很复杂。 u结论:分解的手法,是控制复杂性的主要手段 控制复杂性的有效 方法是分解: 面向过程的方法, 是按功能分解; 面向对象的方法, 是按责任分解。 34/86 (3 3)软件需求经常变化)软件需求经常变化 o绝大多数软件都模拟了现实世界的某一部分。现实 世界不断变化,人们对其认识也有偏差,这就造成 了软件需求经常变化的特性。 o这种变化不仅存在于开发过程中和也存在交付使用 以后。前者要求在开发过程中,应能灵活调整设计 方案,后者要求软件应具有可维护性。 需求变更是软件开发活动与生俱来的特性,不可避免。 变更不是坏事,但它是软件开发面临的最大挑战。 软件工程追求的是、封装变更,灵活设计,应对变更,通过好的设 计方法,使变更对原有设计方案和已有代码影响最小。 35/86 (4 4)开发软件的效率非常重要)开发软件的效率非常重要 o随着社会经济和文化的发展,网络及 各类开发与应用平台的不断翻新,计 算机硬件性能的不断提高,社会对软 件的数量、规模和复杂性不断提高, 软件的需求供不应求的现象依然日益 严重。 o因此,寻求开发与维护软件的更好、 更有效的方法和工具,依然是软件工 程的一个重要课题。 o不断提高软件开发效率非常重要 规范的开发过程 好的开发环境和工具 、 提高软件复用 是软件工程提高效率 的有效办法。 36/86 (5 5)和谐地合作是开发软件的关键)和谐地合作是开发软件的关键 o 软件处理的问题日益复杂和庞大,软 件开发往往是多人协同工作的成果, 明确的责任划分和有效的互信是团队 成员协作的关键。 o 事实上仅有上述规定还不够,每个人 还必须严格地按规定行事。为了迫使 团队成员遵守规定,应该运用标准和 规程。通常,可以用工具来支持这些 标准和规程。总之,纪律是成功地完 成软件开发项目的一个关键。 团队合作是必 须的,使用有 效的工具,进 行有效的沟通 是关键 37/86 软件工程的性质 o综合性、交叉性学科 o涉及计算机科学、工程科学、管理科 学、数学等领域。 38/86 1.2 1.2 软件工程的基本概念和原理软件工程的基本概念和原理 o 1. 软件工程的定义、性质 o 2. 软件工程面临的主要问题 o 3. 软件工程的目标 o 4. 软件的生命周期 o 5. 软件工程的基本原理 39/86 软件工程面临的问题软件工程面临的问题 o 需求问题 o 质量问题(可靠性可维护性可移植性等 ) o 生产效率(重用是为了提高效率) o 费用 40/86 1.2 1.2 软件工程的基本概念软件工程的基本概念 o 1. 软件工程的定义、性质 o 2. 软件工程面临的主要问题 3. 软件工程的目标 o 4. 软件的生命周期 o 5. 软件工程的基本原理 41/86 软件工程的目标软件工程的目标 o 运用工程化思想组织与管理软件项目,采 用科学的管理方法、开发方法及工具,提 高软件开发效率,保证软件质量,提高软 件的可靠性和可维护性,在合理的工期内 生产出能够满足用户需求的软件产品。 42/86 1.2 1.2 软件工程的基本概念软件工程的基本概念 o 1. 软件工程的定义、性质 o 2. 软件工程面临的主要问题 o 3. 软件工程的目标 4. 软件的生命周期 o 5. 软件工程的基本原理 43/86 4.4.软件生命周期理论软件生命周期理论 o 软件生存周期的 定义 o 软件生命周期阶段的 划分 o 软件生命周期阶段划分的 原则 软件生命周期是软件工程学的一个重要概念。引入软件生存周期概 念,对于软件项目管理、进度控制有重要意义。 在软件开发过程中,为了使软件项目容易控制和管理,把整个生命 周期划分为若干阶段。 划分阶段时,遵循“低耦合、高内聚”的原则。 44/86 软件生存周期的定义软件生存周期的定义 o 软件生命周期(Software Life Cycle)是 从软件开发需求被提出,启动可行性分析 开始,经历软件开发过程,直到软件被开 发出来、投入使用,最终被淘汰为止的整 个时间。 o 生存周期理论,把整个生存周期划分为若 干阶段,使得每个阶段有明确的任务,把 规模大、活动多、管理复杂的软件开发活 动变得容易控制和管理。 45/86 软件生命周期阶段划分软件生命周期阶段划分 o软件生存周期一般划分为 软件定义、软件开发、运 行与维护三个时期。 o软件定义时期,可以进一 步分为问题定义、可行性 研究、需求分析三个阶段 。 o软件开发时期,可以分为 概要设计、详细设计、编 码、测试等阶段。 o软件交付用户以后,就进 入了漫长的运行与维护期 ,在软件被淘汰之前,要 经历多次的纠错性、完善 性和适应性维护活动 46/86 生命周期理论对开发过程的指导意义生命周期理论对开发过程的指导意义 o 每个阶段的工作均以前一阶段的结果为依据,并作为下 一阶段的前提。 o 每个阶段结束时,都要有技术审查和管理复审,从技术 和管理两方面对阶段性开发成果进行检查,及时决定系 统的继续进行,还是停工或返工。 o 每个阶段都进行复审,主要检查必备的文档资料的质量 和有效性。 o 前一阶段复审通过了,后一个阶段才能开始。 o 应避免到开发后期才发现先期工作中存在的严重错误, 造成不可挽回的损失或浪费。 47/86 生命周期理论对开发过程的指导意义生命周期理论对开发过程的指导意义 o 把软件生命周期划分为若干阶段,是实施 软件生产工程化的基础。 o 软件规模、种类、开发方式、开发环境以 及开发使用的方法都会影响软件生存周期 的阶段划分。 o 分析师可以根据软件性质、用途及规模等 因素,对软件过程中的阶段和活动进行适 当的裁剪。 48/86 1. 1. 问题定义阶段问题定义阶段 o 用户提出一个软件开发需求以后,分析师 首先要明确软件的实现目标、规模及类型 :如它是数据处理问题还是实时控制问题 ,是科学计算问题还是人工智能问题等。 49/86 2. 2. 可行性研究阶段可行性研究阶段 o 在清楚了项目的性质、目标、规模后,要对项目进行可 行性分析。 o 分析师进行一次大大简化了的需求分析和设计过程(目的 是探索这个问题是否值得去解决,是否有可行的解决方 案。) o 提交可行性研究报告。 o 可行性研究报告中应给出项目初步开发计划。根据项目 的目标、功能、性能及规模,估计开发需要的资源。还 要对软件开发费用、开发进度做出估计。 o 详细的项目开发计划,等到需求分析结束,对项目有了 进一步的认识之后,还要进行一次细化。 50/86 3 3需求分析阶段需求分析阶段 o 软件是为用户开发的,软件的功能性和非功能性要求首 先得由用户提出,这需要用户配合软件技术人员按照用 户的实际业务要求进行挖掘。 o 最终得到的软件产品能否满足用户的真实需求,是断定 项目成败关键要素。需求分析是详细获取并表述用户需 求的活动。 o 需求分析的结果是后续设计与编程活动的依据。获取真 实、完整的需求,并以适当工具,准确地表述为需求分 析模型是需求分析活动的关键。 o 这一阶段的结果是软件需求规格说明书。 51/86 4 4概要设计阶段概要设计阶段 o 概要设计阶段,开发人员根据软件需求规 格说明书,构造目标系统的软件结构。 o 这一活动也被称为“总体设计”,用于获 得目标系统的宏观蓝图。 52/86 5 5详细设计阶段详细设计阶段 o 详细设计包括过程设计,数据结构设计等活动, 主要是把概要设计的结果,细化为可以用某种编 程语言实现的设计方案。 o 结构化方法中,主要是程序流程设计和用户界面 设计。 o 面向对象的方法中,将是对前期得到的类或对象 模型进行细节设计,使之可以直接支持编程。 53/86 6 6编程阶段编程阶段 o 编程又称为编码,就是编写程序源代码。最终得 到的“源程序清单”就是源代码清单。程序源代 码要经过编译或解释以后,才能被执行。 o 编码追求的是程序代码编写风格,要求规范、友 好,便于阅读和调试,这是提高程序质量和软件 可维护性的关键活动之一。 o 编程往往跟调试以及单元测试同时进行,由程序 员完成。 54/86 7 7测试阶段测试阶段 o 测试是软件质量保证活动的最后一道防线 。 o 测试分为单元测试、集成测试和确认测试 。 o 单元测试就是模块测试,与编程活动同时 进行。 o 独立的测试阶段,主要完成集成测试、确 认测试和验收测试。 55/86 8 8运行与维护运行与维护 o 软件运行和维护是生存周期中最长的阶段 。 o 软件交付使用后,便进入漫长的运行和维 护期,可能持续几年甚至几十年,此间可 能要进行多次维护或修改。 o 维护活动按性质分为纠错性维护、完善性 维护和适应性维护。 56/86 1.2 1.2 软件工程的基本概念软件工程的基本概念 oo 1. 1. 软件工程的定义、性质软件工程的定义、性质 oo 2. 2. 软件工程面临的主要问题软件工程面临的主要问题 oo 3. 3. 软件工程的目标软件工程的目标 oo 4. 4. 软件的生命周期软件的生命周期 oo 5. 5. 软件工程的基本原理软件工程的基本原理 57/86 软件工程的基本原理软件工程的基本原理 o 软件工程是一门实践性很强的应用学科, 掌握必要的原理和行动原则,对于规范实 践活动,深入理解软件工程思想,提高项 目的成功率都有帮助。 o 著名软件工程专家B.Boehm综合有关专家 和学者的意见,并根据多年开发软件的经 验,提出了软件工程的七条原理。 58/86 软件工程的基本原理软件工程的基本原理 (1)应用生存周期的理论,分阶段的计划、管理和 控制软件开发过程。 o 统计发现,在不成功的软件项目中有50%左右是 由于计划不周造成的,项目失控制而造成的。成功 的经验是运行软件生命周期理论,把软件开发与维 护的过程分成三个时期若干个阶段,这样化繁为简 ,便于控制与管理。 o Boehm认为,在软件的整个生命周期中应制定并 严格执行六类计划:项目概要计划、里程碑计划、 项目控制计划、产品控制计划、验证计划、运行维 护计划。 59/86 软件工程的基本原理软件工程的基本原理 (2)坚持进行阶段性评审。 大部分错误是在编码之前造成的 因此,在每个阶段都进行严格的评审,以便 尽早发现在软件开发过程的错误 o 严格进行阶段性成果的评审,尽早发现软件开发 过程中的错误,可以减少错误造成的损失。 o 尤其发现早期的一个错误,就可以避免在后期辐 射出的成百上千个错误。 60/86 软件工程的基本原理软件工程的基本原理 (3)合理控制需求变动。 o 需求变动性是软件项目与生俱来的特性,不变是不可能 的。有变动的要求,就说明已有的成果有需要纠错和改 善的地方,但需求变更有可能对项目进展造成冲击,要 严格进行配置管理,合理控制需求变更。 在软件开发过程中不要随意改变需求,因为改变某项需求往往 需要付出较高的代价,但在实践中用户往往会提出需求变更, 因此需要采取科学的产品控制技术。 目前主要实行基准配置管理:基准配置是指经过阶段评审后的 软件配置成分,如各个阶段产生的文档或程序代码。 对涉及基准配置的修改,必须经过严格的评审,通过后才能实 施修改。 61/86 软件工程的基本原理软件工程的基本原理 (4)采用先进的软件设计方法。 o 好的设计方法可以得到灵活可靠的软件结构,对于提高 软件的可靠性、可维护性、应对需求变更的灵活性都非 常关键。通常考虑模块化、抽象与信息隐蔽、局部化、 一致性等准则。这些准则在本书软件设计部分还会详细 阐述。 实践表明:采用先进的技术既可提高软件开发的效率 ,又可提高软件维护的效率。 80年代及之前:结构化分析、设计技术 90年代:面向对象分析、设计技术 62/86 软件工程的基本原理软件工程的基本原理 (5)开发文档要完备,阶段性成果应能清楚 地审查。 软件产品是看不见、摸不着的逻辑产品 ,开发过程难以评价和管理。 根据软件开发项目的总目标及完成期限 ,规定开发组织的责任和产品标准,使 所得的结果能够清楚地审查 63/86 软件工程的基本原理软件工程的基本原理 (6)开发小组的人员应少而精。 开发小组人员的素质和数量是影响软件 产品质量和开发效率的重要因素。 开发小组人员数目的增加,使相互交流 复杂、费用增加。 64/86 软件工程的基本原理软件工程的基本原理 (7)承认不断改进软件工程实践的必要性。 遵循前6条基本原理,就能够按照当代 软件工程基本原理实现软件的工程化生 产,但不能保证赶上时代前进的步伐。 积极主动采纳新的软件技术,且不断总 结经验。 65/86 第第1 1章章 软件工程的基本概念与原理软件工程的基本概念与原理 1.1 软件工程学科的诞生 1.2 软件工程的基本概念和原理 1.3 软件工程研究的主要内容 66/86 1.3 1.3 软件工程研究的主要内容软件工程研究的主要内容 o 1.3.1 软件开发过程 o 1.3.2 软件工程技术 o 1.3.3 软件项目管理 o 1.3.4 计算机辅助软件工程 67/86 1.3.1 1.3.1 软件开发过程软件开发过程 o在软件工程学科诞生之前,人们只重视编程,很少关注软件开发过 程对软件项目的响影。实践证明,软件项目是一项复杂的系统工程 ,对开发过程的组织与施工管理很大程度上决定了软件的开发效率 、软件质量,甚至项目的成败。因此,对软件开发过程的研究与不 断改善是软件工程讨论的一项主要内容。 o软件生命周期理论把软件开发与维护过程划分为若干个阶段,这是 研究软件开发过程的基础。实践中,人们对行之有效的软件过程组 织模式进行总结,形成了不同的软件开发过程模型。传统的有瀑布 模型、快速原型、增量模型、螺旋模型、喷泉模型等。随着面向对 象方法的广泛应用,Rational公司还提出了统一过程模型(简称 RUP)。 o随着软件过程越来越多的被重视,作为评价软件组织能力成熟度 CMM模型也被提出,并得到了广泛的应用。近年来,代表着新的 价值观和原则的敏捷联盟所倡导的敏捷过程以及软件过程改进成为 讨论的热点。关于软件过程的详细内容,本书放在第二章讨论。 68/86 1.3.1 1.3.1 软件开发过程软件开发过程快速原型模型快速原型模型 1. 基本思想 在获取一组基本的需求定义后,利用高级软件工具的可开 发环境,快速地建立一个目标系统的最初版本,并把它交给用 户试用、补充和修改,再进行新的版本开发。反复进行这个过 程,直到得出系统的“精确解”,即用户满意为止。经过这样 一个反复补充和修改的过程,应用系统的“最初版本”就逐步 演变为系统的“最终版本”。 原型:一个具体的可执行模型,它实现了系统的若干功能。 原型法:不断地运行系统“原型”来进行启发、揭示和判断 的系统开发方法。 69/86 1.3.1 1.3.1 软件开发过程软件开发过程快速原型模型快速原型模型 原型法的主要思路: 根据用户的需求迅速构造一个低成本的用于演示及评价 的试验系统(原型) 由用户对原型进行评价 在用户评价的基础上对原型进行修改或重构 。 有了满意的系统原型,同时也积累了使用原型的经验,用户 常会提出新目标,从而进一步重新构造原型周期。新目标的 范围要比修改或补充不满意的原型大。 ()渐增型 ()用于验证软件需求的原型 ()用于验证设计方案 70/86 1.3.1 1.3.1 软件开发过程软件开发过程快速原型模型快速原型模型 3. 软件原型是软件的最初版本,以最少的费用、最短的时间开发 出的、以反映最后软件的主要特征的系统。它具有以下特征 : (1)它是一个可实际运行的系统。 (2)它没有固定的生存期。一种极端是扔掉原型(以最简便 方式大量借用已有软件,做出最后产品的模型,证实产品 设想是成功的,但产品中并不使用);另一种极端是最终 产品的一部分即增量原型(先做出最终产品的核心部分, 逐步增加补充模块),演进原型居于其中(每一版本扔掉 一点,增加一点,逐步完善至最终产品)。 71/86 1.3.1 1.3.1 软件开发过程软件开发过程快速原型模型快速原型模型 (3)从需求分析到最终产品都可作原型,即 可为不同目标作原型。 (4)它必须快速、廉价。 (5)它是迭代过程的集成部分,即每次经用 户评价后修改、运行,不断重复双方认可 。 72/86 1.3.1 1.3.1 软件开发过程软件开发过程快速原型模型快速原型模型 快速原型法的特点: 有直观的系统开发过程 用户参与系统开发的全过程 可以逐步明确用户需求 用户直接掌握系统的开发进度 用户接受程度高 73/86 1.3.1 1.3.1 软件开发过程软件开发过程快速原型模型快速原型模型 快速原型法的不足: 不适用于拥有大量计算或控制功能的系统 不适用于大型或复杂的系统 容易掩盖需求、分析、设计等方面的问题 结果不确定随原型构造评价过程而定 整体考虑较少 快速原型法主要适应于: 适用于解决有不确定因素的问题 适用于对用户界面要求高的系统 适用于决策支持方面的应用 适用于中型系统 74/86 1.3.1 1.3.1 软件开发过程软件开发过程螺旋模型螺旋模型 在原型基础上,进行多次原型反复并增加风险评估后形成。 75/86 1.3.1 1.3.1 软件开发过程软件开发过程螺旋模型螺旋模型 76/86 1.3.1 1.3.1 软件开发过程软件开发过程螺旋模型螺旋模型 螺旋模型分析 在螺旋模型结构中,维护只是螺旋模型的另一个周期 ,在维护和开发之间本质上并没有区别,从而解决了 做太多测试或未作足够测试所带来的风险。 适用条件 内部的大规模软件的开发,不太适合合同软件。 一般只适用于大规模软件的开发 77/86 1.3.2 1.3.2 软件工程技术软件工程技术 o 总体上,软件工程讨论的主要内容可以分 为软件工程技术和软件项目管理两大部分 。在软件开发过程中,对于可行性分析、 需求规格说明、系统设计、编程与测试, 以及软件维护等活动都有相应的专门技术 需要掌握。 78/86 从软件工程技术的内容体系来看,大体上分从软件工程技术的内容体系来看,大体上分 为:原理、方法、工具和技术四个层面。为:原理、方法、工具和技术四个层面。 o软件工程原理表明:为了不断提高软件质量、软件开发效率,以及 确保软件项目的成功,软件工程学科提出了解决问题的一组原理和 相关原则(即7条原理),无论采用什么过程或方法,这些原理和 原则都是应该普遍被遵守的。 o在遵守软件工程原理和原则的基础上,不同的专家、学者及软件工 程实践者,从各自的角度认识和研究软件系统的规律,并提出了各 自认识问题和解决问题的思维模式,最具代表性的就是我们熟悉的 结构化方法论和面向对象的方法论,这就是软件工程“方法”层面 的内容。不同的方法论为了在相应的思维模式上对软件开发提出解 决方案,研究并设计了一组从事分析与设计活动的工具,如结构化 的分析与设计工具、面向对象的分析与设计工具等,这些就构成了 软件工程“工具”层面的内容。在运用这些工具从事分析与设计的 活动中,必不可少的需要掌握一定的技术,

温馨提示

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

评论

0/150

提交评论