作者简介:李云超(1988--),男,山东青州人,中南民族大学10级研究生,研究方向:软件工程、模式识别自然辩证法与软件工程学科发展李云超(中南民族大学计算机科学学院,湖北武汉430074)摘要:以自然辩证法的观点探讨了软件工程学科的发展历程,运用自然辩证法的基本理论和方法,系统分析了软件工程学科的历史、现状和未来,并对其发展趋势和未来模式做了探索性研究和预测,提出软件工程的发展目标是从根本上克服软件危机,逐步实现软件开发的构件化、标准化、智能化和全球化。关键词:自然辩证法科学技术方法论软件工程学科发展自然辩证法的研究对象是自然界发展和科学技术发展的一般规律、人类认识和改造自然的一般方法以及科学技术在社会发展中的作用。科学技术方法论作为自然辩证法的一个有机的组成部分,对我们正确的学习理论知识有着重要的指导作用。[1]作为计算机专业,软件工程是一门非常重要的学科,是工程化方法运用较多的学科,最能体现出科技方法论的指导作用。本文以自然辩证法的观点认识和分析软件工程学科的发展历程,通过科技方法论和软件工程学科相结合的方式做探索性研究和预测,将有助于更加准确地掌握软件工程的发展目标。一、辩证唯物主义科学技术方法论的实践指导作用自然辩证法是马克思主义哲学的一个重要的组成部分,它包含了辩证唯物主义的自然观、辩证唯物主义的科学技术方法论和辩证唯物主义的科学技术观。其中,科学技术方法论是关于科学技术研究中常用的一般方法的理论,是关于科学研究和工程技术研究一般方法的性质、特点、内在联系和发展变化的理论体系。科技方法论对我们正确的学习各科理论知识有着重要的指导作用。首先,它提出了实践是一切科学问题的来源,这是“实践是检验真理的唯一标准”这一马克思主义理论在科学实践中的具体应用而得出的结论。一切问题的来源都是人们的生产实践和科学实践。其次,它强调了用系统的方法去分析问题和解决问题。当今的时代,科学已经发展为大科学,技术发展为高技术,科学技术比以往任何时候都更加贴近我们的生活,已经成为我们这个社会大系统的一个组成部分。这使我们必然的用系统的眼光来看问题。即使是单个的学科,由于研究的深入,它和其他学科的联系越来越密切,越发的表现出边沿性和交叉性,用系统的观点来研究问题也就成了必然的选择。[2]二、科技问题源于实践,社会需要使软件工程学科应运而生从1946年世界上出现第一台电子计算机以来,计算机技术发展十分迅速,并且在生产、科研和社会生活的其它领域得到广泛应用,计算机软件在计算机系统中的地位也越来越重要。随着人们需要的软件越来越多、越来越趋向大型化和复杂化,使软件开发变得越来越复杂,程序设计人员越来越满足不了需要,软件产品质量也变得难以满足各方面的需要,软件维护变得越来越困难,导致软件生产率低下,软件成本大幅上涨……“软件危机”就这样出现了!当社会需要某一种科学或技术时,这种需要就会变成一种强大的推动力量。软件危机的产生使软件专家认识到软件开发必须以新的方法作指导,原有的软件开发方法必须改变。于是,美国和西欧的一些计算机科学家于1967年、1968年在欧洲召开了两次NATO软件国际会议,提出“软件工程”则会以新名词。为满足社会需要,软件工程作为一门学科正式诞生。并用以指导计算机软件开发和2维护,采用工程的概念、原理、方法和技术来开发和维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护[3]。正是生产实践的需要推动了软件产业的发展,最终导致软件工程学科的产生。三、内外部矛盾共同作用——软件工程发展的内外部动力1.内部动力——原有软件开发理论与实践的矛盾在早期的软件开发过程中,形成了一系列的错误理论和方法,在实践中或多或少地采用了错误的方法和技术,使软件问题最终发展成软件危机。例如,对软件成本和进度估计不准确,软件质量缺乏保证,缺少必要的文档,软件风险管理重视度低,软件项目管理体系不健全等。因此,根据实际工作中出现的情况与原有软件开发理论之间的矛盾,计算机科学家们开始寻找一条新的软件开发途径。这种原有软件开发理论与实践的矛盾内在推动了软件工程的产生和发展。2.外部动力——计算机软件与硬件发展的不平衡[4]从科学技术发展的历史过程来看,各门学科之间的发展是不平衡的,这种不平衡推动了新学科的产生或旧学科的发展。在上世纪60年代末,由于微电子学技术的进步和硬件工程的发展,硬件生产取得了巨大的飞跃,计算机的运算速度成倍提高,质量也越来越好。然而,计算机软件成本却在逐年上升,而且质量没有保证。最终导致计算机科学家不得不去探讨新的软件生产方法,以适应计算机硬件发展的需要。可见,计算机软件与硬件发展的不平衡对软件工程的产生和发展起了巨大的推动作用,成为软件工程发展的外部动力。四、不断在技术创新中发展完善技术在工程化中不断地创新,技术自身也在历史的进程中向前发展。软件工程经过四十余年的发展,达到今天如此丰富的程度,关键在于技术创新。1.工程理念——软件工程概念上的创新在软件工程概念提出之前,凡是提到工程,接会被认为是传统的硬件建设,从来没有把软件开发这种性质的工作当作工程来看待。软件工程这一概念的提出,超越了人们对“工程”概念的传统认识,开创了一个新的研究领域,将软件开发工作提到了非常高的地位,为软件危机的解决开辟了道路。2.工程设计方法——软件开发方法[5]上的创新早期的程序编写过分追求技巧性,程序的清晰性、可读性和可理解性较差,使得软件难以维护。经研究发现,由顺序、选择、循环三种基本结构组成的程序具有良好的清晰性、可读性、可理解性和可维护性,而且任何一个程序都可以用这三种基本结构组成。在此基础上,形成了一种新的程序设计方法——结构化程序设计方法。其代表性程序设计语言——Pascal语言和C语言、结构化设计工具——盒图(N-S图)于70年代初问世。在此基础上,逐渐形成了包括结构化分析、结构化设计、结构化实现在内的完整结构化软件开发方法,对软件工程的发展产生了巨大影响。虽然C语言非常流行,但它并不是完美无缺的,它包含了低级语言的大量特点,但是不易理解,缺乏高级语言提供的自动检查完善支持。为解决上述问题,AT&T贝尔实验室的BjarneStroustrup在20世纪80年代初开发了C++语言。和C语言不同,C++具备了“面向对象编程”(OOP)的能力。C++语言与1995年正式问世的Java语言成为面向对象程序设计方法的代表性语言。OOP程序设计方法,使得客观世界的实体和计算机世界的实体结构基本一致。面向对象程序设计方法的提出时软件工程发展中的又一次重大的创新,这个创新使客观世界中的实体很自然地映射到计算机世界中来,符合人们的思维习惯,有利于增强软件中的模块独立性,极大有利于软件重用和大型软件的开发。3.软件重用(软件复用)[6]早期软件开发时,没开发一个软件,所有开发工作都要从头做起。因此,如果在开发新软件的过程中,能将过去开发其它软件用过的材料直接重复使用或简单修改后再使用,即可大大提高软件3开发效率,这样就出现了软件的重复使用。使用软件重用技术可以减少软件开发活动中大量的重复性工作,这样就能提高软件生产率,降低开发成本,缩短开发周期。同时,由于软构件大都经过严格的质量认证,并在实际运行环境中得到校验,因此,重用软构件有助于改善软件质量。此外,大量使用软构件,软件的灵活性和标准化程度也可望得到提高,构件组装模型、中间件技术显著地降低了软件开发成本、提高了软件开发效率。4.CMM——软件过程能力成熟度模型[7]在软件开发实践中证明,采用先进的开发技术和开发工具后,许多软件开发组织的软件生产率和软件质量仍然存在问题,经过人们的考察发现,问题的关键在于“管理”。在无规则和混乱的管理下,先进的开发技术和开发工具并不能发挥作用。于是,美国卡内基梅隆大学软件工程研究所在20世纪80年代末建立了CMM(软件过程能力成熟度模型),要求人们在开发软件时不是单纯地考虑开发技术和开发工具,还要考虑软件过程管理。CMM将能力成熟度定义为5个等级:初始级、可重复级、已定义级、已管理级和优化级,给出了评价软件机构能力的标准。通过建立CMM,帮助软件开发机构建立一个有规律的、成熟的软件过程,使其软件过程能力得到质的飞跃。5.UML——统一建模语言[8]随着面向对象技术的发展,出现了许多面向对象分析和设计(OOA/OOD)方法,由于分析和设计方法各不相同,给使用者造成巨大不便。1996年,在Booch、Rambaugh和Jocobson三人共同努力下,发布了UML统一建模语言。UML的发布,又是一次重要的创新,这种构建模型的形式化语言,综合了各种面向对象分析和设计方法的优点,形成了统一的面向对象分析和设计方法,进一步推动了面向对象技术的发展。6.敏捷方法与极限编程[9]传统的软件开发方法操作过程复杂繁琐,没有发挥开发团队中每个人的创造力,没有注意到开发团队中人与人相互沟通所产生的巨大效益,轻视与用户的亲密合作,缺乏迭代控制和风险管理,很难提高软件的生产率。2001年,美国犹他州城里敏捷联盟,发布了敏捷软件开发宣言,提出敏捷软件开发方法,重视适应变动和以人为本的核心理念,是软件开发方法的一次重要创新。其中,极限编程XP(eXtremeProgramming)就是敏捷方法的典型代表,将开发过程分为计划、设计、编码和测试四个阶段,强调沟通、反馈、简单、勇气4条核心价值,在许多中小型软件项目开发中得到令人满意的结果。7.分布式计算技术[10]计算模式的发展经历了中央主机模式、客户机/服务器模式以及分布式计算模式。其中,分布式计算是近年新提出的一种计算方式。所谓分布式计算就是由两个或多个软件互相共享信息,这些软件既可以在同一台计算机上运行,也可以在通过网络连接起来的多台计算机上运行。分布式计算技术已经成为计算技术的主导,它将对软件工程技术和软件产业的发展带来深刻影响。五、用发展的眼光看待软件工程学科发展趋势马克思主义唯物辩证法的发展观告诉我们,整个世界是无限发展的,要用发展的眼光看待事物的发展趋势,了解过去,观察现在,预测未来。软件工程学科发展趋势主要有以下几点:1.构件化由于计算能力向服务器端的快速集中,提供高并行计算能力和可用性的中间件技术被广泛应用,甚至已经成为构建大型软件系统的必选项,软件工程的构件化趋势越来越明显。2.迭代、敏捷,渐成标准随着软件交付周期的日益加快,迭代化软件开发已经成为大多数软件开发团队的必选项。但是迭代对整个团队的需求、架构、协同及测试能力都提出了更高的要求,敏捷开发过程、CMM能力成熟度模型的应用将会使软件开发渐成标准。3.持续集成,更加智能4持续集成式保证迭代化开发质量的主要方式,通过持续集成可以利用自动化的方式来尽量自动地、尽早保证代码质量。随着人工智能(AI)与软件工程技术相结合,其二者相互作用终将导致新一代软件开发日趋智能。4.产业化,全球化21世纪我们进入了一个新的纪元——全球化3.0。全球化的世界必然带来全球化的交付模式。全球化软件协作产业的一个重要驱动来自于软件外包业的发展。外包从最初的再印度公司购买廉价的劳动力,到今天在全球全面展开;从最初的以使用海外更加廉价的劳动力为目的,到今天的有效使用海外更多人才和领先技术;从最初的技术编程为主的外包,到今天的咨询、BPO、SOA和基础设施的全面外包;从企业最初的武术战略外包供应商,到今天建立3至5家战略性外包供应商,我们不难看到产业化外包和全球化交付正在成为软件工程发展的新方式。[11]六、结束语总之,软件工程学科的总体发展目标是不断在实践中利用各种先进的知识和工具,加强自身理论研究和技术创新,从根本上克服软件危机,逐步实现软件开发的构件化、标准化、智能化和全球化。相信我国的软件产业会抓住知识经济时代的机遇,成为带动我国经济技术增长的龙头产业。参考文献[1]徐治立,田大山等.自然辩证法概论[M].北京:北京航空航天大学出版社,2008.[2]葛伟丽.计算机语言发展和自然辩证法[J].科技资讯,2008(36).[3]张海藩.软件工程导论