软件开发技术
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 软件危机新问题

软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件在开发与维护过程中出现一系列严重问题的现象。软件危机曾经是软件界,甚至整个计算机界最热门的话题。为了解决这场危机,软件从业人员、专家和学者做出了大量的努力。现在人们已经逐步认识到所谓的软件危机实际上仅是一种状况,那就是软件中有错误,正是这些错误导致了软件开发在成本、进度和质量上的失控。有错是软件的属性,而且是无法改变的,因为软件是由人来完成的,所有由人做的工作都不会是完美无缺的。问题在于如何去避免错误的产生和消除已经产生的错误,使程序中的错误密度达到尽可能低的程度。

自21世纪初以来,由于信息技术及其应用在深度和广度上的飞速发展,旧的“软件危机”尚未彻底解决,在“新形势”下又出现了新的“软件危机”。

所谓“新形势”主要是指:基于网络的信息系统的规模尺度和复杂程度的剧增;下一代信息网络的发展和逐渐成熟的网格技术;软件中间件、预购件、Agent技术的逐渐成熟和Entity,Ontology等概念的发展;基于语义网络的资源聚合技术的逐渐成熟;对信息安全、确认和验证技术的需求日趋强烈等。解决“新形势”下的“软件危机”将是一个综合性的系统问题,从软件技术的领域而言,应研究针对这类复杂系统的软件工程。

1.1.1 早期软件危机的表现

20世纪60年代以前,计算机刚刚投入实际使用,软件设计往往只是为了一个特定的应用而在指定的计算机上设计和编制,采用密切依赖于计算机的机器代码或汇编语言。软件的规模比较小,文档资料通常也不存在,很少使用系统化的开发方法。设计软件往往等同于编制程序,基本上是个人设计、个人使用、个人操作、自给自足的私人化的软件生产方式。

20世纪60年代中期,大容量、高速度计算机的出现,使计算机的应用范围迅速扩大,软件开发急剧增长。高级语言开始出现,操作系统的发展引起了计算机应用方式的变化,大量数据处理导致第一代数据库管理系统的诞生。软件系统的规模越来越大,复杂程度越来越高,软件可靠性问题也越来越突出。原来的个人设计、个人使用的方式不再能满足要求,迫切需要改变软件生产方式,提高软件生产率,由此,软件危机开始爆发。

1968年北大西洋公约组织的计算机科学家在联邦德国召开国际会议,第一次讨论软件危机问题,并正式提出“软件工程”一词,从此一门新兴的工程学科——软件工程学,为研究和克服软件危机应运而生。

早期出现的软件危机主要表现在:① 软件开发费用和进度失控,费用超支、进度拖延的情况屡屡发生,有时为了赶进度或压成本不得不采取一些权宜之计,这样又往往严重损害了软件产品的质量;② 软件的可靠性差,尽管耗费了大量的人力物力,而系统的正确性却越来越难以保证,出错率大大增加,由于软件错误而造成的损失十分惊人;③ 生产出来的软件难以维护,很多程序缺乏相应的文档资料,程序中的错误难以定位,难以改正,有时改正了已有的错误又引入新的错误,随着软件的社会拥有量越来越大,维护占用了大量人力、物力和财力。

进入20世纪80年代以来,尽管软件工程研究与实践取得了可喜的成就,软件技术水平有了长足的进展,但是软件生产水平依然远远落后于硬件生产水平的发展速度。软件危机不仅没有消失,还有加剧之势。主要表现在:① 软件成本在计算机系统总成本中所占的比例居高不下,且逐年上升。由于微电子学技术的进步和硬件生产自动化程度不断提高,硬件成本逐年下降,性能和产量迅速提高。然而软件开发需要大量人力,软件成本随着软件规模和数量的剧增而持续上升。从美、日两国的统计数字表明,1985年度软件成本大约占总成本的90%。② 软件开发生产率提高的速度远远跟不上计算机应用迅速普及深入的需要,软件产品供不应求的状况使得人类不能充分利用现代计算机硬件所能提供的巨大潜力。

软件生产的这种知识密集和人力密集的特点是造成早期软件危机的根源所在。

1.1.2 企业信息化建设

