《软件体系结构》_具有进程分配的大型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

智能推荐

古月居教程之:“robot_marm”包直接编译出错_github guyueju-程序员宅基地

文章浏览阅读418次,点赞4次,收藏2次。使用古月居的“robot_marm”包直接编译出错在ubuntu18,自己建的工作空间里面,将“ros_exploring-master”整个功能包拉进去工作空间编译发生报错,因为只需要用到“robot_marm”这个包(跟着书上做机械臂仿真),但是只用这个包也报错,就找了下解决方法。其中是因为少了两个数据结构的包,git clone到工作空间的src文件夹下就好了。git clone https://github.com/ros-interactive-manipulation/manipulati_github guyueju

5、JSP面试题总结-程序员宅基地

文章浏览阅读2.5k次。文章目录1、静态包含和动态包含的区别2、jsp有哪些内置对象?作用分别是什么?1、静态包含和动态包含的区别语法:静态包含:include指令是静态包含,静态包含的意思就是:把文件的代码内容都包含进来,再编译!<%@ include file=""%>动态包含:include行为是动态包含。其实include行为就是封装了request.getRequestDispatcher(String url).include(request,response) <jsp: include _jsp面试

google vr 入门之制作简易的VR播放器(三),android学生管理系统项目视频_自己的android app中集成vr浏览器-程序员宅基地

文章浏览阅读192次。// 使用google vr 添加的compile ‘com.google.vr:sdk-base:1.40.0’compile ‘com.google.vr:sdk-audio:1.40.0’compile ‘com.google.vr:sdk-videowidget:1.40.0’添加这些依赖包之后google给我们的生成了哪些library库呢?![](https://img-blog.csdn.net/20170427162756208?watermark/2/text/aHR0cDovL_自己的android app中集成vr浏览器

db和dbm_it dbm-程序员宅基地

文章浏览阅读1.8k次。DB :DB是一个纯计数单位:dB = 10logX。dB的意义其实再简单不过了,就是把一个很大(后面跟一长串0的)或者很小(前面有一长串0的)的数比较简短地表示出来。如:X = 1000000000000000(多少个了?)= 10logX = 150 dB X = 0.000000000000001 = 10logX = -150 dB DB在缺省情况下总是定义功率单位,以 1_it dbm

芯片验证从零开始系列(一)——芯片验证概论-程序员宅基地

文章浏览阅读1w次,点赞7次,收藏78次。芯片验证从零开始系列(一)——芯片验证概论芯片开发流程动态验证技术静态验证技术Emulation和FPGA原型开发由于最近一个比赛要用到UVM验证,顺便多一门以后求职的手艺,准备系统地学习一下SV和UVM,也可以为之后的毕业论文和发展方向做一些准备。芯片开发流程1)市场人员和客户沟通确定用户需求2)系统设计人员按照功能划分为各个子系统3)子系统由设计团队开发实现4)验证人员对设计功能展开验证,发现设计缺陷,交由设计人员修正5)验证没有出现漏洞后,交由后端人员进行综合,布局布线6)后端人员将_芯片验证

RabbitMQ详解(一):RabbitMQ相关概念_obpmq-程序员宅基地

文章浏览阅读8.9k次,点赞24次,收藏26次。RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用。作为一名合格的开发者,有必要对RabbitMQ有所了解,本系列是RabbitMQ快速入门文章,主要内容包括RabbitMQ是什么、RabbitMQ核心概念、五种消息模型、用Docker安装RabbitMQ等。_obpmq

随便推点

商业智能软件对比评测: FineBI 和 Tableau -程序员宅基地

文章浏览阅读358次。FineBI和Tableau是比较好的自助式商业智能软件,功能都很强大,是企业数据可视化不可或缺的利器,但两款产品还是有非常大的区别的,例如Tableau的功能全面且深入,更适合专业的数据分析人员,而FineBI则是面向普通的业务人员,数据分析过程更人性化,更简单和易用,并为企业提供了全面的数据管理和用户管理策略。下面对这两款商业智能软件做个对比评测。一、产品理念FineBI是帆软公司推出的自助..._centos7安装finebi

JQuery Ajax Maven [A]_ajaxmaven-程序员宅基地

文章浏览阅读190次。2020 JQuery Ajax Maven Spring MyBatis [A]JQuery + JQueryAjaxJQuery + JQueryAjax 1: JQueryJQuery + JQueryAjax 2: JQueryAjaxMavenSpringMVC MyBatisSpringMVC MyBatis 1: SpringMVCSpringMVC MyBatis 2: MyBatisSpringMVC MyBatis 3: MavenSpringMVC MyBatis 4: Spring_ajaxmaven

通信原理与MATLAB(八):2PSK的调制解调_psk解调-程序员宅基地

文章浏览阅读1.9w次,点赞60次,收藏310次。通信原理和MATLAB_psk解调

Halcon 3D定位方法-程序员宅基地

文章浏览阅读1.9k次。Descriptor-based Matchinguncalibrated mathcing return perspective map,calibrated matching return pose.find_calib_descriptor_model()Deformable MatchingFind objects with perspective distort..._halcon 3d定位

用 Hadoop 进行分布式并行编程, 第 3 部分_hdfs dfs -copyfromlocal /home/hadoop/temp/* /tempd-程序员宅基地

文章浏览阅读706次。Hadoop 是一个实现了 MapReduce 计算模型的开源分布式并行编程框架,借助于 Hadoop, 程序员可以轻松地编写分布式并行程序,将其运行于计算机集群上,完成海量数据的计算。在本文中,详细介绍了如何部署 Hadoop 分布式运行环境,如何让程序分布式运行于多台普通的计算机上,如何使用 IBM MapReduce Tools 轻松地将 MapReduce 程序部署到 Hadoop 分_hdfs dfs -copyfromlocal /home/hadoop/temp/* /tempdir

Linux进阶 apache服务器;虚拟主机_虚拟机安装开启httpd服务-程序员宅基地

文章浏览阅读309次。1.关闭防火墙systemctlstopfirewalld(暂时关闭,重启后恢复)修改前------将index.html改为hello.html。2.设置宽容模式setenforce0(暂时性设置)配置同一ip不同端口的虚拟主机访问apache服务器。(1)安装httpd(先挂载,用yum安装)(4)修改配置文件httpd.html。(3)创建文件hello.html。(2)启动httpd服务。(5)重启httpd服务。(5)重启httpd服务。(5)重启httpd服务。..._虚拟机安装开启httpd服务