《第1章软件工程导论》由会员分享,可在线阅读,更多相关《第1章软件工程导论(71页珍藏版)》请在金锄头文库上搜索。
1、第1章 软件工程概述,软件工程产生的背景(软件危机) 软件工程定义 软件工程方法学 软件过程模型 小结,1,1.1 软件工程产生的背景,软 件a. 软件的定义软件( Software)是计算机系统中与硬件相互依存的另一部分,它是包括程序(Program) ,数据(Data)及其相关文档( Document)的完整集合。Software = Program + Data + Document程序是按事先设计的功能和性能要求执行的指令序列数据是使程序能正常操纵信息的数据结构文档是与程序开发,维护和使用有关的图文材料,2,非常复杂,逻辑复杂 远远高于硬件的逻辑复杂度 开发复杂 成本难以估算 进度难以
2、控制 人员素质要求 质量得不到保证 96年Ariane火箭发射失败,浮点数转换时发生错误,3,1.1 软件工程产生的背景b、软件的特征,成本高(1/2),1.1 软件工程产生的背景b、软件的特征,4,成本高(2/2),5,风险大,1995年美国Standish咨询集团的统计分析(至90年代初的软件项目执行情况) 成功:16.2% 失败:31 受到挑战:53.8% 近几年来的统计数据 成功:26 失败:28 受到挑战:46%,1.1 软件工程产生的背景b、软件的特征,6,维护困难,维护形式多样化 改正性:修改故障 完善性:增加功能 适应性:移植 维护成本越来越高 55%到70 维护带来的问题,1
3、.1 软件工程产生的背景b、软件的特征,7,1.1 软件工程产生的背景,c. 软件的发展,早期 面向批处理 有限的分布 自定义软件,第二阶段 多用户 实时 数据库 软件产品,第三阶段 分布式系统 嵌入“智能” 低成本硬件 消费者的影响,第四阶段 强大的桌面系统 面向对象技术 专家系统 人工神经网络 并行计算 网路计算机,1950,1960,1970,1980,1990,2000,1968年10月,北大西洋公约组织(NATO)的科学家在德国召开的学术会议上正式提出了软件危机问题。,8,1.1 软件工程产生的背景,2) 、软件危机a、软件危机的表现(1/3),成本高 IBM 360 OS, 500
4、0多人年,耗时4年(19631966),花费2亿多美元 美国空军:1955年软件占总费用(计算机系统)的18%,70年60%,85年达到85 美国全球军事指挥控制系统,硬件1亿美元,软件高达7.2亿美元 计算机软件和硬件费用比,9,软件质量得不到保证 软件应用面的扩大:科学计算、军事、航空航天、工业控制、企业管理、办公、家庭 软件越来越多的应用于安全攸关(safety critical)的系统,对软件质量提出更高的要求 80年代欧洲亚丽安娜火箭的发射失败,原因是软件错误 美国阿托拉斯火箭的发射失败,原因是软件故障 英国1986年开发的办公室信息系统Folios经4年,因性能达不到要求,1989
5、年取消 日本第5代机因为软件问题在投入50亿美元后于1993年下马 由于软件质量问题导致失败的软件项目非常多,a、软件危机的表现(2/3),10,a、软件危机的表现(3/3),进度难以控制 项目延期比比皆是 由于进度问题而取消的软件项目较常见 只有一小部分的项目能够按期完成 维护非常困难 软件维护的多样性 软件维护的复杂性 软件维护的副作用,11,b、产生软件危机的原因,与软件本身的特点有关 (难于维护, 逻辑复杂) 与软件开发与维护的方法不正确有关: 软件程序 急于求成=拔苗助长 各自为阵无方法/学,12,开发一个具有一定规模和复杂性的软件系统与编写一个简单的程序不一样 正如建设狗窝和高楼大
6、厦 大型、复杂软件系统的开发是一项工程,必须按照工程化的方法组织软件的生产和管理,必须经过分析、设计、实现、测试、维护等一系列软件过程和活动,C、软件工程(学)因危机而产生,13,d、软件工程(学):克服软件危机的努力,(1)从管理的角度软件开发过程的研究、文档的标准化以及人们的交流方式等 (2)软件开发方法的研究结构化软件开发方法, 面向对象的开发,14,提出有效的方法和工具支持软件开发 1968年提出软件工程概念和思想 20世纪70年代的结构化软件开发方法 20世纪80年代的面向对象的软件开发方法 新的技术: 软件重用、快速原型、需求工程 典型技术: COM, Java, C+, J2EE
7、, .Net, . 支撑工具和环境:Jbuilder, Visual Studio, WebLogic, ,1、解决危机的技术途径,15,20世纪80年代末,美国DoD和工业界开始认识到管理的重要性 美国DoD的一项研究表明,70%的项目由于管理不善导致难以控制进步、成本和质量; 进一步的研究发现:管理是影响软件项目成功开发的全局性因素,而技术只影响局部 如果软件开发组织不能对软件项目进行有效管理,就不能充分发挥软件开发方法和工具的潜力,也就不能高效率地开发出高质量的软件产品,2、解决危机的管理途径,16,1.2 软件工程定义(1),The establishment and use of s
8、ound engineering principles (methods) in order to obtain economically software that is reliable and works on real machines. (1968- Fritz Bauer),软件工程就是建立和使用一套合理的工程原理,从而经济地获得可靠的、可以在实际机器上高效运行的软件。,17,1.2 软件工程定义(2),Software engineering. (1) The application of a systematic, disciplined, quantifiable appro
9、ach to the development, operation, and maintenance of software; that is, the application of engineering to software. (2) The study of approaches as in (1). (IEEE(The Institute for Electrical and Electronic engineers) Std 610-1990.),软件工程是:(1)把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;(2)研究(1)中提到的途径。,
10、18,1.2 软件工程定义,总之:软件工程是应用计算机科学、数学及管理科学等原理开发软件的工程。它借鉴传统工程的原则、方法,以提高质量,降低成本为目的。,19,软件工程的特性,1. 软件工程关注于大型程序的构造 2. 软件工程的中心课题是控制复杂性 3. 软件经常变化 4. 开发软件的效率非常重要 5. 和谐地合作是开发软件的关键 6. 软件必须有效地支持它的用户 7. 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人,1.2 软件工程定义,用分阶段的生命周期计划严格管理 坚持进行阶段评审 实行严格的产品控制 采用现代程序设计技术 结果应能清楚地审查 开发小组的人员应该少而精
11、承认不断改进软件工程实践的必要性,软件工程的基本原理,21,1.3 软件工程方法学,软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。 通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(methodology),也称为范型(paradigm)。在软件工程领域中,这两个术语的含义基本相同。软件工程方法学包含3个要素:方法、工具和过程。,1.3 软件工程方法学,软件工程: 一种层次化技术,软件工程三个要素:工具、方法、过程,基础层,综合方法及工具,定义方法使用的顺序,所需要的管理,为软件开发提供“如何做”的技术,为软件开发提供自动或半自动的软件支撑环境,建立
12、计算机辅助软件工程(CASE)的软件开发支撑系统,23,1.3 软件工程方法学,ALM(Application Lifecycle Management),MSF(Microsoft Solution Framework ),24,软件工程层次的扩展,25,上次课内容回顾,什么是软件? 软件有何特性? 什么是软件危机? 软件工程是如何定义的? 软件工程的原理是什么? 软件工程的特征是什么? 软件工程的三要素?,26,1.4 软件生命周期模型,问题定义软件定义 可行性研究需求分析总体设计详细设计 软件生命周期 软件开发 编码单元测试综合测试运行维护 持久满足用户需求,27,28,软件生命周期(S
13、oftware Life Cycle),一般问题的解决过程: 问题的阐述:界定问题,用较宽的范围而不是细节来定义和描述待解问题; 问题的分析:问题定义的提炼,把问题分成可以理解和处理的子问题,进而提供基本细节; 寻找解法:收集问题的一组可能解法; 判定:每一种可能解法的评估和比较,直至获得最佳解法; 设计规格说明:对选中解法的细节描述; 实现:由设计到构造出结果产品,包括把分解过的各部分综合成一个有机的整体。,29,软件生命周期(Software Life Cycle),如同任何事物一样,软件也有一个孕育、诞生、成长、成熟、衰亡、演化的生存过程; 为了用工程化方式有效地管理软件的全过程,软件的
14、生存过程也可以划分为好几个阶段,由此逐步形成“软件生命周期”的概念; 它是一个从用户需求开始,经过开发、交付使用,在使用中不断增补修订,直至让位于新软件的全过程; 概括地说,软件生命周期由软件定义、软件开发和运行维护3个时期组成,每个时期又进一步划分成若干个阶段。,30,软件定义时期,问题定义阶段:界定问题的范围,确切地定义问题; 可行性研究阶段:研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法; 需求分析阶段:确定目标系统必须具备哪些功能; 另外,要估计完成该项工程所需要的资源和成本,制定工程进度表。,31,软件开发时期,具体设计和实现在前一个时期定义的软件。 总体设计阶段:设
15、计出实现目标系统的几种可能的方案,权衡利弊推荐一最佳方案,并制定实现最佳方案的详细计划,以及设计软件的体系结构; 详细设计阶段:设计出程序的详细规格说明; 编码和单元测试阶段:写出正确的、容易理解、容易维护的程序模块; 综合测试阶段:通过各种类型的测试使软件达到预定的要求。,32,运行维护(软件维护)时期,维护阶段的关键任务是:通过各种必要的维护活动使软件系统持久地满足用户的需要。通常的4种维护活动: 改正性维护:诊断和改正使用过程中发现的软件错误; 适应性维护:修改软件以适应环境的变化; 完善性维护:根据用户需要改进或扩充软件使之更完善; 预防性维护:修改软件从而为将来的维护活动做好准备。,
16、1.4 软件过程模型,软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。,工作任务,里程碑、交付物,SQA点,A process defines Who is doing What, When, and How, in order to reach a certain goal.,公共过程框架,辅助活动,框架活动,任务集合,软件过程,33,1.4 软件过程模型,软件生命周期的每一阶段都有明确的任务,把规模大、结构复杂、管理复杂的软件开发变得容易控制和管理。各个阶段的活动如何衔接,开发过程中采用什么样的策略,应遵守什么样的规定和制约,将这些活动框架(忽略不必要的细节)用一种模型表示出来,称为软件过程模型(或软件开发模型或软件生命周期模型)。也就是说, 软件过程模型是软件开发全部过程、活动和任务的结构框架。,34,1.4 软件过程模型,