论软件工程的发展历程及前景展望
论软件工程的发展历程及前景展望
摘要:软件是一种特殊的产品,随着其规模和复杂性的提高、使用范围的扩大,需要从技术和管理两方面对软件的开发过程进行控制。本文分析了软件工程的诞生及发展历程,介绍了软件工程未来的发展趋势。又从软件工程这门学科和技术出现的背景出发,回顾了软件工程在近40年来理论、方法和实践中的成果。最后结合Internet技术和平台的挑战,初步讨论了软件工程需要面对的新挑战。
关键词:软件工程;现状;发展
1.软件工程的定义
从上世纪90年代初起,计算学科(Computing)的发展远远超越了计算机科学的边界,形成了计算机科学、计算机工程、软件工程、信息系统与信息技术等若干独立学科。计算机工程从电子工程学科中分离出来,旨在研究计算机硬件的相关工程问题,而软件工程从计算机科学中的一个学科方向发展成为与之并重的一门独立学科,重点研究如何以系统的、可控的、高效的方式开发和维护高质量软件的问题。
从1946年世界上出现第一台电子计算机以来,计算机技术发展十分迅速,并且广泛应用于生产、科研和社会生活的其它领域。伴随着计算机的广泛应用,计算机软件在计算机系统中的地位越来越重要。人们需要的软件越来越多,而且趋向大型化和复杂化,使软件开发变得越来越复杂,程序设计人员越来越满足不了需要,软件产品质量也变得难以满足各方面的要求,加上软件生产率低,导致软件成本大幅度上涨,软件生产在工业发达国家中占有很重要的地位。
软件工程学科诞生后,人们为软件工程给出了不同的定义,例如最早的定义是由F.L. Bauer给出的,即“软件工程是为了经济地获得能够在实际机器上高效运行的、可靠的软件而建立和应用一系列坚实的软件工程原则”。而美国梅隆卡耐基大学软件工程研究所(SEI)给出的定义则是软件工程是以工程的形式应用计算机科学和数学原理,从而经济有效地解决软件问题。但目前普遍使用的软件工程定义是由IEEE给出的,即软件工程是将系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护。
软件工程概念实际存在两层含义:
从狭义概念看,软件工程着重体现在软件过程中所采用的工程方法和管理体系,例如,引入成本核算、质量管理和项目管理等,即将软件产品开发看作是一项工程项目所需要的系统工程学和管理学。
从广义概念看,软件工程涵盖了软件生命周期中所有的工程方法、技术和工具,包括需求工程、设计、编程、测试和维护的全部内容,即完成一个软件产品所必备的思想、理论、方法、技术和工具。
软件工程是指导计算机软件开发和维护的工程学科。
(1) 它采用工程的概念、原理、技术和方法来开发和维护软件;
(2) 它将管理技术与当前经过时间考验的而证明是正确的技术方法结合起来;
(3) 它强调使用生存周期方法学和结构分析和结构技术;
(4) 经过人们长期的努力和探索,围绕着实现软件优质高产这个目标,从技术到管理两个方面做了大量的努力,逐渐形成了
方法与工具的结合,加上配套的软、硬件支持称为软件工程环境。它能支持开发者按照软件工程的方法,全面完成生存周期中的各项任务。
2.软件工程的内涵
软件工程学科包含为完成软件需求、设计、构建、测试和维护所需的知识、方法和工具。软件工程不局限在理论之上,更重要在实践上,能够帮助软件组织协调团队、运用有限的资源,遵守已定义的软件工程规范,通过一系列可复用的、有效的方法,在规定的时间内达到预先设定的目标。针对软件工程的实施,无论是采用什么样的方法和工具,先进的软件工程思想始终是最重要的。只有在正确的工程思想指导下,才能制定正确的技术路线,才能正确地运用方法和工具达到软件工程或项目管理的既定目标。
3、软件工程的诞生
从1946年世界上出现第一台电子计算机以来,计算机技术发展十分迅速,并且广泛应用于生产、科研和社会生活的其它领域。伴随着计算机的广泛应用,计算机软件在计算机系统中的地位越来越重要。人们需要的软件越来越多,而且趋向大型化和复杂化,使软件开发变得越来越复杂,程序设计人员越来越满足不了需要,软件产品质量也变得难以满足各方面的要求,加上软件生产率低,导致软件成本大幅度上涨,软件生产在工业发达国家中占有很重要的地位。而在六十年代末期,工业发达国家就已经意识到一种软件危机,表现在软件成本的急剧增长成为计算机系统最大开支项目,软件开发周期长,进度很难控制,质量也难以保证。有人统计美国的大型软件项目都有错误。正如当时美国的一位著名计算机专家的评论:“我估计,即使细心地编写程序,每200条到300条指令中必定有一个错误。”由于美国当时缺乏软件人员,计算机公司大量招聘程序员,甚至公共汽车司机也被招去,因此粗制滥造软件大量涌向市场。
1968年,有人在一次计算机软件学术会上说:“整个事业是建立在一个大骗局上”。可见,软件危机已发展到何种程度,它已明显地影响到社会的发展。计算机科学在软件危机中挣扎,社会在为软件危机付出沉重的代价。
当社会需要某一种科学或技术时,这种需要就会变成一种强大的推动力量。软件危机的产生使软件专家认识到软件开发必须以新的方法作指导,原有的软件开发方法必须改变。于是,美国和西欧的一些计算机科学家于1967年、1968年在欧洲召开了两次软件国际会议。在1968年的会议上第一次提出了“软件工程”这个名词,从此,软件工程作为一门学科正式诞生,人们开始了软件工程的研究。
4、软件技术发展主要的驱动力
从三角度来说,从操作系统发展的角度来看,随着计算机环境的变化,软件技术在更大范围内促进了资源共享。从软硬件异构性角度来看,为了尽可能平滑地桥接异构性,增加互操作性,为了屏蔽计算机软件异构性发明了操作系统,为了屏蔽操作系统的异构性发展了中间软件,我为了屏蔽中间件的多样性和异构性发展了Web技术,因此软件技术的发展本身就是一个不断桥接异构性的过程,实质上是解决概念和处理逻辑之间的问题。从软件生产方式的角度来看,为了尽可能多的凝练共性,降低开发应用软件的复杂度,提高软件开发效率和质量,而发展了软件的技术。所以从操作系统编程系统发展中间件,一直到现在大家追求的终端用户编程等都是期望软件开发能够从手工作坊式的软件开发方式,转变为软件工业化的生产技术,这里面很重要的技术就是软件的构件技术。
5.软件的分类:
(1) 系统软件:就一般情况来说,系统软件是为其他软件服务的软件.系统软件与计算机硬件交互频繁,处理大量的确定或不确定的复杂数据,往往需要具有多用户支持,资源精细调度,并发操作管理,多种外部设备接口支持等项功能.
(2) 实时软件:管理,分析,控制现实世界中所发生的事件的软件称为实时软件.它一般有数据采集,数据分析,输出控制等三方面的功能.实时软件需要保持一个现实任务可以接受的响应时间,即必须保证能够在严格限定的时间范围内对输入做出响应.
(3) 商业管理软件:商业信息处理是最大的软件应用领域,包括常规的数据处理软件和一些交互式的计算处理(如POS软件)软件.它的基本功能是将已有的数据重新构造,变换成一种可以辅助商业操作和管理决策的形式.在这个过程中,几乎都要涉及到对于大型数据库的访问.各类管理信息系统(MIS),企业资源计划(ERP),客户关系管理(CRM)等都是典型的商业管理软件.
(4) 工程与科学计算软件:此类软件的特征是要实现特定的
(5) 嵌入式软件:驻留在专用智能产品的内存中,用于控制这些产品进行正常工作,完成很有限,很专业的功能的软件.例如各类智能检测仪表,数码相机,移动电话,微波炉等智能产品都必须在嵌入式软件的支持下才能正常工作.
(6) 人工智能软件:利用非数值算法去解决复杂问题的软件.各类专家系统,模式识别软件,人工神经网络软件都属于人工智能软件.
(7) 个人计算机软件:文字处理系统,电子表格,游戏娱乐软件等等.
此外,还可以根据软件的规模(代码行及开发工作量,如表1.1),软件的工作方式,使用频度,失效后造成的影响等对软件产品进行分类.
6.软件工程是一门交叉性学科
软件工程是一门交叉性的工程学科,它是将计算机科学、数学、工程学和管理学等基本原理应用于软件的开发与维护中,其重点在于大型软件的分析与评价、规格说明、设计和演化,同时涉及管理、质量、创新、标准、个人技能、团队协作和专业实践等。从这个意义上看,软件工程可以看作由下列3部分组成。 •计算机科学和数学用于构造软件的模型与算法;
•工程科学用于制定规范、设计范型、评估成本以及确定权衡等;
•管理科学用于计划、资源、质量、成本等管理。 例如,计算机辅助软件工程(Computer Aided Software Engineering,CASE)是一组工具和方法的集合,可以辅助软件生命周期各阶段进行的软件开发活动。CASE吸收了CAD(计算机辅助设计)、软件工程、操作系统、数据库、网络和许多其他计算机领域的原理和技术。这个例子也体现了这一点——软件工程是学科交叉的、集成和综合的领域。
7、软件工程的发展历程
从60年代到90年代,60年代还是手编程序,当时应用在不断的发展,手编程序需要大量的人参与,所以出现了软件危机,软件工程被正式提出来。开始注重程序结构的研究,程序设计语言和编辑系统得到了应用。到了70年代出现了结构化分析和设计方法,程序设计方法学成为研究热点,到80年代CASE工具和环境的研制成为热点,面向对象技术开始出现并逐步流行。到了90年代软件复用和软件构件技术得到广泛的应用。这图是软件工程的里程碑,从模型、工具、过程几个角度来看,各自发展的线速,所以软件工程技术,在这时候成了多线变形交叉发展的事态,而且每个线路有自己的里程碑。
中国软件工程是软件产业的支柱学科,软件工程是1980年开始,软件产业是1982年由国家科委首先组织软件界的人讨论怎么样建设综合的软件产业。软件与软件工程,软件是客观世界中问题空间与解空间的具体描述,是追求表达能力强、更符合人类思维模式,具有易构造性和易演化性的计算模型。软件工程是应用计算机科学理论和技术,以及工程管理原则和方法,按预算和进度来实现满足用户要求的软件产品的定义、开发、发布和维护的工程,或以之为研究对象的学科。
软件的本质特性是构造性和演化性。软件是典型的知识产品,是客观世界中问题空间与解空间的具体描述,所以软件是有结构的,构造性是软件的本质特性。软件既然是客观事物的反映,是知识的提炼体现和固化,客观世界在不断发展,新需求、新技术不断出现,因而软件系统要不断升级和演化,因此演化性和构造性都是软件的本质特性。 软件工程主要研究什么?主要研究软件过程和软件的开发范型,来寻找理论与方法以及工程管理技术,同时要控制软件的质量和软件开发的效率,这些都需要CASE工具环境的支撑。
随着软件技术的发展,软件工程的研究范围和内容也在不断变化和发展。其发展经历了如下3个阶段:
第一阶段,即传统软件工程阶段:20世纪70年代,为了解决软件项目失败率高、错误率高以及软件维护任务重等问题,人们提出软件开发工程化的思想,希望使软件开发走上正规化的道路,并努力克服软件危机。形成了软件工程的概念、框架、方法和手段。
第二阶段,即过程软件工程阶段:80年代末逐步发展起来的面向对象的分析与设计方法,形成了完整的面向对象技术体系,使系统的生存周期更长,适应更大规模、更广泛的应用。这时,进一步提高软件生产率、保证软件质量就成为软件工程追求的更高目标。软件开发开始进入以过程为中心的第二阶段。这个时期人们认识到,应从软件生存周期的总费用及总价值来决定软件开发方案。在重视发展软件开发技术的同时,人们提出软件能力成熟度模型、个体软件过程和群组软件过程等概念。软件开发过程从目标管理转向过程管理。
第三阶段,即构件软件工程阶段:进入20世纪90年代以后,软件开发技术的主要处理对象为网络计算和支持多媒体信息的WWW。为了适应超企业规模、资源共享、群组协同工作的需要,需要开发大量的分布式处理系统。这一时期软件工程的目的在于不仅提高个人生产率,而且通过支持跨地区、跨部门、跨时空的群组共享信息,协同工作来提高群组、集团的整体生产效率。因整体性软件系统难以更改、难以适应变化,所以提倡基于部件(构件)的开发方法,即部件互连及集成。同时人们认识到计算机软件开发领域的特殊性,不仅要重视软件开发方法和技术的研究,更要重视总结和发展包括软件体系结构、软件设计模式、互操作性、标准化、协议等领域的重用经验。软件重用和软件构件技术正逐步成为主流软件技术。
8.软件工程学科范围 如果从知识领域看,软件工程学科是以软件方法和技术为核心,涉及计算机的硬件体系、系统基础平台等相关领域,同时还要涉及一些应用领域和通用的管理学科、组织行为学科。例如,通过应用领域的知识帮助我们理解用户的需求,
从而可以根据需求来设计软件的功能。在软件工程中必然要涉及组织中应用系统的部署和配置所面临的实际问题,同时又必须不断促进知识的更新和理论的创新。为了真正解决实际问题,需要在理论和应用上获得最佳平衡。
9、软件工程的发展趋势
9.1 全球化软件协作交付
全球化的世界必然带来全球化的软件交付模式。根据Forrester的数据,目前87%的开发团队是分布式的,56%有两个以上的开发地点,同时企业的合并和收购趋势不断产生众多新的分布式开发团队,企业为了提供全球化的24×7支持和开发能力,也在不断加强全球化软件协作交付能力。
随着软件外包市场的蓬勃发展和软件工程工具的进步,越来越多的企业开始打造软件交付的日不落帝国:他们在美国完成项目概念设计,在欧洲完成系统架构设计,在中国完成软件编码和测试,在印度为软件用户提供售后支持。在强大的软件工程工具和平台的支撑下,他们开始与时间赛跑,在全球化软件交付环境中,他们几乎实现了24小时不间断的软件交付和支持服务,他们实现了在尊重每个软件从业人员人权的同时,软件交付速度的最大化。
9.2 社区驱动的软件交付
社区驱动的软件交付是IT文化进化到今天的一个产物。年轻的一代比他们的父辈更热衷于社交导航,即人与人之间的协作是由社区驱动的,通过人与人之间的沟通和影响,引导他们航行于信息世界,相互密切协作完成指定任务。于是,演进中的IT文化催生了社区驱动的软件交付,也同时催生了社区驱动的软件交付的工程方法和平台。
随着敏捷开发和社会网络模型日益普及,组织开始有兴趣复制经过验证的、开放社区治理的软件交付模型,于是全球化的技术平台带来了新兴的软件交付模式:社区驱动的软件交付模式。在这种软件交付模式中,虽然项目一般都会有某个组织领导,但它更强调个体的创造性和能力,项目的交付是由分布在全世界不同地方的开放社区技术人员和最终用户共同完成的,他们基于公共的社区协作环境,通过Web来共享创新思想,开发和测试软件,最终完成软件的交付。他们的共同特点就是他们对某一领域技术的执着和热爱。
9.3 模块化
随着全球化的发展趋势和全球化市场竞争压力的增加,一方面企业需要更多的业务灵活性和创新能力;另一方面企业面临的IT环境复杂度的增加和历史遗留系统的增加,对企业的IT提出了新的挑战。模块化的思想恰恰能够帮助企业从根本上解决这一问题,它一方面通过抽象、封装、分解、层次化等基本的科学方法,对各种软件构件和软件应用进行打包,提高对企业现资产的重用水平和能力;另一方面,基于模块化思想,业界提出了SOA技术,它提供一组基于标准的方法和技术,通过有效整合和重用现有应用系统和各种资源,对各种服务进行服务组件化,并基于服务组件实现各种新的业务应用的快速组装,帮助企业很好应对业务的灵活性要求。它通过有效平衡业务的灵活性和IT的灵活性、平衡业务的灵活性和IT的复杂度,为IT人提供了一个业务视角,让IT人学会用业务的眼睛看世界,有效的拉近了IT和业务的距离。
10.在软件工程发展中的软件危机
研制软件系统需要投入大量的人力和物力,但系统的质量却难以保证,也就是说,开发软件所需的高成本同产品的低质量之间有着尖锐的矛盾,这种现象就是所谓的“软件危机”。
10.1 产生软件危机的原因:
1、用户对软件需求的描述不精确,可能有遗漏、有二义性、有错误,甚至在软件开发过程中,用户还提出修改软件功能、界面、支撑环境等方面的要求。
2、软件开发人员对用户需求的理解与用户的本来愿望有差异,导致开发出来的软件产品与用户要求不一致。
3、大型软件项目需要组织一定的人力共同完成,多数管理人员缺乏开发大型软件系统的经验。各类人员的信息交流不及时、不准确、有时还会产生误解。
4、软件项目开发人员不能有效地、独立自主地处理大型软件的全部关系和各个分支,因此容易产生疏漏和错误。
5、 缺乏有利的方法学和工具方面的支持,过分的依靠程序设计人员在软件开发过程中的技巧和创造性,加剧软件产品的个性化。 。
6、 软件产品的特殊性和人类智力的局限性,导致人们无力处理“复杂问题”。
7、没有充分的文档资料(documentation),人与人的交流比写程序困难得多。
8、软件可靠性(reliability)缺少度量的标准,质量无法保证。
9、软件难以维护(maintainability),不易升级(evolvability)
软件工程即为解决这一危机提出的在软件生命周期全过程中使用的一整套技术方法的集合。包含三个要素:
方法:完成软件开发各种任务的技术方法
工具:为运用方法而提供的自动或半自动的软件工程支撑环境
过程:为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
使用最广泛的两种方法:传统方法学和面向对象方法学。
软件工程的原理是:
(1)用分阶段的生命周期计划严格管理
项目概要计划→里程碑计划→项目控制计划→产品控制计划→验证计划→运行维护计划
(2) 坚持进行阶段评审
(3)实行严格的产品控制——基准配置管理(Baseline configuration management)
(4)采用现代程序设计技术
(5)结果应能清楚地审查— set standards
(6) 开发小组的成员应该少而精(1+1
(7) 承认不断改进软件工程实践的必要性(总结和创新)
(8) 开发人员方面,对软件产品缺乏正确认识,没有真正理解软件产品是一个完整的配置组成。造成开发中制定计划盲目、编程草率,不考虑维护工作的必要性。
(9)软件本身方面,对于计算机系统来说,软件是逻辑部件,软件开发过程没有统一的、公认的方法论和规范指导,造成软件维护困难。尤其是随着软件规模越来越大,复杂程度越来越高,原有软件开发方式效率不高、质量不能保证、成本过高、研制周期不易估计、维护困难等一系列问题更为突出,技术的发展已经远远不能适应社会需求。
10.2 要克服软件危机,就要认真分析软件危机的原因,探索用工程的方法进行软件生产的可能性,即用现代工程的概念、原理、技术和方法进行计算机软件的开发、管理、维护和更新。
软件工程是用工程、科学和数学的原则与方法研制、维护计算机软件的有关技术及管理方法。 软件工程的诞生只能大大减少软件开发成本并提高软件质量,不能从根本上消除软件危机。
(1) 充分吸收和借鉴人类长期以来从事各种工程项目中积累的行之有效的有效原理、概念、技术与方法,特别是吸取几十年来人类从事计算机硬件研究和开发的经验教训。在开发软件的过程中努力作到良好的组织,严格的管理,相互友好的协作。
(2) 推广在实践中总结出来的开发软件的成功的技术和方法,并研究更好、更有效的技术和方法,尽快克服在计算机系统早期发展阶段形成的一些错误概念和作法。
(3) 根据不同的应用领域,开发更好的软件工具并使用这些工具。将软件开发各个阶段使用的软件工具集合成一个整体,形成一个很好的软件开发支环环境。 总之为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。
10.3 软件也是一种产品,同样存在生存周期。把软件生存周期划分为几个阶段后,软件开发按照每个阶段的基本任务进行并产生相应的工作结果,这样有利于对软件开发过程进行管理,有利于提高软件产品质量。
10.4软件是程序以及开发、使用和维护程序所需的所有文档。软件质量从可维护性、可靠性、可理解性和效率等方面对软件作较全面的评价。
21世纪软件技术的发展,21世纪前沿研究十分活跃,往往从某种侧面或层次对信息技术提出一种新型模式或理念,软件技术驱动力依然存在,随着计算机平台从单机、机群、局域网到互联网的转移,软件技术的发展正进入一个变革性的阶段。从资源共享与管理的角度探讨未来网格系统的应用模式,从人机交互的角度研究未来网络系统应用模式、从软件即服务的理念出发,提出了一种新型软件形态并着重探讨软件的协同性和动态性、以特定于领域的代码自动生成为基础,探讨基于中间件的软件系统的开发方法与技术。有对等计算、语义网、自治计算随需即取等,这些都是在互联网发展环境平台基础上,软件技术发展的趋势。 软件产业在中国发展很快,但是看看还存在三个问题。第一个问题是,基础软件所占份额尚小,在产业中的基石作用未能凸显,基础软件是软件产业的基石,是软件产业的主要核心竞争力。在中国软件产业规模中,近年来,基础软件虽有较快的增长,但所占的份额尚小,在产业中的基石作用未能凸显,所以我国虽然是软件应用大国,因为渗透各行各业,但还不会是一个软件产业的大国,更不是一个软件产业的强国。
第二个问题是:缺乏具有国际竞争力的跨国燃烧企业集团,我国软件企业自主创新能力不够强,缺少品牌产品,还没有形成面向领域的专业化软件企业集团。2006年中国软件产业年鉴上看出,统计2005年中美软件企业前三强软件销售额对比,中国软件企业前三强是华为、海尔、中兴,如果我是搞软件的话,软件都不是我们以为的软件企业,当然华为是很强的软件企业,华为年产值19亿美元,美国软件前三强,IBM613亿美元,所以这方面可以看到差距很大,有待形成具有国际竞争力的跨国软件企业集团。
第三个问题是:软件人才结构性的矛盾突出。产业发展的品牌化需要相对应的人才质量,但是现在高管人才供给匮乏,缺少高层次高素质的创新型人才。产业发展规模化需要相对应的人才规模,现在离产业发展需求的人才规模还有较大的差距。产业发展多元化,需要高层次,实用型,复合交叉型的人才。现在缺少面向产业,适应社企业需求,工程能力强的人才,学生我进入企业学要有一到两年的转型,才能真正适应企业的工作,形成企业人才滞后的现象。
学术界和研究院所,对软件的需求,人才的结构,人才的培养,以及自主创新体系的建设问题上要很好的解决,要很好解决产业的结构模式,组织模式和生产方式,产学研结合,这样才能真正协调发展,推进软件产业的发展。
在这里提三个对策,对策一:坚持自主创新,突破基础软件,推广构件技术。要集中资源大力发展基础软件。基础软件的基础性是应用软件开发与运行的
基础,它的关键性反映基础软件是保障国家政治、经济、军事等方面信息化的安全。基础软件具有垄断性,拥有大量用户的软件必然在市场上形成垄断,使得后期的同类产品很难超越,基础软件垄断厂商能对构成竞争的应用软件厂商进行有效的制约。高转移成本性,用户选择新的基础软件的转移成本,要有协调成本、购置成本,学习成本所组成,所以它很容易被锁定与控制。根据这些特性,一定要发展自主的基础软件,来提高我国信息产业核心竞争力,来规避民族软件产业的风险,为国家信息化保驾护航,从这里看到基础软件是软件产业的基石。 从美国、日本、印度三国来看,基础软件在软件产业的基石作用,美国掌握了绝大部分通用基础软件核心技术与产品,分享全球软件产业约40%市场份额,日本研发绝大部分嵌入式基础软件核心技术与产品,拥有全球软件产业10%的市场份额,印度原先忽视基础软件的研发,所以落后于注重嵌入式基础软件的研发而后来居上的韩国,在这条线上,紫色是韩国,蓝色是印度,所以从这上面可以看到,后来发现这问题,重视基础软件开发以后,又重新超越韩国,所以从这里可以看到基础软件的重要性。同时要建设我国自主的软件平台,这里包括通用的软件平台和领域的软件平台。再有就是要推广构件技术,突破软件工业化生产关键技术。软件工业化生产关键技术比如软件复用与软件构件技术,需求工程技术,可信计算技术等,这些都是当前关注加以研究的关键技术。
对策二:提高企业的创新能力,使企业成为创新主体,首先要全方位的创新,实精深透做事,为企业提供创新的内部动力。所谓全方位的创新,要从理念、技术、管理、机制等几个方面推进创新,理念创新可以推进技术创新,从而研发核心产品,可以改进管理,促进产业化建立创新的机制来保持持续的创新,所以持续的创新很关键。实精渗透做事,做实做精理解需求,在做深的基础上提出新的需求,做透就是向横向发展,交叉发展,提出创新发展的新方向,这样使创新不断持续发展。
政产学研相结合,为企业提供创新的外部支持,政府的作用在制定相关的法律法规,建立以公共构件库体系为核心的公共软件基础设施,组织制定和发布技术标准,研究机构和大学要研究先进的软件技术和管理方法,深入企业技术管理相关的培训、咨询和指导,而且培养高层次、实用型,符合型国际化的软件人才。企业要面向领域、结合应用,变革生产方式,提高能力,做强做大,发展成专业化的企业集团和企业联盟。
结合可以使企业兼顾三代产品,通过创新持续发展。企业和用户相结合,面向应用提出需求,企业和学研机构相结合可以关注研发孕育第三代产品,我们常说代表未来发展趋势的产品,正在基础研究过程中的产品。它参与工程化开发第二代产品,这代产品应该极具市场潜力的产品,正在工程化研发中的产品。企业
和市场结合,来主持产业化,批量生产第一代产品,是传统的产品,在生产线上批量生产。政企结合营造政策环境和创新的氛围,所以结合可以使企业兼顾三代产品,通过创新持续发展。
对策三:建立软件产业的结构模式/组织模式,面向需求培育人才,通过创新实现产业跨越式发展。软件产业的结构模式,包含软件产业的技术基础,工业化生产技术支撑软件产业,以构件技术,促进软件产业的合理分工,以及软件构件业,系统集成组装与构件业,中间的一块是软件基础设施。
软件产业的组织模式,在某一领域内,以既有创造能力,又装备软件产业基础设施的龙头企业带动一批具有创新能力的中小型软件企业,形成具有国际竞争力的跨国软件企业集团。既增强产学研结合,企业之间又增强合作的模式,才能真正发展大型跨国燃烧企业。
面向产业需求创新培养模式,大量培养创新型人才。图中给的是人才数量与产业规模的关系,中国现在5.9%,中国从业人员50万人,日本占10.4%,从业人员120万人,美国占39%有240万人,从这上面可以看出,要想扩大软件产业规模,必须加快软件人才的培养,必须注重人才的质量和人才队伍的结构。
软件人才素质要求很特殊,既要求从事软件的人细致、严谨、认真、甘于寂寞、乐于奉献,责任感强,同时要求软件人员兴趣广泛、思路开阔、善于观察自然和社会,具有创新创业精神,所以软件创意型产业是客观世界的描述,要求你具备这样的境界和能力,所以我喻之为动静结合,还要有国营的技术,良好的文化底蕴与艺术素养,所以作为一个软件人才来说,素质要求很高的。
现在软件人才队伍的结构亟待合理,软件人才需求的结构是宝塔型,软件人才目前培养供给的结构是两头小中间大,而且人才知识、能力结构问题,反映在人才培养偏重学科型,面向产业、适应企业需求,实际工程能力强的人才缺少,才有人才培养的滞后现象。要建立多层次教育体系来培养合理需求的人才结构,温家宝总理提出普及和巩固义务教育,大力发展职业教育,提高高等教育的质量,我认为软件产业是一个宝塔型的图,有编程人员、测试人员,有设计人员,项目经理,系统设计、架构师、系统方案师等,这样有专科继续教育,在职培训,本科二学位,工学硕士与工程硕士教育,工学博士与工程博士的教育需要整个大的教育体系培养产业需要的人才。
20世纪末开始流行的Internet给人们提供了一种全球范围的信息基础设施,形成了一个资源丰富的计算平台,未来如何在Internet平台上进一步整合资源,形成巨型的、高效的、可信的虚拟环境,使所有资源能够高效、可信地为所有用户服务,成为软件技术的研究热点。
Internet平台具有一些传统软件平台不具备的特征:分布性、节点的高度自治性、开放性、异构性、不可预测性、连接环境的多样性等。这对软件工程的发展提出了新的问题。软件工程需要新的理论、方法和技术和平台来应对这个问题。目前投入很大精力研究的中间件技术就是这方面的典型代表。
小结:Internet及其上应用的快速发展与普及,使计算机软件所面临的环境开始从静态封闭逐步走向开放、动态和多变。软件系统为了适应这样一种发展趋势,将会逐步呈现出柔性、多目标、连续反应式的网构软件系统的形态。面对这种新型的软件形态,传统的软件理论、方法、技术和平台面临了一系列挑战。从宏观上看,这种挑战为我们研究软件理论、方法和技术提供了难得的机遇,使我们有可能建立一套适合于Internet开放、动态和多变环境的新型软件理论、方法和技术体系。从微观的角度来看,Internet的发展将使系统软件和支撑平台的研究重点开始从操作系统等转向新型中间件平台,而网构软件的理论、方法和技术的突破必将导致在建立新型中间件平台创新技术方面的突破。
参考文献:
[1] 陈惠恩,张成姝.实用软件工程.2版.北京:清华大学出版社,2009
[2] 刘红霞,刘红艳.传统的软件工程方法与面向对象的软件工程方法比较.雁北师范学院学报,2002,18(2)
[3] 长沙大学计算机科学与技术系.软件工程的发展与启示.中国信息导报,2005.9:59-61
[4] 冯健文,林璇.基于组件的软件工程(CBSE)研究.江西师范大学学报,2004,28(1):32-35
[5] 王珏,张建沛,张菁.软件工程的新发展:CBSE.应用科技,2002,29(6):48-50
[6] 毕忠东,刘启明.面向对象的软件工程与面向对象的建模方法.福建电脑,2007,8:54-55
[7] 魏东,陈晓江,房鼎盛.基于SOA体系结构的软件开发方法研究.微电子学与计算机,2005,22(6):73-76
[8] 李长云,李赣生,李莹,胡军.面向服务的软件开发.计算机工程,2005,31
(17):52-54
[9]杨芙清.软件工程技术发展思索[J].软件学报,2005,16(1).
[10]王博然.软件工程的历史与发展趋势[J].北京工业职业技术学院学报,2008.7,7(3).
[11]张效祥.计算机科学技术百科全书[M].北京:清华大学出版社,1998.