资源预览内容
第1页 / 共80页
第2页 / 共80页
第3页 / 共80页
第4页 / 共80页
第5页 / 共80页
第6页 / 共80页
第7页 / 共80页
第8页 / 共80页
第9页 / 共80页
第10页 / 共80页
亲,该文档总共80页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
软件工程学,授课班级: 授课教师:孔令东 E-Mail: kongldfoxmail.com 共享邮箱:kldstudentfoxmail.com 密码:123456 Telephone:18651918867 教学进度及重点介绍:教学进度表/参考书目 学习要求:分组、预习、课堂、复习(讨论) 作业要求:作业模板,1,2019/6/21,学习要求,分组:5-7人小组; 组长一名,负责计划的制定、监督和实施 预习:只需将核心的内容略读一遍、知道将要学习什么、搜索知识体系中的盲点和难点(标注) 课堂:,! 复习(讨论):核心知识点,逐个攻克!组长的 威力一定要发挥哦! 作业:,!,2,2019/6/21,关于作业的规范,题号:(页码题号) 题目内容:(详细的内容) 涉及知识点:(题目内容中可能用到的知识点,摘要写出,至少写2点,至多5点,每个知识点不能超过五个字) 解答: 每次作业要隔开!,教材知识体系的架构,1、概论 2、结构化的软件工程 3、面向对象的软件工程 4、软件项目管理,主要参考书,本章目标,了解软件工程学产生的背景和原因 了解软件工程的基本原理、概念和方法 掌握软件生命周期模型,为特定 的项目选择适合的模型,问题,为什么要提出 软件工程呢?,软件工程对软件开发有什么帮助呢?,主要内容,软件危机( Software Crisis) 软件工程( Software Engineering) 软件生命周期(Software Life Cycle) 软件过程(Software Process),Go,Go,Go,Go,一. 软件危机内容线索,一. 软件危机 软件发展过程 软件危机 软件危机表现 软件危机产生原因 消除软件危机的途径 软件工程 软件生命周期 软件过程,软件发展过程,1950s1960s中:规模较小的程序,个体化的软件开发,只有程序清单 1960s中1970中:“软件作坊”,广泛使用产品软件 “软件危机” 出现了 1968年北大西洋公约组织的计算机科学家在联邦德国召开国际会议,讨论软件危机问题,在这次会议上正式提出并使用了“软件工程”这个名词,一门新兴的工程学科就此诞生了,软件发展过程,1970中1980s:微处理器的出现并广泛应用 分布式系统、嵌入智能 1980s:网络迅速普及 强大的桌面系统、面向对象技术、专家系统、人工智能、神经网络、并行计算、网格计算、虚拟组织,软件发展过程,软件发展过程中存在的问题 软件开发能力不能满足人们的需要 社会对软件的依赖程度加大,人们普遍关注软件的安全和可靠性 若干年前开发的应用软件经过几十次修改已无人认识它的内部结构,己经不可维护 由于经济原因,嵌入式系统存在许多怪现象,企业不愿意投入资源再生产,而采取打补丁+时髦界面的方法,问题实例,美国IBM公司在1963年至1966年开发的IBM360机的操作系统。这一项目花了5000人一年的工作量,最多时有1000人投入开发工作,写出了近100万行源程序。据统计,这个操作系统每次发行的新版本都是从前一版本中找出1000个程序错误而修正的结果。 这个项目的负责人F. D. Brooks事后总结了他在组织开发过程中的沉痛教训时说:“正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难。程序设计工作正像这样一个泥潭,一批批程序员被迫在泥潭中拼命挣扎,谁也没有料到问题竟会陷入这样的困境”。IBM360操作系统的历史教训成为软件开发项目的典型事例为人们所记取。,软件危机,软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题 典型表现: 开发成本和进度的估计常常很不准确 用户对“已完成的”软件系统不满意 “软件质量不可靠 软件常常是不可维护的 软件没有适当的文档资料 软件产品“供不应求”,软件危机表现,软件成本的比例逐年上升,软件危机产生原因,软件的规模加大、复杂性提高、性能增强 软件是逻辑产品,尚未完全认识其本质和特点 软件缺乏“可见性”:管理和控制软件开发过程相当困难 不会“用坏”:错误很可能是在开发时期引入,软件维护通常意味着修改原来的设计,这就在客观上使得软件较难维护,软件危机产生原因,缺乏有效的、系统的开发、维护大型软件项目的技术手段和管理方法 用户和软件开发人员的理解鸿沟 错误的认识和作法:忽视软件需求分析的重要性,认为软件开发就是写程序并设法使之运行,轻视软件维护等,软件危机产生原因,消除软件危机的途径,消除“软件就是程序”的错误观念 一个软件必须由一个完整的配置组成 软件是程序、数据及相关文档的完整集合 文档是开发、使用和维护程序所需要的图文资料,软件=程序+数据+文档,消除软件危机的途径,软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目 成功的软件开发技术和方法 软件工具和软件工程支撑环境,二. 软件工程内容线索,软件危机 二. 软件工程 软件工程定义 软件工程的本质特征 软件工程的基本原理 软件工程方法学 软件生命周期 软件过程,软件工程,1968NATO(North Atlantic Treaty Organization)会议,德国Garmisch Partenkirchen (加米斯帕腾基辛),计算机科学会议 软件危机根源解决途径软件工程 目的:解决“软件危机”,软件工程定义,“概括地说,软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。”,软件工程定义,NATO:软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理 IEEE定义:软件工程是(1)把系统化的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;(2)研究(1)中提到的途径,软件工程定义,Boehm(巴里.勃姆):软件(包括程序和文档)设计、实现、检查、运行、维护各个过程使用的立足于科学基础的实用方法 中国大百科全书:软件工程是应用计算机科学、数学及管理科学等原理开发软件的过程。它借鉴传统工程的原则、方法,以提高质量、降低成本为目的。其中,计算机科学、数学用于构造模型与算法,工程科学用于制定规范、设计范型、降低成本及确定权衡,管理科学用于计划、资源、质量、成本等管理。软件工程是一门交叉学科,软件工程的本质特征,软件工程关注于大型程序的构造,软件工程的本质特征,软件工程的中心课题是控制复杂性 软件经常变化 开发软件的效率非常重要 和谐地合作是开发软件的关键 纪律是成功地完成软件开发项目的一个关键 软件必须有效地支持它的用户 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品,软件工程的基本原理,用分阶段的生命周期计划严格管理 坚持进行阶段评审 错误出现的时间(63% : 37%) 改正错误的代价 实行严格的产品控制 基线配置、变动控制 采用现代程序设计技术 结果应能清楚地审查 开发小组的人员应该少而精 承认不断改进软件工程实践的必要性,软件工程方法学,软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科 通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(methodology),也称为范型(paradigm),软件工程方法学三要素,传统方法学,传统方法学也称为生命周期方法学或结构化范型 它采用结构化技术(结构化分析、结构化设计和结构化实现) 结构化范型要么面向行为(即对数据的操作),要么面向数据,面向对象方法学,面向对象方法把数据和行为看成同等重要,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法 面向对象方法学具有下述4个要点,面向对象方法=对象+类+继承+用消息通信,传统方法与面向对象方法比较,信息隐藏(Information hiding) 有利用维护软件 使得软件开发变得容易 职责驱动设计(Responsibility-driven design)或按合同设计(design by contract),三. 软件生命周期内容线索,软件危机 软件工程 三. 软件生命周期 软件过程,软件生命周期,软件产品或系统一系列相关活动的全周期,软件定义,软件开发,可行性分析,需求分析,总体设计,详细设计,编 码,测 试,软件发布,软件运行,软件维护,软件维护,问题定义,系统设计,系统实现,软件定义,1.问题定义 “要解决的问题是什么?” 确定用户要求解决的性质、工程的目标和规模 2. 可行性研究 “对于上一个阶段所确定的问题有行得通的解决办法吗?” 经济、技术、法律可行性、不同的方案 3. 需求分析 “为了解决这个问题,目标系统必须做什么” 确定系统必须具有的功能和性能,系统要求的运行环境,并且预测系统发展的前景 规格说明书(specification),软件开发,4. 总体设计(概要设计) “概括地说,应该怎样实现目标系统?” 设计出实现目标系统的几种可能的方案。推荐一个最佳方案 确定程序由哪些模块组成以及模块之间的关系 5. 详细设计(模块设计) “应该怎样具体地实现这个系统呢?” 设计出程序的详细规格说明 确定实现模块功能所需要的算法和数据结构,软件开发,6. 编码和单元测试 写出正确的易理解、易维护的程序模块并仔细测试每个模块 7. 综合测试 集成测试和验收测试,现场测试或平行运行,软件维护,8. 软件维护 使系统持久地满足用户的需要 维护工作分成以下四类 改正性维护 适应性维护 完善性维护 预防性维护,四. 软件过程内容线索,软件危机 软件工程 软件生命周期 四. 软件过程,软件过程,软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤 运用方法的顺序、文档资料、管理措施,各个阶段的里程碑 通常使用生命周期模型简洁地描述软件过程 生命周期模型规定了把生命周期划分成哪些阶段及各个阶段的执行顺序 也称为过程模型,过程模型,典型的过程模型 瀑布模型(Waterfall model) 快速原型开发模型(Rapid Prototyping model) 增量模型(Incremental model) 螺旋模型(Spiral model) 其它模型 喷泉模型(Fountain model) 极限编程(eXtreme Programming) RUP(Rational Unified Process) 建造修补模型(Build-and-fix model),瀑布模型,理想的瀑布模型,实际的瀑布模型,对生命周期各个阶段,规定了自顶向下,相互衔接的固定次序。,瀑布模型的特点,阶段间具有顺序性和依赖性 推迟实现的观点 清楚地区分逻辑设计与物理设计,尽可能推迟程序的物理实现 质量保证的观点(文档驱动) 每个阶段都必须完成规定的文档 每个阶段结束前都要对所完成的文档进行评审,瀑布模型的优点,强迫开发人员采用规范方法; 每个阶段必须提交相应的文档; 每个阶段所交出的产品必须经过质量保证小组(SQA)的验证。,瀑布模型的缺点,完全依赖于书面的规格说明,可能导致最终开发出的软件产品不能真正满足用户的需要。,快速原型模型,快速原型是一个与产品子集功能上相同的工作模型 快速建立起来的可以在计算机上运行的程序 它所能完成的功能往往是最终产品能完成的功能的一个子集,快速原型模型,用户测试 运行原型,建造/修改 原型,听取用 户意见,快速原型模型的特点,快速原型的本质是“快速” 快速原型可以取代规格说明阶段,但不是设计阶段,容易适应需求的变化 有利于开发与培训的同步 开发费用低、开发周期短、维护容易且对用户更友好 客户与开发者对
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号