ScholarGate
助手

软件设计与架构

软件设计与架构关注软件系统如何被构建成组件和连接器,职责如何分解,以及设计决策如何满足功能需求和质量属性。

用 PaperMind 寻找选题即将推出Find papers & topics
Tools & resources
下载幻灯片
Learn & explore
视频即将推出

Definition

软件设计是定义系统架构、组件、接口和其他特征的过程,而软件架构是构成系统元素、它们之间的关系以及两者属性的结构集合。

Scope

此领域涵盖架构风格和模式(分层、客户端-服务器、微服务、事件驱动、管道与过滤器);设计原则,如模块化、信息隐藏、内聚、耦合和关注点分离;面向对象和基于组件的设计;设计模式;架构质量属性及其权衡;以及用于表达设计的UML等建模符号。

Sub-topics

Core questions

  • 系统应如何分解为模块和组件?
  • 哪种架构风格最能支持所需的质量属性?
  • 耦合和内聚等设计原则如何指导良好的结构?
  • 如何通过可重用模式解决重复出现的设计问题?

Key theories

信息隐藏和模块化
Parnas认为,模块的定义应隐藏可能在稳定接口后发生变化的设计决策,从而使变化局部化;这一原则是模块化、封装和低耦合的基础。
架构质量属性和权衡
架构受性能、可修改性、可用性和安全性等质量属性驱动;由于这些属性之间存在冲突,架构本质上是通过策略和模式指导的权衡推理。
设计模式
重复出现的设计问题有众所周知的命名解决方案——创建型、结构型和行为型模式——它们捕捉了专家实践,并为面向对象设计提供了共享词汇。

Clinical relevance

架构决策在后期最难更改,并且最强烈地决定了系统的质量属性,因此良好的设计和架构可以降低长期维护成本,实现可伸缩性和演进,并塑造团队组织。

Evidence & guidelines

ISO/IEC/IEEE 42010 标准化了架构描述,而SWEBOK软件设计知识领域以及《Software Architecture in Practice》等参考文本提供了共识性指导。

History

模块化设计原则由Parnas在20世纪70年代早期阐明。面向对象设计和设计模式在20世纪80年代和90年代成熟,软件架构在20世纪90年代中期随着Shaw和Garlan的工作而成为一个独立的学科,服务导向和微服务风格则在21世纪初和21世纪10年代相继出现。

Debates

单体架构与微服务架构
将系统构建为单一可部署的单体还是许多独立可部署的服务,这一问题广受争议;微服务以分布式系统复杂性为代价提供了独立的扩展和部署,因此正确的选择取决于规模和组织结构。

Key figures

  • David Parnas
  • Mary Shaw
  • Len Bass
  • Erich Gamma
  • Grady Booch

Related topics

Seminal works

  • parnas1972
  • gamma1994
  • bass2012

Frequently asked questions

设计和架构有什么区别?
架构关注最高层次的结构和更改成本最高的决策——主要组件、它们的交互以及系统范围的质量属性——而设计涵盖这些组件更详细的内部结构;两者的界限是重要性而非明确的划分。
设计模式为何重要?
模式捕捉了重复出现的设计问题的成熟解决方案,并为工程师提供了共享词汇,使设计更容易沟通、推理和演进;它们是需要审慎应用的指导,而非强制性的食谱。

Methods for this concept

Related concepts