论文部分内容阅读
20世纪六七十年代,计算机硬件技术有了很大的发展,为计算机的广泛应用创造了条件,并要求软件与之相适应。当时的软件生产具有个体化、作坊式特点,开发工具落后,开发平台单一,程序设计语言功能差。尤其是软件维护工作,耗费大量的人力、物力和计算机资源,许多程序的个体化特性使得它们无法修改和维护。有的干脆废弃原有系统不用,从头编写新软件。与此同时,软件的规模越来越大,结构越来越复杂,软件管理和维护困难,开发费用不断增加。这种软件开发技术、开发工具和生产方式落后的状况与计算机应用迅速普及和对软件的需求日益增加形成了尖锐的矛盾,由此而产生了“软件危机”。软件危机的产生使计算机软件专家认识到软件开发必须以新的方法作指导,原有的软件开发方法必须改变,他们决定把工程技术的思想引入软件开发领域,使软件开发走上工程学科的途径,以摆脱日益严重的软件危机。于是,美国和西欧的一些科学家在1968年的NATO(北大西洋公约组织)会议上第一次提出了“软件工程”这个名词,从此,软件工程作为一门学科正式诞生,人们开始了软件工程的研究。
一、软件工程的成型与发展历程
软件工程的初步成型首先是从软件工程过程开始
的。为获得高质量的软件产品,软件工程过程必须科学、合理。这就涉及到软件生命周期的描述采用何种模型的问题。
1970年,Royce提出了瀑布模型,一直到20世纪80年代末,瀑布模型都是被广泛采用的生命周期模型。后来,又相继推出快速原型模型、快速应用开发模型、渐增模型、螺旋模型、喷泉模型和智能模型等。概括地说,软件生命周期由软件定义、软件开发和运行维护等3个时期组成,每个时期又进一步划分成若干个阶段。生命周期模型规定了把生命周期划分成的阶段及各个阶段的执行顺序。但各种模型均有不同的长处和局限性。
20世纪60年代末,K·W.Dijkstra提出了结构化程序设计的概念,为程序设计方法学奠定了基础;20世纪70年代末,美国的E.Youdon提出结构化分析方法,指出分析和设计比编码更重要。随后,结构化方法学开始形成并逐步规范。这一技术当时曾被软件界看成克服“软件危机”的灵丹妙药。而人们在实践中发现,面对大型软件系统,用结构化方法,系统的重用性、稳定性、扩充性都难以实现。20世纪70年代,面向对象方法应运而生,给软件工程增添了活力。这时,软件开发的两种基本思路和方法已经形成,即一种是面向过程(PO),另一种是面向对象(OO)。PO趋向于计算机世界的物理实现;OO则更接近于人们的认识习惯。虽然面向对象技术被普遍认为是一种好的开发工具,但是在它诞生之后的相当长一段时间里却停留在实验室内,很少有人采用此技术来开发大型软件,直到20世纪80年代中后期,一些学者和工程人士才注意到像Smalltalk和C++这样的语言。以后出现了许多应用面向对象技术的成功案例,但也不乏失败者。
软件项目的分析设计需要建立模型,建模需要一定的工具或语言支撑。从1989年到1994年间,面向对象建模语言的数量从不到10种增加到50余种。虽然每种建模语言的创造者都在努力推广自己的方法,并在实践中不断完善,但是面向对象方法的用户并不了解不同建模语言的优缺点及它们之间的差异,面对众多的建模语言很难在实际工作中选择最适合其应用特点的建模语言,于是人们呼唤一种统一的建模语言。1994年开始,Booch和Rumbaugh开始致力于统一建模语言的研究,1995年,OOSE方法的创始人Jacobson也开始从事这项工作。经过3个人的共同努力,1996年推出了统一建模语言(UML)。对象管理组织OMG对UML的研究和应用给予了极大的支持,并在1997年11月将几经修改的UML正式作为基于面向对象技术的标准建模语言。此后,UML一直没有停止前进的步伐,不断推出新的版本,目前已成为可视化建模语言事实上的工业标准。
1990年开始在基于面向对象技术的基础上发展了构件技术,它丰富了重用手段和方法,逐渐成为研究的热点。还有基于净室技术、敏捷技术、重构技术、人工智能技术的一些新型软件工程方法也相继进入研究及应用领域。1995年前后,互联网和图像化接口技术使软件工程发展到一个新水平。随着软件系统规模的扩大和功能的扩展,软件复杂程度也不断增长,数据和应用的动态性与分布性的增强也要求软件不仅要有被动响应信息需求的能力,而且能具备某种程度的智能,主动预测、适应甚至积极地寻找途径以支持用户的需求,能自动合作以完成更加复杂的功能。Agent技术走进软件工程领域,使该类问题的解决有了新的希望。在软件工程的发展历程中,特别值得一提的是计算机辅助软件工程(CASE)。CASE的研究和应用对软件工程过程自动化及其未来发展有着重要意义。在基于网络环境的软件工程开发平台中,CASE技术将越来越重要。
二、软件工程学科的基本确立
如果从学科意义上考察,软件工程在当时还有许多方法理论和实践问题未得到广泛和统一的认识,况且软件工程的定义、原理、方法等诸多基本问题都存在争议,研究软件工程的专家学者陆续提出了上百条关于软件工程的定义、准则或”信条”。1983年,IEEE给软件工程下了定义,即“软件工程是开发、运行、维护和修复软件的系统方法”。这个定义高度概括了软件工程具有的系统性。Fairly则从学科内涵的角度认为:“软件工程学是为了在成本限额以内按时完成开发和修改软件产品所需要的系统开发和维护技术及管理学科。”FritzBauer则强调:”软件工程是为了经济地获得可靠的且能在实际机器上有效地运行的软件而建立和使用的完善的工程化原则。”
B.W.Boehm综合这些学者们的意见并总结了TRW公司多年开发软件的经验,于1983年提出了软件工程的7条基本原理:用分阶段的生命周期计划严格管理;坚持进行阶段评审;实行严格的产品控制;采用现代程序设计技术;结果应能清楚地审查;开发小组的人员应该少而精;承认不断改进软件工程实践的必要性。这些基本原理是确保软件产品质量和开发效率的原理的最小集合,在此之前提出的关于软件工程原理的各种表述都蕴涵在这些原理之中或由之派生。
针对关于软件工程的各种论述,1993年IEEE进一步给出了一个更全面的定义。软件工程是:①把系统化的、规范的、可度量的途径应用于软件开发、运行和维护的过程,也就是把工程化应用于软件中;②研究①中提到的途径。
软件工程学广泛地研究软件开发、管理与维护中使用的原则、方法和技术,提出了关于开发理论、开发方法、开发工具等方面的一系列研究课题。因此,软件工程学就是研究“如何借助科学的理论和现代工程技 术来指导软件的开发,从而达到用较少的投资获得高质量的、可靠的软件的目的”的科学。
软件工程学的发展可以分为4个时期:,程序设计时期、软件时期、软件工程时期、后软件工程时期。现在是处于软件工程时期,至于后软件工程时期,人们可以设想会出现许多比现在更为人性化、科学化、高效化和智能化的软件开发环境和工具,”人件”;“智件”及其他先进的观念及方法将指导“软件”开发的全过程,人们在不断探索软件开发的新技术和新方法。总之,软件工程学还是一个处于发展中的学科。
三、软件工程管理的规范化和标准化
所谓软件工程管理,就是从工程学角度出发,对软件工程的项目范围、项目周期、产品质量、知识资源、人力资源和项目成本等六大要素进行管理,克服软件危机,规避软件风险,提高软件开发效益和质量,降低软件开发成本。通常意义上的过程管理是软件工程管理的主要内容之一。完整意义上的软件工程应该包括4方面内容,即方法与技术、工具与环境、标准与规范、组织与管理。
20世纪70年代中期,软件工程管理引起广泛关注。20世纪80年代是软件产业化和软件工程规范化的开端。由于计算机硬件及其外部设备的迅猛发展和应用,软件很快发展为独立的产业。软件开发逐步走入专业化、规范化的轨道。程序设计的风格、习惯及其规范和标准也成为软件工程研究的范围。
能力成熟度模型CMM的推出是软件工程发展史上的重大事件。这是软件工程管理研究的结果。美国CarnegieMellon大学软件工程研究所(CMU/SEl)主持研究与开发的CMM/PSP/TSP技术,为软件工程管理开辟了一条新的途径。
四、启示与总结
纵观软件工程的发展历史,我们可以得到以下启
1.研究工程理论和实践需要有系统科学的思想
软件工程的技术和方法贯穿着系统科学的基本思想。系统科学是一门探索系统的存在方式和运动变化规律的学问,是对系统本质的理性认识,是人们认识客观世界的一个知识体系。软件工程中的一些重要方法,如结构化方法、面向对象方法等都沿用了系统科学的思想方法。软件工程的发展趋势要求在集成和发展现有理论和方法的基础上继续深入研究其支撑理论体系,并建立新的理论基础。从系统论和工程系统论的角度进行研究有助于软件工程重大理论和实践问题的突破。
2.软件工程管理任重道远
大量事实表明,为了解决软件危机,既要有技术措施(方法、工具),又要有必要的组织管理措施。软件工程需要从管理和技术两方面研究如何科学、正确、合理地开发和维护软件。现有的软件项目开发大都还属于粗放型阶段,需要遵循软件工程的思想和方法向产业化和精细化的方向发展。软件工程过程包含一系列软件工程活动,如软件规格说明、软件开发、软件确认、软件演进等。研究软件过程的可视化管理和定量管理以及科学适用的经济分析技术是业内人土面临的迫切任务。
3.软件工程的新技术新方法将不断涌现
软件工程的发展历程告诉我们,科学技术的发展是没有止境的。软件工程的发展历史本身就是一个不断提出问题又不断解决问题的过程。从软件工程开发方法的进化来看,人们先是从面向一大堆数字信息(DO)到面向过程(PO),再从面向过程提升到面向对象(00),将来有可能从面向对象演进到面向事实(FO)。这一漫长的过程必然导致大量新技术新方法的不断涌现,从而推动软件工程的长足进步。
参考文献
1 仲萃豪.软件工程的成长之路.计算机世界,2000—1—3
2 李春梅等.面向21世纪的软件工程.昆明理工大学学,2001,2(26)
3 刘正高.软件工程化发展回顾与热点综述.质量与可靠性,2002,99(3):25—29
4 Roger S.Pressman.Software Engineering——A Practition·er’s Approach,Fourth Edition,1997
5 Broy·M,Software technology—models methods andscientific foundations.Information and’Software Tech-nology,1999,41(14):947—950
6 张海藩.软件工程.北京:人民邮电出版社,2002
一、软件工程的成型与发展历程
软件工程的初步成型首先是从软件工程过程开始
的。为获得高质量的软件产品,软件工程过程必须科学、合理。这就涉及到软件生命周期的描述采用何种模型的问题。
1970年,Royce提出了瀑布模型,一直到20世纪80年代末,瀑布模型都是被广泛采用的生命周期模型。后来,又相继推出快速原型模型、快速应用开发模型、渐增模型、螺旋模型、喷泉模型和智能模型等。概括地说,软件生命周期由软件定义、软件开发和运行维护等3个时期组成,每个时期又进一步划分成若干个阶段。生命周期模型规定了把生命周期划分成的阶段及各个阶段的执行顺序。但各种模型均有不同的长处和局限性。
20世纪60年代末,K·W.Dijkstra提出了结构化程序设计的概念,为程序设计方法学奠定了基础;20世纪70年代末,美国的E.Youdon提出结构化分析方法,指出分析和设计比编码更重要。随后,结构化方法学开始形成并逐步规范。这一技术当时曾被软件界看成克服“软件危机”的灵丹妙药。而人们在实践中发现,面对大型软件系统,用结构化方法,系统的重用性、稳定性、扩充性都难以实现。20世纪70年代,面向对象方法应运而生,给软件工程增添了活力。这时,软件开发的两种基本思路和方法已经形成,即一种是面向过程(PO),另一种是面向对象(OO)。PO趋向于计算机世界的物理实现;OO则更接近于人们的认识习惯。虽然面向对象技术被普遍认为是一种好的开发工具,但是在它诞生之后的相当长一段时间里却停留在实验室内,很少有人采用此技术来开发大型软件,直到20世纪80年代中后期,一些学者和工程人士才注意到像Smalltalk和C++这样的语言。以后出现了许多应用面向对象技术的成功案例,但也不乏失败者。
软件项目的分析设计需要建立模型,建模需要一定的工具或语言支撑。从1989年到1994年间,面向对象建模语言的数量从不到10种增加到50余种。虽然每种建模语言的创造者都在努力推广自己的方法,并在实践中不断完善,但是面向对象方法的用户并不了解不同建模语言的优缺点及它们之间的差异,面对众多的建模语言很难在实际工作中选择最适合其应用特点的建模语言,于是人们呼唤一种统一的建模语言。1994年开始,Booch和Rumbaugh开始致力于统一建模语言的研究,1995年,OOSE方法的创始人Jacobson也开始从事这项工作。经过3个人的共同努力,1996年推出了统一建模语言(UML)。对象管理组织OMG对UML的研究和应用给予了极大的支持,并在1997年11月将几经修改的UML正式作为基于面向对象技术的标准建模语言。此后,UML一直没有停止前进的步伐,不断推出新的版本,目前已成为可视化建模语言事实上的工业标准。
1990年开始在基于面向对象技术的基础上发展了构件技术,它丰富了重用手段和方法,逐渐成为研究的热点。还有基于净室技术、敏捷技术、重构技术、人工智能技术的一些新型软件工程方法也相继进入研究及应用领域。1995年前后,互联网和图像化接口技术使软件工程发展到一个新水平。随着软件系统规模的扩大和功能的扩展,软件复杂程度也不断增长,数据和应用的动态性与分布性的增强也要求软件不仅要有被动响应信息需求的能力,而且能具备某种程度的智能,主动预测、适应甚至积极地寻找途径以支持用户的需求,能自动合作以完成更加复杂的功能。Agent技术走进软件工程领域,使该类问题的解决有了新的希望。在软件工程的发展历程中,特别值得一提的是计算机辅助软件工程(CASE)。CASE的研究和应用对软件工程过程自动化及其未来发展有着重要意义。在基于网络环境的软件工程开发平台中,CASE技术将越来越重要。
二、软件工程学科的基本确立
如果从学科意义上考察,软件工程在当时还有许多方法理论和实践问题未得到广泛和统一的认识,况且软件工程的定义、原理、方法等诸多基本问题都存在争议,研究软件工程的专家学者陆续提出了上百条关于软件工程的定义、准则或”信条”。1983年,IEEE给软件工程下了定义,即“软件工程是开发、运行、维护和修复软件的系统方法”。这个定义高度概括了软件工程具有的系统性。Fairly则从学科内涵的角度认为:“软件工程学是为了在成本限额以内按时完成开发和修改软件产品所需要的系统开发和维护技术及管理学科。”FritzBauer则强调:”软件工程是为了经济地获得可靠的且能在实际机器上有效地运行的软件而建立和使用的完善的工程化原则。”
B.W.Boehm综合这些学者们的意见并总结了TRW公司多年开发软件的经验,于1983年提出了软件工程的7条基本原理:用分阶段的生命周期计划严格管理;坚持进行阶段评审;实行严格的产品控制;采用现代程序设计技术;结果应能清楚地审查;开发小组的人员应该少而精;承认不断改进软件工程实践的必要性。这些基本原理是确保软件产品质量和开发效率的原理的最小集合,在此之前提出的关于软件工程原理的各种表述都蕴涵在这些原理之中或由之派生。
针对关于软件工程的各种论述,1993年IEEE进一步给出了一个更全面的定义。软件工程是:①把系统化的、规范的、可度量的途径应用于软件开发、运行和维护的过程,也就是把工程化应用于软件中;②研究①中提到的途径。
软件工程学广泛地研究软件开发、管理与维护中使用的原则、方法和技术,提出了关于开发理论、开发方法、开发工具等方面的一系列研究课题。因此,软件工程学就是研究“如何借助科学的理论和现代工程技 术来指导软件的开发,从而达到用较少的投资获得高质量的、可靠的软件的目的”的科学。
软件工程学的发展可以分为4个时期:,程序设计时期、软件时期、软件工程时期、后软件工程时期。现在是处于软件工程时期,至于后软件工程时期,人们可以设想会出现许多比现在更为人性化、科学化、高效化和智能化的软件开发环境和工具,”人件”;“智件”及其他先进的观念及方法将指导“软件”开发的全过程,人们在不断探索软件开发的新技术和新方法。总之,软件工程学还是一个处于发展中的学科。
三、软件工程管理的规范化和标准化
所谓软件工程管理,就是从工程学角度出发,对软件工程的项目范围、项目周期、产品质量、知识资源、人力资源和项目成本等六大要素进行管理,克服软件危机,规避软件风险,提高软件开发效益和质量,降低软件开发成本。通常意义上的过程管理是软件工程管理的主要内容之一。完整意义上的软件工程应该包括4方面内容,即方法与技术、工具与环境、标准与规范、组织与管理。
20世纪70年代中期,软件工程管理引起广泛关注。20世纪80年代是软件产业化和软件工程规范化的开端。由于计算机硬件及其外部设备的迅猛发展和应用,软件很快发展为独立的产业。软件开发逐步走入专业化、规范化的轨道。程序设计的风格、习惯及其规范和标准也成为软件工程研究的范围。
能力成熟度模型CMM的推出是软件工程发展史上的重大事件。这是软件工程管理研究的结果。美国CarnegieMellon大学软件工程研究所(CMU/SEl)主持研究与开发的CMM/PSP/TSP技术,为软件工程管理开辟了一条新的途径。
四、启示与总结
纵观软件工程的发展历史,我们可以得到以下启
1.研究工程理论和实践需要有系统科学的思想
软件工程的技术和方法贯穿着系统科学的基本思想。系统科学是一门探索系统的存在方式和运动变化规律的学问,是对系统本质的理性认识,是人们认识客观世界的一个知识体系。软件工程中的一些重要方法,如结构化方法、面向对象方法等都沿用了系统科学的思想方法。软件工程的发展趋势要求在集成和发展现有理论和方法的基础上继续深入研究其支撑理论体系,并建立新的理论基础。从系统论和工程系统论的角度进行研究有助于软件工程重大理论和实践问题的突破。
2.软件工程管理任重道远
大量事实表明,为了解决软件危机,既要有技术措施(方法、工具),又要有必要的组织管理措施。软件工程需要从管理和技术两方面研究如何科学、正确、合理地开发和维护软件。现有的软件项目开发大都还属于粗放型阶段,需要遵循软件工程的思想和方法向产业化和精细化的方向发展。软件工程过程包含一系列软件工程活动,如软件规格说明、软件开发、软件确认、软件演进等。研究软件过程的可视化管理和定量管理以及科学适用的经济分析技术是业内人土面临的迫切任务。
3.软件工程的新技术新方法将不断涌现
软件工程的发展历程告诉我们,科学技术的发展是没有止境的。软件工程的发展历史本身就是一个不断提出问题又不断解决问题的过程。从软件工程开发方法的进化来看,人们先是从面向一大堆数字信息(DO)到面向过程(PO),再从面向过程提升到面向对象(00),将来有可能从面向对象演进到面向事实(FO)。这一漫长的过程必然导致大量新技术新方法的不断涌现,从而推动软件工程的长足进步。
参考文献
1 仲萃豪.软件工程的成长之路.计算机世界,2000—1—3
2 李春梅等.面向21世纪的软件工程.昆明理工大学学,2001,2(26)
3 刘正高.软件工程化发展回顾与热点综述.质量与可靠性,2002,99(3):25—29
4 Roger S.Pressman.Software Engineering——A Practition·er’s Approach,Fourth Edition,1997
5 Broy·M,Software technology—models methods andscientific foundations.Information and’Software Tech-nology,1999,41(14):947—950
6 张海藩.软件工程.北京:人民邮电出版社,2002