软件工程国内外技术发展现状,存在问题及发展趋势软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。在现代社会中,软件应用于多个方面。典型的软件比如有电子邮件,嵌入式系统,人机界面,办公套件,操作系统,编译器,数据库,游戏等。同时,各个行业几乎都有计算机软件的应用。这些应用促进了经济和社会的发展,使得人们的工作更加高效,同时提高了生活质量。首先浅谈下软件工程在国内外的发展状况,自1968年北约组织的技术委员会正式提“软件工程”以来,经过几十年的发展,软件工程已经成为一门迅速发展,内容极其广泛的综合性学科。软件工程是一门研究软件开发和维护过程中所使用的原则、技术和方法的学科。从学术观点看,软件工程要以软件开发和维护为出发点,总结规律,建立科学概念,指定软件生产的规范,逐步形成理论体系。总之,软件工程的最终目标是提高软件的生存率,降低软件的生产成本,改进软件的质量,增加可靠性。1、软件技术发展早期在计算机发展早期,应用领域较窄,主要是科学与工程计算,处理对象是数值数据。1956年在J.Backus领导下为IBM机器研制出第一个实用高级语言Fortran及其翻译程序。此后,相继又有多种高级语言问世,从而使设计和编制程序的功效大为提高。这个时期计算机软件的巨大成就之一,就是在当时的水平上成功地解决了两个问题:一方面从Fortran及Algol60开始设计出了具有高级数据结构和控制结构的高级程序语言,另一方面又发明了将高级语言程序翻译成机器语言程序的自动转换技术,即编译技术。然而,随着计算机应用领域的逐步扩大,除了科学计算继续发展以外,出现了大量的数据处理和非数值计算问题。为了充分利用系统资源,出现了操作系统;为了适应大量数据处理问题的需要,开始出现数据库及其管理系统。软件规模与复杂性迅速增大。当程序复杂性增加到一定程度以后,软件研制周期难以控制,正确性难以保证,可靠性问题相当突出。为此,人们提出用结构化程序设计和软件工程方法来克服这一危机。软件技术发展进入一个新的阶段。软件工程形成的初始阶段1968—1975此阶段主要提出和探讨软件工程及当时软件开发中存在的问题并通过使用单个方法和工具以及改善组织管理手段加以解决。该阶段的主要工作如下:1.调査、分析软件开发中存在的问题。2.统计、分析程序设计及程序出错的类型。3.研制软件测试方法与工具。4.提出改进软件质量的方法。5.提出软件生产化的必要性与设想。6.数据的抽象化和方式。7.研究程序实现的技巧与措施。从70年代初开始,大型软件系统的出现给软件开发带来了新问题。大型软件系统的研制需要花费大量的资金和人力,可是研制出来的产品却是可靠性差、错误多、维护和修改也很困难。一个大型操作系统有时需要几千人年的工作量,而所获得的系统又常常会隐藏着几百甚至几千个错误。程序可靠性很难保证,程序设计工具的严重缺乏也使软件开发陷入困境。结构程序设计的讨论导致产生了由Pascal到Ada这一系列的结构化语言。这些语言具有较为清晰的控制结构,与原来常见的高级程序语言相比有一定的改进,但在数据类型抽象方面仍显不足。面向对象技术的兴起是这一时期软件技术发展的主要标志。“面向对象”这一名词在80年代初由Smalltalk语言的设计者开始提出,而后逐渐流行起来。面向对象的程序结构将数据及其上作用的操作一起封装,组成抽象数据或者叫做对象。具有相同结构属性和操作的一组对象构成对象类。对象系统就是由一组相关的对象类组成,能够以更加自然的方式模拟外部世界现实系统的结构和行为。对象的两大基本特征是信息封装和继承。通过信息封装,在对象数据的外围好像构筑了一堵“围墙”,外部只能通过围墙的“窗口”去观察和操作围墙内的数据,这就保证了在复杂的环境条件下对象数据操作的安全性和一致性。通过对象继承可实现对象类代码的可重用性和可扩充性。可重用性使能处理父、子类之间具有相似结构的对象共同部分,避免代码一遍又一遍的重复。可扩充性使能处理对象类在不同情况下的多样性,在原有代码的基础上进行扩充和具体化,以求适应不同的需要。传统的面向过程的软件系统以过程为中心。过程是一种系统功能的实现,而面向对象的软件系统是以数据为中心。与系统功能相比,数据结构是软件系统中相对稳定的部分。对象类及其属性和服务的定义在时间上保持相对稳定,还能提供一定的扩充能力,这是十分重要的事情,这样就可大为节省软件生命周期内系统开发和维护的开销。就像建筑物的地基对于建筑物的寿命十分重要一样,信息系统以数据对象为基础构筑,其系统稳定性就会十分牢固。到20世纪80年代中期以后,软件的蓬勃发展更来源于当时两大技术进步的推动力:一是微机工作站的普及应用,另一是高速网络的出现。其导致的直接结果是:一个大规模的应用软件,可以由分布在网络上不同站点机的软件协同工作去完成。由于软件本身的特殊性和多样性,在大规模软件开发时,人们几乎总是面临困难处境。软件工程面临许多新问题和新挑战,而进入一个新的发展时期,此阶段注意软件开发的工程化技术实施,研究了各种工具与环境的利用,实行了作业开发的规范化并使软件产品商业化。重点研究软件开发的智能技术、正确性分析与推理方法、软(牛生产自动化技术以及软件工程的自动化、智能化方法与技术。今后几年,软件工程的发展仍主要以研究与开发覆盖整个生存期的方法论和软件开发环境为主。伹因为目前国外的软件生产普遍存在着质量低劣、不灵活、严重超时和超成本现象鉴于软件工程在计算机方面,以至在整个现代科技领域中的重要地位日益明显,近年来,世界上一些主要发达国家纷纷制定计划,建立专门机构,并拨出巨款,竞相开展软件工程研究。这些计划的核心是首先发展软件工程支撑环境,并以此为基础,向高度集成化、智能化的软件工程支撑环境发展。发达国家的软件发展状况:80年代软件工程的兴起与软件工具和软件开发环境的研究,提高了软件开发的效率,支持软件生存期模型的软件开发环境也进入了实用化阶段。软件开发环境,软件工具是软件工程发展的重要基础,也是关键性、综合性研究课题。软件工程建立在方法论和工具两根台柱上,二者关系非常密切。软件工程技术发展新时期自从软件工程名词诞生,历经三十余年的研究和开发,人们深刻认识到,软件开发必须按照工程化的原理和方法来组织和实施。软件工程技术在软件开发方法和软件开发工具方面,在软件工程发展的早期,特别是20世纪70、80年代软件蓬勃发展时期,已经取得了非常重要的进步。软件工程作为一个学科方向,愈来愈受到人们的重视。但是,随着大规模网络应用软件的出现所带来的新问题,使得软件工程中,在如何协调合理预算、控制开发进度和保证软件质量等方面,软件人员面临更加困难的境地。进入20世纪90年代,Internet和技术的蓬勃发展使软件工程进入一个新的技术发展时期。以软件组件复用为代表,基于组件的软件工程技术正在使软件开发方式发生巨大改变。早年软件危机中提出的严重问题,有望从此开始找到切实可行的解决途径。在这个时期软件工程技术发展代表性标志在三个方面,即:①基于组件的软件工程和开发方法成为主流。组件是自包含的,具有相对独立的功能特性和具体实现,并为应用提供预定义好的服务接口。组件化软件工程是通过使用可复用组件来开发、运行和维护软件系统的方法、技术和过程。②软件过程管理进入软件工程的核心进程和操作规范。软件工程管理应以软件过程管理为中心去实施,贯穿于软件开发过程的始终。在软件过程管理得到保证的前提下,软件开发进度和产品质量也就随之得到保证。③网络应用软件规模愈来愈大,复杂性愈来愈高,使得软件体系结构从两层向三层或者多层结构转移,使应用的基础架构和业务逻辑相分离。应用的基础架构由提供各种中间件系统服务组合而成的软件平台来支持,软件平台化成为软件工程技术发展的新趋势。软件平台为各种应用软件提供一体化的开放平台,既可保证应用软件所要求基础系统架构的可靠性、可伸缩性和安全性的要求;又可使应用软件开发人员和用户只要集中关注应用软件的具体业务逻辑实现,而不必关注其底层的技术细节。当应用需求发生变化时,只要变更软件平台之上的业务逻辑和相应的组件实施就行了。以上这些标志象征软件工程技术已经发展上升到一个新阶段。这个阶段尚远未结束。软件技术发展日新月异,Internet的进步促使计算机技术和通信技术相结合,更使软件技术发展呈五彩缤纷局面。软件工程技术的发展也永无止境。软件工程发展中存在的问题:首先缺乏严格的理论基础,.对软件结构研究停留在功能模块这一概念上,缺乏简明有力的软件工具或语言的支持。(一)人才结构失衡。随着总量供不应求这一矛盾的缓和,我国软件人才结构不尽合理的问题进一步凸现,成为我国软件人才体系的突出特点,主要体现在如下方面:1、高端软件人才缺乏。从经济规律来看,一种工业化时代的产业结构,要求是一个金字塔型的人才梯队,软件业需要的不仅仅需要从事基础开发的程序设计员作为智力基础,更需要塔尖的高级人才。目前高级软件人才仍是中国软件企业最紧缺的软件人才类型,在这种背景下,中国软件人才的“金字塔”形的合理结构并未实现。我国软件技术人员约有19万人左右,此外,还有30万人在从事计算机应用、科研与教育工作。但是,我国软件技术人员中70%是从事程序开发、技术支持和服务的人员,软件产业发展所急需的系统分析师、架构设计师、高级工程师、项目经理和技术工人的数量非常匮乏,无法满足软件产业发展对高层次人才的需求。2、复合型软件人才缺乏。高素质的复合型软件人才正逐渐成为软件人才中的新宠。复合型软件人才有两种类型:一种是既精通软件又精通硬件的基础理论和设计技能的人才;另一种是既精通软件基础理论和设计技能,同时又精通其他专业业务和应用知识的复合型人才,这类人才是软件领域与其他应用领域交叉的复合型人才。目前我国软件产业正处于产业化的进程中,产业化的一个要求就是资本的介入,在一个产业链中,资本是不可缺少的一个环节,这就需要我国培养出大批软件类资本运作人才,为软件企业的发展赢得资金。而产业链的下游是产品的销售环节,又需要大批渠道及销售、公关、宣传人才以及软件售后技术支持人才。另外,由于我国的软件产业主要是发展采取外包模式,这就要求既懂得软件知识,又能娴熟地运用外语的复合型人才。(二)自主知识产权的主流软件产品较少,产品多为低端产品。我国的软件产品,主要集中在产业链的低端、辅助型和外挂式的产品阶段;在核心技术上有创新、自主设计的“重量级”软件产品还比较缺乏;许多基础性、关键性软件还处于空白状态。中国的软件产业从上世纪八十年代开始发展,到今天虽然取得了长足的进步,但是国内很少有企业能够达到承揽国际项目所需的严格的内部流程及质量控制。虽然有众多优秀的软件工程师,但多数外包企业尚未建立起正确的流程,也未能培养出准确掌握这些流程的开发人员。在中国软件市场,国外品牌的产品仍然占据高端系统软件、数据库软件的绝大部分市场份额,占据中间件、行业应用软件、ERP软件的大部分市场份额;国内品牌产品则在ERP和财务管理软件、防杀毒软件、中文信息处理软件及部分行业应用领域占据优势。(三)核心技术缺乏,创新能力不足。我国大部分软件生产企业在较低层面上进行着大量重复性的工作,是一种小作坊式的生产,这种生产方式为了眼前的生存,根本无力开展软件技术创新,再加上盗版泛滥成灾,企业缺乏技术创新的动力,很多企业几乎没有研发投入。软件产业中发展较快的产品领域主要是游戏、财务及商务管理、教育领域,而技术含量较高的大型数据库系统、管理信息系统的开发及发展较为缓慢。软件企业创新能力不足,软件产品的生命周期很短、产品更新升级频繁、换代速度很快,软件产品高利润、高回报的主要源泉,应该来自于持续不断的创新。而目前中国软件企业的创新能力不足,特别是对软件产业链上游产品的原始创新力不足。三、“软件技术”发展中问题的解决办法及措施1、改进教育模式培养人才,面向市场吸引人才。调查发现,教育体制的落后导致了软件专业毕业生缺乏实际编程能力,无法适应企业的实际需要。而软件企业自身又不愿提供相应的培训,这样一来编程人员的数量几乎是处在一种“净减”状态。所以,我们要从教育抓起,多为学