近年来,我国软件产业在促进信息化建设中起到了巨大的作用,在财务、税务、教育平台等重要行业的信息化应用市场占据了主导地位,并在一些基础软件方面取得了突破。但是,随着国民经济的快速发展,建设创新型国家战略的实施,对软件产业发展提出了更高的要求,同时也把软件产业的发展,推到了一个前所未有的历史前台。无论是推进电子政务还是电子商务的重大应用,无论是发展远程教育等信息服务业还是开发具有自主知识产权的核心技术,都要处理好信息化建设与软件产业发展之间的关系。

针对制造企业,信息化建设的含义就是以管理创新的思路将现代管理方法、信息技术、自动化技术等相关技术与制造技术相结合,提高企业管理现代化,提高生产自动化水平,降低成本,增强经济效益,全面提升制造业的市场竞争力。

信息化建设是个系统工程,应用系统建设、信息资源建设、网络网站建设都离不开信息技术和产品的支持。OA、MRP、ERP、CRM、协同软件、SCM等各种管理和应用软件纷纷走进信息化建设,可以说,各种软件的发展和应用,直接推动着信息化建设的进程。

1.企业信息化的定义

企业信息化,就是企业利用现代信息技术,通过信息资源的深入开发和广泛利用,不断提高生产、经营、管理、决策的效率和水平,进而提高企业经济效益和企业竞争力的过程。企业要在利用信息技术改造传统产业和企业经营管理信息化两个方面加紧推进。

企业进行信息化建设的目的是“增强企业的核心竞争力”,通过使用计算机网络技术在企业的各个部门,包括:企业的生产、经营、设计、制造、管理等职能部门,进行信息的收集、传输、加工、存储、更新和维护。企业信息化一般分为高级经理层(决策层)、中间管理层(战略层)、基础业务层(战术层)这样3层。因此,企业信息化是一个有机的系统。

我国开展企业信息化建设已有二十余年,取得了显著的成绩,企业信息化水平有了明显提升。但是,我国企业信息化建设还存在诸多不足。与西方发达国家相比,我国企业信息化在水平、规模、层次和范围等方面有较大差距。

2.企业信息化的外延

还应该看到,企业信息化的基础是企业的管理和运行模式,而不是计算机网络技术本身,其中的计算机网络技术仅仅是企业信息化的实现手段。企业信息化是一个系统工程:企业的信息化建设是一个人机合一的有层次的系统工程,包括企业领导和员工理念的信息化;企业决策、组织管理信息化;企业经营手段信息化;设计、加工应用信息化。企业信息化的实现是一个过程:包含了人才培养、咨询服务、方案设计、设备采购、网络建设、软件选型、应用培训、二次开发等过程。

目前,阻碍我国企业信息化建设的症结可以归结为两个方面:一是认识不到位;二是执行力不足。具体而言,主要表现为以下问题。

(1)由于对企业信息化认识没有到位,致使重视力度不够

其表现有:一是对信息和信息技术对推动企业发展的重要性和作用认识不足;二是对重大信息化工程建设的难度估计不足;三是对企业信息化建设过程、模式、手段的认识存在偏差。

有调查数据表明,我国企业实施大型信息系统成功率明显偏低,按照严格定义,其成功率不足20%。

(2)企业管理水平落后,管理基础薄弱

大型信息系统如ERP和CIMS等实质上是现代企业管理思想与现代信息技术相结合的产物,所代表的不仅是管理手段的改进和升级,更重要的是管理思想的深刻变化。如果企业管理水平低下,基础管理薄弱,而是单纯地依靠信息系统提升管理水平,即使最成熟的技术也不能保证信息化成功,依靠工业化的办法实施信息化必然会失败。

(3)忽视基础性工作,准备明显不足

这主要表现在:一是数据的规范化程度较低,大量数据没有收集和整理,各部门数据标准规范不统一,信息不能顺畅流通、交换;二是需求不明确,企业对信息化工程到底要解决哪些问题不清楚,也提不出具体要求,抓不住关键点,盲目上马以后,发现无法解决企业现实问题;三是没有系统规划,“头痛医头、脚痛医脚”,致使或形成一个个信息孤岛,或者造成大量的二次加工,或者被迫推倒重来。

(4)支持服务不能有效跟进

