一、概念性问题
1、架构的5个来源
需求、涉众、开发组织、架构师、技术环境
2、需求的3类,每一类的定义
功能性需求,质量需求、约束
功能需求:系统需要做什么,系统应当如何为涉众提供价值。
质量需求:系统应当满足的整个系统的理想特性。
约束:是预定义的设计决策。通过接受设计决策、与其他受影响的设计决策进行协调来满足约束。
3、架构的定义
SEI:是整个程序或计算系统的结构(Structure),包含了程序的元素(Software Elements)和那些外部能看见的元素属性(Properties)和元素之间的关系(Relationship)
IEEE:一个系统的基本组织,包含了了它的所有组件(Components)、组件之间的关系、环境以及指导该系统的设计(Design)和演化(Evolution)的原则(Principle)
4、列举4种tactics
心跳机制:监控系统/服务的可用性,如果不再能收到服务的心跳,则认为服务已经失效/出了故障,可用来提高可用性、可靠性
提高内聚、降低耦合、重构、清晰定义接口:可以提高系统的可修改性,互操作性
提高资源效率,增加资源,控制资源需求、引入并发:系统接收到外部请求后可迅速响应。提高系统性能
时间戳:可用于发现错误序列,尤其是分布式信息传递系统中
事务机制,回滚:便于故障恢复
主动冗余:采用冗余的服务器的机制来保证系统出现故障时不发生可用性缺失。
5、软件架构中的4个活动及各自的输入输出(就是那张颜色丰富的图
确定ASR:发现一些候选ASR
输入:涉众 输出:带优先级的质量属性场景
架构设计:定位ASR,选择、生成和分析设计决策来达成这些质量属性
输入:带优先级的质量属性场景、需求、约束、patterns和tactics 输出:候选views
文档化:设计出来架构后还要让它可被涉众理解和使用
输入:候选view、涉众 输出:选中的views和其结合文本的表示
架构评估:关乎系统成败,有必要花时间确保架构设计可提供需要的东西
输入:涉众、带优先级的质量属性场景 输出:选中的views和其结合文本的表示
二、比较对比问题
1、架构VS设计
1)架构是设计的一部分:架构一定是软件设计,但并非所有的设计都是架构;
2)架构提供了设计的抽象视图,架构是一种high level的设计,是一系列设计决策。
2、架构VS结构
架构包括software elements和它们的外在特性、它们之间的关系。
结构定义了组件接口,但架构还说明组件间的交流和依赖
架构是一种high level的结构,架构定义了结构,结构特性由架构设计决定。
3、软件需求VS质量属性VS架构关键需求(ASR
软件需求 :包括功能需求、非功能需求;非功能需求or架构需求则是QA的替代术语。
质量属性:在功能需求之上,系统应当满足的整个系统的理想特性
ASR:对于架构会产生重大影响的,会对架构设计决策产生关键影响的那部分质量属性。一个质量属性越困难、越重要,越倾向于成为ASR。
4、patterns VS tactics
1)tactics更加简单,使用单一结构或机制来达成单一架构目标
2)patterns是多种相关设计决策进行组合的结果
3)tactics是构建patterns的组成模块
4)大部分patterns由多种不同的tactics组成
5)二者共同构成软件架构的主要工具
5、styles vs patterns vs views
style:定义元素、元素间关系类型和元素用法约束,关注架构方法,不关注具体上下文和问题;=architecture approach
pattern:体现软件系统基本的结构组织模式。关注具体上下文中的问题和具体上下文中如何解决;=(problem