目录
|
软件生产是知识密集型的智力活动,它是资金密集、劳动密集型工作,软件项目中包含了许多极易出错的手工劳动,例如编码。
1.程序设计模式
软件生产的第一个时期可以说是自从有了计算机以后,一直到20世纪60年代中期以前的这段时期。在这个时期内,软件生产的主要模式就是程序设计模式。我们知道,计算机的研制来源于庞大而复杂的数学计算,如第一台通用电子数字计算机“埃尼阿克”(ENIAC),它是由美国军械部拨款研制的,其主要任务就是用于计算和分析炮弹轨道的。在这个时期,软件的生产主要是基于机器语言、汇编语言和Fortran语言等编程语言为标志的算法技术。那时,软件的生产就是程序设计,由程序设计人员根据特定的要求,通过当时的编程语言提供的算法来编写相应的程序的。以程序设计模式进行的软件生产主要有以下一些特点:
1)软件的范畴主要是程序。在这种模式下生产的软件主要就是程序,其中大部分是用来进行数学计算的程序。而且这些程序一般都没有很好的数据结构,而是程序设计人员根据需要和相关语言提供的算法自由编写的。
2)软件的编写者和使用者往往为同一个或同一组人。在这个时期,计算机是作为某些特殊领域特殊人员的专用工具的,而这些特殊人员往往都是我们现在所说的领域专家,他们大都具有某些领域的专业知识,而且又需要进行复杂而又庞大的数学计算,于是他们借助计算机及其语言,进而编写出适合他们自己需要的程序,即软件。
3)软件基本上都是专用软件。在这个时期,由于软件是使用者根据自身的需要而编写的,只要能够帮助他们达到目的即可。所以这样的软件往往没有很好的结构和说明,别人看不懂,也不需要别人看得懂,它们往往只属于个人或仅在少数一些人中间交流,因而不具有通用性,是专用的。4)软件的规模很小。由于这个时期的软件主要就是程序,而且这些程序常常是领域专家为了解决某些特殊的需要而编写的,如完成某一特殊的计算或算法等,所以这些软件经常是小规模的,而且是辅助性的。它们仅是帮助领域专家完成某项工程的辅助部分而已。
2.软件作坊模式
软件生产的第二个时期是从20世纪60年代中期到70年代中期这段时间,这个时期又叫程序系统时期;而这个时期软件生产的主要模式就是软件作坊模式。
早在19世纪50年代,伴随着第一台电子计算机的诞生和问世,以写软件为职业的人已经开始出现了,他们多是经过训练的数学专家和电气工程师。然而由于他们人数较少,所以无法构成当时社会软件生产的主流。到了19世纪60年代,在美国的一些大学里,开始出现了授予计算机专业的学位,教导人们如何去写软件;与此同时,软件的需求也越来越多,软件开始作为一种产品被广泛使用了,于是出现了“软件作坊”。软件作坊一般是由少数几个或几十个人组成的软件生产团体,他们是专门应别人的要求而编写软件的。软件作坊的出现,极大地推动了当时的软件生产和发展,进一步确立了软件作为独立产业的基础。然而无论从软件生产的理论和方法上,软件作坊并没有为软件生产提供什么系统的方法来遵循,软件作坊的生产仍然沿用早期的个体化软件开发方式。这个时期的软件设计仍然是在某个人头脑中完成的一个隐蔽的过程,而且软件开发以后,除了源代码以外往往没有软件的说明书等文档。以软件作坊模式进行的软件生产主要有以下一些特点:
1)软件的范畴是:程序+数据。在软件作坊的生产模式下,软件已经从早期的简单的程序,转换到软件;程序+数据的模式。程序是按照事先设计的功能和性能要求执行的指令序列;而数据则是程序能正常操纵的数据结构。
2)软件的编写者和使用者已逐步分开。随着软件作坊的出现,软件的使用者和软件的编写者已逐步的分开了。软件作坊作为软件的编写单位独立存在,应软件的使用者的要求而编写相应的软件;而软件的使用者则只需要向软件作坊提出他们的要求和需要即可。
3)软件已经作为产品被广泛使用。在这个时期,软件已经成为一种产品了,就和其他的商业产品一样,被广泛地使用。软件使用者向软件作坊提出要求,并付出相应的价钱,由软件作坊为他们定制特殊的软件。这就是我们现在所说的软件外包的最开始的雏形。
4)出现了软件危机。由于软件作坊仍然沿用早期的个体化软件开发方式,所以最后生产的软件仍然是个人或少数几个人的头脑风暴的自由实现,充满了各种别人无法理解的编程技巧;它们往往只具有源程序,而没有相关的使用说明和各种文档资料。这就造成软件的可读性和可维护性极差,即使是同一个人编写的软件在过一段时间之后,自己也无法读懂。特别是后来,随着软件数量的急剧膨胀,软件的需求越来越复杂,软件维护的难度也越来越大,软件开发的成本令人吃惊的高,从而导致越来越多的软件开发项目失败,于是产生了软件危机。
3.软件工程模式
软件生产的第三个时期是从20世纪70年代中期之后开始的这段时间,也就是软件工程模式时期。软件工程的提出是为了解决软件危机的。在1968年北大西洋公约组织的计算机科学家在联邦德国召开的国际学术会议上第一次提出了“软件危机”(SoftwareCrisis)这个名词,指出软件危机是在计算机软件的开发和维护过程中所遇到的一系列严重问题;它主要包括2个方面,一是如何开发软件来满足不断增长、日趋复杂的需求;二是如何维护数量不断膨胀的软件产品。软件危机的出现,使得人们开始对软件及其特性进行了更深一步的研究,人们改变了早期那些被认为是优秀的,但常常很难被别人看懂,通篇充满了编程技巧的程序的看法;而普遍认为优秀的软件除了功能正确、性能优良以外,还应该容易看懂、容易使用、容易修改和扩充。于是在1968年秋季,NATO(北大西洋公约组织)的科技委员会召集了近50名一流的编程人员、计算机科学家和工业界巨头,召开了一次学术会议,讨论和制定摆脱“软件危机”的对策,并第一次提出了软件工程(SoftwareEngineering)这个概念。
软件工程的提出,为人们提供了一种新的系统化、规范化、数量化的工程原则和方法去进行软件的开发和维护,使得人们越来越认识到,按照工程化的原则和方法来组织管理软件的开发与维护工作,是摆脱软件危机的一个主要出路。于是从20世纪70年代中期之后一直到现在,以软件工程为指导思想的软件工程模式逐渐成为软件生产的主要模式。以软件工程模式进行的软件生产主要有以下一些特点:1)软件的范畴是:程序+数据+文档。其中程序是按照事先设计的功能和性能要求执行的指令序列;数据是程序能正常操纵信息的数据结构;而文档是与程序开发维护和使用有关的各种图文文档资料。
2)软件具有生命周期。软件从提出需求到最后废止不用,是有一个周期的。虽然说这个周期随着行业领域和软件技术的不同而有所不同,但从软件的开发与维护过程来看,它们都会完成一个周期,经历过类似的阶段。即计划时期(问题定义阶段,可行性研究阶段)、开发时期(需求分析阶段,软件设计阶段,编码阶段,测试阶段)、运行时期(维护阶段)。
3)以工程化的原理和方法来开发和维护软件。软件工程的提出为人们提供了一整套的原则和方法来开发和维护软件,同时也指出软件工程包括两个部分,即软件开发技术和软件项目管理。软件开发技术指的是软件开发方法学、软件工具和软件工程环境;而软件项目管理则是指软件的度量、项目估算、进度控制、人员安排、配置管理和项目计划等。
4)软件的分工越来越细,需要组织协作。从软件的生命周期来看,软件从开发到消亡包括3个时期8个阶段,随着软件规模的不断增大和软件复杂度的急剧膨胀,每个阶段都需要具有不同专长的人分工协作,才能得以完成。这将进一步导致软件的分工越来越细,从而导致出现不同的IT专业从业人员。5)软件危机并没有完全消除。软件工程的出现,虽然说为消除软件危机提供了一种新的系统的原理和方法,但它并不能完全消除软件危机。统计数字表明,到目前为止虽然有很多成功的软件项目,但也有许多软件开发项目是失败的。
4.软件工厂模式
其实早在1968年伴随着软件工程的概念提出,软件工厂的概念也几乎在同时被提了出来,最早提出软件工厂概念的可能就是R.W.Bemer了。他是基于通用电气公司为了开发一种提高软件工程师生产力的新的软件开发模式而提出的。在他的软件工厂的设计里,通过使用标准化软件生产工具、计算机接口和带有历史数据的数据库组成的。而在1969年第一个标榜自己的软件组织为软件工厂的公司是日本的日立公司;但是到了1975年以后,软件工厂的概念才开始逐渐在日本和欧美的一些公司得到发展,如日本的NEC、东芝、富士通和三菱等公司。在此期间,软件工程得到了快速的发展和提高,而软件工厂大多都还处于探索和实践阶段,一直到最近几年,随着软件外包的流行,软件工厂才又被提到学者们和各大软件公司的面前。笔者认为,软件工厂主要有2种模式,一种是基于软件开发的软件工厂,而另外一种是基于软件集成的全自动化的软件工厂。
(1)基于软件开发的软件工厂
这种形式的软件工厂是以软件工程和软件的生命周期作为软件公司的管理和开发的指导思想,着重软件的开发和管理。其最主要的体现在3个方面,1)在公司的组织划分和项目及人员管理上深入贯彻落实软件工程思想,强调软件开发的“工程”性,把软件的设计、开发、测试、维护和管理当作一项系统工程来抓,表明软件不仅仅是编写代码的工作,而需要各个学科的综合应用和各部门团队之间的通力合作,才能得以实现。2)严格项目管理和改进软件过程。承认软件开发是具有相当风险的工作,为了降低风险,使项目能够按照预定的成本、进度和质量顺利完成,而对软件开发的成本、人员、进度、质量和风险等进行科学地分析和管理,同时结合先进的管理软件和工具软件,如引进先进的国际管理标准ISO9000和CMM等,对公司的工作流程进行分析、整理、改进和完善,形成适合自己公司发展的软件过程和相关文档,并指导软件项目的开发。3)广泛地使用软件复用技术。在公司级别上建立软件复用类库,对各知识领域的可复用构件进行分类和提炼,并在全公司上下和各个项目之间广泛推行和落实,从而提升各个团队乃至整个公司的软件生产质量和生产力。
(2)基于软件集成的软件工厂
以软件集成为核心的软件工厂,强调的是软件“集成”。就像传统行业的产品生产线一样,软件工厂拿到软件需求,通过软件的需求分析和设计,确定要达到相关功能和性能所需要的各种软件构件,在软件工厂的集成平台上通过集成而生产出符合用户要求的软件,它是一个高度自动化的软件生产模式。基于集成的软件工厂,它的主要工作大致可以分为2个阶段。第一个阶段是软件的需求分析和设计。在这一阶段,软件公司针对不同的软件需求,集中公司的信息技术专家、管理专家、行业专家和项目开发人员组成项目组,对软件的需求进行分析,设计出生产工艺方案,继而按方案对所需要的软件构件(中间件、模块等)进行选型和配置。第二个阶段是在软件集成平台上对各种软件构件进行组装、集成和客户化,以最终生产出符合客户要求的软件产品。由此可见,以集成为核心的软件工厂,它不强调软件的开发,或者说它不怎么关心软件的开发,而是通过使用各种软件集成工具来搭建软件集成平台,以领域标准和支持这些标准的领域中间件和构件为原料来实现软件生产自动化的。