《研究生课软件工程第一讲.ppt》由会员分享,可在线阅读,更多相关《研究生课软件工程第一讲.ppt(47页珍藏版)》请在三一文库上搜索。
1、2019/8/10,1,课名: 软 件 工 程,主讲教师:李文立 办公室:科技园C座309房间 电话:84708058 Email: ,2019/8/10,2,课程内容,软件工程的基本知识(软件危机、生命周期) 传统软件工程(结构化分析、设计和实现) 面向对象软件工程(OOA概念、方法、设计和实现) 软件项目管理(软件计划、组织、控制,国际标准) 高级软件工程( CORBA, J2EE, web) 补充知识,2019/8/10,3,课程目标,理解软件工程管理的概念和任务; 理解软件生存期过程; 掌握需求分析、测试、维护基本技术; 掌握软件度量、软件配置管理方法; 理解软件质量保证的手段; 理解
2、软件项目对人员的需求; 理解软件知识产权的基本知识; 掌握面向对象的设计思想; 了解一个或多个高级建模方法; 能自行设计、规划一个小型软件项目。,2019/8/10,4,第一章 软件工程概述,2019/8/10,5,计算机软件,计算机软件是程序、数据及相关文档的集合。 Software=Programming + Documents Programming = Data Structure + algorithm,2019/8/10,6,软件工程与编程,前者是一门学科,一种科学理论来指导软件系统设计、开发、部署、维护以及软件文档管理 指导如何分解一个系统,以便各人分工开发; 指导如何说明每个部
3、分的规格要求;怎样才能易于维护,单纯的代码编写 是软件工程发展的前身 是软件工程中占据很少时间和空间的一部分 蓝领工作,2019/8/10,7,1.1 软件工程的背景和历史,1968年由NATO (北大西洋公约组织)在德国Garmish召开的学术会议上,Feitz Bauer首先提出了“软件工程”概念。 软件工程(SE):计算机科学、管理科学、数学、工程管理等的综合,2019/8/10,8,软件的发展,1946年,第一台计算机诞生,通过编写机器码指令的方式来编写程序,满足了人们计算方面的需要。 之后,计算机硬件以空前的速度飞速发展。由电子管计算机时代晶体管计算机时代集成电路计算机时代, 按照摩
4、尔法则(微处理器的性能每18个月翻番)使计算机的性能不断提高。同时硬件技术的突破,为软件技术的发展提供了空间,软件技术也得到了相应的发展,由最初的机器码编程汇编语言高级语言。关系数据库理论的发展也促进了数据库应用系统的发展。 软件技术上的这一系列发展的结果使得计算机的应用领域由最初的科学计算发展到军事、经济、科学、文化等各个领域。计算机应用系统由简单到复杂,由小型到大型。,早期 第二阶段 第三阶段 第四阶段 面向批处理 多用户 分布式系统 强大的桌面系统 有限的分布 实时 局、广域网 面向对象、B/S 自定义软件 数据库(1G) 低成本硬件 专家系统 软件作坊 PC 人工神经网络 C/S 并行
5、计算 网络计算机,1950,1960,1970,1980,1990,2000,Evolution of software#,2019/8/10,10,软件开发面临的问题,软件规模不断变大 软件复杂性增大 不准确的时间和金钱的估算 软件质量难以达到用户要求 相对硬件产品开发软件开发费用的增加 维护变得越来越困难 硬件价格大幅度下降,Windows95 有10百万行代码 Windows2000 有50百万行代码 Windows XP 40百万行代码 Windows Server 2003 50百万行代码 Debian 5.0 324百万行代码 OpenSolaris 9.7百万行代码 FreeBS
6、D 8.8百万行代码 Mac OS X 10.4 86百万行代码 Linux kernel 2.6.0 5.2百万行代码 Linux kernel 2.6.29 11.0百万行代码 Linux kernel 2.6.32 12.6百万行代码,例:,Windows95有1000万行代码 Windows2000有5000万行代码,例:,Exchange2000和 Windows2000开发人员结构,2019/8/10,13,人月神话焦油坑,史前史中,没有别的场景比巨兽在焦油坑中垂死挣扎的场面更令人震撼。上帝见证着恐龙、猛犸象、剑齿虎在焦油中挣扎。它们挣扎得越是猛烈,焦油就缠得越紧,没有任何猛兽足够
7、强壮或具有足够的技巧,能够挣脱束缚,它们最后都沉到了坑底。,2019/8/10,14,“焦油坑”寓意,过去几十年的大型系统开发就犹如这样一个焦油坑,很多大型和强壮的动物在其中剧烈地挣扎。他们中大多数开发出了可运行的系统不过,其中只有非常少数的项目满足了目标、时间进度和预算的要求。各种团队,大型的和小型的,庞杂的和精干的,一个接一个淹没在了焦油坑中。表面上看起来好像没有任何一个单独的问题会导致困难,每个都能被解决,但是当它们相互纠缠和累积在一起的时候,团队的行动就会变得越来越慢。对问题的麻烦程度,每个人似乎都会感到惊讶,并且很难看清问题的本质。,2019/8/10,15,IT神话 or IT陷阱
8、,质疑企业信息化的功效 IT神话 or IT陷阱 政府的导向?企业内部抵制? 等死? or 找死?,2019/8/10,16,1.对软件开发成本和进度的估计常常很不准确。(下页图) 软件开发很难按预定计划实现,投入了资金,能否出结果,出怎样的结果,事先难以预料。 2.用户对“已完成”的软件系统不满意的现象经常发生。 3.软件产品的质量往往不可靠。软件可靠性和质量保证的定量概念刚刚出现不久。 1962年6月,美国飞向金星的第一个空间探测号(水手1号),因其飞舱中的计算机导航程序之一的一个语句的语义出错,总是偏离航线无法取得成功。1965年1970年,美国范登堡基地因程序有错误造成发射火箭多次失败
9、。,软件危机的主要特征,yet, Success Hasnt Come Easily,31%,53%,16%,Successfully,Challenged,Canceled,2019/8/10,18,4.软件常常是不可维护的。通常软件维护的费用占总费用的55%-70%。 错误具有累积和放大效应。 在后期发现的错误改正的成本和难度将是巨大的(比早期进行修正所付出的代价高2-3个数量级),甚至是不可能改正的。,改正一个问题在不同阶段需付出的代价,需 求 分 析,结构设计,详细设计,编码,集成测试,系统测试,现场,改正一个问题的估计费用,改正一个问题估计的工作量,20,200,2000,1000,
10、5.0,2.5,0.05,0.5,(美元),(人天),2019/8/10,20,软件开发时,一个错误发现得越晚,为改正它所付出的代价就越大。这个说法是对的。在1970年代,GTE(通用电话电子)、TRW(美国天合公司,大型综合汽车零件供应商)和IBM等三家公司对此问题做了独立研究,最后它们得到相似的结论:在需求分析阶段检查和修复一个错误所需的代价只有编码阶段所需代价的1/5到1/10,而在维护阶段做同样的工作所付出的代价却是编码阶段的20倍。 5.软件通常没有适当的文档资料,给软件开发和维护带来极大困难。 文档的作用: 管理人员:评价软件开发进度。 开发人员:通讯工具。 维护人员:维护的依据。
11、 6.软件成本在计算机系统总成本中所占的比例逐年上升。(见下页图) 7.软件开发生产率提高的速度远远跟不上计算机应用迅速普及深入的趋势。,2019/8/10,21,处在十字路口的中国软件产业,主权大国必须建立基于自主技术的、完整的软件产业体系。 软件本国提供率:中国1/3左右,美国97% “印度模式”还是“中国模式” 软件人才结构不合理,缺乏中高级软件人才。软件人员缺乏软件工程化的概念。,我国政府对于软件产业的健康发展高度重视;相关部门正着力于“可信软件基础”的相关研究。,2019/8/10,23,软件工程的定义,Fritz Bauer在NATO会议上给出的定义: “软件工程是为了经济地获得可
12、靠的和能在实际机器上高效运行的软件,而确立和使用的健全的工程原理和方法。”,2019/8/10,24,软件工程的定义(2),IEEE【83】给出的软件工程定义: “软件工程是开发、运行、维护和修复软件的系统方法。”,2019/8/10,25,软件工程的定义(3),IEEE【93】给出了一个更加综合的定义: “将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中。”,软件工程的定义,软件工程是指导软件开发和维护的工程类学科,它以计算机科学理论及其他相关学科的理论为指导,采用工程化的概念、原理、技术和方法进行软件的开发和维护,把经过时间证明正确的管理措施和当前
13、能够得到的最好的技术方法结合起来,以较少的代价获取高质量的软件,2019/8/10,27,软件工程三要素,软件工程三个要素:方法、工具、过程 任何工程化方法都必须围绕高质量这一核心。软件工程的四个研究对象构成了以软件质量为核心的层次结构。,2019/8/10,28,软件工程方法为软件开发提供了“如何做”的技术。它包括了多方面的任务,如项目计划与估算、软件系统需求分析、数据结构、系统总体结构的设计、算法过程的设计、编码、测试以及维护等。软件工程方法常采用某一种特殊的语言或图形的表达方法及一套质量保证标准。 软件工具为软件工程方法提供了自动的或半自动的软件支撑环境。目前,已经推出了许多软件工具,已
14、经能够支持上述的软件工程方法。特别地,已经有人把诸多的软件工具集成起来,使得一种工具产生的信息可以为其它的工具所使用,这样建立起一种被称之为计算机辅助软件工程(CASE)的软件开发支撑系统。CASE将各种软件工具、开发机器和一个存放开发过程信息的工程数据库组合起来形成一个软件工程环境。 软件工程的过程则是将软件工程的方法和工具综合起来以达到合理、及时地进行计算机软件开发的目的。过程定义了方法使用的顺序、要求交付的文档资料、为保证质量和协调变化所需要的管理、及软件开发各个阶段完成的里程碑(工作)。,2019/8/10,29,软件工程与一般工程的差异,软件是逻辑产品而不是实物产品 智力密集及知识产
15、权保护 软件的功能依赖于硬件和软件的运行环境以及人们对它的操作,2019/8/10,30,软件工程知识结构,2001年5月ISO/IEC JTC 1(ISO和IEC的第一联合技术委员会)发布了 SWEBOK指南V0.95(试用版)( Guide to the Software Engineering Body of Knowledge ) SWEBOK把软件工程学科的主体知识分为10个知识领域。,2019/8/10,31,软件工程知识结构,软件需求 软件设计 软件构造 软件测试 软件维护 软件配置管理 软件工程管理 软件工程过程 软件工程工具和方法 软件质量,2019/8/10,32,学习“软
16、件工程”可以实现两个转变,转变对软件的认识: 上升 程序 系统 转变思维定式: 上升 程序员 系统工程师 (系统分析员),2019/8/10,33,软件产品的标准化,软件开发过程的标准化,2019/8/10,34,软件的工业化生产过程应具备的特点: 明确的工作步骤 详细具体的规范化文档 明确的质量评价标准,“一个好的工业,应有一套 良好的标准来配套”,2019/8/10,35,软件工程技术的两个特点,强调规范化 强调文档化,2019/8/10,36,“软件工程”课程 与其它软件专业课的区别,(1) 立足于系统的整体。 (2) 讲授系统分析、系统设计、 测试及维护的理论和方法。 (3) 构筑一个
17、软件系统,实践 软件开发全过程。,2019/8/10,37,1.2 软件和软件生命期模型,(Software Life Cycle) 软件产品或软件系统从设计、投入使用到被淘汰的全过程。,2019/8/10,38,软件生存期的阶段划分,(1)可行性研究与计划 (2)需求分析 (3)总体设计 (4)详细设计 (5)实现 (6)集成测试 (7)确认测试 (8)使用和维护,成长期(开发期),怀孕期(计划期),成年期(运行期),2019/8/10,39,新的国际标准定义的软件生存过程(1995 ISO/IEC 12207),软件生存期过程,支持过程,组织过程,主要过程,获 取 过 程,供 应 过 程,
18、开 发 过 程,运 行 过 程,维 护 过 程,文 档 编 制 过 程,配 置 管 理 过 程,质 量 保 证 过 程,验 证 过 程,确 认 过 程,联 合 评 审 过 程,审 核 过 程,问 题 解 决 过 程,管 理 过 程,基 础 设 施 过 程,改 进 过 程,培 训 过 程,2019/8/10,40,软件工作的范围,只考虑 编写程序,涉及整个 软件生存 周期,扩展到,2019/8/10,41,软件开发模型是软件开发全部过程、活动和任务的结构框架。它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。软件开发模型也常称为: 软件过程模型 软件生存周期模型 软件工程范型
19、,软件开发模型,可行性研究与计划,需求分析,设计,编码,运行维护,测试,定义 阶段,开 发 阶 段,维护阶段,瀑布模型(Waterfall Model),2019/8/10,43,开发软件不仅仅是编程,2019/8/10,44,按照传统瀑布模型开发软件的特点,1.阶段间具有顺序性和依赖性。 2.推迟实现的观点。 3.每个阶段必须完成规定的文档; 每个阶段结束前完成文档审查, 及早改正错误。,2019/8/10,45,原型模型(快速原型模型),原型范型,用户测试 运行原型,建造/修改 原型,听取用 户意见,采用原型模型的软件生存周期,分析定义 系统需求,生成 原型,系统 设计,程序 设计,编码,测试,运 行 和维护,原型化,含原型化的 软件生存期,2019/8/10,47,其他模型,螺旋模型(风险驱动模型):增加了风险分析的快速原型模型 增量模型:组件叠加模型 喷泉模型:强调阶段迭代,适合面向对象设计 以上三个在实际应用中较少使用。,
链接地址:https://www.31doc.com/p-3305081.html