自20世纪70年代人们提出“软件危机”(Software Crisis)以来,软件工程的发展已经经历了三十多个春秋。对于一门学科而言,30年不算短也并不算长。
在三十多年的时间里,软件工程获得了迅速的发展,软件工程的研究内容得到了极大的丰富,软件工程的分支如雨后春笋般不断涌现、蓬勃发展。特别是20世纪90年代以来,在管理科学领域新观念不断兴起的大背景下,软件工程作为一门学科,其新兴子学科不断涌现。全面质量管理(Total Quality Management)的浪潮推进了软件质量管理(Software Quality Management)的发展。流程观念的兴起促成了软件过程管理(Software Process Management)在当今IT业界方兴未艾的局面。受企业业务流程再造(Business process reengineering)、结构重组(Reorganization)等管理科学中“Re”浪潮的影响,新兴的软件再造工程(Software Reengineering)也应运而生。体现于敏捷组织(Agile Organization)和敏捷制造(Agile Production),这些新生事物中的敏捷思路指引了软件工程中敏捷模式(Agile Model)的发展。
当还原论逐渐退出历史舞台而系统论粉墨登场之时,学界已经逐步确立了复杂的、非线性的世界图景,受其启发,软件工程领域也逐渐开始了对其思维方法的逻辑起点进行扬弃的尝试:自适应软件开发方法(Adaptive Software Development),基于代理的计算方法(Agent Based Computing)都在呼唤着软件工程领域另一场革命性变革的到来。与此同时,软件行业也在不断吸取系统工程中一些定量的方法,越来越多的系统分析与设计方法被运用到软件工程的实践之中。柔性管理的浪潮也对软件工程的发展起到了深远的影响,软件工程由传统的重视软件质量的重载软件过程模型逐渐过渡到以人为本的轻载软件工程模型与之鼎立的状态。
传统的瀑布(Waterfall)软件过程模型中的各分支在这一时期也得到长足发展,具体表现在其分类逐渐细化,其规模不断庞大。瀑布模型中的可行性分析环节中的经济可行性分析已经发展成为一门独立学科软件经济学而备受业界重视。传统的需求分析从软件开发过程的一个主要环节发展成独立需求工程、领域分析等各类专题。传统的由概要设计、详细设计组成的软件设计环节也逐渐分类细化为架构设计、数据设计、接口设计、流程设计、功能设计等门类丰富的设计类别;设计的描述方式也从传统的简单的图表、伪码描述转变到各类严格而灵活统一的建模语言的描述,其中较为典型的是统一建模语言UML(Unified Modeling Language)。
此外软件设计环节也涌现出大量新的技术或方法:构件技术为软件的可复用、可移植提供了可能;模式、框架的兴起为设计经验的复用提供了可能;正向工程的发展为设计向软件构造的转化带来了极大的方便。软件的构造也从单纯的软件编码发展到包括编码技术、调试技术、集成开发环境的研究、GUI与功能分离等各项专题研究在内的崭新阶段。测试技术的内容已经不仅仅是传统的白盒、黑盒方法,它已经发展为包括一套完善的测试理念、方法、过程、工具、人员组织等众多内容的完整系统,这一点又较为明显地体现在:最近测试先行理念的兴起,测试自动化工具的普及。这些测试工具也不仅仅只是功能性测试工具,门类众多的非功能性测试工具在这一阶段也都获得了巨大的发展,包括并发测试工具,界面自动测试工具,压力测试工具等。软件的维护也不仅仅是传统的修正性、适应性、完善性维护等单薄的内容,它已经发展成为包括遗产系统(Legacy System)的继承话题在内的内涵丰富的完整体系。
软件工程的理论与方法在这一时期也取得了革命性的突破。面向对象的分析设计方法逐渐取代了传统的结构化分析设计方法,成为当前软件开发方法的主流。而正当人们沉浸于面向对象方法的浪潮中时,在新世纪初,基于代理(Agent)的思维方法与计算方法似乎又在酝酿计算机界的另一场变革;计算机辅助软件工程的研究,已经从理论逐渐走向实践,它与新的软件工程学科分支如需求工程(Requirements Engineering)、领域工程(Domain Engineering)、正向工程(Forward Engineering)、反向工程(Reverse Engineering)、基于构件的软件工程(Component Based Software Engineering)相得益彰,极大地推进了软件工程方法论、软件工程辅助工具的丰富;组织理论、团队理论、知识管理论、质量管理论、过程管理论、内容管理论等都为软件工程在新世纪的发展提供了新的动力。
在这三十多年的时间内,软件工程的研究也不仅仅局限于计算机技术、管理科学的研究范围,在软件工程与社会科学及人文科学的交叉领域也取得了一定的理论与实践成果,为工程实践提供了很多实际的参考价值。软件工程与人体工程学、技术美学的相结合导致了人机交互研究的兴起(对人机交互的研究在国外已经受到极大的重视,但在国内这方面作得还远远不够)。此外在软件工程领域,人们也越来越意识到软件工程中的知识产权问题,软件开发过程中开发人员的心理因素对软件开发的影响问题,软件工程的相关职业道德的建立等问题。这些问题的研究对促进软件工程健康发展起到了积极的作用。
然而30年的时间相对于有着上百年历史传统的自然学科而言,也实在太短。因此,从一定程度上说,相对于当代复杂的市场环境而言,软件工程充其量不过是羽翼尚未丰满、血气尚未刚强的少年。它的骨架已经基本形成,但血气还需充实,骨肉还需健壮。因此它还有充分发展的必要,这种发展一方面是对一些不良习性的改正,尚待完善的习性的改良;另一面是积极培养未知的良好习性的形成。同时,软件工程在新世纪也有着充分的发展空间。经济全球化是不可避免的趋势,而经济全球化先决条件是信息在全球范围内的共享与交流,形形色色的软件产品,包括企业内部各类管理信息系统、辅助决策系统、企业对外的用于各种目的的Web系统,无疑是当今世界信息的最大载体。如何分析、设计、实现这些日益复杂的软件系统,正是软件工程要解决的主要问题。因而,全球化浪潮在激励软件行业的不断发展的同时,也为其茁壮成长提供了丰富的养分。所以软件行业必将在未来一段时间内获得巨大发展。
在软件工程发展的时代背景下,国内的软件工程也有了长足的发展。这一点尤为明显地体现在我们手头可以容易地接触到大量的与软件工程相关的书籍。从数量上来说,国内软件工程相关书籍的确已经相当丰富,但质量上,总体而言还存在着一定的不足。
一方面,软件工程发展相当迅速,新的理论方法不断涌现,而国内的很多教材讲授的还是20世纪90年代之前的软件工程理论与方法。显然已经跟不上形势发展的需要。因而国内的软件工程读物很有必要推陈出新以不断向读者补给新鲜血液。
国内也有众多针对国外最新的软件工程理论方法做不同程度介绍的书籍,但这些书籍总的来说都侧重于软件工程的某些方面,读者很难通过阅读这类有限的书籍达到对软件工程宏观的把握。很多书籍对某些方面知识点的讲解是很透彻的,比如介绍使用UML的书籍,读者读完后,对UML的细节可能有所掌握,但读者可能很难将其在整个软件工程学科中加以定位。也就是说读者在阅读了这类读物后,可能只见树木,不见森林。因而很有必要对这些分散的知识点加以整合,从宏观层次上帮助读者建立整个软件工程的知识体系结构。