软件系统设计-架构期末
1. 架构概念
- 架构定义
- 架构定义:软件系统的系统,系统包含元素,元素之间的关系,软件的属性和动态行为
- 工业界定义:设计阶段最重要设计决定的集合
- 软件架构师做什么
- 架构来源
- 主要:NFR非功能需求
- ASR
- 质量需求
- 利益相关者
- 技术环境
- 视图 4+1
- 逻辑视图:架构的静态关系
- 过程视图:运行过程种的变化行为
- 物理视图:和物理世界元素的对应关系
- 开发视图:开发活动
- 用例场景user case scenairos
- 架构活动和演化
- 软件架构知识域
2. 架构过程
四个阶段,图
2.1. 架构活动
架构实践、确认、维护、演化
2.2. 架构设计的活动
● 识别ASRs,指导架构设计的依据
● 考虑已有的框架、风格、模式、tactic
● 形成文档
● 架构的分析和评估 stakeholder参与,是否满足ASR要求
![[软件系统设计-架构期末#9.12. 简要描述在软件架构过程中涉及的⼀般活动,输入输出]]
3. 质量属性
- 软件需求
- 功能需求:系统行为
- 质量需求:系统完成工作好坏程度
- 约束:需求阶段预设的设计决定,不能妥协
- 质量属性
- 外部:用户把系统作为黑盒,可以从外部感受的
- 内部:可以知道系统内部怎么实现,开发人员,系统是否容易实现和维护
- 用刺激相应情景描述
- tatics树和设计决定
- checklist在七个方面评估质量属性
- ASR:
- 如何从用户获取ASR?从需求文档(不能提供足够信息,尤其是质量需求),座谈会,商业目标,效用树(Utililty Tree)
4. 架构模式
可以被复用的解决方案
涉及的架构元素
相互之间的关系
需要施加的设计决定
- 分类
- Module 描述静态关系
- CNC 组件连接器
- 系统动态关系
- 系统和外部(物理世界,人,组织….)
Tactic是最小粒度的基本设计决定
Pattern包含需要解决的问题,问题发生的场景,一系列设计决定
5. 设计架构
通用设计策略
- 抽象abstraction
- 分解decomposition:分解成一个个问题
- 分治divide & conquer
- 生成和测试generation and test:先根据ASR、质量属性选择一个初始的设计决定组合,然后看是不是能满足ASR要求
- 迭代iteration: 迭代,修正
- 重用reuse
设计需要覆盖7个方面
- Responsibilities职责:如何分配,不等于功能
- 还有质量要求,如Monitor是为了可用性而不是实现功能
- Coordination:系统元素如何协调通信
- Data:数据存储,存储协议,不同介质上的分配
- Resource:计算资源,网络,缓存,时间
- Elements mapping:元素对应关系,从架构元素到软件元素
- Binding time:元素之间的关系什么时候被确定下来
- 绑定事件越往后,越灵活,但是系统的不确定性增加,测试负担增加
- Technology: 实现技术和技术栈的选择
- Responsibilities职责:如何分配,不等于功能
ADD
- 输入:ASR
- 输出:在step 4生成的视图
- 8-step process:
- confirm requirements
- choose an element to decompose,
- identify ASRs,
- choose a design satisfying ASRs,
- instantiate elements & allocate responsibilities,
- define interface,
- verify & refine requirements,
- repeat step 2-7 until all ASRs satisfied
- Step4:
- 4.1 identify concerns,
- 4.2 list alternatives,
- 4.3 select patterns/tactics,
- 4.4 determine relations,
- 4.5 capture views,
- 4.6 resolve inconsistencies
6. 架构文档化
- Views视图
- style(viewpoints), pattern and views
- Structural views: module views, component and connector views, allocation views
- Quality views
- 文档化视图:
- 确定stakeholder,保留提供了大部分stakehodler都关心的信息的视图
- 合并视图
- 优先级排序,把不重要的视图筛选掉
- 视图补充信息
7. 评估架构
- ATAM方法的利益相关者(stackholder)
- ATAM方法:Architecture Tradeoff Analysis Method
- 阶段0:团队准备和建立
- 阶段1:评估1
- 介绍ATAM
- 介绍商业驱动
- 介绍架构
- 识别架构方法:通过研究架构文档、听取架构师的展示、向架构师询问设计系统时使用的模式和策略
- 生成效用树:确定、排序和优化系统最重要的质量属性目标,并最终用质量属性效用树来详细阐述
- 分析架构方法
- 阶段2:评估2
- 介绍ATAM和之前取得的结果(除了效用树)
- 头脑风暴,排列场景的优先级
- 分析架构方法
- 呈现结果
- 阶段3:后续
- 评估团队制作一份书面报告,发给主要涉众
- 不同阶段参加的stackholder不同
- phase1 评估团队,决策者
- phase2 评估团队,决策者,其他涉众
- phase3 评估团队,主要涉众
- 输入:架构文档
- 输出:风险(非风险,风险主题),敏感点,权衡点
phase1
phase2 不能向stackholder透露效用树
软考系统架构设计师(十一):软件架构评估 和 软件质量属性-腾讯云开发者社区-腾讯云
8. 微服务架构
更多考虑他们之间的关系
这里有张图,注意图例
9. 往年题
参考:
软件系统设计复习往年题 | wbl-z’s Blog
2021-软件系统设计-Exam0-往年考试 - SpriCoder的博客
9.1. 如何进行质量属性方案建模?请使用”刺激-相应”图的格式进行建模
- 如何建模:
- 刺激源
- 刺激
- 工件
- 环境
- 响应
- 响应度量
- 不同质量属性的刺激响应6要素:
9.2. 描述软件需求、质量属性和架构攸关的需求 (ASR) 之间的区别和关系
- 联系:
- 软件需求包括质量属性和架构重要需求;
- 质量属性需求越困难、越重要,就越可能对架构产⽣重⼤影响,因此可能是 ASR;
- ASR 的实现可能会影响质量属性
- 区别:
- 软件需求是总体的概念,质量属性是其中⼀部分内容,是整个系统的期望特性,是在功能需求之上的,强调系统需要达到的质量,ASR 是在架构上重要的需求,强调这个需求对于架构有重⼤影响;
- 质量属性侧重于描述需求要求的系统质量,ASR 侧重于描述需求可能影响系统架构
9.3. 什么是ASR?
Architecture Significant Requirement,架构攸关需求,是⼀种在架构上有深刻影响的需求。
质量属性需求越困难、越重要,就越有可能对架构产⽣重⼤影响,因此成为 ASR。
9.4. ASR四个来源和方法
- 从需求文档获取:MoScoW方法和用户故事
- 涉众采访:质量属性工作坊(QAW)
- 业务目标:通过理解业务目标获取ASR
- 从质量属性效用树获取:通过方案量化描述需求后,逐渐对质量属性进行分解细化,直到包含量化指标为止。
9.5. 设计软件时应用的通用设计策略/一般设计策略有哪些?为这些策略提供一个带有软件架构的简明工作示例
- 抽象abstraction
- 使用抽象让设计师关注本身结构而不关心实现,比如将系统抽象为组件和连接件或抽象为模块。
- 分解decomposition:
- 针对某一个系统关注点分解后处理,比如将整个系统分解或将某个模块分解,使满⾜给定的约束和安排,实现系统的质量和业务⽬标
- 分治divide & conquer
- 对各个模块分别处理
- 生成和测试generation and test
- 将一个特定的设计看作是一个假设;根据测试路径生成测试用例。
- 迭代iteration: 迭代,修正
- 使用迭代的方法,ADD方法多次迭代直到满足所有ASR
- 重用reuse
- 提取设计中可以重用的元素
9.6. ADD方法的过程
- 确定需求的信息充足
- 选择一个系统元素进行分解
- 识别候选的ASR
- 选择满足ASR的设计
- 识别设计关注点
- 从从属关注点列出可选的pattern、tactic
- 从列表中选择pattern、tactic
- 合成初步架构试图
- 评估和解决不一致
- 实例化元素并分配职责
- 定义实例化元素的接口
- 验证和细化需求,并使其成为实例化元素的约束
- 重复直到满足所有ASR
9.7. 为什么应该使用不同视图来记录软件架构?给出四个示例视图的名称和目的
- 原因:
- 不同视图支持不同的目标和用户,突出不同的系统元素和关系
- 不同视图将不同质量属性暴露出不同的程度
- 视图名称和目的:
- 模块视图 Module View:如何构建为一组实现单元?
- 组件和连接器视图 C & C View:如何构建为一组具有运行时行为和交互的元素的?
- 分配视图 Allocation View:与环境中的非软件结构有何关系?
- 质量视图 Quality Views,安全视图、性能视图、可靠性视图、沟通视图、异常(错误处理)视图
- 组合视图:将上述视图进行组合
9.8. 将以下每个问题(左侧)与解决该问题的架构风格/视图(右侧)对应起来。列出每个样式类别的四个视图
- 连线题
- 它是如何构建为一组实现单元的?How it is structed as a set of implementation of units(Module Styles)
- 它是如何构建为一组具有运行时行为和交互的元素的?How it is structed as a set of elements that have runtime behavior and interactions?(Component-Connector Styles)
- 它与环境中的非软件结构有何关系?How it relates to non-software structures in its environment?(Allocation Styles)
- Module Styles:分解视图、使用视图、泛化视图、分层视图、领域视图、数据模型视图
- Component-Connector Styles:管道-过滤器视图、客户端-服务器视图、点对点视图、面向服务视图、发布-订阅视图
- Allocation Styles:部署视图、安装视图、工作分配视图、其他分配视图。
9.9. 描述4+1视图并绘制
4+1 architectural view model - Wikipedia
- 逻辑视图:描述了对架构而言重要的元素和他们之间的关系(功能需求)
- UML的类图、状态图描述
- 过程视图:描述了元素之间的并发和交互。
- UML的顺序图、通信图、活动图描述
- 物理视图:描述了主要过程和组件是如何被映射到硬件上的。
- UML部署图
- 开发视图:描述体系结构的需求,软件开发环境的静态结构
- UML包图、组件图
- 用例场景(Use Case):捕获架构需求,与一个或多个特定视图相关。
- 刺激响应图
9.10. 什么区分了软件产品线架构和单个软件产品架构?
- 产品线的目的:实现高可重用性、高修改性。
- 产品线之所以有效是因为通过重用可以充分利用产品的共性,从而产生深长的经济性。
- 在产品线架构中有一组明确允许发生的变化,然而对于常规架构来说,只要满足了单个系统的行为和质量目标,几乎任何实例都是可以的。因此,识别允许的变化是架构责任的一部分,同时还需要提供内建的机制来实现它们。
9.11. 软件架构涉及哪些风险、敏感点和权衡点?为每个点给出一个例子
- ⻛险:可能对所需质量属性产⽣负⾯影响的架构决定;
- 增加备份数据库导致性能下降;
- ⽤户的简单密码是安全性的⻛险
- 敏感点:对于特定质量属性敏感的架构决定;
- 可靠性对于增加备份数据库敏感;
- ⽤户的简单认证降低安全性
- 权衡点:影响多个质量属性的架构决定;
- 增加备份数据库让可靠性提升,让性能下降
9.12. 简要描述在软件架构过程中涉及的⼀般活动,输入输出
- 创造系统的商业案例
- 理解需求
- 创造和选择架构
- 与涉众沟通架构
- 分析或评估架构
- 总的方法
- 质量特定方法
- 实现架构
- 确保架构符合要求
- 识别ASRs
- 输入:无
- 输出:优化的质量属性场景
- 架构设计
- 输入:优化的质量属性场景、需求和约束、模式和决策
- 输出:一组候选视图的草图(模式决定)
- 架构文档化
- 输入:一组模式决定的草图(由模式决定)
- 输出:View & Beyond
- 架构评估
- 输入:View & Beyond、优化的质量属性场景
- 输出:View & Beyond
9.13. 典型的软件架构⽂档包中应该包括什么?简要描述各个组件及其⽤途
- 文档路线图:描述文档中有哪些信息,在哪里可以被找到
- 描述视图的文档结构
- 主要展示:显示视图的元素及其关系,通常图形化
- 元素⽬录:详细描述元素及其属性、关系及其属性、元素接⼝和⾏为
- 上下⽂图:展示系统和其部分如何与环境关联
- 可变性指南:描述该视图如何应对未来架构的任何变化点
- 缘由:为什么这个视图反映了设计,提供⼀个令⼈信服的论据以说明它是 健全的
- 系统概览:概要地描述系统
- 在视图间映射:描述每种视图的相似和映射
- 原因:描述最终选择试图的原因
- 目录:索引、词汇表、缩略词表
9.14. ATAM每个阶段的输出
- 阶段0:
- 涉众的初步名单
- 逻辑:何时?何地?如何?
- 评估报告交给谁?
- 报告包含什么?
- 阶段1:
- 架构描述
- 商业驱动
- 作为场景实现的特定质量属性需求的优先级列表
- 效用树
- 风险和非风险点
- 敏感点和权衡点
- 阶段2:
- 涉众社区的场景优先级列表
- 风险主题
- 受到威胁的业务驱动因素
- 阶段4:
- 最终评估报告
9.15. 微服务和SOA的区别、相同点?
- 区别
- SOA使用企业级总线通信,微服务使用清凉级通信机制
- SOA每个服务职责较重,微服务每个服务职责单一
- SOA强调中央管理,微服务去中心化
- 微服务的耦合比SOA小
- 相同
- 都采用分布式组件的形式
- 各个组件可以相互服务而无需知道细节
- 服务自身高内聚,服务间低耦合
- 微服务是SOA的一种
- 标题: 软件系统设计-架构期末
- 作者: Charlie
- 创建于 : 2024-06-06 10:06:00
- 更新于 : 2024-07-05 12:55:04
- 链接: https://chillcharlie357.github.io/posts/3ff9b627/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论