收藏 分享(赏)

第1章 软件工程学概述.ppt

上传人:scg750829 文档编号:8270928 上传时间:2019-06-17 格式:PPT 页数:80 大小:4.33MB
下载 相关 举报
第1章  软件工程学概述.ppt_第1页
第1页 / 共80页
第1章  软件工程学概述.ppt_第2页
第2页 / 共80页
第1章  软件工程学概述.ppt_第3页
第3页 / 共80页
第1章  软件工程学概述.ppt_第4页
第4页 / 共80页
第1章  软件工程学概述.ppt_第5页
第5页 / 共80页
点击查看更多>>
资源描述

1、软件工程学,授课班级: 授课教师:孔令东 E-Mail: 共享邮箱: 密码:123456 Telephone:18651918867教学进度及重点介绍:教学进度表/参考书目 学习要求:分组、预习、课堂、复习(讨论) 作业要求:作业模板,1,2019/6/17,学习要求,分组:5-7人小组;组长一名,负责计划的制定、监督和实施 预习:只需将核心的内容略读一遍、知道将要学习什么、搜索知识体系中的盲点和难点(标注) 课堂:,! 复习(讨论):核心知识点,逐个攻克!组长的 威力一定要发挥哦! 作业:,!,2,2019/6/17,关于作业的规范,题号:(页码题号) 题目内容:(详细的内容) 涉及知识点

2、:(题目内容中可能用到的知识点,摘要写出,至少写2点,至多5点,每个知识点不能超过五个字) 解答:每次作业要隔开!,教材知识体系的架构,1、概论 2、结构化的软件工程3、面向对象的软件工程4、软件项目管理,主要参考书,本章目标,了解软件工程学产生的背景和原因了解软件工程的基本原理、概念和方法掌握软件生命周期模型,为特定 的项目选择适合的模型,问题,为什么要提出 软件工程呢?,软件工程对软件开发有什么帮助呢?,主要内容,软件危机( Software Crisis) 软件工程( Software Engineering) 软件生命周期(Software Life Cycle) 软件过程(Softw

3、are Process),Go,Go,Go,Go,一. 软件危机内容线索,一. 软件危机软件发展过程 软件危机软件危机表现软件危机产生原因消除软件危机的途径 软件工程 软件生命周期 软件过程,软件发展过程,1950s1960s中:规模较小的程序,个体化的软件开发,只有程序清单 1960s中1970中:“软件作坊”,广泛使用产品软件 “软件危机” 出现了 1968年北大西洋公约组织的计算机科学家在联邦德国召开国际会议,讨论软件危机问题,在这次会议上正式提出并使用了“软件工程”这个名词,一门新兴的工程学科就此诞生了,软件发展过程,1970中1980s:微处理器的出现并广泛应用 分布式系统、嵌入智能

4、 1980s:网络迅速普及 强大的桌面系统、面向对象技术、专家系统、人工智能、神经网络、并行计算、网格计算、虚拟组织,软件发展过程,软件发展过程中存在的问题软件开发能力不能满足人们的需要 社会对软件的依赖程度加大,人们普遍关注软件的安全和可靠性 若干年前开发的应用软件经过几十次修改已无人认识它的内部结构,己经不可维护由于经济原因,嵌入式系统存在许多怪现象,企业不愿意投入资源再生产,而采取打补丁+时髦界面的方法,问题实例,美国IBM公司在1963年至1966年开发的IBM360机的操作系统。这一项目花了5000人一年的工作量,最多时有1000人投入开发工作,写出了近100万行源程序。据统计,这个

5、操作系统每次发行的新版本都是从前一版本中找出1000个程序错误而修正的结果。 这个项目的负责人F. D. Brooks事后总结了他在组织开发过程中的沉痛教训时说:“正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难。程序设计工作正像这样一个泥潭,一批批程序员被迫在泥潭中拼命挣扎,谁也没有料到问题竟会陷入这样的困境”。IBM360操作系统的历史教训成为软件开发项目的典型事例为人们所记取。,软件危机,软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题 典型表现:开发成本和进度的估计常常很不准确用户对“已完成的”软件系统不满意“软件质量不可靠软件常常是

