资源预览内容
第1页 / 共29页
第2页 / 共29页
第3页 / 共29页
第4页 / 共29页
第5页 / 共29页
第6页 / 共29页
第7页 / 共29页
第8页 / 共29页
第9页 / 共29页
第10页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第1讲 软件和软件工程软件工程导论 之用工程化的方法来开发软件用工程化的方法来开发软件1软件和软件工程本讲内容l软件(概念、特点)l软件危机(表现和根源)l软件工程(概念、目标和原则)2软件和软件工程计算机软件n什么是计算机软件n计算机软件的特点3软件和软件工程可执行部分不可执行部分文档1文档2文档3什么是计算机软件?n与计算机系统操作有关的程序程序以及任何与 之相关的文档文档的集合程序4软件和软件工程什么是程序(1/2)n程序: 由程序设计语言所描述的、能为计算 机所识别、理解和处理的语句序列n程序例子 Main( ) int i, j; / 变量定义char Str10; i = i + j ; / 语句说明5软件和软件工程什么是程序(2/2)n程序设计语言具有良好、严格语法和语义n目前程序设计语言主要有以下几种类型 面向机器: 如汇编语言、机器语言等 面向过程: 如Fortran, Pascal, C等等 面向对象: 如Java等等 面向问题: 如结构化查询语言SQL等等6软件和软件工程什么是文档n文档: 记录软件开发活动和阶段性成果、理 解软件所必需的阐述性资料 需求分析文档 软件设计文挡等 n编写文档目的 促进对软件的开发,管理和维护; 便于各种人员(用户,开发人员)的交流7软件和软件工程文档例子n软件需求规格说明书8软件和软件工程软件特点n不会老化n逻辑产品 (智力, 无形)n维护困难和复杂(完善, 纠错,.)n生产只需复制n软件开发性质如成本、进度等难以估计n软件的开发更加依赖于开发人员的业务素 质、智力、人员的合作、组织和管理9软件和软件工程本讲内容l软件(概念、特点)l软件危机(表现和根源)l软件工程(概念、目标和原则)10软件和软件工程软件危机n什么是软件危机n软件危机的表现n产生软件危机的根源n解决危机的技术途径n解决危机的管理途径11软件和软件工程什么是软件危机n软件在开发和维护过程中遇到的一系列问 题 困扰学术界和工业界 用户对软件开发缺乏信心 软件开发的高投入和高风险12软件和软件工程软件危机的表现(1 of 3)n成本高 IBM 360 OS, 5000多人年, 耗时4年(19631966),花 费2亿多美元 美国空军:1955年软件占 总费用(计算机系统)的18% ,70年60%,85年达到85 美国全球军事指挥控制系 统,硬件1亿美元,软件高 达7.2亿美元n计算机软件和硬件费用比13软件和软件工程14软件和软件工程软件危机的表现(2 of 3)n软件质量得不到保证 软件应用面的扩大:科学计算、军事、航空航天、工 业控制、企业管理、办公、家庭 软件越来越多的应用于安全犹关(safety critical)的系统 ,对软件质量提出更高的要求 80年代欧洲亚丽安娜火箭的发射失败,原因是软件错 误 美国阿托拉斯火箭的发射失败,原因是软件故障 英国1986年开发的办公室信息系统Folios经4年,因性 能达不到要求,1989年取消 日本第5代机因为软件问题在投入50亿美元后于1993年 下马n由于软件质量问题导致失败的软件项目非常多15软件和软件工程软件危机的表现(3 of 3)n进度难以控制 项目延期比比皆是 由于进度问题而取消的软件项目较常见 只有一小部分的项目能够按期完成n维护非常困难 软件维护的多样性 软件维护的复杂性 软件维护的副作用16软件和软件工程产生软件危机的根源n逻辑产品,不同于物理产品n复杂性高 逻辑产品,逻辑复杂性,远高于硬件复杂性 软件的复杂性随规模呈指数级上升n规模大 应用扩大,代码量,1000万行,仍在不断膨胀n影响软件生产率和质量的因素比较复杂 人员的能力和水平 团队合作n缺乏有效、系统原理、原则、方法和工具的指导 和辅助17软件和软件工程对软件开发的深层次认识n开发一个具有一定规模和复杂性的软件系 统与编写一个简单的程序不一样 正如建设狗窝和高楼大厦n大型、复杂软件系统的开发是一项工程, 必须按照工程化的方法组织软件的生产和 管理,必须经过分析、设计、实现、测试 、维护等一系列软件过程和活动18软件和软件工程解决危机的技术途径n20世纪60年代爆发,然而实际上软件危机随着计 算机软件的产生而产生,只是在此之前其问题的 严重性没有引起人们的关注和重视n提出有效的方法和工具支持软件开发 1968年提出软件工程概念和思想 20世纪70年代的结构化软件开发方法 20世纪80年代的面向对象的软件开发方法 新的技术: 软件重用、快速原型、需求工程 典型技术: COM, Java, C+, J2EE, .Net, . 支撑工具和环境:Jbuilder, Visual Studio, WebLogic, 19软件和软件工程技术手段不能完全解决软件危机n到了20世纪90年代,软件危机依然存在,甚至更 为严重 应用牵引技术的发展n瀑布模型n结构化软件开发方法nOO软件开发方法 技术推动应用的深化n应用的扩大和深入 应用变得越来越大和复杂,技术变得更加力不从心 错误的观念“只要有好的软件开发方法和工具就能高效 率地开发出高质量的软件”20软件和软件工程解决危机的管理途径n问题出在哪里?n20世纪80年代末,美国DoD和工业界开始认识到 管理的重要性 美国DoD的一项研究表明,70%的项目由于管理不善导 致难以控制进步、成本和质量; 进一步的研究发现:管理是影响软件项目成功开发的 全局性因素,而技术只影响局部 如果软件开发组织不能对软件项目进行有效管理,就 不能充分发挥软件开发方法和工具的潜力,也就不能 高效率地开发出高质量的软件产品21软件和软件工程本讲内容l软件(概念、特点)l软件危机(表现和根源)l软件工程(概念、目标和原则)22软件和软件工程软件工程n软件危机根源解决途径:软件工程n产生:1968年 NATO 计算机科学会议n软件工程是运用工程的、数学的、计算机 等科学概念、方法和原理来指导软件开发 和管理和维护的一门学科23软件和软件工程- 过程 方法工具软件工程软件工程构成三要素n过程 管理部分n方法 技术手段n工具 自动或半自动地支持软件的开发和管理n要素之间相互关联和支持24软件和软件工程软件工程目标(1/2)n正确性 满足用户的需求(功能、性能等) n可靠性 具有能够防止因概念、设计和结构等方面的不完善而 造成的系统失效,具有挽回因操作不当造成软件系统 失效的能力 n可维护性 便于对软件增加新功能、改进性能、修改错误、移植 n可重用性 软件易于被再次使用25软件和软件工程软件工程目标(2/2)n可追踪性 对软件进行正向和反向追踪的能力 n可移植性 从一个环境搬迁到另一个环境 n可互操作性 多个软件要素相互通讯协同完成任务能力 n有效性 充分利用计算机的时间和空间资源 26软件和软件工程软件工程原则(1/2)n抽象 关注事物基本、重要的部分,忽略不相关成分 抽象可以使我们的思维聚焦于问题本质,从而简化问题,控制问 题复杂度,推动复杂、庞大软件系统开发 n模块化 模块是程序中一个逻辑上相对独立、具有良好的接口定义的编程 单位:过程、函数、类、程序包等 模块化是指将复杂的系统分解为由一个个相对独立的模块来加以 实现,有助于抽象和信息隐藏以及表示复杂的系统 n信息隐藏 模块中的软件设计决策信息封装起来的技术,只知道它的功能以 及对外的接口,而不知它的内部细节 有助于软件开发人员的注意力集中于更高的抽象层次 27软件和软件工程软件工程原则(2/2)n局部化 物理模块内集中逻辑上相互关联的计算资源 确保模块内各成分关系密切而模快之间的关系松散,保证模块具 有良好的独立性 n一致性 整个软件系统均使用统一的符号、概念和术语 n完全性 整个软件系统不丢失任何重要的成分,软件完全实现系统所需的 功能、行为和性能 n可验证性 软件系统应易于检查、测试和评审 n实践经验的总结28软件和软件工程本讲小结l软件是程序以及相关文档的集合l软件危机的表现,根源之一在于缺乏系统 的方法和工具的指导l软件工程:方法,工具和过程l软件工程的目标和原则29软件和软件工程
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号