本书的目标是向软件架构师提供实用的指南和技术,以更快地得到好的系统结构设计。我们的哲学是不应该致力于设计理想化的系统结构,而是应该仔细地评估和权衡所有技术、市场、人员、成本方面的问题,从而获取一个好的解决方案。
一、软件体系结构术语
系统结构风格或者系统结构模式
参考系统结构或者领域特定的软件系统结构(应用在一个特定领域)
产品线系统结构(应用在一个组织的一组产品)
软件系统结构(应用在软件系统或者产品)
二、4种视图
1、一个软件体系结构有4种截然不同的视图:概念视图、模块视图、执行视图、代码视图。
使用这个4种视图提供了一种设计软件系统结构的系统化方法,帮助架构师设置优先级,分析权衡,并保证没有缺漏。
2、不同视图强调的不同工程关注点:
在概念视图中,问题和解决方案主要通过领域术语来考虑的。对于特定的软件及硬件技术,它们应当是相对独立的。概念视图的工厂关注点包括:
系统如何满足需求?
商用构件怎样组装成整体,怎样在功能层上与系统的其他部分交互?
领域特定的硬件和软件如何融入系统?
功能是如何被分割并进入产品个版本的?
系统如何与之前版本的产品合并?它如何支持未来的版本?
如何支持产品线?
如何将由需求或领域中所做的变动引起的影响最小化?
在模块视图中,概念视图中的构件和连接子被映射为子系统和模块。在这里,架构师强调的是如何用现有的软件平台以及技术实现概念的解决方案。主要的工程关注点有如下几点:
产品是如何映射到软件平台的?
使用了什么样的系统支持或系统服务?具体是在什么地方?
怎么支持测试?
如何降低模块间的依赖性?
如何将模块与子系统的复用最大化?
当商用软件、软件平台或标准发生变动时,采用何种技术在封装产品时可以将它们与产品进行隔离?
执行视图描述模块如何映射到运行时平台说提供的元素,以及这些又如何映射到硬件体系结构。执行视图定义系统的执行时实体及其属性,比如内存使用和硬件分配。对于执行视图,其工程关注点如下:
系统如何满足性能、恢复及重新配置方面的需求?
如何平衡资源的使用(例如:负载平衡)?
如何达到必需的并发、复制及分布,而不过度增加控制算法的复杂度?
如何使运行时平台的改变所引起的影响到达最小?
在代码体系结构视图中,架构师决定执行视图中的执行时实体如何映射到部署构件(例如:可执行构件),决定模块视图中的模块如何映射到源构件,以及部署构件如何从源构件生成。代码视图中重要的工程关注点如下:
如何降低产品升级的时间和费用?
如何管理产品版本及发布?
如何降低构造时间?
需要什么工具支持开发环境?
如何支持集成与测试?
三、全局分析
全局分析是在定义概念、模块、执行和代码系统结构视图之前进行的,并贯穿整个系统结构的设计过程。
全局分析从识别影响体系结构设计的因素来分成3类:组织因素、技术因素、产品因素。
组织因素分成5类:管理;员工技能、兴趣、能力、缺点;过程与开发运行环境;开发进度;开发预算。
技术因素包括:通用和专用的硬件;操作系统、用户界面、设计模式等软件技术;模版和框架等体系结构技术;图像、数据库、数据格式、算法和技术之类的标准。
产品因素是描述了产品的功能需求、用户可见的特征和产品的性能等质量方面的需求。比如:功能特征;用户界面;性能;依赖性;错误监测、报告、修复;服务和价格等。
全局分析是在每一种体系结构设计视图中都要进行的一种行为。在全局分析过程中建立的问题卡片要用在每一个视图设计的核心设计任务中。在进行核心设计任务时,做出的决策应当可以返回到全局分析,以增加和修改因素、问题和策略。
总结策略:
问题
|
应用策略
|
进度紧迫
|
复用内部已有的、领域特性构件
购买而不是建立
使元素容易添加和删除
|
技能不足
|
避免使用多线程
封装多进程
|
通用和领域特定硬件的改变
|
封装领域特定硬件
封装通用硬件
|
软件技术的改变
|
使用标准
为外部构件开发产品特定的接口
|
资源有限
|
限制活动线程个数
用动态的内部线程见通信联系
|
易用增加和删除特性
|
按关联尺度分离构件和模块
特性封装到分开的构件
分离用户交互模块
|
易用增加和删除采集过程和算法
|
为图像处理使用灵活的流水线模块
为采集和图像处理引入构件
分离用户交互模块
|
高吞吐量
|
把独立的控制线程映射到进程
使用新增的CPU
|
实时采集性能
|
从没有临界时间构件中分离出有临界时间的
为模块行为开发准则
灵活的分配模块到进程
使用单速分析来预言性能
使用共享存储进行流水线阶段之间通信
|
实现恢复
|
引入操作的恢复模块
把全部数据放到恢复稳定和容易达到的地方
|
实现诊断
|
制定一个错误处理策略
减少错误处理的工作
封装诊断构件
使用标准日志服务
|
体系结构的完整性
|
保护模块间的继承
分离公共接口构件
|
并发的开发工作
|
从源构件中分离开发构件
保护执行视图
采用阶段开发
通过静态库来发布层
|
限制可使用的采集图像类型
|
采用适当的抽象开发一个脱机的探测模拟器
使用一个灵活的建立过程
|
多样性开发和目标平台
|
分离和封装依赖目标平台的代码
|
四、概念体系结构视图
清楚了概念体系结构的结构视图之后,可以推论或预测重要的系统属性。概念视图可以用于:
实用环境及场景。
性能评估。
安全性及可靠性分析。
独立于监测的目标。
理解静态及动态系统配置。
工作量评估(初步;不包括基础设施)。
五、模块体系结构视图
明确了一个模块视图,就开始了对重要系统属性的关注。对模块视图的描述,有以下用途:
管理模块接口。
变化影响分析。
接口约束的一致性检查。
管理配置。
评估成果。
模块体系设计活动
子系统包含0和多个子系统、0和多个模块;模块之间的关系是通过接口来实现的。模块也存在包含关系、使用关系。
六、执行体系结构视图
多个运行时实体;运行时实体依赖于模块;资源平台依赖于硬件资源。
通信机制包括DCOM(分布式构件对象模型)、IPC(进程通信)、RPC(远程过程调用)等。
资源包括地址空间、内存池、定时器、代理、端口等。
执行视图通常由下面人员使用:
架构师,设计系统运行时间的特性,以使得设计符合需求,并能够适应期望的改变。
开发人员,提供正确的实现。
测试人员,他们需要知道系统的运行时间的特性并计划进行测试。
维护人员,决定运行时间平台的改变如何影响系统,或者需求的改变如何影响系统的运行时间特性。
七、代码体系结构视图
代码体系结构视图的应用:
一旦代码体系结构视图被明确地描述出来,它就可以有许多不同的用途:
对于模块视图和执行视图中的元素的可追踪性。
对于特定开发任务所需要的所有构件的透明访问。
构造部分系统。
管理构件的版本和发布。
保持体系结构的设计决策,及时发现违反决策的情况。
代码体系设计活动:
代码组由源代码构件、二进制构件、库、执行(运行时实体)、配置描述等组成。
源代码构件依赖于模块和接口。
代码组依赖于子系统和分层。
八、软件体系架构模式
软件设计的一个核心问题是能否使用重复的体系架构,即能否达到体系架构级的软件重用。也就是说,能否在不同的软件系统中,使用同一体系架构。基于这个目的,许多学者们开始研究和实践软件体系架构的模式问题。在<Pattern-Oriented Software Architecture (面向模式的软件体系架构) >中首次提出了8种体系结构模式: 层(Layers)、管道和过滤器(Pipes and Filters) 、黑板(Black board )、代理者(Broker)、模型-视图-控制器(Model-View-Controller)、表示-抽象-控制(Presentation-Abstraction-Control)、微核(Microkernel)、映像(Reflection)。
分享到:
相关推荐
在学习笔记的第一章中,首先讨论了嵌入式系统的需求分析与体系结构设计。需求分析是项目开发的初始阶段,它包括决定是否选择裸机开发还是基于实时操作系统的开发方式。裸机开发通常适用于对实时性要求不高的简单系统...
软考中级软件设计师学习笔记 World版本 下载后可直接打印作为2020年上半年考试的复习资料用 1.CPU 的功能的功能:程序控制、操作控制、时间控制、数据处理。 2.计算机系统组成示意图计算机系统组成示意图: 3....
东北大学软件工程专业的研究方向涵盖了软件体系结构、软件过程改进、软件质量保障等多个领域。 ### 三、考研复试重点内容解析 #### 1. 软件需求分析 - **定义**: 是软件生命周期中的第一个阶段,主要任务是明确...
### 数据库系统概论学习笔记(一) #### 1. 数据库系统的主要特点与全貌 数据库系统(Database System, DBS)是一个用于管理和存储数据的综合系统,它包括硬件、软件、数据库管理员(DBA)及用户等多个组成部分。...
《软考-软件设计师(中级)笔记》涵盖了计算机科学与技术的基础知识,主要涉及计算机组成原理、计算机体系结构、存储结构、以及操作系统等核心领域。以下是对这些知识点的详细阐述: 1. **计算机组成原理与组成结构...
【ARM学习基础】 在开始ARM的学习之前,需要具备一定的基础知识,包括: 1. 熟悉前辈们的经验分享,可以从论坛或...对于ARM的学习,理论与实践相结合是关键,不断练习和探索才能更好地掌握这个强大的微处理器体系。
严蔚敏教授是中国计算机科学教育领域内...总之,严蔚敏教授的数据结构视频教学及其教学笔记,为学习数据结构的学生提供了一条清晰的学习路径和实用的学习资源,是帮助学生构建计算机科学基础、提升编程能力的重要工具。
在“软考网络工程师学习笔记”中,我们主要关注的是全国计算机技术与软件专业技术资格(水平)考试中的网络工程师部分。这部分内容涵盖了网络的基本概念、网络体系结构、协议、传输方式等多个方面。 #### 二、网络...
根据给定的“网络规划设计师学习笔记”中的信息,我们可以提炼出以下详细的IT知识点: ### 一、计算机网络概述 1. **定义与应用** - 计算机网络是将多个具有独立功能的计算机系统通过通信设备和线路连接起来,并...
这篇学习笔记将带你了解计算机网络的发展历程、基本概念、类型、性能指标以及常用的技术。 计算机网络的发展可以分为三个阶段:第一阶段是阿帕网的诞生,标志着互联网的雏形;第二阶段是三级网络的形成,中国在1994...
【PMP学习笔记(一)】是一份关于项目管理专业人士认证(Project Management Professional,简称PMP)的学习资料,主要涵盖了项目管理的基础理论和实践知识。这份笔记可能来源于某位学习者在阅读相关书籍或参加培训...
2. **ARM体系结构**:深入学习ARM体系结构,理解其指令集、寄存器组织等内容。 3. **操作系统移植与开发**:探讨如何将Linux或其他操作系统移植到ARM平台上,以及如何进行相应的定制化开发。 4. **驱动程序开发**:...
在该学习笔记中,对JVM的类型、原理及体系结构都有详细探讨。 JVM的类型包括Java SE平台的HotSpot虚拟机、Java ME平台的CVM等。了解不同类型的JVM有助于我们理解Java运行环境的多样性和适用性。 JVM的原理涉及其...
### Java课堂笔记学习 #### 软件定义与软件开发 - **软件**:软件是运行在硬件之上的一组指令集,这些指令集能够完成特定的功能。软件开发过程包括设计和编码两个主要阶段。 #### 编程语言的重要性 - **编程语言...
《The Little SAS Book 学习笔记》是一本针对SAS(Statistical Analysis System)软件学习者的实用教程书籍。SAS是一种功能强大的统计分析软件,广泛应用于金融、医药、政府、制造等行业进行数据管理、高级分析、...
学习者将了解如何使用Mybase笔记、安装软件以及提高打字速度等实用技巧。接着,课程深入讲解计算机语言的历史,特别是Java的起源和发展,以及其独特的体系结构和优势。核心机制如垃圾收集机制和跨平台原理是重点,...
《B站王道操作系统学习笔记》是一份系统阐述操作系统的文档,涵盖了进程管理、内存管理、文件管理等多个关键领域。操作系统作为计算机系统的核心软件,负责管理和控制计算机系统中的各种硬件资源和软件资源,提供给...
《良葛格Java 学习笔记(繁体全)》是一部详尽的Java学习资源,旨在帮助初学者和...这些知识点构成了《良葛格Java 学习笔记》的主要内容,通过深入学习和实践,读者可以全面掌握Java编程技能,为软件开发打下坚实基础。
吴恩达教授的机器学习课程是该领域的经典教程,黄海广整理并分享了自己对课程的学习笔记。这门课程覆盖了机器学习、数据挖掘和统计模式识别的多个主题,包括监督学习、无监督学习和机器学习的最佳实践。监督学习是...
【程序员笔记软件】是一款专为程序员设计的高效学习与工作管理工具。这款软件以其独特的树状结构和拓扑知识组织方式,帮助程序员更好地整理、存储和检索编程相关的知识与资料。它不仅支持使用Word编辑,还能够存储...