【系统架构师】软件架构设计——1 软件架构概念与模型

软件架构设计

软件架构是软件抽象发展到一定阶段的产物,从编程的角度,可以清晰地看到软件抽象层次和表达工具的发展历史。

软件或计算机系统的软件架构是该系统的一个(或多个)结构,而结构由软件元素、元素的外部可见属性及它们之间的关系组成。

1 软件架构

软件架构有一下6个特点:
1. 架构是对系统的抽象,它通过描述元素、元素的外部可见属性及元素之间的关系来反映这种抽象。因此,仅与内部具体实现有关的细节是不属于架构的,即定义强调元素的“外部可见”属性。
2. 架构由多个结构组成,结构是从功能角度来描述元素之间的关系的,具有体的结构传达了架构某方面的信息,但是个别结构不能代表大型软件架构。
3. 任何软件都存在架构,不一定有对该框架的具体表述文档。即架构可以独立于架构的描述而存在。
4. 元素及其行为的集合构成架构的内容。
5. 架构具有“基础”性:它通常涉及解决各类关键的重复问题的通用方案(复用性),以及系统设计中影响深远的各项重要决策。
6. 架构隐含有“决策”,即架构是有架构设计师根据关键的功能和非功能性需求(质量属性及项目相关的约束)进行设计与决策的结果。不同的架构设计师设计出来的架构是不一样的,为避免架构设计师考虑不周,重大决策应经过评审。特别是架构设计师自身的水平是一种约束,需要不断学习和积累经验提升自身能力。

软件架构在软件开发中具有十分重要的意义:
1. 作为项目相关人员之间交流的平台。架构提供了一个共同语言,便于理解彼此、协商、达成共识。
2. 早期设计决策。从软件生命周期来看,软件架构是所开发系统的最早设计决策的体现,主要表现在4个方面,①明确系统实现的约束条件,②影响系统的质量,③为系统后期维护提供决策依据,④有助于快速开发原型系统,开发系统骨架。
3. 在较高层面上实现软件的复用。软件架构作为系统的抽象模型,可以在多个系统间传递(复用)。
4. 开发的指导与规范。架构作为系统的总体设计,它指导后续的详细设计和编码。架构使基于模板的开发成为可能,有利于开发规范化和一致性,减少开发与维护成本。

基于架构的软件开发模型明确地把整个软件过程划分为架构需求、设计、文档化、评审、实现、演化等6个子过程。

架构模型

软件架构作为一个有机的整体,可以分解成多个侧面来认识,每个侧面强调不同的特征。通常将软件架构归纳为5种模型:

  1. 结构模型。以架构的构件、连接件和其他概念刻画结构,并力图通过结构反映系统的重要语义内容,包括系统的配置、约束、隐含的假设条件、风格、性质。
  2. 框架模型。与结构模型类似,但不强调结构的细节,更注重整体的架构。
  3. 动态模型 。作为结构或框架模型的补充,研究系统“大颗粒”的行为性质。例如,描述系统的重新配置或演化。动态可能指系统总体结构的配置、建立或拆除通信通道或计算的过程。
  4. 过程模型。过程模型研究构造系统的步骤和过程。因而结构是遵循某些过程脚本的结果。
  5. 功能模型。模型认为架构由一组功能构件按层次组成,且下层向上层提供服务。

另外一种描述架构的模型,将多个模型合为一体,以此反映完整的软件架构。如Kruchten在1995年提出的”4+1” 视图模型。

4+1视图

  1. 逻辑视图(Logical View)
    关注系统的用户需求,即系统提供给最终用户的服务。 在逻辑视图中,系统分解成一系列的功能抽象,这些抽象主要来自问题领域。在面向对象技术中,通过抽象、封装和继承,可以用对象模型来代表逻辑视图,用类图来描述逻辑视图。

  2. 开发视图(Development View)
    也称为模块视图。主要侧重于软件模块的组织和管理。软件可以通过程序库或子系统进行组织,有利于工程师分工开发。开发视图要考虑软件内部的需求,如软件开发的容易性、软件的重用和软件的通用性,要充分考虑由于具体开发工具的不同带来的局限性。开发视图通过系统输入输出关系的模型视图和子系统图来描述

  3. 进程视图(Process View)
    进程视图侧重于系统的运行特性,主要关注一些非功能性的需求,例如系统的性能和可用性。进程视图强调并发性、分布性、系统集成性和容错能力,以及逻辑视图中的主要抽象的进程结构。它也定义逻辑视图中的各个类的操作具体在哪一个线程中被执行的。

  4. 物理视图(Physical View)
    主要考虑如何把软件映射到硬件上,它通常要考虑到解决系统拓扑结构、系统安装、通信等问题。

  5. 场景(Scenarios)
    场景是那些重要系统活动的抽象,它使四个视图有机地联系起来,从某种意义上说,场景是最重要的需求抽象。在开发架构时,它可以帮助设计者找到架构的构件和它们之间的作用关系。

逻辑视图和开发视图描述系统的静态结构,而进程视图和物理视图描述系统的动态结构。对于不同的软件系统来说,侧重的角度也有所不同。例如,对于管理信息系统来说,比较侧重于从逻辑视图和开发视图来描述系统,而对于实时控制系统来说,则比较注重于从进程视图和物理视图来描述系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值