《软件体系结构》_具有进程分配的大型acs系统的物理视图-程序员宅基地

技术标签: 软件工程  

第一章

工学的定义:

工学: 工程学科的总称,应用学科,用数学和自然科学原理设计有用物体进程。。

研究自然学科的应用方式,研究工程进行的一般规律

工程:

  • 狭义: 以目标为依据,应用知识和技术,一群人有组织将现有实体转换为有价值的过程
  • 广义: 一群人达到目的,长周期进行协调活动的过程

软件工程:

用工程化方法,构建和维护有效的,实用的和高质量的软件的学科,因为有软件危机所以需要

软件危机的定义:

表现: 

  • 成本日益增长
  • 开发进度难以控制
  • 软件质量差
  • 维护困难

产生原因

  • 用户需求不明确: 用户不清楚需求; 用户描述不清; 开发过程中提出修改; 开发人员理解有误
  • 缺乏正确的理论指导
  • 软件规模越来越大
  • 软件复杂度越来越高

工程的内涵: 研究,设计,开发,生产,施工,操作,管理

科学与工程的区别: 

  • 目的: 科学在于发现认知;工程在于发明运用
  • 方法: 分析归纳; 创造演绎
  • 成本: 不计代价; 精打细算
  • 贡献: 知识开拓; 生活改善

软件重用:

软件重用:

多次不同软件开发过程中,重复使用相同或相近的软件元素的过程

可重用元素:

程序代码,设计文档,需求分析文档,测试用例,设计过程,领域知识

构件: 功能!

  • 语义完整,语法正确,有课重用价值的单位软件。
  • 是软件重用过程中明确辨识的系统
  • 结构上是语义描述,通信接口和实现代码的复合体

构件实现:

具体实现构件功能的逻辑系统,代码构件

构件应用过程:

构件获取

领域工程

重用技术与领域之间的关系:

  • 获取途径: 修改,提取,购买

构件管理

构件描述:

  • 实现方法
  • 实现体
  • 注释
  • 生产者
  • 生产日期
  • 规模
  • 价格
  • 版本
  • 关联构件

构件描述: 管理角度的细节刻画

构件模型: 本质的抽象描述

构件组织: 

  • 要求: 支持构件库维护,查找:精确,模糊,功能行为检索,精确行为描述,易于使用
  • 方法: 关键字法
  • 方法:刻面法

  • 超文本法:

构件分类:

  • 商业化构件种类分为: 用户界面,数据库; 商务应用,工具、网络通信,核心技术
  • 构件形态分类: 独立、成熟; 有限制; 适应性; 可修改的

人员及权限管理

  • 公共用户
  • 注册用户
  • 构建提供者
  • 一般系统管理员
  • 超级系统管理员

构件重用

构件检索

基于关键字法:

  • 浏览;
  • 关键字匹配

优点: 简单易行

缺点: 用户不一定能恰当运用关键字进行描述

基于刻面法
  • 构造查询
  • 检索构件
  • 排序

优点:方便相似构件的查找

缺点:构造查询困难

基于超文本法
  • 一个或多个关键字匹配
  • 返回相关文档
  • 用户通过超链接跳转浏览

优点: 人性化操作

缺点: 迷失,效率低



理解和评价

理解的目标:

  • 构件的功能,行为
  • 相关领域知识
  • 约束条件、例外
  • 可预见的修改部分以及修改方法

理解的手段:

评价:

  • 成功次数
  • 修改量
  • 健壮性
  • 性能度量

构件组成
  • 基于功能
  • 基于数据
  • 面向对象

软件体系结构的兴起和发展

软件体系结构的定义

核心是在系统开发过程中尽早处理质量属性相关问题。

软件体系结构是一个程序/系统各构件的结构、它们之间的相互关系以及进行设计的原则和随时间演化的指导方针

  • 软件体系结构是具有一定形式的结构化元素,即构件的集合,包括处理构件、数据构件和连接构件。
  •      处理构件负责对数据进行加工,数据构件是被加工的信息,连接构件把体系结构的不同部分组合连接起来。
  • 这一定义注重区分处理构件、数据构件和连接构件,这一方法在其他的定义和方法中基本上得到保持。

       

