软件工程发展史及发展趋势一:软件工程定义软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。在现代社会中,软件应用于多个方面。典型的软件有电子邮件、嵌入式系统、人机界面、办公套件、操作系统、编译器、数据库、游戏等。同时,各个行业几乎都有计算机软件的应用,如工业、农业、银行、航空、政府部门等。这些应用促进了经济和社会的发展,也提高了工作和生活效率二:软件工程的发展历史随着人类的发展,计算机作为第三次科技革命的主要代表产品,极大的推动了人类社会发展。与此同时,软件作为现代计算机的重要支撑部分,伴随着计算机的发展不断发展。早在20世纪50年代,有关软件的编程语言就已经出现,但是关于软件工程这个概念却要远远晚于软件发展。据资料显示,软件工程这个概念最早出现在20世纪60年代末期。在软件工程发展的半个多世纪内,软件工程所使用的程序语言不断发展,而且有关于软件四六七零零四零二二号码论文写作工程的模型不断发展,从最早的瀑布模型到现在光为人所知的云计算,软件工程几乎每隔5-10年就会获得一次突破性发展,而且有关软件语言从最早的面向程序结构转向为面向对象,极大的提升了软件编程的效率。目前,软件工程经过50多年的发展,已经深入到社会生活的各个层面,可以说,现代社会生活,几乎在每一个方面都涉及到软件工程。1.软件工程开发过程软件是由计算机程序和程序设计的概念发展演化而来的,是在程序和程序设计发展到一定规模并且逐步商品化的过程中形成的。软件开发经历了程序设计阶段、软件设计阶段和软件工程阶段的演变过程。程序设计阶段程序设计阶段出现在1946年~1955年。此阶段的特点是:尚无软件的概念,程序设计主要围绕硬件进行开发,规模很小,工具简单,无明确分工(开发者和用户),程序设计追求节省空间和编程技巧,无文档资料(除程序清单外),主要用于科学计算。软件设计阶段软件设计阶段出现在1956年~1970年。此阶段的特点是:硬件环境相对稳定,出现了“软件作坊”的开发组织形式。开始广泛使用产品软件(可购买),从而建立了软件的概念。随着计算机技术的发展和计算机应用的日益普及,软件系统的规模越来越庞大,高级编程语言层出不穷,应用领域不断拓宽,开发者和用户有了明确的分工,社会对软件的需求量剧增。但软件开发技术没有重大突破,软件产品的质量不高,生产效率低下,从而导致了“软件危机”的产生。软件工程阶段自1970年起,软件开发进入了软件工程阶段。由于“软件危机”的产生,迫使人们不得不研究、改变软件开发的技术手段和管理方法。从此软件产生进入了软件工程时代。此阶段的特定是:硬件已向巨型化、微型化、网络化和智能化四个方向发展,数据库技术已成熟并广泛应用,第三代、第四代语言出现;第一代软件技术:结构化程序设计在数值计算领域取得优异成绩;第二代软件技术:软件测试技术、方法、原理用于软件生产过程;第三代软件技术:处理需求定义技术用于软件需求分析和描述。2.软件工程的各个阶段面向对象的软件工程(OOSE)自从1985年首次提出面向对象的概念以来,面向对象技术作为一种全新的软件开发方法开始在软件工程领域越来越被广泛使用。80年代末90年代初,面向对象的软件工程方法呈现百花齐放、百家争鸣的局面。其中,引人注意的是Booch、Rumbaugh和Jacobson为代表的三种面向对象技术。这三种主要的面向对象方法各有优缺点,而希望采用面向对象方法的用户并不深知这些方法的优缺点及相互之间的差异,因而很难根据应用特点选择合适的建模方法和建模语言。于是,出现了UML。面向对象技术在软件工程领域的全面应用即是面向对象的软件工程方法。它包括面向对象的分析(OOA)、面向对象的设计(OOD)、面向对象的编程(OOP)、面向对象的测试(OOT)和面向对象的软件维护(OOSM)等主要内容。面向对象的分析和设计建模技术是面向对象软件工程方法的重要组成部分。OOA的基本任务是针对问题域和系统责任,运用OO方法,建立一个反映问题域的OOA模型,不考虑与系统实现有关的因素(包括编程语言、图形用户界面、数据库等等),从而使OOA模型独立于具体实现。OOD的基本任务是根据已确立的系统对象模型,运用面向对象技术,进行系统软件设计。其中包括两方面的工作:一是把OOA模型直接搬到OOD,做为OOD的一个部分;二是针对具体实现中的人机界面、数据存储、任务管理等因素补充一些与实现有关的部分。这些部分与OOA采用相同的表示法和模型结构。从OOA到OOD不存在转换,只有很局部的修改或调整,并增加几个与实现有关的独立部分。OOA与OOD的工作是连续的、无缝的,允许有一定的相交,也允许从OOD返回到OOA。OOP的工作就是用同一种面向对象的编程语言把OOD模型中的每个成分书写出来。OOT即是对于用OO技术开发的软件,在测试过程中继续运用OO的概念和原则,进行以对象概念为中心的软件测试。OOSM。面向对象的软件工程方法为改进软件维护提供了有效的途径。程序与问题域一致,各个阶段的表示一致,从而大大降低了理解的难度;系统中最容易变化的因素(功能)作为对象的服务封装在对象内部,对象的封装性使一个对象的修改对其他影响很小,从而避免了波动效应。OOSE可较好的描述系统与其用户之间的信息交换机制,即用于向软件系统提出需求后,软件系统完成这项需求的过程。OOSE方法遵循瀑布式的软件开发过程,首先是描述与系统交互有关的用户视图,然后建立分析模型,最后的构造过程则完成交互设计、实现和测试。OOSE方法的最大特点是面向用例。用例(usecase)代表某些用户可见的功能,实现一个具体的用户目标。用例代表一类功能而不是使用该功能的某一具体实例。用例是精确描述需求的重要工具,贯穿于整个软件开发过程,包括对系统的测试和验证过程。基于组件的软件工程(CBSE)如何更好地实现软件重用一直是软件工程的重要研究课题。OO技术的出现是软件开发技术的巨大进步,但怎样实现大粒度的重用以提高软件的可维护性和可扩展性仍是一个难题,CBSE的发展从根本上解决这一问题:由于COM/DCOM、JavaBeans/EJB等组件标准的出现,CBSE趋向实用。1990年开始在基于面向对象技术的基础上发展了组件技术,它丰富了重用手段和方法,逐渐成为研究的热点。组件(Component)是可用来构成软件系统的即插即用(plugandplay)的软件成分,是可以独立地制造、分发、销售、装配的二进制软件单元。CBSE是指用装配可重用软件组件的方法来构造应用程序。它包含了系统分析、构造、维护和扩展的各个方面,在这些方面中都是以组件方法为核心的。面向服务的软件工程(SOSE)面对市场需求的快速变化,要求企业系统具有敏捷服务、快速重构、资源重用及自由扩充等特点。这样就应运而生了面向服务的架构(ServiceOrientedArchitecture,SOA)。它定义了构成系统的服务,通过描述服务之间的交互提供特定的功能特性,并且将服务映射为具体的某种实现技术。SOA的核心概念是服务,即把软件的某些功能独立出来,使之能独立运行,并且在逻辑关系上和运行的应用系统成为一个层次。它接受来自所有授权对象的请求,使得服务可以同时为多个应用程序提供相同的功能,大大增大软件复用程度,减少开发和维护成本。一个服务是服务提供者为实现服务请求而执行的一个工作单元(应用程序),是一些良定义的操作,也就是说,一个服务实现了一个应用的功能,它是一个粗粒度的、可发现的软件实体,通过一组松散耦合和基于消息的模型与其它的应用或服务交互。三:软件工程未来发展趋势1.需求工程,渐成热点:专业化的角色,日益复杂的业务创新,全球分布的团队以及互联网级的交付速度,这些都对需求获取的正确性和有效性提出了更高的要求;我预计需求工程的研究和实施会成为近期的热点,其中UseCase技术会被更广泛而正确的应用,而相关工具的研发也会成为热点(如IBMRationalRequiementsComposer、Ravenflow等)。用例的优势在于它天生是黑盒的,它用自然语言抽象了用户和目标系统的交互,避免了混入分析、设计和实现细节,以保证用例可以被不懂具体技术的业务及测试人员所真正理解。2.DSSA和MDD,老树新花(基于领域的构架[DSSA]与模型驱动的开发[MDD]):随着软件应用的日益普及,软件已经超出了将手动流程自动化的范畴,而开始成为业务创新的主要推动力。因此,引入捕获特定领域内最先进需求及其实现架构的DSSA成为行业客户的热点之一。而且,DSSA的引入将MDD门槛大大降低了,也使基于DSSA的MDD支撑工具成为可能,从而可以极大地提高开发效率并保证软件质量(例如,。]elelogic的Rhapsody就是一个成功的基于实时嵌入式系统构架的MDD工具)。3.迭代/敏捷,渐成标准:随着软件交付周期的日益加快,迭代化开发已经成为大多数软件开发团队的必选项。但是迭代对整个团队的需求、架构、协同及测试能力都提出了更高的要求,现在许多开发团队都在试图导入迭代化开发的过程中,敏捷可以是被看成迭代化开发的一种导入方式,只不过敏捷的范围其实比迭代化开发更大一些。4.持续集成,蓄势待发:持续集成是保证迭代化开发质量的主要方式,通过持续集成可以利用自动化的方式来尽量自动地、尽早保证代码质量。随着迭代和敏捷的流行,持续集成相关的工具成为现在市场上的新热点(如持续集成框架IBMRationalBuildForge,开源软件CruiseControl,代码静态分析工具KlocworkInsigtlt,IBMRationalSoftwareAnalyzer等)。5.基于实践的过程框架,方兴未艾:开发角色的专业化的和分布的全球化都要求软件开发过程更加规范,而敏捷又要求过程必须紧密贴合项目的实际需要,因此传统的大一统的过程无法符合这一需求。新一代的过程将是以实践为核心的,项目可以通过组装所需的不同实践来获得贴近项目要求的过程。lJI(IvarJacobsonInternational)的EssWork框架和IBMRational的RMC都是新一代的基于实践的过程框架。6.配置管理,昨日黄花:随着开发团队规模的日益减小,配置管理的复杂性大大降低了,我们注意到越来越多的用户转向使用开源的配置管理工具(如Subeverison,JIRA,hosted-proiects等等);未来的配置管理工具更多的以一种全生命周期管理平台(ApplicationLifecycleManagement)的方式出现,弱化了单项的配置管理能力而强调了全流程的整合。7.全球化软件协作交付:全球化的世界必然带来全球化的软件交付模式。根据Forrester的数据,目前87%的开发团队是分布式的,56%有两个以上的开发地点,同时企业的合并和收购趋势不断产生众多新的分布式开发团队,企业为了提供全球化的24×7支持和开发能力,也在不断加强全球化软件协作交付能力。随着软件外包市场的蓬勃发展和软件工程工具的进步,越来越多的企业开始打造软件交付的日不落帝国:他们在美国完成项目概念设计,在欧洲完成系统架构设计,在中国完成软件编码和测试,在印度为软件用户提供售后支持。在强大的软件工程工具和平台的支撑下,他们开始与时间赛跑,在全球化软件交付环境中,他们几乎实现了24小时不间断的软件交付和支持服务,他们实现了在尊重每个软件从业人员人权的同时,软件交付速度的最大化。8.社区驱动的软件交付:社区驱动的软件交付是IT文化进化到今天的一个产物。年轻的一代比他们的父辈更热衷于社交导航,即人与人之间的协作是由社区驱动的,通过人与人之间的沟通和影响,引导他们航行于信息世界,相互密切协作完成指定任务。于是,演进中的IT文化催生了社区驱动的软件交付,也同时催生了社区驱动的软件交付的工程方法和平台。随着敏捷开发和社会网络模型日益普及,组织开始有兴趣复制经过验证的、开放社区治理的软件交付模型,于是全球化的技术平台带来了新兴的软件交付模式:社区驱动的软件交付模式。9