本页使用了标题或全文手工转换

软件架构

维基百科,自由的百科全书
跳转至: 导航搜索

软件架构是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。

软件开发
软件开发步骤
需求分析 | 软件架构 | 软件设计 | 软件编程 | 软件测试 | 软件部署 | 軟體維護
软件开发模式
敏捷开发 | 無塵室 | 迭代式开发 | RAD | 统一过程 | 螺旋模型 | 瀑布模型 | 极限编程 | Scrum
软件开发辅助领域
配置管理 | 文档编写 | 质量管理 | 项目管理 | 使用者經驗設計
软件开发工具
编译器 | 除错器 | 性能分析 | GUI设计 | 集成开发环境

介绍[编辑]

软件体系结构是构建计算机软件实践的基础。与建筑师设定建筑项目的设计原则和目标,作为绘图员画图的基础一样,一个软件架构师或者系统架构师陈述软件架构以作为满足不同客户需求的实际系统设计方案的基础。从和目的、主题、材料和结构的联系上来说,软件架构可以和建筑物的架构相比拟。一个软件架构师需要有广泛的软件理论知识和相应的经验来实施和管理软件产品的高级设计。软件架构师定义和设计软件的模块化,模块之间的交互,用户界面风格,对外接口方法,创新的设计特性,以及高层事物的对象操作、逻辑和流程。

软件架构师与客户商谈概念上的事情,与经理商谈广泛的设计问题,与软件工程师商谈创新的结构特性,与程序员商谈实现技巧,外观和风格。

软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口来实现。

历史[编辑]

早在1960年代,诸如艾茲格·迪傑斯特拉就已经涉及软件架构这个概念了。自1990年代以来,部分由于在 Rational Software CorporationMicrosoft内部的相关活动,软件架构这个概念开始越来越流行起来。

卡内基梅隆大学加州大学埃尔文分校在这个领域作了很多研究。卡内基·梅隆大学的Mary Shaw和David Garlan于1996年写了一本叫做Software Architecture perspective on an emerging discipline的书,提出了软件架构中的很多概念,例如软件组件、连接器、风格等等。加州大学埃尔文分校的软件研究院所做的工作则主要集中于架构风格、架构描述语言以及动态架构。

架构描述语言[编辑]

架构描述语言(ADL)用于描述软件的体系架构。现在已有多种架构描述语言,如Wright(由卡内基梅隆大学开发),Acme(由卡内基梅隆大学开发),C2(由UCI开发),Darwin(由伦敦帝国学院开发)。ADL的基本构成包括组件、连接器和配置。

视图[编辑]

软件架构一般来说组织成视图,如同在建筑学中的不同种类的蓝图。一些可能的视图有:

  • 功能/逻辑视图
  • 代码视图
  • 开发/结构视图
  • 并行/过程/线程视图
  • 物理/部署视图
  • 用户动作/反馈视图

有许多为描述软件架构的语言被开发出来,但是关于应该采用什么样的符号集和视图系统还没有达成共识。一些人相信UML将建立一套软件架构视图的标准。

例子[编辑]

设计软件模块以及模块之间的通信有很多常用手段,包括

相关的概念[编辑]

在软件架构中,使用了很多概念,包括:

参见[编辑]

参考文献[编辑]

  • Len Bass, Paul Clements, Rick Kazman: Software Architecture in Practice. Addison Wesley, Reading 1998 ISBN 0-201-19930-0(gives a good overview of architectural concepts)
  • Philippe Kruchten: Architectural Blueprints - the 4+1 View Model of Software Architecture. In: IEEE Software. 12 (6) November 1995, pp. 42-50 (also available online at the Rational website(PDF))
  • James O. Coplien: Multi-Paradigm Design in C++. Addison Wesley, Reading 1998 ISBN 0-201-82467-1(outlines all reasonable design approaches possible in C++, which is a particularly rich language but difficult for beginners)

外部连接[编辑]