《软件设计和体系结构/21世纪高等学校规划教材·软件工程》全面系统地讲述软件设计和体系结构的相关思想、理论和方法,并提供了来自业界的最新研究内容和进展。全书共包含14章,第1章是软件工程和软件设计概述,第2章至第14章讲述软件模型和描述、软件体系结构建模和UML、软件设计过程、软件体系结构风格、面向对象的软件设计方法、面向数据流的软件设计方法、用户界面分析与设计、设计模式、Web服务体系结构、基于分布构件的体系结构、软件体系结构评估、软件设计的进化、云计算的体系结构。
《软件设计和体系结构/21世纪高等学校规划教材·软件工程》条理清晰、语言流畅、通俗易懂,在内容组织上力求自然、合理、循序渐进,并提供了丰富的实例和实践要点,使读者更好地把握软件工程学科的特点,更容易理解所学的理论知识,掌握软件设计和体系结构的应用。
《软件设计和体系结构/21世纪高等学校规划教材·软件工程》可作为高等学校的软件工程专业、计算机应用专业和相关专业的教材,并可作为其他各类软件工程技术人员的参考书。
计算机语言C++的发明人Bjarne Stroustrup这样说道: “人类的文明运行于软件之上。”在过去的半个世纪里,软件已成为构建我们这个世界的深入渗透的人工产品。以前,软件工程师致力于如何操纵计算机,使其正常工作并正确地解决问题,当时软件的核心是数据的组织和算法的实现。如今,越来越多的底层工作,像内存管理、网络通信等,都已实现自动化了,或者可以用更少的代码来重用。这样,软件工程师就无须在机器代码中埋头苦干,而是使用高级编程语言、集成开发工具把更多的问题留给软件本身。随着软件的功能越来越强,使用越来越方便,规模和复杂程度越来越高,无论是大型的电信网络管理系统,还是大规模应用的互联网架构,以及企业级的ERP软件,构建软件系统比起以前更加困难。
解决这些复杂、困难问题的关键,正是软件设计和体系结构。
作为软件开发的核心活动之一,软件设计对开发出满足需求的高质量软件起关键作用。软件设计需要综合考虑软件系统的各种约束条件,并给出相应方案,因此,及早发现软件设计中存在的错误将极大地减少修复成本、维护成本。程序设计方法的快速发展和应用程序的大量部署,使现有计算机系统内部的代码构成差异很大。须知,应用软件市场竞争的加剧对更快的用户需求交付、更多的系统功能、更可靠的性能要求越来越高,于是就有了复用现有的系统代码、代码外包,以及采购商品化构件进行系统集成。在这种大环境下,很多软件工程师都不能很舒服地采用一种程序设计方法,从头开始,按照详细设计书进行开发,而是从阅读、维护或迁移各种已有的系统代码、外包代码进行程序设计。各种程序设计方法隐藏在不同来源的代码中,要理解、复用、改造这些代码,软件工程师应全面了解各种方法的优点和局限,因为不存在一种放之四海而皆准的程序设计方法,各种方法都有其长处和短处。例如,更抽象和高级的方法,在带来开发效率提高的同时,往往会导致执行效率的降低; 更低级和离硬件近的方法,尽管可能学习时间短,但是适应面受到了限制。适合的才是最好的,软件工程师需要根据自己的情况,分析、选择适合的程序设计方法。
软件如同建筑,它的设计不能脱离实用价值。今天,“软件架构师”这个在软件领域负责软件设计、分析、处理来自不同涉众、不同关注点和需求关系的职位,已经被普遍认为是软件开发团队的核心。在软件工程方法中,需求和设计之间存在着一条很难逾越的鸿沟,从而很难有效地将需求转换为相应的设计,软件体系结构的出现,在软件需求与软件设计之间架起了一座“桥梁”,由此实现了软件系统的结构和需求向实现的平坦过渡。软件体系结构是软件架构师洞见系统内部结构、规律、原则、逻辑的过程。作为系统整体设计的刻画,软件体系结构包括全局组织与控制结构,构件间通信、同步、数据访问的协议,设计元素间的功能分配,物理分布,设计元素集成,伸缩性和性能,设计选择等。软件项目开发首先需要一个健壮、优雅、灵活、易维护的软件体系结构。正因为如此,软件体系结构讨论如何快速、可靠地复用构件构造系统的方式,着重于软件系统自身的整体结构和构件间的互联,主要包括软件体系结构的原理和风格、软件体系结构的描述和规约、特定领域的软件体系结构、基于软件体系结构的构件组装机制等。
全书由秦航任主编,第1、14章由秦航编写,第2章由包小军编写,第3、9章由夏浩波编写,第4、6章由邱林编写,第5、7、11章由张健编写,第8、10章由徐杏芳编写,第12、13章由胡森森编写,付盈参与了第5、9、13章的编写。全书由秦航负责统稿,由王同喜主审。借此机会,作者谨向为本书付出辛勤劳动和智慧的老师和同仁表示诚挚的谢意。
本书可作为高等院校“软件设计与体系结构”课程的教材或教学参考书,也可供有一定实际经验的软件工程人员和需要开发应用软件的广大计算机用户阅读参考。由于作者水平有限,书中不当与错误之处在所难免,敬请读者和专家提出宝贵的意见,以帮助本书不断地改进和完善。
编者2013年10月
第1章 软件工程和软件设计概述
1.1 软件
1.1.1 软件的本质
1.1.2 软件神话
1.2 软件工程
1.2.1 软件工程基础知识
1.2.2 软件过程和软件工程实践
1.2.3 网络环境带来的影响
1.3 软件设计
1.3.1 软件工程中的设计
1.3.2 设计过程和设计质量
1.3.3 软件设计原则
1.4 软件体系结构
1.4.1 什么是软件体系结构
1.4.2 软件体系结构的内容 第1章 软件工程和软件设计概述
1.1 软件
1.1.1 软件的本质
1.1.2 软件神话
1.2 软件工程
1.2.1 软件工程基础知识
1.2.2 软件过程和软件工程实践
1.2.3 网络环境带来的影响
1.3 软件设计
1.3.1 软件工程中的设计
1.3.2 设计过程和设计质量
1.3.3 软件设计原则
1.4 软件体系结构
1.4.1 什么是软件体系结构
1.4.2 软件体系结构的内容
1.4.3 设计阶段的软件体系结构
1.5 小结
1.6 思考题
第2章 软件模型和描述
2.1 什么是软件模型
2.2 软件模型的发展历程
2.3 软件模型解析
2.3.1 功能模型
2.3.2 对象模型
2.3.3 组件模型
2.3.4 配置型组件模型
2.3.5 服务模型
2.3.6 抽象模型
2.4 深入认识软件模型
2.4.1 软件体系结构的描述
2.4.2 软件体系结构的设计
2.5 体系结构描述语言
2.5.1 ADL简介
2.5.2 几种典型ADL的比较
2.5.3 描述体系结构行为
2.6 小结
2.7 思考题
第3章 软件体系结构建模和UML
3.1 软件体系结构建模概述
3.2 基于软件体系结构的开发
3.3 UML概述
3.3.1 UML的发展历程
3.3.2 UML的特点和用途
3.3.3 UML2.0的建模机制
3.4 面向对象方法
3.4.1 面向对象方法中的基本概念
3.4.2 面向对象方法的优势
3.5 UML2.0中的结构建模
3.5.1 类图
3.5.2 对象图
3.5.3 构件图
3.5.4 部署图
3.6 UML2.0中的行为建模
3.6.1 用例图
3.6.2 顺序图
3.6.3 通信图
3.6.4 交互概览图
3.6.5 时序图
3.6.6 状态图
3.6.7 活动图
3.7 小结
3.8 思考题
第4章 软件设计过程
4.1 软件设计基础
4.2 软件体系结构设计
4.3 高可信软件设计
4.3.1 可信软件的特点
4.3.2 容错设计
4.3.3 软件失效模式和影响分析
4.3.4 软件故障树分析
……
第5章 软件体系结构风格
第6章 面向对象的软件设计方法
第7章 面向数据流的软件设计方法
第8章 用户界面分析与设计
第9章 设计模式
第10章 Web服务体系结构
第11章 基于分布构件的体系结构
第12章 软件体系结构评估
第13章 软件设计的进化
第14章 云计算的体系结构