6、不可维护的 软件没有适当的文档资料软件产品“供不应求”,软件危机表现,软件成本的比例逐年上升,软件危机产生原因,软件的规模加大、复杂性提高、性能增强 软件是逻辑产品,尚未完全认识其本质和特点 软件缺乏“可见性”:管理和控制软件开发过程相当困难 不会“用坏”:错误很可能是在开发时期引入,软件维护通常意味着修改原来的设计,这就在客观上使得软件较难维护,软件危机产生原因,缺乏有效的、系统的开发、维护大型软件项目的技术手段和管理方法 用户和软件开发人员的理解鸿沟 错误的认识和作法:忽视软件需求分析的重要性,认为软件开发就是写程序并设法使之运行,轻视软件维护等,软件危机产生原因,消除软件危机的途径,消除

7、“软件就是程序”的错误观念 一个软件必须由一个完整的配置组成 软件是程序、数据及相关文档的完整集合 文档是开发、使用和维护程序所需要的图文资料,软件=程序+数据+文档,消除软件危机的途径,软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目 成功的软件开发技术和方法 软件工具和软件工程支撑环境,二. 软件工程内容线索,软件危机 二. 软件工程软件工程定义软件工程的本质特征软件工程的基本原理软件工程方法学 软件生命周期 软件过程,软件工程,1968NATO(North Atlantic Treaty Organization)会议,德国Garm

8、isch Partenkirchen (加米斯帕腾基辛),计算机科学会议 软件危机根源解决途径软件工程 目的:解决“软件危机”,软件工程定义,“概括地说,软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。”,软件工程定义,NATO:软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理 IEEE定义:软件工程是(1)把系统化的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应

9、用于软件;(2)研究(1)中提到的途径,软件工程定义,Boehm(巴里.勃姆):软件(包括程序和文档)设计、实现、检查、运行、维护各个过程使用的立足于科学基础的实用方法 中国大百科全书:软件工程是应用计算机科学、数学及管理科学等原理开发软件的过程。它借鉴传统工程的原则、方法,以提高质量、降低成本为目的。其中,计算机科学、数学用于构造模型与算法,工程科学用于制定规范、设计范型、降低成本及确定权衡,管理科学用于计划、资源、质量、成本等管理。软件工程是一门交叉学科,软件工程的本质特征,软件工程关注于大型程序的构造,软件工程的本质特征,软件工程的中心课题是控制复杂性 软件经常变化 开发软件的效率非常重

10、要 和谐地合作是开发软件的关键 纪律是成功地完成软件开发项目的一个关键 软件必须有效地支持它的用户 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品,软件工程的基本原理,用分阶段的生命周期计划严格管理 坚持进行阶段评审 错误出现的时间(63% : 37%) 改正错误的代价 实行严格的产品控制 基线配置、变动控制 采用现代程序设计技术 结果应能清楚地审查 开发小组的人员应该少而精 承认不断改进软件工程实践的必要性,软件工程方法学,软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科 通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(me

11、thodology),也称为范型(paradigm),软件工程方法学三要素,传统方法学,传统方法学也称为生命周期方法学或结构化范型 它采用结构化技术(结构化分析、结构化设计和结构化实现) 结构化范型要么面向行为(即对数据的操作),要么面向数据,面向对象方法学,面向对象方法把数据和行为看成同等重要,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法 面向对象方法学具有下述4个要点,面向对象方法=对象+类+继承+用消息通信,传统方法与面向对象方法比较,信息隐藏(Information hiding) 有利用维护软件 使得软件开发变得容易 职责驱动设计(Responsibility-dr

12、iven design)或按合同设计(design by contract),三. 软件生命周期内容线索,软件危机 软件工程 三. 软件生命周期 软件过程,软件生命周期,软件产品或系统一系列相关活动的全周期,软件定义,软件开发,可行性分析,需求分析,总体设计,详细设计,编 码,测 试,软件发布,软件运行,软件维护,软件维护,问题定义,系统设计,系统实现,软件定义,1.问题定义“要解决的问题是什么?”确定用户要求解决的性质、工程的目标和规模 2. 可行性研究“对于上一个阶段所确定的问题有行得通的解决办法吗?” 经济、技术、法律可行性、不同的方案 3. 需求分析“为了解决这个问题,目标系统必须做什