四个角度
  • 概念角度描述系统的主要构件及它们之间的关系;
  • 模块角度包含功能分解与层次结构;
  • 运行角度描述了一个系统的动态结构;
  • 代码角度描述了各种代码和库函数在开发环境中的组织。

软件体系结构的意义
  • 早期设计决策的体现
  • 风险承担者交流的手段
  • 可传递可重用的模型
  • 高层复用制品,企业战略财富

软件体系结构的发展历程

第贰章

软件体系结构建模

建模: 建立系统模型的过程

软件体系结构建模: 如何对软件体系结构建立系统模型

每个软件系统都有多个风险承担者: 最终用户,开发人员,系统工程师,项目经理

“4+1”视图模型

  • 逻辑视图的特性: 自主性,持久性,依赖性,分布性
  • 逻辑与开发视图
  • 进程视图的产生
  • 4+!视图模型的剪裁

  • 每个视图只关心一个侧面,结合在一起才反映系统的软件体系结构的全部内容

  • 在每个视图上均独立地支持Perry & Wolf 的公式,即定义一个所使用的元素集合(构件、容器、连接件)

逻辑视图:
  1. 整个系统的抽象结构表述
  2. 关注系统提供最终用户的功能
  3. 不涉及具体的变异即输出和部署
  4. 常使用BOOCH标记法,在UML中类图表示
  5. 多数使用面向对象风格
  6. 主要内容保持一个单一的,内聚的对象模型贯穿整个系统。

开发视图
  1. 侧重软件模块的组织和管理,为编程人员服务
  2. 通过程序库或子程序进行组织,由不同人员开发
  3. 考虑内部需求,充分考虑软件开发的容易程度,重用性,软件的通用性,充分考虑由于具体开发工具的不同带来的局限性
  4. 采用层次风格,采用4-6层子系统,仅进行相邻交互,层次越低,通用性越强

关于层次的引出

进程视图
  • 侧重系统的运行特性
  • 关注非功能需求: 性能; 可用性; 并发性
  • 定义逻辑视图中的各个类的操作是在哪一个线程中被执行
  • 可描述多层抽象
  • 每个级别分别关注不同的方向
  • 最高层抽象中:进程结构 = 构成一个执行单元的一组任务; 独立、分补; 通过逻辑网络相互通信。
物理视图:
  • 把软件映射到硬件上
  • 关注系统性能、规模、可靠性

具有进程分配的小型ACS系统的物理视图

具有进程分配的大型ACS系统的物理视图

场景
  • 是其他视图的冗余
  • 作用: 作为驱动因素发现架构设计中的架构元素; 作为设计结束后的一项验证和说明功能,原型测试

核心模型

生命周期

抽象模型

构件定义:构件是一个数据单元或一个计算单元,由构件的对象的集合,属性的集合,动作的集合和端口的集合组成

构件及其关系的抽象描述

构件间关系的定义:

  • 顺序结构(顺序运算)
  • 选择结构(选择运算)
  • 循环结构

                                          

连接件和软件体系结构的抽象模型定义

连接体的抽象描述: 

连接件是构件运算的实现,它是一个6元组         <ID,Role,Beha,Msgs,Cons,Non-Func>

其中,Role为连接件和构件的交互点的集合,它由一个四元组定义    

 Role=<Id,Action,Event,LConstrains>

连接体的抽象定义: 设论域为U

  1. 构件是一个软件体系结构
  2. 连接体是一个软件体系结构
  3. 构件经有限次连接(运算后)是软件体系结构。

 软件体系结构记为A=<C,O>,其中C表示组成体系结构的构件集合,O表示构件运算的集合

软件体系结构性质:

  1. 封闭性:即构件与构件、构件与体系结构、体系结构与体系结构连接后仍是一个体系结构。 
  2. 层次性:即体系结构可由构件连接而成,而体系结构又可以再经过连接组成新的更大的体系结构。
  3. 可扩充性:即一个满足条件的新构件可以通过连接加入到结构中。

第叁章 

软件体系结构风格概述

