摘要:本文对软件重用和软件构件技术、中间件、分布式计算、标准化、智能化以及软件可靠性工程等当前与软件工程发展密切相关的几个热点技术问题进行了综述,并对其发展趋势进行了探讨。
1.引言
软件工程随着计算机科学技术的发展而发展。经历30余年的坎坷,软件工程已经成为计算机科学领域一门综合性和工程性的独立学科。现在以及未来若干年内,软件工程的研究热点将主要集中在软件重用和软件构件技术、中间件、分布式计算和网格计算、标准化、智能化以及软件可靠性工程等方面。了解和掌握这些热点技术问题的研究现状,对我们进一步学习和研究软件工程无疑具有一定的参考意义。
2.若干热点技术发展状况
2.1 软件重用和软件构件技术
软件重用和软件构件技术是软件工程领域长期研究的一个主要热点问题。其中,构件是核心和基础,“重用”是方法和手段。构件的重用,能使软件开发人员减少甚至摆脱“写代码”的低效工作,致力于更高层次的“搭构件”,把更多精力放在问题定义过程,促使问题空间与求解空间尽可能一致。早在1968年,软件构件与“软件组装生产线”的思想就在国际NATO软件工程会议上被提出来。从那以后,采用构件技术实现软件重用,采用“搭积木”的方式生产软件,成为软件业长期的梦想。
构件化应用开发必须要有开发工具的支撑,包括集成开发环境、应用运行环境、应用管理及构件库管理等。不同行业领域应用的公共业务逻辑,体现在构件库中不同的业务构件或构件组。领域构件体现了个性化需求,包含有特定领域业务构件的应用基础平台就是该领域的应用平台。
基于构件的软件工程最需要解决的问题是如何建造构件模型和确立软件体系结构即构架。构件模型决定了软件系统构架的思维逻辑。在构件和构架模型中,有必要把构件与构件间的交互作用相分离,以提高构件的独立性和可重用性。业界目前关注的问题主要集中在构件和构架的清晰准确地描述、构件库的管理、可重用构件和构架的获取等方面。目前流行的.NET和J2EE采用两种不同的构件模型和技术,.NET采用COM/COM+模型,J2EE采用EJB模型。
据美国专家研究预测,2005年以后至少70%的新应用将主要建立在软件构件和应用框架的基础上。也有专家进一步指出,软件重用与净室模型、自动开发技术一起被认为是今后高效开发高质量软件产品过程的发展方向,而基础是重用技术。无论怎么说,以软件重用为代表,基于构件的技术将使软件工程及其软件开发方式发生巨大的改变。
2.2 中间件技术
软件重用及构件化应用开发和运行需要有不同层次的中间件平台的支撑。中间件兴起以后,构件技术才逐渐走向现实。构件必须在中间件平台上才能发挥作用,只有在适当的中间件平台上,软件才有可能被抽象和隔离,最终成为构件。因此中间件技术近年来成为软件工程关注的焦点和软件业发展的关键。
中间件按功能大致可分为5类:数据库访问、远程过程调用、通信、事务处理和分布对象中间件。中间件技术将对软件重用和软件构件技术的发展带来深刻的影响。
首先,中间件本质上是对分布式应用的抽象,它抛开了与应用相关的业务逻辑的细节,保留了典型的分布交互模式的关键特征。应用在中间件提供的环境中可以更好地集中于业务逻辑上,并以构件化的形式存在,最终自然而然地在异构环境中实现良好的协同工作。
第二,基于构架的构件化软件开发应当是面向需求的,即设计者集中精力于业务逻辑本身,而不必为分布式应用中的通信、效率、互操作、可靠性、容错性、完整性等大量与业务无直接关系但又非常重要的问题去耗费大量的精力,理想的构架在这些方面应当为构件软件提供良好的运行环境。事实上,这些正是中间件所要解决的问题。在大型软件工程系统中有70%的错误来自于需求分析和系统设计,中间件的发展为人们解决这一问题提供了有力的支撑。
第三,中间件较大的特点就是屏蔽多样的系统资源。它是位于底层基础平台(硬件和操作系统)和高层应用之间的通用服务。这些服务具有标准的程序接口和协议。针对不同的操作系统和硬件平台,它们可以有符合接口和协议规范的多种实现,以提供开发和实现分布式系统及与环境隔离的构件开发模式。应用构件开发者只需要按照中间件规定的模式进行设计开发,不必考虑下层的系统平台,这就为构件可重用甚至“即插即用”提供了保障。
总之,中间件作为应用软件系统集成的关键技术,保证了构件化思想实施,并为构件提供了真正的运行空间。中间件领域工业化标准的制定、统一及实现,使基于构件的应用开发成为可能。反过来,构件对新一代中间件产品也起到促进作用。中间件平台化和应用构件化的结果将导致软件工程方法的继续演变,也将导致软件产业链的组成发生变革。中间件的研究开发需要引入现代软件工程方法,而软件工程的发展又需要借助中间件等一类新兴软件技术的牵引和推动。
2.3 标准化技术
标准化既是软件重用和软件构件技术发展的需要,也是其必然结果,同时还是软件产业健康发展的强力支撑。软件工程标准包括软件标准和软件过程标准。而软件过程标准的建立是软件工程成熟的重要标志。
最近几年,国际软件工程标准化活动异常活跃,产生了从企业到国际一级的各种各样的标准,对寰球软件产业产生了巨大的规范化引导作用。目前,国际流行两大软件工程标准框架。一个是国际标准化组织(ISO/IEC)的“软件工程和系统工程标准分技术委员会”(JTC 1/SC7)提出的软件工程标准框架。这个框架从支持软件工程各个基本要素的角度出发,表述了软件工程对标准的需求。另一个是美国国防部提出的软件工程标准指南。这个框架性指南围绕软件工程环境、软件生存周期过程、软件工程安全性、程序设计语言和语言联编等提出了强制要求和建议采用的支持软件系统工程化的标准。虽然这两个框架在覆盖范围和详细程度上有所不同,但其共同之处都是以ISO/IEC12207为主线标准,并且针对支持软件工程中的“离散”活动和“连续”活动,考虑了其他一些必要的标准。国际标准ISO/IEC 12207《软件生存周期过程》归纳了整个软件生存周期中的普遍被认为行之有效的各个过程(即关于活动的描述),以及它们之间和它们与供、需方之间的关系。围绕这个标准的是一批支持各个过程实施的过程规范标准。在现行的50多个ISO/IEC有关软件工程的标准中,与上述“离散”活动对应的标准约占1/3,与“连续”活动对应的标准约占2/3。
我国软件工程标准制定工作相对于软件产业而言,起步较早。上个世纪80年代初,我国就开始了软件工程标准的制定工作。在软件质量标准方面,首先是针对中文信息处理产品制定了大量标准,其次,密切跟踪国外软件质量标准化的进程,着手分析研究工作。就专业领域而言,我国的国家标准和行业标准基本上覆盖软件工程的过程一类,在其他类别上覆盖率还比较低。
下一阶段,软件工程标准化工作的重点仍然是软件过程的标准化,其发展方向主要是基于软件生存周期的整个软件开发流程的标准化和具体系统的标准化,包括针对各种用途的软件开发流程标准和开发环境及专用工具系统标准。而且,软件过程标准化和软件标准化将进一步紧密结合并协调发展,在此基础上逐步产生软构件标准、中间件标准和自动化生产标准。
2.4 分布式计算技术
计算模式的发展经历了中央主机模式、客户机/服务器模式以及分布式计算模式。每一种计算模式都对计算科学的进步作出了贡献。
分布式计算是近年提出的一种新的计算方式。所谓分布式计算就是由两个或多个软件互相共享信息,这些软件既可以在同一台计算机上运行,也可以在通过网络连接起来的多台计算机上运行。分布式计算比起其它算法具有的优点主要有:①稀有资源可以共享;②通过分布式计算可以在多台计算机上平衡计算负载; ③可以把程序放在最适合运行它的计算机上;④构件可以在网络内的不同平台上运行,用户可以不知道构件的物理位置。其中,共享稀有资源和平衡负载是计算机分布式计算的核心思想。
从理论上讲,分布式组合具有高性能、可扩展、支持软件重用和资源共享的特点,但由于服务的物理分布并发控制局部失效、构件软件市场和技术尚不成熟,异质互操作及规格多样性大大地增加了应用软件的功能性规模和复杂性,因此,网络互操作性分布对象技术、对象之间的通讯以及分布式系统的开放性(如系统的动态裁剪迁移和进化)等问题已经成为软件工程的研究热点。
近年来业界推出了一些分布式计算技术的应用和工具。如Sun公司在其Java技术的基础上推出了应用于B/S架构的J2EE的开发和应用平台;Microsoft也在其DCOM技术的基础上推出了主要面向B/S应用的.NET开发和应用平台。它们都是基于对象构件模型的开放式系统,但设计目标和实现方式差别很大。随着异构分布应用的发展,对互操作性的要求将不断增加,人们在继续探讨如何为开放的不断演化的系统提出一类交互模型作为分布式计算的基础。
2004年4月,IBM提出了SOA(面向服务的体系结构)解决方案,它能将异构平台上应用程序不同的功能部件(称为服务),通过定义好的接口和规范,以松耦合的方式整合在一起,由于其方案简单、实现方便,一出现就受到广泛关注。目前所有国际盛名的计算机公司,都在应用SOA技术开发相应的平台和工具。SOA已成为软件工程领域的研究热点。
分布式计算技术今天已经成为计算技术的主导,显然,它的深入研究和应用将对软件工程技术和软件产业的发展带来深刻影响。
2.5 智能化技术
人工智能(AI)在软件工程中的应用研究是近年来兴起的热门话题之一。欧洲信息技术研究计划(ES-PRIT)就提出把AI技术与软件工程技术结合起来构成一个支持软件系统分析和设计的工具。有迹象表明,人工智能与软件工程的相互作用终将导致新一代软件开发方法与管理的规范形成,它能使软件易于开发、修改和维护。软件工程的智能化是一个必然趋势。
目前,已经展现的软件工程智能化的成果主要有:运用专家系统和人工神经网络系统设计软件工程项目;把智能化模块组装到大型软件系统,使得软件适应快速改变需求;应用推理技术提高用户界面的友好性;在图形用户接口、面向对象的程序设计、基于约束或基于规则的程序设计中应用智能技术;在大型分布式复杂软件中引入Agent技术实现软件的高抽象层次的构件和连接件,在不同层次上清晰描述和实现构件化的软件体系结构;等等。
软件工程智能化在未来几年间需要化解的难题还有很多,诸如:基于AI的支持环境和软件开发中的AI机制的建立;AI技术实用化,如用启发式搜索范例作为模型来刻划设计和实现活动、用AI的知识表示技术描述软件工程的全过程;基于分布式计算的软件项目如何应用分布式人工智能技术(DAI)等等。
DAI的研究重点是协调那些在物理上或逻辑上分散的智能体的智能行为,使它们能够协同工作。DAI的研究方向将从目前的分布式问题求解(DPS)、多Agent系统(MAS)、并行人工智能(PAI)等发展出更多的方向,以适应分布式计算和软件工程技术飞速发展的需要。有专家预测,对面向Agent语言及其程序设计的标准和风范的研究可能成为软件工程智能化取得突破性进展的重要因素。
2.6 软件可靠性工程
软件可靠性是软件质量的最主要的特性之一。软件可靠性表明软件的正确、完整和一致的程度。用数学的方法严格证明软件确实正确、完整和一致是困难的,甚至是几乎不可能的。而通过测试和其他分析方法,建立在统计理论上的计算,估算软件的可靠性具有可行性。
软件可靠性工程目前已发展成软件工程的一个重要分支。其主要目标是保证和提高软件可靠性。软件可靠性工程对软件产品的可靠性进行预测、建模、估计、度量和管理,它贯穿软件产品的设计、开发、销售、使用、维护的全过程。70年代末至80年代早期,最初的软件可靠性研究局限在软件可靠性模型的比较和选择。90年代以来,软件可靠性研究工作进展较快,研究重点包括软件可靠性设计、可靠性测试与管理、可靠性数据的收集和可靠性预测等方面。90年代中期,软件可靠性工程的理论和实践基本形成。研究的方法逐步改进,范围逐渐扩展。一些可靠性分析、设计技术广泛应用于软件可靠性工程之中。人们在诸如基于软件可靠性模型的软件可靠性预计与评价;软件系统结构、开发过程、使用环境、运行剖面等要素之间的相互关系及其对软件可靠性影响;利用规范化的软件产品保证技术和方法指导系统软件的分析、设计、编码、测试、使用和维护等方面也取得了明显进展。
可靠性建模一直是软件可靠性工程的热点。学者们提出了各种类型的可靠性模型,公开报道的软件可靠性统计分析模型越来越多,有的模型还被制造成标准的工具软件出售,如Musa-Qkumoto模型、Jelinski-Moranda模型、NHPP模型、S-shaped模型、Duane模型、Little-Verral模型等,还将有大量新的模型涌现。由于软件的特殊性,这类模型都难免存在不同的缺陷和局限性。
国内软件可靠性研究始于80年代初,一批专家学者在软件可靠性建模、软件可靠性分配及软件可靠性管理等方面进行了有益的探索。在软件避错容错技术、可靠性评估工具、可靠性测试和可靠性度量体系等方面取得了重要进展。
软件可靠性工程的研究虽然已取得了很大的成就,但存在的问题仍很多,例如,过来一段的研究基本上是以概率论和数理统计为基础,这并不完全恰当。还需要从系统科学的其他分支中吸取营养,特别是从高层次的系统科学中寻求指导思想。已经建立的数百种软件可靠性模型,均存在不同程度的局限性,对于模型的分类还没有一个公认的体系,也没有一种通用分析模型供人们使用。还有支撑软件测试的软件失效数据库建设及其失效数据的自动收集是工程实践迫切需要解决的一个问题。各种软件测试工具中测试用例的自动生成工具还有待于进一步开发和完善等等。
近几年来,软件可靠性工程研究仍在深入发展。为了使软件可靠性分析、预计更加准确,除应用标准软件可靠性模型外,人们还试图采用校正、纠偏、加权组合、引入软件复杂性和测试类型、开发方法类型影响因子等多种方法,对传统模型进行改进,以增强其可靠性评价的准确性。同时,应用人工智能技术和仿真技术等方法分析软件可靠性也是一种值得关注的发展趋势。
3.结语
综上所述,诸如构件化、中间件、标准化、分布式计算、智能化、可靠性工程等技术的进步给软件产业及软件工程的发展带来了深刻的影响。除此之外,软件工程在过程控制、项目管理、软件经济、风险管理、领域工程等方面也在不断发展。
软件工程在未来若干年的努力方向主要是:继续利用各种先进的知识和工具,加强软件工程自身的科学理论基础的研究;剖析软件工程过程中需求和设计之间的断层现象,建立应用需求和系统设计两者之间的有效连接机制;提出稳定可靠的提高软件生产率的自动化和标准化措施,解决系统设计到系统开发的平滑过渡问题;研究降低软件开发成本、缩短开发周期、大量实现软件重用、提高系统可靠性的途径和方法。
尤需指出的是Internet、网格技术和分布式人工智能技术的发展,将对软件工程和软件产业的发展带来深远影响。软件工程必然要从封闭式开发走向开放式协同开发,软件工程基于实体驱动和确定目标、有序控制的开发模式必然让位于网络环境下的基于协同驱动和动态目标、实体聚合的开发模式。地理上广泛分布、系统平台各异的多种计算资源用高速网络连接起来,将形成虚拟的超级计算平台,获得前所未有的处理能力。基于这种环境开发的软件系统具有更复杂的特征,如动态扩展性、系统平台的各异性、结构的不可预测性、多级管理域等。网格技术可以“粘合”不同网络空间、不同系统平台的中间件,对整个系统实行统一的用户管理、资源管理、作业管理和安全管理,保障软件系统的可靠运行。有学者把在这样一个开放、动态和多变环境下开发的软件系统称为“网构软件”,并预言网构软件的理论、方法和技术将成为21世纪的先进的软件工程方法学体系。
总之,软件工程的总体发展目标是从根本上克服软件危机,逐步实现软件开发的构件化、标准化、智能化和产业化。
(本文来自 本人论文集)