一些从事信息化服务的公司和机构自身专业水平较低,本土化企业能力不足,没有对企业的内在需求深度研究,短期行为严重,后续服务跟不上等,不仅直接导致了企业信息化效果不佳,还严重挫伤了企业的积极性。

3.企业信息化的分类和层次

信息化可分为:城市信息化、政府信息化、企业信息化、教育信息化等。而企业的信息化建设可以按照不同的分类方式,常用的分类方式有按照行业、企业运营模式和企业的应用深度等进行分类。按所处行业分为:制造业信息化、商业信息化、金融业信息化、服务业务信息化等。按照企业的运营模式分为:离散型企业的信息化建设和流程型企业的信息化。

企业信息化是一个发展的问题,同时也是一个层次问题,根据企业信息化的不同的集成度,可将企业的信息化分为:

① 单元技术

② 技术部门集成

③ 企业内部集成

④ 动态联盟集成

4.企业信息化的意义

从宏观上看,企业的信息化建设有利于增强国家经济的可持续性快速发展,增强国家的综合实力,有利于迎接加入WTO后的挑战,适应国际化竞争。现代信息技术的迅速发展,为开发和利用信息提供了有力的技术支持。只有实现信息化,企业才有可能抓住机遇,实现健康发展。企业信息化实现企业全部生产经营活动的运营自动化、管理网络化、决策智能化。其中,运营自动化是基础,决策智能化是顶峰,有利于增加企业间的技术流通,总体提升整个行业的技术水平。

从中观上看,企业信息化可以为企业带来以下优势:有利于增强企业的核心竞争力,适应市场化竞争的要求;有利于理顺和提高企业的管理,实现管理的井井有条;提高设计效率,缩短设计周期,保证设计质量;降低企业的库存,节约占用资金,节约生产材料,降低生产成本;缩短企业的服务时间和提高企业的客户满意度,并可及时的获取客户需求,实现按订单生产;加速资金流在企业内部和企业间的流动速率,实现资金的快速重复有效利用;加速信息流在企业内部和企业间的流动速率,实现信息的有效整合和利用;加速知识在企业中的传播,实现现有知识的及时更新和应用等。

从微观上看,企业信息化可以降低技术人才的劳动强度,用计算机实现繁杂、重复的简单体力劳动,从而提升技术人才的脑力价值;并且可以有效改善职工的工作环境。

1.1.3 信息孤岛

信息化对企业发展起着不可低估的作用,但在我国企业信息化的过程中普遍存在一个突出的问题——信息孤岛。信息孤岛的存在降低了信息化应有的效率,也阻碍了企业信息化的进一步深化。

信息化应用的趋势,一方面反映了信息技术的动向,另一方面也凸现出企业在当前市场环境下的管理需求。信息技术是企业实现管理优化的一个重要手段,但人们发现,信息化的实践过程中,常常会面对“信息孤岛”、“应用孤岛”和“资源孤岛”3大难题,这3大难题与企业的管理需求产生了难以调和的矛盾。

“信息孤岛”和信息共享的矛盾:不同的信息以不同的结构(如EMAIL、备忘录、通信、演示文档、扫描文档)在不同的数据库、主机、文件服务器、应用系统上存在,而这些系统缺乏相互连接的信息渠道,数据被封存并缺乏应有的关联,从而给企业获取有用信息带来很大障碍。

“应用孤岛”和业务整合的矛盾:针对自己某方面管理需求而引入的各种应用系统,在单个业务领域的管理上无疑有自己的特点,但由于它们无法面向整个的业务过程,各个系统之间也难以紧密集成,使得企业“环环相扣”的业务被这些分散的系统“分隔”开来,企业不得不花大量的人力、物力在不同的应用系统之间切换,造成运营效率低下和反应迟缓。

“资源孤岛”和资源协同的矛盾:企业运作的基本元素“人”、“财”、“物”、“信息”和“流程”,不能统一地被管理并在突破各种屏障和边界的工作环境下进行调配和紧密地整合,因而难以为企业的目标进行一致性地协作和服务。

1.1.4 软件应用集成

应用集成架构与技术是应用系统互联互通、数据共享和应用整合的关键共性技术,扩展应用服务器的核心基础设施和特性,把分散的信息孤岛系统纳入到简单、统一的集成管理平台,并为用户提供统一、方便的信息处理工具。

