图书前言

计算机语言C++的发明人Bjarne Stroustrup这样说道: “人类的文明运行于软件之上。”在过去的半个世纪里,软件已成为构建我们这个世界的深入渗透的人工产品。以前,软件工程师致力于如何操纵计算机,使其正常工作并正确地解决问题,当时软件的核心是数据的组织和算法的实现。如今,越来越多的底层工作,像内存管理、网络通信等,都已实现自动化了,或者可以用更少的代码来重用。这样,软件工程师就无须在机器代码中埋头苦干,而是使用高级编程语言、集成开发工具把更多的问题留给软件本身。随着软件的功能越来越强,使用越来越方便,规模和复杂程度越来越高,无论是大型的电信网络管理系统,还是大规模应用的互联网架构,以及企业级的ERP软件,构建软件系统比起以前更加困难。

解决这些复杂、困难问题的关键,正是软件设计和体系结构。

作为软件开发的核心活动之一,软件设计对开发出满足需求的高质量软件起关键作用。软件设计需要综合考虑软件系统的各种约束条件,并给出相应方案,因此,及早发现软件设计中存在的错误将极大地减少修复成本、维护成本。程序设计方法的快速发展和应用程序的大量部署,使现有计算机系统内部的代码构成差异很大。须知,应用软件市场竞争的加剧对更快的用户需求交付、更多的系统功能、更可靠的性能要求越来越高,于是就有了复用现有的系统代码、代码外包,以及采购商品化构件进行系统集成。在这种大环境下,很多软件工程师都不能很舒服地采用一种程序设计方法,从头开始,按照详细设计书进行开发,而是从阅读、维护或迁移各种已有的系统代码、外包代码进行程序设计。各种程序设计方法隐藏在不同来源的代码中,要理解、复用、改造这些代码,软件工程师应全面了解各种方法的优点和局限,因为不存在一种放之四海而皆准的程序设计方法,各种方法都有其长处和短处。例如,更抽象和高级的方法,在带来开发效率提高的同时,往往会导致执行效率的降低; 更低级和离硬件近的方法,尽管可能学习时间短,但是适应面受到了限制。适合的才是最好的,软件工程师需要根据自己的情况,分析、选择适合的程序设计方法。

软件如同建筑,它的设计不能脱离实用价值。今天,“软件架构师”这个在软件领域负责软件设计、分析、处理来自不同涉众、不同关注点和需求关系的职位,已经被普遍认为是软件开发团队的核心。在软件工程方法中,需求和设计之间存在着一条很难逾越的鸿沟,从而很难有效地将需求转换为相应的设计,软件体系结构的出现,在软件需求与软件设计之间架起了一座“桥梁”,由此实现了软件系统的结构和需求向实现的平坦过渡。软件体系结构是软件架构师洞见系统内部结构、规律、原则、逻辑的过程。作为系统整体设计的刻画,软件体系结构包括全局组织与控制结构,构件间通信、同步、数据访问的协议,设计元素间的功能分配,物理分布,设计元素集成,伸缩性和性能,设计选择等。软件项目开发首先需要一个健壮、优雅、灵活、易维护的软件体系结构。正因为如此,软件体系结构讨论如何快速、可靠地复用构件构造系统的方式,着重于软件系统自身的整体结构和构件间的互联,主要包括软件体系结构的原理和风格、软件体系结构的描述和规约、特定领域的软件体系结构、基于软件体系结构的构件组装机制等。

全书由秦航任主编,第1、14章由秦航编写,第2章由包小军编写,第3、9章由夏浩波编写,第4、6章由邱林编写,第5、7、11章由张健编写,第8、10章由徐杏芳编写,第12、13章由胡森森编写,付盈参与了第5、9、13章的编写。全书由秦航负责统稿,由王同喜主审。借此机会,作者谨向为本书付出辛勤劳动和智慧的老师和同仁表示诚挚的谢意。

本书可作为高等院校“软件设计与体系结构”课程的教材或教学参考书,也可供有一定实际经验的软件工程人员和需要开发应用软件的广大计算机用户阅读参考。由于作者水平有限,书中不当与错误之处在所难免,敬请读者和专家提出宝贵的意见,以帮助本书不断地改进和完善。

编者2013年10月