13、么” 确定系统必须具有的功能和性能,系统要求的运行环境,并且预测系统发展的前景规格说明书(specification),软件开发,4. 总体设计(概要设计)“概括地说,应该怎样实现目标系统?”设计出实现目标系统的几种可能的方案。推荐一个最佳方案 确定程序由哪些模块组成以及模块之间的关系 5. 详细设计(模块设计)“应该怎样具体地实现这个系统呢?”设计出程序的详细规格说明 确定实现模块功能所需要的算法和数据结构,软件开发,6. 编码和单元测试写出正确的易理解、易维护的程序模块并仔细测试每个模块 7. 综合测试 集成测试和验收测试,现场测试或平行运行,软件维护,8. 软件维护 使系统持久地满足用户

14、的需要 维护工作分成以下四类 改正性维护 适应性维护 完善性维护 预防性维护,四. 软件过程内容线索,软件危机 软件工程 软件生命周期 四. 软件过程,软件过程,软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤 运用方法的顺序、文档资料、管理措施,各个阶段的里程碑 通常使用生命周期模型简洁地描述软件过程 生命周期模型规定了把生命周期划分成哪些阶段及各个阶段的执行顺序 也称为过程模型,过程模型,典型的过程模型 瀑布模型(Waterfall model) 快速原型开发模型(Rapid Prototyping model) 增量模型(Incremental m

15、odel) 螺旋模型(Spiral model) 其它模型 喷泉模型(Fountain model) 极限编程(eXtreme Programming) RUP(Rational Unified Process) 建造修补模型(Build-and-fix model),瀑布模型,理想的瀑布模型,实际的瀑布模型,对生命周期各个阶段,规定了自顶向下,相互衔接的固定次序。,瀑布模型的特点,阶段间具有顺序性和依赖性 推迟实现的观点 清楚地区分逻辑设计与物理设计,尽可能推迟程序的物理实现 质量保证的观点(文档驱动) 每个阶段都必须完成规定的文档 每个阶段结束前都要对所完成的文档进行评审,瀑布模型的优点,

16、强迫开发人员采用规范方法; 每个阶段必须提交相应的文档; 每个阶段所交出的产品必须经过质量保证小组(SQA)的验证。,瀑布模型的缺点,完全依赖于书面的规格说明,可能导致最终开发出的软件产品不能真正满足用户的需要。,快速原型模型,快速原型是一个与产品子集功能上相同的工作模型 快速建立起来的可以在计算机上运行的程序 它所能完成的功能往往是最终产品能完成的功能的一个子集,快速原型模型,用户测试 运行原型,建造/修改原型,听取用户意见,快速原型模型的特点,快速原型的本质是“快速” 快速原型可以取代规格说明阶段,但不是设计阶段,容易适应需求的变化 有利于开发与培训的同步 开发费用低、开发周期短、维护容易

17、且对用户更友好 客户与开发者对原型理解不同 准确的原型设计比较困难 不利于开发人员的创新,快速原型模型的应用范围,用户需求不完全或不准确,有快速的原型开发工具 项目招投标时,可以以原型模型作为软件的开发模型 产品移植或升级或对已有产品原型进行客户化工作,比较,瀑布模型试图一次就获得正确的产品 快速原型频繁变化,然后废弃,增量模型,把软件产品作为一系列增量构件来设计、编码、集成和测试,构件:由一些代码块组成,这些代码块来自多个相互作用的模块,完成特定的功能,增量模型的特点,瀑布模型和快速原型模型的目标 交付给客户一个完整的、可用的产品 增量模型的优点 每个阶段交付一个可用的产品 减少一个全新产品

18、给客户带来的心理上的影响 分阶段地交付产品不需要大的资金支出 需求经常变化,增量模型的灵活性使其具有更加优越的适用性 增量模型的困难 需要一个开放的结构,方便构件的加入 要求集成的新的构件不能破坏软件的原有体系结构,风险更大的增量模型,螺旋模型,螺旋模型将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,简化的螺旋模型,简化版本:瀑布模型+风险分析 每个阶段之前 确定目标,可供选择的办法及其限制条件 风险分析 每个阶段之后 评估 计划下一阶段,简化的螺旋模型,完整的螺旋模型,风险分析,制定计划,客户评价,实施工程,累积的成本,阶段,螺旋模型的特点,螺旋模型的优点 容易确定何时已经