2000年以前,信息化的整体应用框架大部分还是以ERP为主。2000年以后,许多用户和厂商都意识到供应链和客户关系对于信息化管理的重要性。因此信息化的管理内容开始向供应商和客户进行延伸,以提供产业链的协作能力。ERP向上延伸有了SCM的应用,向下延伸有了CRM的应用。

基于产业链的协作,使信息化的技术和应用价值有了新的拓展。在技术价值上,EIP、WFM,CC等相关技术开始走向前台;在应用价值上,PM,KM,BI也已经成为潮流。新的技术和应用,使传统的资金流、物流、信息流三流合一,走向增加了工作流在内的四流合一,新的信息化战略框架构由此形成。

传统的企业应用集成(EAI,Enterprise Application Integration)的层次主要有数据级集成、应用接口级集成、业务逻辑级集成等。数据级集成是一种简单的企业应用集成方式,以共享或合并多个应用程序之间数据的方式实现集成,属于面向信息的集成方式。应用接口级集成是指应用程序之间通过调用彼此的应用程序接口,即API(Application Program Interface)实现集成,属于面向接口的集成方式。而业务逻辑级集成则是由应用程序之间通过共享业务逻辑的方式来实现的,属于面向过程的集成方式。这3种集成方式虽然都能实现企业应用程序集成的目的,但它们的应用都具有一定的局限性。

数据级集成需要交互的应用程序之间共享或合并数据库,这就需要被集成的应用程序具有相同类型的数据库,或者能够转换成相同类型的数据库。若共享的应用程序数据库的类型不相同,则不适合采用这种方法。数据级集成方式可能会导致损坏数据,打开数据库的安全缺口等。

应用接口级集成通过互相调用应用程序接口实现应用系统集成,这种技术性的集成方式需要调用者对被调用的接口非常熟悉。调用者只有在对API熟悉的基础上,才能对他们进行调用和修改。当对API接口进行修改时,将导致新的、大量的调试工作量,也可能会增加现有应用系统的不稳定性。由于采用的是接口调用方法,通常需要调用者程序和被调用者程序具有相同的实现机制和运行环境。

业务逻辑级集成通过共享业务逻辑的方式进行系统集成,采用开发高层虚拟组件的方式。该方式不仅暴露了应用程序的业务逻辑,而且由于业务逻辑的交叉,导致了各个集成系统之间的紧耦合性,降低了单个应用系统的灵活性,增加了整个系统维护的难度。

上述这3种方式是非功能层的集成方式,属于紧耦合的应用系统集成方式。这种紧耦合的集成方式将影响系统的灵活性和扩展性,阻碍业务的流程调整和优化,不利于企业的业务发展。

因此,为了解决上述问题,需要一种面向功能层的企业应用集成方式。该方式不仅能保证原有系统的数据安全性和逻辑安全性,而且还能够实现各系统之间的松耦合,方便系统流程的重组和优化。这种方式就是基于面向服务架构(SOA)的企业应用集成方式,其优点如下。

① 语言独立。EAI通常需要集成早期开发的多个企业应用系统。这些系统一般都是在不同时期由不同的软件开发商采用不同的软件开发方法和软件开发工具开发的。由于SOA架构具有语言独立的优点,因此采用它能将不同语言和不同版本的企业应用系统集成起来。

② 实现松耦合。松耦合特性能方便企业中单个系统流程的优化,适合企业需求变化的动态性。使得交互双方中一方的改动不会影响到另一方,降低单个企业软件升级时带来的附加成本。

③ 跨平台。SOA能集成不同网络环境下的企业应用系统,能够保护原有网络资源,减少开销。

④ 良好封装性。服务的良好封装性不仅提高了应用系统的数据安全性和逻辑安全性,而且增强了单个服务的复用性,节省重复开发成本。

⑤ 服务位置透明。在SOA中,服务位置的透明使得服务可以被动态绑定,也可以被静态调用,这样方便了调用者对服务的使用。

1.1.5 软件投资效益

随着企业信息化和电子商务的深入发展,企业在IT方面的投资不断增加,信息化的管理工具和管理手段已经成为企业提高市场竞争能力和竞争优势的最重要的因素之一。但是信息化往往需要比较大的投资,而往往巨大的投资使企业得不偿失,甚至是进退两难。