软件体系风格

  • 描述特定应用领域中系统组织方式的惯用模式
  • 反映众多系统所共有的结构和语义特性
  • 指导如何将各个模块和子系统有效组织成一个完整系统

决定风格

  • 控制原则
  • 质量属性

讨论体系结构风格时要回答的问题

  • 构件和连接件的类型是什么?
  • 可容许的结构模式是什么?
  • 基本的计算模型是什么?
  • 风格的基本不变性是什么?
  • 其使用的常见例子是什么?
  • 使用此风格的优缺点是什么?
  • 其常见的特例是什么?

经典软件体系系结构风格

管道-过滤器风格

优点
  • 构件间耦合关系降低,易于分解问题,实现重用
  • 易于维护和扩展
  • 为系统的运行分析提供便捷条件
  • 支持并发计算

缺点
  • 不适合处理交互频繁的应用
  • 数据解析,合成麻烦

扩展形式
  • 管线
  • 有界管道
  • 批处理

面向对象风格

优点
  • 封装性,便于重用
  • 可实现交互

缺点
  • 调用使得修改被传播

事件驱动风格(基于事件的隐式调用)

说明
  • 系统运行得以推进的驱动力来源是:广播媒介
  • 事件:监听事件、声明事件
  • 构成: 事件消费者,事件生产者,事件管理器
  • 特征: 面向对象风格的变体; 事件的触发者不知道哪些构件会被这些事件影响;无法预知和假定构件的处理顺序。
  • 与面向对象风格的融合

事件驱动的基本结构

显式调用与隐式调用应用案例
电梯系统类图

电梯模型事件及其子类组织结构

乘客在第一层电梯进出的协作图

分层系统

工作机制
  • 每个层次为上一层提供服务
  • 同时作为用户调用下层的功能
  • 严格的分层
  • 半透明的分层

优点
  • 支持基于抽象程度递增的系统设计
  • 良好的扩展性
  • 支持重用

缺点
  • 层次划分困难
  • 适用性受限

数据共享风格

要素
  • 两类构件: 中央数据单元 ; 外部构件
  • 控制策略: 两类构件间的交互方式

分类
  • 传统数据库型(被动)
  • 黑板系统(主动)

黑板系统

中央数据单元
  • 是系统的核心
  • 存储数据  +  系统状态数据
知识源

相互独立,通过黑板完成交互

  • 控制单元的位置
  • 由来
  • 任务
  • 目标
  • 动作
  • 表示方式
控制单元

非独立单元

优点
  • 易于增加数据的生产者和消费者
  • 良好的知识库扩展性
  • 易于保证数据的同步、一致性

专家系统

C2风格

  • 层次网络
  • 数据驱动

组织规则
  • 顶、底
  • 构件不能直接相连
  • 连接件之间自由连接
  • 连接件的直接相连是有序的
工作方式

请求 + 通知

特点
  • 基底独立性
  • 构件之间交互只能通过消息传递实现
  • 多线程

构件结构

客户/服务器风格

结构

服务器任务
  • 保证数据库安全性
  • 控制数据库并发访问
  • 确保数据的一致性
  • 数据备份与恢复

客户端任务
  • 提供交互界面
  • 提交请求,接收信息
  • 对客户端数据执行应用逻辑要求

工作流程机制

优点
  • 对软硬件变化的适应性和灵活性,易于系统扩充和缩小
  • 数据和事务处理能力较强,服务器端负荷轻
  • 模型简单,易于理解

缺点
  • 开发成本高
  • 不便于使用新技术
  • 软件维护升级困难

三层客户/服务器风格

传统二层C/S的弊端

  • 软硬件的组合和集成能力有限,难以扩展至大型项目中
  • 客户机负荷过重
  • 数据安全性不好

结构

工作流程机制

物理结构

优点

  • 在逻辑上保持相对独立性,能提高系统和软件的可维护性和可扩展性
  • 允许更灵活有效地选用相应的平台和硬件系统,在处理负荷能力上与处理特性上分别适应于结构清晰的三层
  • 应用的各层可以并行开发,可以选择各自最适合的开发语言
  • 利用功能层有效地隔离开表示层与数据层,未授权的用户难以绕过功能层而利用数据库工具或黑客手段去非法地访问数据层