19、对某一阶段的产品充分测试完毕 维护和开发之间没有什么本质上的差别螺旋模型的缺点 仅适合于大型软件风险驱动既是优点也是缺点,喷泉模型,喷泉模型对软件复用和生存周期中多项开发活动的集成提供了支持,主要支持面向对象的开发方法。 “喷泉”一词本身体现了迭代和无间隙特性。系统某个部分常常重复工作多次,相关功能在每次迭代中随之加入演进的系统。所谓无间隙是指在开发活动,即分析、设计和编码之间不存在明显的边界。,喷泉模型,进一步开发,实现和集成阶段,运行状态,实现阶段,面向对象设计阶段,计划阶段,面向对象分析阶段,需求阶段,维护期,喷泉模型的特点,主要用于支持面向对象开发过程体现了软件创建所固有的迭代和无间隙

20、的特征,RUP过程,四个阶段 开始(Inception):定义项目范围 精化(Elaboration):项目计划、 需求、架构 构造(Construction):软件产品 过渡(Transition):软件产品过渡给用户,RUP过程,迭代是一系列明确的具有建立计划和评估准则的活动,将产生一个可执行的发布(内部或外部),RUP过程,敏捷开发,所谓敏捷开发,就是一种面临迅速变化的需求快速开发软件的能力 使用一些实践,以提供必要的纪律和反馈 使用一些设计原则,以保持软件是灵活的、可维护的 知道一些设计模式,以便针对特定问题权衡这些原则,敏捷开发,开发原则(共12条) 尽早地、持续地交付有价值的软件来

21、使客户满意即使到了开发后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势 经常交付可工作的软件,其时间间隔可以是几周到几个月 开发期间,业务人员和开发人员必须天天在一起工作 最有效果的、最有效率的传递信息的方法,就是面对面的交谈 首要的进度度量标准是工作的软件 简单是根本的,敏捷开发,极限编程(XP)是在增量模型基础上发展起来的一种颇有争议的新的软件开发方法 确定客户希望产品支持的各种特性(情节,Stories ) 客户使用成本-效益分析方法选择每个后续的构件所应包含的特性 每一个构件被分成更小的部分,成为任务(tasks) 程序员首先制定出一个任务的测试用例 成对编程(pair pr

22、ogramming) 把任务集成到产品的当前版本中,敏捷开发,极限编程的特点 XP小组的计算机设置在一个大房间的中心,大房间中有许多彼此相连的小隔间 一个客户代表一直与XP小组一起工作 没有一个人能够连续两周超时工作 没有规格说明,而是XP小组的所有成员一同完成规格说明、设计、代码和测试过程 重整(refactoring):建造产品的过程中不断地调整设计,敏捷开发,极限编程模型评价 XP 在一些中、小规模的项目上取得了成功 XP的长处在于当客户的需求模糊或经常改变时很适用 XP还没有得到充分的应用,不足以确定它是否能够兑现它早先的承诺,敏捷(灵活)过程与极限编程,XP项目的整体开发过程,图1.

23、12 XP迭代开发过程,1.4.8微软过程,图1.13微软软件生命周期阶段划分和主要里程碑,图1.14微软过程的生命周期模型,各种生命周期模型的比较,小结,不同的生命周期模型有自己的优点,也有自己的不足 选择生命周期模型的标准为 组织 组织的管理 雇员的能力 具体产品的特性 最好的建议 “Mix-and-match” 生命周期,总结,本章我们讲述了 软件危机产生的主客观原因,消除软件危机的途径 软件工程的定义、本质特征和基本原理 软件工程方法学:传统方法和面向对象方法 软件生命周期 软件过程模型 瀑布模型 快速原型模型 增量模型 螺旋模型 其他,第1章 复习要点,1什么是软件危机?有哪些主要表现?其产生的原因是什么? 2什么是软件工程?有哪些特性?其基本原理是什么? 3传统方法学和面向对象方法学的要点及优缺点。 4什么是软件生命周期?分哪几个阶段? 5什么是软件过程?与软件工程方法学有何关系? 6. 什么是软件生命周期模型?比较各种模型的优缺点。,作业,习题1 P32:1,3,7,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报