夜雨聆风学习资料网

ARTICLE · 1321638

软考架构篇 | 软件架构是什么:架构、设计、框架的区别

软考架构篇 | 软件架构是什么:架构、设计、框架的区别

软考架构篇 | 软件架构是什么:架构、设计、框架的区别

前言

点个免费的赞和关注,有错误的地方请指出,看个人主页有惊喜。

作者:神的孩子都在歌唱

做后端开发几年,天天把"架构"挂在嘴边,但真要问一句"软件架构到底是什么",很多人答不上来。软考系统架构设计师上午题,考的就是这个。

这篇把架构的定义、三要素、和设计/框架的区别、4+1 视图一次讲透。

一、架构的定义:构件、连接件、约束

软件架构最通用的定义来自 IEEE 1471(后被 ISO/IEC 42010 取代):

架构是系统的基本组织,体现在构件、构件之间的关系、构件与环境之间的关系,以及指导其设计和演化的原则中。

拆开看就是三个要素:

要素
含义
举例
构件(Component)
系统里可独立识别、可替换的组成单元
服务、模块、数据库、缓存
连接件(Connector)
构件之间交互的机制
HTTP 调用、消息队列、RPC
约束(Constraint)
构件和连接件必须遵守的规则
分层不能反向依赖、接口规范

记住一句话:架构 = 构件 + 连接件 + 约束。 上午题直接考这句话。

架构的定义其实有两个流派,考试常拿来设陷阱:

(1)组成派——看结构,架构 = 构件 + 连接件 + 约束,强调系统由什么组成。

(2)决策派——看决策,架构 = 一系列重要决策的集合,强调架构师做的关键取舍。

两派不矛盾,只是切入角度不同:一个描述"长什么样",一个描述"为什么这么定"。答题时按题目问的角度选。

二、架构、设计、框架:三个概念别搞混

这是选择题的高频陷阱。三个词天天混着用,但考纲分得很清楚:

概念
层次
关注点
变化成本
架构
最高,全局
系统整体结构、关键决策、质量属性
极高,后期几乎改不动
设计
架构之下,局部
模块内部实现、算法、数据结构
中等
框架
贯穿,工具
可复用的半成品代码,提供骨架和扩展点
低,可替换

几个关键判断:

(1)架构决定"做什么、为什么这么做",设计决定"怎么做"。 架构回答系统由哪些部分组成、怎么协作;设计回答每个部分内部怎么实现。

(2)架构是设计的约束,不是并列关系。 设计必须在架构划定的框子里做,越界就是架构违规。

(3)框架是半成品,架构是蓝图。 Spring、.NET 是框架,它帮你把通用代码写好、留出扩展点,但选 Spring 不等于你的系统架构就设计好了。

一句话概括:架构管全局,设计管局部,框架是半成品。

三、描述架构:4+1 视图

架构不能只画一张图。Kruchten 提出的 4+1 视图模型,是软考案例题的标准答案框架:

视图
关注什么
主要读者
逻辑视图
功能需求,系统的对象模型
设计人员、最终用户
开发视图
模块组织、包结构、构建
开发人员
进程视图
并发、同步、性能
系统集成人员
物理视图
软件到硬件的映射、部署
系统工程师
场景(+1)
用例,串联验证上面四个视图
所有利益相关者

为什么是"+1"? 场景不是第五个视图,而是用来验证前四个视图是否自洽的手段。案例题问"如何描述架构",答 4+1 视图基本能拿到分。

四、架构为什么重要

架构之所以是软考高级的核心,就三个原因:

(1)承载质量属性。 性能、可用性、安全性、可修改性这些"非功能需求",靠代码补不出来,必须在架构层面解决。

(2)架构是最难更改的决策。 需求可以改、代码可以重构,但架构一旦落地,推倒重来的成本极高,所以架构决策要在项目早期做对。

(3)架构是利益相关者的沟通载体。 开发、测试、运维、客户,大家对着同一套架构图说话,才能对齐预期。

五、考点映射与例题

选择题 1:软件架构的三要素是( )。

A. 构件、连接件、约束B. 模块、接口、数据C. 视图、模型、文档D. 服务、中间件、框架

答案:A。B 是模块设计的要素,C 是架构描述的形式,D 是技术选型,都不是架构定义的三要素。

选择题 2:关于软件架构与设计的关系,正确的是( )。

A. 架构与设计是同一层次的概念B. 设计是架构的上层,指导架构C. 架构是设计的约束,设计在架构限定的范围内细化D. 框架就是架构

答案:C。A 层次不同;B 把上下级搞反;D 混淆框架和架构,框架是实现手段不是架构本身。

案例答题模板:题目给一个系统需求,问"该系统架构应关注什么、如何描述"。

答题分三层:

(1)架构关注点——构件划分、构件间连接方式、全局约束、质量属性(点名性能/可用性/安全等具体属性)。

(2)架构描述——4+1 视图:逻辑、开发、进程、物理 + 场景,每个视图一句话说明关注点。

(3)架构决策——关键技术选型及理由,比如为什么选分层、为什么引入消息队列。

口诀:架构管全局,设计管局部,框架是半成品;三要素构件连件约束,四加一视图来描述。


关注 公众号 神的孩子都在歌唱  可领取 几十G的 python ,java, 计算机基础,算法,网络等学习资料

作者:神的孩子都在歌唱本人博客:https://blog.csdn.net/weixin_46654114转载说明:务必注明来源,附带本人博客链接

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料