要注意的关键问题

  • 三层C/S结构各层间的通信效率若不高,即使分配给各层的硬件能力很强,其作为整体来说也达不到所要求的性能
  • 设计时必须慎重考虑三层间的通信方法、通信频度及数据量

浏览器/服务器风格

结构

优点

  • 维护升级简单、高效
  • 服务覆盖范围大  I. 空间    II. 类别平台

劣势

  • 应用服务器负荷重——数据处理和响应速度慢
  • 安全控制能力弱
  • 数据动态交互性不强

公共对象请求代理体系结构

原理示意

  • 命名服务
  • 事件服务
  • 事务处理服务
  • 交易服务
  • 生命周期服务
  • 安全服务
  • 通知服务

构成

工作过程

特点

  • 引入中间件做事务代理
  • 实现客户与服务对象的完全隔离
  • 提供软总线机制
  • 基于面向对象的开发

正交软件体系结构

组织结构特征

  • 由完成不同功能的n条线索构成
  • 系统具有m个不同抽象级别的层
  • 线索之间相互独立
  • 系统有公共驱动层和公共数据层

实例

优点

  • 结构清晰,易于理解
  • 易修改,可维护性强
  • 可移植性强,重用粒度较大

基于层次消息总线的体系结构风格

结构

要素

  • 复合构件
  • 原子构件
  • 接口:  消息 + 互补端口
  • 消息总线

静态结构要点

  • 自顶向下层次化分解
  • 总线间无直接的连接

对系统演化的支持

  • 动态增删构件
  • 动态改变构件响应的消息类型
  • 支持消息过滤

异构结构风格

原因

  • 变动最终是绝对的
  • 实际工作中,我们总会遇到一些遗留下来的代码
  • 即使在某一单位中,规定了共享共同的软件包或相互关系的一些标准,仍会存在解释或表示习惯上的不同

不同的结构有不同的处理能力的强项和弱点,一个系统的体系结构应该根据实际需要进行选择,以解决实际问题

示例

C/S与B/S混合之内外有别模型

C/S与B/S混合之查改有别模型

示例

互联系统构成的系统及其体系结构

互联系统风格

上级系统独立于其从属系统,每个从属系统仅仅是其上级系统模型中所指内容的一个实现,并不属于上级系统功能约束的一部分

特定领域软件体系结构

定义

  • DSSA就是专用于一类特定类型的任务(领域)的、在整个领域中能有效地使用的、为成功构造应用系统限定了标准的组合结构的软件构件的集合
  • DSSA就是一个特定的问题领域中支持一组应用的领域模型、参考需求、参考体系结构等组成的开发基础,其目标就是支持在一个特定领域中多个应用的生成

要点

  • 严格定义的问题域和/或解决域 (I.垂直域    II.水平域 )
  • 具有普遍性,使其可用于领域中某特定应用的开发
  • 对整个领域的适合程度的抽象
  • 具有该领域固定的、典型的,在开发过程中可重用的元素

基本活动(反复迭代,逐步求精)

  • 领域分析
  • 领域设计
  • 领域实现

◇ C2风格案例

上下文关键字(KWIC)问题

任务要求

KWIC索引系统接受一些行,每行有若干词,每个词由若干字符组成;每行都可以循环移位,亦即重复地把第一个字删除,然后接到行末; KWIC把所有行的各种移位情况按照字母表顺序输出

设计中有待思考的问题
  • 处理算法:例如,行的移位可在每行读入后、在所有行读入后、或当排序要求一组移位的行时執行;
  • 数据表示:例如,行、字、字符可以不同的方式存储;类似地,循环移位后的行可以显式或隐式存储(索引和偏移量);
  • 系统功能的增强:例如,限制以某些“修饰词”(a, an, and等)打头的移位结果;支持交互,允许用户从原始输入表中删除一些行等;
  • 效率:时间和空间;
  • 复用:构件被复用的潜力。
方案一:使用共享数据的主程序/子程序
  • 问题分解:输入、移动、按字母表排序、输出
  • 所有计算构件作为子程序协同工作,由主程序顺序调用各个子程序
  • 构件通过共享存储区交换数据



