Download presentation
Presentation is loading. Please wait.
1
软件工程 主讲:饶国政 天 津 大 学
2
学习“软件工程”的目的和意义 学会如何在现代IT企业的环境中做一个成功者; 学会如何做世界级的、高质量的研究;
学会如何创建大规模的软件产品。 —— 微软全球资深副总裁 原微软亚洲研究院院长 首席科学家 张亚勤
3
一、全球软件产业的现状、趋势与挑战 软件产业的网络化趋势 软件产业的服务化趋势 软件产业的全球化趋势
The Challenges and Opportunities of the Global Software Industry. 一、全球软件产业的现状、趋势与挑战 智能网络 (Intelligent Web) ·从静态网到动态网 ·从被动方式到主动方式 ·从呈现信息和浏览的窗口到智能生成的平台 ·从HTML到XML 软件产业的网络化趋势 软件产业的服务化趋势 软件产业的全球化趋势
4
一、全球软件产业的现状、趋势与挑战 软件产业的网络化趋势 软件产业的服务化趋势 软件产业的全球化趋势
The Challenges and Opportunities of the Global Software Industry. 一、全球软件产业的现状、趋势与挑战 软件产业的网络化趋势 软件产业的服务化趋势 软件产业的全球化趋势 相对目前“打包式”软件,为用户提供智能化的“服务式”软件。
5
一、全球软件产业的现状、趋势与挑战 对中国软件企业有什么启示和挑战? 软件产业的网络化趋势 软件产业的服务化趋势 软件产业的全球化趋势
The Challenges and Opportunities of the Global Software Industry. 一、全球软件产业的现状、趋势与挑战 软件产业的网络化趋势 软件产业的服务化趋势 软件产业的全球化趋势 ·强调开放性、交互性 ·支持主流的开放式标准 ·人才的全球化 对中国软件企业有什么启示和挑战?
6
二、现代软件开发对人才的要求 Talent Beyond Technology _What Kind of Talent We Need for Modern Software Development 扎实的基础 创新、独立的工作能力 主人翁精神和团队精神 勾通与协调能力 成就感强、有激情 自觉地干好工作 契而不舍,从错误中学习
7
三、信息化建设中对复合型软件人才的需求 我国复合型软件人才匮乏,培养适应迅速变化的市场需求的复合型软件人才已是迫在眉睫。 复合型软件人才—具备不同专业背景、有市场观念的开发管理、工程管理和软件经营等复合型软件人才;
8
四、软件开发中的错误观点 1.只要掌握了1-2门程序设计语言,进行软件开发就没有问题。
2.软件需求分析很困难,不管三七二十一先把软件做了再说,反正软件是灵活的,随时可以修改。 3. 只要有最好的开发工具、最好的计算机,一定能做出优秀的软件。 总之,错误认为:软件就是程序,开发软件就是编写程序。
9
本课程学习的主要内容 1. 传统的软件工程方法 2. 面向对象的建模技术—UML统一建模语言 3. 软件项目管理及CMM
4. 软件复用及构件工程 本课程以传统的软件工程技术为基础,主要讨论如何应用软件工程的最新技术 — UML统一建模语言进行软件开发,提高软件开发的水平和技术。
10
课程特点与安排 1. 课程特点: 2. 课程安排(建议): 3. 关于考试(建议) : 实践性强、发展迅速
课堂教学(64学时)— 授课、案例分析、讨论 3. 关于考试(建议) : 笔试: 分,平时: 分
11
教材及主要参考书 1.软件工程 软件工程:实践者之路(第五版) 作者:Roger S. Pressman 出版社:清华大学出版社(影印版)
《软件工程:实践者之路》一书,20年来,受到了学习软件工程的学生和该领域的专业人士的极大欢迎和推崇,在软件工程教学中被奉为经典。
12
原书名: Software Engineering: A Practitioner's Approach ,Sixth Edition
原出版社: McGraw-Hill 作者: (美)Roger S.Pressman 译者: 郑人杰马素霞 白晓颖 等 丛书名: 计算机科学丛书 出版社:机械工业出版社
13
教材及主要参考书 2.软件工程(第2版) 作者:齐治昌、宁洪 出版社:高等教育出版社 ISBN:9787040146288
面向21世纪课程教材、国家精品课程配套教材
14
参考网站 http:// www.mrcase.net 软件工程网 www.sei.cmu.edu 卡内基梅大学软件工程研究所
对象技术和构件技术链接 Rational公司 软件工程网 卡内基梅大学软件工程研究所 对象技术和构件技术链接 Rational公司 OMG(Object Management Group)
15
1 第一章 软件与软件工程
16
1.1 软件 软件的概念; 软件的特点; 软件的分类; 软件的发展; 软件危机。
17
软件是逻辑产品,需要计算机硬件和系统软件的支撑; 软件是计算机控制系统的指挥中枢; 软件是信息转换器,它能对信息进行加工、处理或变换;
软件的概念 软件是计算机系统的重要组成部分; 软件是逻辑产品,需要计算机硬件和系统软件的支撑; 软件是计算机控制系统的指挥中枢; 软件是信息转换器,它能对信息进行加工、处理或变换; 软件是工具,在人们的生活、工作、休闲,在社会的经济、军事、政治、文化、科学技术、教育中发挥具大作用;
18
计算机世界的软件 软件是能够完成预定功能和性能,并对相应数据进行加工的程序和描述程序及其操作的文档。 软件 = 程序+数据+文档
程序 = 算法+数据结构
19
软件的特点 软件是被开发或设计的,而不是传统意义上被制造的 软件不会”磨损” 软件产业逐步走向基于构件的组装,但还是定制的
20
软件由程序、数据、文档 组成。 数据 用程序设计语言要求的数据结构表示 文档 规范 准确 清晰 简洁 无歧义 自然语言 结构化英语 图表
软件的描述 软件由程序、数据、文档 组成。 数据 用程序设计语言要求的数据结构表示 文档 规范 准确 清晰 简洁 无歧义 自然语言 结构化英语 图表
21
程序设计语言 面向机器 汇编语言、机器语言等 面向过程 Fortran, Pascal, C等 面向对象 C++, Java等
面向机器 汇编语言、机器语言等 面向过程 Fortran, Pascal, C等 面向对象 C++, Java等 面向问题 结构化查询语言SQL等
22
软件分类 系统软件 实时软件 商务软件 工程和科学计算软件 嵌入式软件 人工智能软件 个人计算机软件
23
软件的发展 软件发展的四个阶段 1950---1965 没有系统的软件开发方法和管理机制、自定义软件、批处理、有限分布。
产生人机交互的新概念、新技术软件产品、多用户、实时、数据库。 微处理器的出现并广泛应用 分布式系统、嵌入智能、低成本硬件、消费者的影响。 广域和局域网络迅速普及 强大的桌面系统、面向对象技术、专家系统、人工智能、神经网络、并行计算、网络计算机。
24
2软件发展存在的问题 软件开发能力不能满足人们的需要。 社会对软件的依赖程度加大,人们普遍关注软件的安全和可靠性
建造高可靠性、高质量软件的任务任重道远。 若干年前开发的应用软件经过几十次修改已无人认识它的内部结构,己经不可维护。 由于经济原因,嵌入式系统存在许多怪现象,企业不愿意投入资源再生产,而采取打补丁+时髦界面的方法。
25
软件危机 软件开发成本过高 软件质量得不到保证 软件开发效率低 难以控制开发进度,工作量估计困难
软件危机的表现 软件产业的发展长期滞后,与硬件发展不协调。 软件开发成本过高 软件质量得不到保证 软件开发效率低 难以控制开发进度,工作量估计困难 软件不能满足社会发展的需求,成为社会、经济发展的制约因素
26
2. 软件危机原因 软件的规模加大、复杂性提高、性能增强 软件是逻辑产品, 尚未完全认识其本质和特点
缺乏有效的、系统的开发、维护大型软件项目的技术手段和管理方法 用户对软件需求的描述和软件开发人员对需求的理解往往存在差异,用户经常要求修改需求,开发人员很难适应 软件开发的技术人员和管理人员缺乏软件工程化的素质和要求,对工程化的开销认识不足
27
1.2 软件工程的产生和发展 软件工程(Software Engineering)是在克服60年代末所出现的“软件危机”的过程中逐渐形成与发展的。 随着互联网平台和环境的迅速发展,对软件工程的发展产生了变革性的巨大影响,网格计算、普适计算、中间件、网构软件等一批新技术和理念,从网络资源共享与管理,人机交互及软件服务等各方面提出了软件技术的新课题。
28
软件工程的发展已经历了四个重要阶段: 1.第一代软件工程 — 传统的软件工程 2.第二代软件工程 — 对象工程 3.第三代软件工程 — 过程工程 4.第四代软件工程 — 构件工程
29
软件工程的发展已经历了四个重要阶段: 1.第一代软件工程 — 传统的软件工程 2.第二代软件工程 — 对象工程
3.第三代软件工程 — 过程工程 4.第四代软件工程 — 构件工程 60年代末到70年代为了克服“软件危机” (Software crisis)提出“软件工程”的名词, 将软件开发纳入工程化的轨道,基本形成软件工程的概念、框架、技术和方法。称为传统的软件工程。
30
软件工程的发展已经历了四个重要阶段: 1、第一代软件工程 — 传统的软件工程 2、第二代软件工程 — 对象工程
3、第三代软件工程 — 过程工程 4、第四代软件工程 — 构件工程 80年代中到90年代,面向对象的方法与技术得到发展,研究的重点转移到面向对象的分析与设计,演化为一种完整的软件开发方法和系统的技术体系,称为对象工程。
31
软件工程的发展已经历了四个重要阶段: 1、第一代软件工程 — 传统的软件工程 2、第二代软件工程 — 对象工程
80年代中开始,人们在软件开发的实践过程中认识到:提高软件生产率,保证软件质量的关键是“软件过程”,是软件开发和维护中的管理和支持能力,逐步形成软件过程工程。 软件工程的发展已经历了四个重要阶段: 1、第一代软件工程 — 传统的软件工程 2、第二代软件工程 — 对象工程 3、第三代软件工程 — 过程工程 4、第四代软件工程 — 构件工程
32
软件工程的发展已经历了四个重要阶段: 1、第一代软件工程 — 传统的软件工程 2、第二代软件工程 — 对象工程
90起年代,基于构件(Component)的开发方法取得重要进展,软件系统的开发可通过使用现成的可复用构件组装完成,而无需从头开始构造,以此达到提高效率和质量,降低成本的目的。称为构件工程。 软件工程的发展已经历了四个重要阶段: 1、第一代软件工程 — 传统的软件工程 2、第二代软件工程 — 对象工程 3、第三代软件工程 — 过程工程 4、第四代软件工程 — 构件工程
34
} 软件开发技术 } 软件管理技术 软件开发方法、技术 软件开发工具及环境 软件管理技术 软件规范(国际规范)
软件工程是一门新兴的边缘学科,涉及的学科多,研究的范围广,研究的主要内容有以下几方面: 软件开发方法、技术 软件开发工具及环境 软件管理技术 软件规范(国际规范) } 软件开发技术 } 软件管理技术
35
1.3 软件工程过程与软件生存期 为了克服软件危机,人们从其他产业的工业化生产得到启示,于是在68年北大西洋公约的软件可靠性会议(NATO)上,首次提出了“软件工程”的概念。提出了在软件生产中采用工程化的方法,采用一系列科学的、现代化的方法技术来开发软件。这种工程化的思想贯穿到软件开发和维护的全过程。
36
软件工程过程 (Software engineering process)
是指在软件工具的支持下,所进行的一系列软件开发和进化的活动。 通常包括以下四类基本过程: 1、软件规格说明:规定软件的功能及其运行环境。 2、软件开发:产生满足规格说明的软件。 3、软件确认:确认软件能够完成客户提出的要求。 4、软件演进:为满足客户的变更要求,软件必须在使用的过程中演进。
37
软件工程过程 (Software engineering process)
规程与方法 过程 有技能经过培训的开发人员 工具和设备
38
软件工程三要素 软件工程 过程 方法 工具 软件工程釆用层次化的方法,每个层次都包括过程、方法、工具三要素。
39
软件生命周期(SDLD)—瀑布模型 问题定义 可行性研究 需求分析 软件设计 编 码 测 试 运行与维护 (目标与范围说明书) 计划时期
(可行性论证论告) 需求分析 (需求说明书) 开发 时期 软件设计 (设计文档) 编 码 (程序) 测 试 (测试报告) 运行 时期 运行与维护 (维护报告) 瀑布模型
40
1.4 软件开发模型 软件过程模型是对软件开发实际过程的抽象和简化。
软件开发模型是描述软件开发过程中各种活动如何执行的模型。因此又称为软件过程模型。 软件过程模型是对软件开发实际过程的抽象和简化。 目前典型的软件开发模型有: 瀑布模型、增量模型、螺旋模型、喷泉模型、变换模型和基于知识的模型等。 不同的开发方法有不同的软件过程模型。
41
软件过程模型是软件开发全过程、软件开发活动以及它们之间关系的结构框架
软件项目的管理提供里程碑和进度表 为软件开发提供原则和方法
42
五类软件开发过程模型 以软件需求完全确定为前提的瀑布模型
在软件开发初期只能提供基本需求所采用的渐进式开发模型如原型模型、螺旋模型、增量模型、并发开发模型 以形式化开发方法为基础的变换模型 基于构件的开发过程 敏捷开发过程---统一软件开发过程RUP
43
瀑布模型 问题定义 可行性研究 需求分析 软件设计 编码 测试 运行与维护 (目标与范围说明书) 计划时期 (可行性论证论告)
开发 时期 运行 计划时期 (目标与范围说明书) (可行性论证论告) (维护报告) (测试报告) (程序) (设计文档) (需求说明书) 瀑布模型
44
瀑布模型主要思想 软件开发过程与软件生命周期是一致的 相邻二阶段之间存在因果关系 需对阶段性产品进行评审
45
瀑布模型的优点 软件生命周期模型,使软件开发过程可以在分析、设计、编码、测试和维护的框架下进行;
软件开发过程具有系统性、可控性,克服了软件开发的随意性 。
46
瀑布模型的缺点 项目开始阶段用户很难精确的提出产品需求,由于技术进步,用户对系统深入的理解,修改需求十分普遍。
项目开发晚期才能得到程序的运行版本,这时修改软件需求和开发中的错误代价很大。 采用线性模型组织项目开发经常发生开发小组人员“堵塞状态”,特别是项目的开始和结束。
47
增量模型(incremental model)
增量模型是一种非整体开发的模型。是一种进化式的开发过程。 根据增量的方式和形式的不同,分为: 基于瀑布模型的渐增模型 基于原型的快速原型模型 该模型具有较大的灵活性,适合于软件需求不明确、设计方案有一定风险的软件项目。 增量模型和瀑布模型之间的本质区别是什么?
48
增量模型特点 增量 小而可用的软件 特点 在前面增量的基础上开发后面的增量 每个增量的开发可用瀑布或快速原型模型 迭代的思路
49
循环模型 为了描述软件开发过程中可能的回溯,尤其是维护阶段往往要经历上述各个阶段。采用循环模型描述。 评价 运行 计划 需求分析 测试 设计
编码 循环模型
50
1.快速分析 快速确定软件系统的基本要求,确定原型所要体现的特征(界面,总体结构,功能,性能)
速成原型的工作模型是一个循环的模型。 1.快速分析 快速确定软件系统的基本要求,确定原型所要体现的特征(界面,总体结构,功能,性能) 2.构造原型 考虑主要特征,快速构造一个可运行的系统。有三类原型:用户界面原型,功能原型,性能原型。 3.运行和评价原型 4.修改与改进 运行 评价 构造 快速分析修改 原型的工作模型
51
智能模型(intelligent model)
也称为基于知识的软件开发模型,是知识工程与软件工程相结合的软件开发模型。 获取需求 需求分析 具体描述 优化 程序 调整 验证 维护 知识库 专家系统 智能模型
52
1.5 软件开发方法 软件开发方法可分为两大类: 面向过程的开发方法 面向对象的开发方法
1.5 软件开发方法 软件开发的目标是要在规定的投资和时间内,开发出符合用户的需求,高质量的软件,为此需要有成功的开发方法。 软件开发方法可分为两大类: 面向过程的开发方法 面向对象的开发方法
53
结构化方法及瀑布模型 结构化开发方法(Structured Developing Method)
是现有的软件开发方法中最成熟,应用最广泛的方法,主要特点是快速,自然和方便。 结构化方法总的指导思想自顶向下、逐步求精。它的基本原则是功能的分解与抽象。 一、结构化开发方法的组成 结构化程序设计方法 SP法(Structured Program) 结构化设计方法 SD法(Structured Design) 结构化分析方法 SA法(Structured Analysis) SA,SD,SP 法相互衔接,形成了一整套开发方法。
54
原型化方法及其工作模型 什么是原型化方法(Prototyping Method)
原型——是软件的一个早期可运行的版本,它反映了最终系统的部分重要特性。 原型化方法的基本思想是花费少量代价建立一个可运行的系统,使用户及早获得学习的机会。 原型化方法又称速成原型法(Rapid Prototyping)。
55
原型化方法及其工作模型 RSP法(Rapid Specific Prototyping)快速建立需求规格原型。 2、追加(add on)型
1、废弃(throw away)型 RSP法(Rapid Specific Prototyping)快速建立需求规格原型。 2、追加(add on)型 RCP法(Rapid Cyclic Prototyping)快速建立渐进原型法。采用循环渐进的开发方式,对系统模型作连续精化。
56
快速分析,确定初步规格说明 构造原型 运行/评价原型 修 N 正 原型完成否 改 进 原 型 Y N 要细部说明否 Y 严格说明细部 N
图2 细化的快速原型模型 快速分析,确定初步规格说明 快速分析或修改 评价 构造 运 行 构造原型 运行/评价原型 修 正 改 进 原 型 N 原型完成否 Y N 要细部说明否 Y 严格说明细部 N 效果满意否 Y 整理原型提供文档 细化的快速原型模型
57
原型模型的优点 原型模型支持软件需求开发,帮助用户和开发人员理解需求,是软件需求工程的关键。 它产生的正式需求文挡,是软件开发的基础。
如果开发的原型是可运行的,它的若干高质量的程序片段和开发工具可用于工作程序的开发。 原型的开发和评审是系统分析员和用户/客户共同参予的迭代过程,每个迭代循环都是线性过程。
58
螺旋模型 对大型软件,需要多个原型描述系统的生存期,螺旋模型将瀑布模型与原型化模型结合起来,并加入了风险分析。
螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期可分为4个工作步骤: 第一,确定目标、方案和限制条件; 第二,评估方案、标识风险和解决风险; 第三,开发确认产品; 第四,计划下一周期工作。 螺旋模型
59
螺旋模型的使用 软件工程项目从螺旋中心开始启动,沿顺时针方向前进。 第一圈 产生产品规格说明; 第二圈 产生一个用于开发的原型;
第一圈 产生产品规格说明; 第二圈 产生一个用于开发的原型; 第三圈 产生软件产品的初始版本; 第四圈 产生软件产品比较完善的新版本 ……。
60
螺旋模型的优点 符合人们认识现实世界和软件开发的客覌规律; 支持软件整个生命周期; 保持瀑布模型的系统性、阶段性;
利用原型评估降低开发风险; 开发者和用户共同参与软件开发,尽早发现软件中的错误; 不断推出和完善软件版本,有助于需求变化,获取用户需求,加强对需求的理解。
61
面向对象方法及其工作模型 面向对象方法 (OOSD(Object-Oriented Software Development)是80年代推出的一种全新的软件开发方法。非常实用而强有力,被誉为90年代软件的核心技术之一。 其基本思想是:对问题领域进行自然的分割,以更接近人类通常思维的方式建立问题领域的模型,以便对客观的信息实体进行结构和行为的模拟,从而使设计的软件更直接地表现问题的求解过程。面向对象的开发方法以对象作为最基本的元素,是分析和解决问题的核心。
62
面向对象开发方法的组成 OOSD由三部分组成: OOA(Object-Oriented Analysis)面向对象的分析
OOD(Object-Oriented Design)面向对象的设计 OOP (Object-Oriented Program)面向对象的程序设计 OOA OOA 强调的是对一个系统中的对象特征和行为的定义。建立系统的三类模型。 OOD OOD OOD 与OOA密切配合顺序实现对现实世界的进一步建模。 OOP OOP OOP 是面向对象的技术中发展最快的,使用面向对象的程序设计语言,进行编码。
63
喷泉模型 该模型是由B.H.Sollers和J.M.Edwards于1990年提出的一种新的开发模型。它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性,喷泉模型使开发过程具有迭代性和无间隙性。 其特点如下: 1. 开发过程有分析、系统设计、软件设计和实现4个阶段。 2.各阶段相互重叠,它反映了软件过程并行性的特点。 3.以分析为基础,资源消耗成塔型。 4.反映了软件过程迭代性的自然特性,从高层返回低层无资源消耗。 5.强调增量开发,整个过程是一个迭代的逐步提炼的过程。 分 析 系统 设计 软件 设计 实 现 喷泉模型
64
面向对象的方法的代表性成果有: 1. B.Henderson-sellers 和 J.m.Edwards提出的面向对象软件生存期喷泉模型及面向对象的系统开发方法。 2. G.Booch提出的面向对象的开发方法。 3. P.Coad和E.Yourd提出的OOA和OOD法。 4. J. Rumbaugh等人提出的对象建模技术(OMT)。 5. Jacobson 提出的面向对象的软件工程(OOSE)。 6. G.booch J.Rumbough Jacobson等人在Booch方法、OMT和OOSE的基础上推出了统一建模语言UML。
Similar presentations