当今的企业正用各种不同的方式把资金投向信息技术上,事实上,对信息技术的投资已经成为多数企业的最大投资之一。然而,现在出现了一个重要的现实问题:信息技术的发展一日千里,信息技术的应用也越来越复杂,企业却很难把握信息技术到底给企业带来了哪些具体效益,以及如何检验这些效益。著名的诺贝尔获得者经济学家罗伯特索纳曾指出:“计算机在企业里随处可见,但是在统计生产率时却看不见它们”。布恩杰夫逊也提出了一个生产率悖论:“计算机并没有带来所期望的价值”。

因此,为了务实地推进企业信息化,对企业IT投资的效益进行全面综合的评估十分必要。

1.1.6 全球软件产业范式转型

近二、三十年的技术革新给世界经济运作带来了深刻影响,跨国公司、跨国公司联盟、国家、国际经济体共同参于全球竞争,构成全新的全球竞争层次和体系。在民族国家利益、区域经济利益、跨国公司内部利益、垄断对抗利益的共同作用下,全球化意味着经济融合的加速和经济竞争的加剧。

运输方式的革新大大降低了费用,节约了时间。通信方式的革新使得通信的成本与时间都空前缩小。计算机和信息网络经济使国际间资本、技术、信息和金融流动更加高效,使不同国家利用合作优势加工制造产品、开展经济交流合作更加便捷和容易。特别在一些传统工业国家,计算机信息技术进步加速了产业结构重点向服务业(金融、团购、零售等)的转变。

1.网络化

曾经快速增长的软件产业近几年增长明显放缓,Google的互联网+软件模式的成功,为软件产业的发展带来了新的模式。Google不再通过销售软件获得收入,而是通过大量用户使用软件支付的增值收入、会员收入,以及因用户使用软件而带来的广告收入。这和传统通过销售软件而取得收入完全不同,创造了一种新的软件商业模式。

互联网激活软件产业,软件与互联网的结合似乎正成为软件产业的潮流,无论是在个人应用软件层面还是在企业级软件层面,这种趋势不可挡,因此,各大软件企业开始了向互联网转型的探索。

2.全球化

全球化是世界经济一体化的必然结果,也是中国经济和企业争取更大发展的必由之路。软件全球化主要指跨国软件企业的本土化和国内软件企业的全球化。

目前国内软件企业的国际化通常有以下4种模式:进行委托加工的软件外包模式;拓展海外销售市场的营销扩展模式;在海外设立研发和销售中心的研发和销售并重模式;通过合资、并购、上市的资本运作模式。

3.服务化

应用需求的快速发展带动了计算机网络技术的快速发展,其直接结果是产生了当前炙手可热的网络服务(Web Service)技术。在网络环境下,软件研究、开发、测试和经营的传统模式正在发生改变。软件的服务化将成为一种趋势。网络革命所带来的服务化趋势为软件产业开辟了成本更低、效率更高的新的获利途径,同时使用户能够获得更加简捷、更加全面的服务享受。

如何合理地把Web服务应用到各类企业的IT系统和商业流程之中、并给企业带来直接的经济效益,一直是倍受国内外企业管理者高度关注的课题,因此带动了服务化发展的需求,SOA是服务化的具体体现,被誉为下一代Web服务的基础框架,目前已经成为计算机信息领域的一个新的发展方向。

4.开放化

软件产业的开放化,主要包括两个方面:软件标准开放化、软件代码开源化。标准的开放化和代码的开源化,共同促进软件行业的合作与创新。

软件标准的开放化,实现软件间互操作性的重要措施,促进了软件间的互联互通。各大软件厂商,相继推出软件标准开放化策略。

作为重要的软件发布方式,开放源码从软件诞生起就一直存在。目前已有数百种成熟的开源软件产品被广泛使用,涉及操作系统、数据库、中间件、开发环境、测试工具、电子商务平台、群件、办公套件及大量的实用程序等。当前,开源软件已成为商业软件中的重要部分。开源软件对软件产业的突出贡献是促进了软件产业的创新。目前,一些传统的软件企业纷纷涉足开源市场。