资源描述
标题文本,正文级别 1,正文级别 2,正文级别 3,正文级别 4,正文级别 5,软件工程方法与实践,窦万峰等编著,机械工业出版社,2009.5,软件工程导论张海藩编著,清华大学出版社,人月神话,佛雷德里克.布鲁克斯著,UMLChina翻译组 汪颖译,清华大学出版社,软件工程,水利工程,建筑工程,机械工程,软件工程,传统工程,气象工程,生物工程,第1章 概述,2,新兴工程,第1章 概述,Software,Soft+Ware,软件是计算机系统中与硬件相互依存的另一部分,,它包括程序、数据及其相关文档的完整集合。,软件与硬件、人、过程等共同构成计算机系统。,第1章 概述,软件是一种逻辑实体,而不是具体的物理实体,软件的特点,硬件失效率曲线,时间,失效率,磨合调整,磨损用坏,修改点,时间,失效率,软件失效率曲线,实际曲线,理想曲线,软件的生产与硬件不同,软件的特点,第1章 概述,大家有疑问的,可以询问和交流,可以互相讨论下,但要小声点,软件的成本相当昂贵,软件技术的发展落后于需求,时间,软件复杂性,软件需求,差距,软件技术,硬、软件成本比例的变化,时间,成本%,软件,硬件,软件的特点,第1章 概述,软件的分类,第1章 概述,按软件的功能进行划分,系,统,软,件,支,撑,软,件,应,用,软,件,按软件的开发进行划分,软,件,项,目,软,件,产,品,第1章 概述,软件的演变,程序,软件,软件产品,传统软件开发,现代软件开发,营业额,增长曲线,第1章 概述,程序设计阶段:,40-50年代,实用高级语言出现前(直接二进制编码,主要用于解决科学计算问题,编程难以掌握,汇编语言出现,程序质量取决于个人技巧);,程序系统阶段:,60年代,软件工程出现前(软件应用领域扩大,高级语言出现,硬件无关性,软件危机出现);,软件工程阶段:,70年代,软件工程出现后(程序=算法+数据结构,结构化思想的提出);,互联网阶段:,新世纪以来,互联网广泛应用后。,软件发展史,第1章 概述,软件生态链的变化,硬件(主机、PC、网络设备),嵌入式,软件,基础(系统)软件(OS、DB),系,统,集,成,应用软件,最终用户,第1章 概述,软件生态链的变化,硬件(主机、PC、网络设备),嵌入式,软件,基础(系统)软件(OS、DB),系,统,集,成,应用软件,最终用户,中间件,业务支撑平台,第1章 概述,软件生态链的变化,硬件(主机、PC、网络设备),嵌入式,软件,基础(系统)软件(OS、DB),应,用,集,成,应用软件,最终用户,中间件,网,络,集,成,系,统,集,成,业务支撑软件,第1章 概述,软件生态链的变化,硬件(主机、PC、网络设备),嵌入式,软件,基础(系统)软件(OS、DB),应,用,集,成,应用软件,最终用户,网,络,集,成,云服务提供商,中间件,第1章 概述,云计算制造业,硬件产业,网络设备,服务器,半导体,终端设备,存储设备,系,统,集,成,软件产业,基础软件,应用软件,中间件,基础设施服务,基础,网络,数据中心,行业平台,应用部署,政务应用,农业应用,教育应用,SaaS服务,云计算服务业,支持产业,评估认证,设计,咨询,、,P,aaS服务,开发测试,数据库平台,P,aaS服务,虚拟存储,虚拟机,Web Hosting,企业应用,商务应用,社会应用,娱乐应用,第1章 概述,软件危机,正像一只逃亡的野兽落到泥潭中做垂死的挣扎,,越是挣扎,陷的越深,最后无法逃脱灭顶的灾难。,IBM 360系统,开发时间:1963-1966年,投入人力:5000人年,代码量:超过100万行,每个版本都是从上一个版本找出1000个错误,而修订的结果,第1章 概述,软件危机,在软件开发和维护过程中所遇到的一系列严重问题,包含两个问题:如何开发、如何维护,典型表现:,对开发成本和进度的估计常常很不准确,开发成本和开发周期严重超标;,(2)用户对“已完成的”软件系统不满意的现象经常发生;,(3)软件产品的质量往往靠不住;,(4)由于没有文档资料软件常常是不可维护的,软件修改和维护非常困难;,(5)软件成本在计算机系统总成本中所占比例逐年上升;,(6)软件开发生产率很低。,第1章 概述,软件危机的原因,软件的不可见性:,软件是计算机系统中的逻辑部件而不是物理部件,管理和控制软件开发过程相当困难。运行中发现,错误,很可能是遇到了一个在开发时期引入的,在测试阶段没能检测出来的故障。,因此,,软件维护通常意味着改正或修改原来的设计,这就在客观上使得软件较难维护,。,软件规模不断扩大:,程序的复杂性将随着程序规模的增加而呈指数上升。如何保证每个人完成的工作合在一起确实能构,成一个高质量的大型软件系统,更是一个极端复杂困难的问题,不仅涉及许多技术问题,,诸如分析方法、,设计方法、形式说明方法、版本控制等,更重要的是必须有严格而科学的管理,。,第1章 概述,软件危机的原因,对软件的错误认识:,与软件开发和维护有关的许多错误认识和作法的形成,可以归因于在计算机系统发展的早期软件,开发的,个体化特点,。错误认识和作法主要表现为,忽视软件需求分析,的重要性,认为软件开发就是写程,序并设法使之运行,,轻视软件维护,等。事实上,对用户要求没有完整准确的认识就匆忙着手编写程序,是软件开发工程失败的主要原因之一。,软件生命周期:一个软件从定义、开发、使用和维护,直到最终被废弃,要经历一个漫长的周期。,a)问题定义 b)可行性研究 c)需求分析 c)软件设计(总体设计和详细设计),d)编写程序(软件开发全部工作量的10%-20%),e)测试和维护(软件开发全部工作量的40%-50%),软件是程序以及开发、使用和维护程序需要的所有文挡。,第1章 概述,后期修改:,在软件开发的不同阶段进行修改需要付出的代价是很不相同的,根据美国一些软件公司的统计资料,,在后期引入一个变动比在早期引入相同变动所需付出的代价高,23个,数量级。,轻视维护是一个最大的错误。许多软件产品的使用寿命长达10年甚至20年,在这样漫长的时期中:,a)必须改正使用过程中发现的每一个潜伏的错误;,b)当环境变化时(例如硬件或系统软件更新换代)还必须相应地修改软件以适应新的环境;,c)必须经常改进或扩充原来的软件以满足用户不断变化的需要。,所有这些改动都属于维护工作,而且是在软件已经完成后进行的,是极端艰巨复杂的工作,需要花费很大代价。统计数据表明,实际上用于软件维护的费用占软件总费用的5570。,软件工程学的一个重要目标就是提高软件的可维护性,减少软件维护的代价。,软件危机的原因,第1章 概述,消除软件危机的途径,组织管理:,软件开发不是某种个体劳动的神秘技巧,软件开发应该是一种组织良好、管理严密、,各类人员协同配合、共同完成的工程项目;,方法:,应该推广使用在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好、,更有效的技术和方法,尽快消除在计算机系统早期发展阶段形成的一些错误概念和做法;,工具:,应该开发和使用更好的软件工具。在软件开发的每个阶段都有许多繁琐重复的工作,需要做,在适当的软件工具辅助下,开发人员可以把这类工作做得既快又好。,如果把各个阶段使用的软件工具有机地集合成一个整体,,支持软件开发的全过程,则称为软件工程支撑环境。,第1章 概述,1968年,Bauer 在北大西洋公约组织(NATO)会议上的定义:,“建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的,一系列方法,。,1983年,IEEE的软件工程定义:“软件工程是开发、运行、维护和修复软件的,系统方法,。,1993年,IEEE的一个更加综合的定义:“将,系统化的、规范的、可度量的方法,应用于软件的开发、运行,和维护的过程,即将工程化应用于软件中。,软件工程定义,采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济的开发出高质量的软件并维护它。,第1章 概述,软件工程框架,基本过程,支,持,过,程,组,织,过,程,选取适宜的开发模型,采用合适的设计方法,提供高质量的工程支持,重视软件工程的管理,目标,原则,过程,规定了软件工程实践的结果,(即软件)应具有的基本性质,需求、分析与设计、实现、确认与测试、维护与支持,可,用,性,性,确,正,经,济,性,为软件开发提供了“如何做”的技术,个性化方法结构化方法面向对象方法软件复用,第1章 概述,软件工程范畴,软件工程学,软件开发技术,软件工程管理,软件开发方法学,软件工具,软件工程环境,软件工程管理学,软件产权保护,软件经济学,目的:为了按进度及预算完成软件计划,内容:成本估算、进度安排、人员组织、质量保证等,推迟实现;,逐步求精;,分解与抽象;,信息隐蔽;,质量保证。,软件工程的基本思想,第1章 概述,软件工程的发展阶段,1、第一代软件工程 传统的软件工程,60年代末到70年代为了克服“,软件危机,”(Software Crisis)提出“软件工程”的名词,将软件开发纳入工程化的轨道,基本形成软件工程的概念、框架、技术和方法。称为传统的软件工程,。,2、第二代软件工程 对象工程,80年代中到90年代,面向对象的方法与技术得到发展,研究的重点转移到面向对象的分析与设计,演化为一种完整的软件开发方法和系统的技术体系,称为对象工程。,第1章 概述,软件工程的发展阶段,3、第三代软件工程 过程工程,80年代中开始,人们在软件开发的实践过程中认识到:提高软件生产率,保证软件质量的关键是“软件过程”,是软件开发和维护中的管理和支持能力,逐步形成软件过程工程。,4、第四代软件工程 构件工程,90起年代,基于构件(Component)的开发方法取得重要进展,软件系统的开发可通过使用现成的可复用构件组装完成,而无需从头开始构造,以此达到提高效率和质量,降低成本的目的。,第1章 概述,软件工程过程,ISO 9000定义:,软件工程过程是把输入转化为输出的一组彼此相关的资源和活动,。,从软件开发的观点看,它就是使用适当的资源(包括人员、硬软件工具、时间等),为开发软件进行的一组,开发活动,在过程结束时将输入(用户要求)转化为输出(软件产品)。,软件工程过程定义了:,方法使用的顺序、要求交付的文档资料、为保证质量和适应变化所需要的管理、软件,开发各个阶段完成的里程碑。,软件工程过程包含基本活动:,开发活动:软件开发模型;,项目管理活动:项目的范围(要做的内容)、进度(要花费的时间)、成本(要耗费的资源),过程改进活动:关注质量、软件开发的最佳实践、过程定义和改进,第1章 概述,软件生存周期,软件从产生、发展到成熟、直至衰亡为止的全过程,软件生存周期包含三个阶段:,软件定义,软件开发,软件运行维护,软件生存周期模型是软件工程思想的具体化,是跨越软件生存周期的系统开发、运行、维护所实施的全部活动和任务的过程框架。,常用的软件生存周期模型有:,瀑布模型 迭代模型 螺旋模型 增量模型 喷泉模型 快速应用开发(RAD)模型 ,第1章 概述,软件工程的知识结构,2001年5月ISO/IEC JTC 1发布了SWEBOK指南V0.95(试用版),即,Guide to the Software Engineering Body of Knowledge,。,SWEBOK把软件工程学科的主体知识分为10个知识领域。这10个领域包括:,软件需求,软件设计,软件构造,软件测试,软件维护,软件配置管理,软件工程管理,软件工程过程,软件工程工具和方法,软件质量,
展开阅读全文