方案贰:抽象数据类型
  • 系统分解为5各模块,每个构件提供了过程集合
  • 每个模块提供一个接口,接口允许其他构件通过调用接口中的过程来访问数据

第伍章: 软件体系结构描述

5.1 软件体系结构描述方法

5.2 软件体系结构描述框架标准

描述框架标准

5.3  软件体系结构描述语言

5.3.1 Unicon

Unicon

构件:

component<identifier>

     <interface>

     <implementation>

end <indentifier>

5.3.2 C2

5.3.3 ACME

5.3.4 Wright

第陆章 基于体系结构的软件开发

6.1 设计模式

6.2 基于体系结构的设计方法

6.3 体系结构的设计与演化

6.4 基于体系结构的软件开发模型

第柒章 软件体系结构评估

7.1 软件体系结构评估概述

7.2 软件体系结构的主要评估方式

7.3 SAAM评估方法

7.4 ATAM评估方法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_73895400/article/details/134275164

智能推荐

获取大于等于一个整数的最小2次幂算法(HashMap#tableSizeFor)_整数 最小的2的几次方-程序员宅基地

文章浏览阅读2w次,点赞51次,收藏33次。一、需求给定一个整数,返回大于等于该整数的最小2次幂(2的乘方)。例: 输入 输出 -1 1 1 1 3 4 9 16 15 16二、分析当遇到这个需求的时候,我们可能会很容易想到一个"笨"办法:..._整数 最小的2的几次方

Linux 中 ss 命令的使用实例_ss@,,x,, 0-程序员宅基地

文章浏览阅读865次。选项,以防止命令将 IP 地址解析为主机名。如果只想在命令的输出中显示 unix套接字 连接,可以使用。不带任何选项,用来显示已建立连接的所有套接字的列表。如果只想在命令的输出中显示 tcp 连接,可以使用。如果只想在命令的输出中显示 udp 连接,可以使用。如果不想将ip地址解析为主机名称,可以使用。如果要取消命令输出中的标题行,可以使用。如果只想显示被侦听的套接字,可以使用。如果只想显示ipv4侦听的,可以使用。如果只想显示ipv6侦听的,可以使用。_ss@,,x,, 0

conda activate qiuqiu出现不存在activate_commandnotfounderror: 'activate-程序员宅基地

文章浏览阅读568次。CommandNotFoundError: 'activate'_commandnotfounderror: 'activate

Kafka 实战 - Windows10安装Kafka_win10安装部署kafka-程序员宅基地

文章浏览阅读426次,点赞10次,收藏19次。完成以上步骤后,您已在 Windows 10 上成功安装并验证了 Apache Kafka。在生产环境中,通常会将 Kafka 与外部 ZooKeeper 集群配合使用,并考虑配置安全、监控、持久化存储等高级特性。在生产者窗口中输入一些文本消息,然后按 Enter 发送。ZooKeeper 会在新窗口中运行。在另一个命令提示符窗口中,同样切换到 Kafka 的。Kafka 服务器将在新窗口中运行。在新的命令提示符窗口中,切换到 Kafka 的。,应显示已安装的 Java 版本信息。_win10安装部署kafka

【愚公系列】2023年12月 WEBGL专题-缓冲区对象_js 缓冲数据 new float32array-程序员宅基地

文章浏览阅读1.4w次。缓冲区对象(Buffer Object)是在OpenGL中用于存储和管理数据的一种机制。缓冲区对象可以存储各种类型的数据,例如顶点、纹理坐标、颜色等。在渲染过程中,缓冲区对象中存储的数据可以被复制到渲染管线的不同阶段中,例如顶点着色器、几何着色器和片段着色器等,以完成渲染操作。相比传统的CPU访问内存,缓冲区对象的数据存储和管理更加高效,能够提高OpenGL应用的性能表现。_js 缓冲数据 new float32array

四、数学建模之图与网络模型_图论与网络优化数学建模-程序员宅基地

文章浏览阅读912次。(1)图(Graph):图是数学和计算机科学中的一个抽象概念,它由一组节点(顶点)和连接这些节点的边组成。图可以是有向的(有方向的,边有箭头表示方向)或无向的(没有方向的,边没有箭头表示方向)。图用于表示各种关系,如社交网络、电路、地图、组织结构等。(2)网络(Network):网络是一个更广泛的概念,可以包括各种不同类型的连接元素,不仅仅是图中的节点和边。网络可以包括节点、边、连接线、路由器、服务器、通信协议等多种组成部分。网络的概念在各个领域都有应用,包括计算机网络、社交网络、电力网络、交通网络等。_图论与网络优化数学建模

随便推点

android 加载布局状态封装_adnroid加载数据转圈封装全屏转圈封装-程序员宅基地

文章浏览阅读1.5k次。我们经常会碰见 正在加载中,加载出错, “暂无商品”等一系列的相似的布局,因为我们有很多请求网络数据的页面,我们不可能每一个页面都写几个“正在加载中”等布局吧,这时候将这些状态的布局封装在一起就很有必要了。我们可以将这些封装为一个自定布局,然后每次操作该自定义类的方法就行了。 首先一般来说,从服务器拉去数据之前都是“正在加载”页面, 加载成功之后“正在加载”页面消失,展示数据;如果加载失败,就展示_adnroid加载数据转圈封装全屏转圈封装

阿里云服务器(Alibaba Cloud Linux 3)安装部署Mysql8-程序员宅基地

文章浏览阅读1.6k次,点赞23次,收藏29次。PS: 如果执行sudo grep 'temporary password' /var/log/mysqld.log 后没有报错,也没有任何结果显示,说明默认密码为空,可以直接进行下一步(后面设置密码时直接填写新密码就行)。3.(可选)当操作系统为Alibaba Cloud Linux 3时,执行如下命令,安装MySQL所需的库文件。下面示例中,将创建新的MySQL账号,用于远程访问MySQL。2.依次运行以下命令,创建远程登录MySQL的账号,并允许远程主机使用该账号访问MySQL。_alibaba cloud linux 3

excel离散度图表怎么算_excel离散数据表格-Excel 离散程度分析图表如何做-程序员宅基地

文章浏览阅读7.8k次。EXCEL中数据如何做离散性分析纠错。离散不是均值抄AVEDEV……=AVEDEV(A1:A100)算出来的是A1:A100的平均数。离散是指各项目间指标袭的离散均值(各数值的波动情况),数值较低表明项目间各指标波动幅百度小,数值高表明波动幅度较大。可以用excel中的离散公式为STDEV.P(即各指标平均离散)算出最终度离散度。excel表格函数求一组离散型数据,例如,几组C25的...用exc..._excel数据分析离散

学生时期学习资源同步-JavaSE理论知识-程序员宅基地

文章浏览阅读406次,点赞7次,收藏8次。i < 5){ //第3行。int count;System.out.println ("危险!System.out.println(”真”);System.out.println(”假”);System.out.print(“姓名:”);System.out.println("无匹配");System.out.println ("安全");

linux 性能测试磁盘状态监测:iostat监控学习,包含/proc/diskstats、/proc/stat简单了解-程序员宅基地

文章浏览阅读3.6k次。背景测试到性能、压力时,经常需要查看磁盘、网络、内存、cpu的性能值这里简单介绍下各个指标的含义一般磁盘比较关注的就是磁盘的iops,读写速度以及%util(看磁盘是否忙碌)CPU一般比较关注,idle 空闲,有时候也查看wait (如果wait特别大往往是io这边已经达到了瓶颈)iostatiostat uses the files below to create ..._/proc/diskstat

glReadPixels读取保存图片全黑_glreadpixels 全黑-程序员宅基地

文章浏览阅读2.4k次。问题:在Android上使用 glReadPixel 读取当前渲染数据,在若干机型(华为P9以及魅族某魅蓝手机)上读取数据失败,glGetError()没有抓到错误,但是获取到的数据有误,如果将获取到的数据保存成为图片,得到的图片为黑色。解决方法:glReadPixels实际上是从缓冲区中读取数据,如果使用了双缓冲区,则默认是从正在显示的缓冲(即前缓冲)中读取,而绘制工作是默认绘制到后缓..._glreadpixels 全黑