2026UG_SysArch1_introduction 逐页中文翻译

第 1 页

软件系统设计
Software Systems Design

第 2 页

课程事务 / 课程安排
Course Logistics

第 3 页

联系方式
Contact Information

  • 课程负责人:张贺教授
  • 助教老师:李杉杉
  • 助理研究员:吕骏
  • 右侧为课程群二维码

第 4 页

为什么学习软件设计与架构?

  • 软件 / IT 系统无处不在
  • 每一个软件密集型系统都有软件设计和软件架构
  • 软件设计与架构在实践、教育和研究中都变得越来越重要
  • 作为一种职业:软件架构师
  • 作为研究领域:
    • 最早大约从 1960 年开始
    • 自 1990 年以来受到大量关注
  • 本课程关注:
    • 软件设计与架构的概念、原则、方法和模式
    • 软件设计与架构的前沿实践

第 5 页

自 2010 年代以来,美国最佳职业排名前 1-3:软件架构师

这一页用职业排名和行业数据说明:软件架构师是重要且高价值的软件职业。右侧图表也展示了软件工程相关任务中,开发、维护、质量保证、需求工程、软件设计和管理等活动的比例,以及大语言模型在软件工程任务中的应用分布。

第 6 页

学习目标

  • 理解软件设计与软件架构的概念和原则
  • 能够通过需求分析或逆向架构来创建软件架构
  • 在创建软件架构和设计时应用模式、风格和框架
  • 系统地分析软件设计并评价软件架构
  • 理解软件设计与架构中使用的前沿方法
  • 理解软件设计、软件架构与其他软件工程主题领域之间的关系

第 7 页

课程设计:架构部分 1

资料来源:

  • SECS 软件工程课程标准
    • 第 4.11 节:软件建模与分析
    • 第 4.12 节:软件设计
    • 与其他领域有紧密关系
  • SWEBOK 软件工程知识体系
    • 第 3 章:软件设计

参考过的以往课程:

  • UNSW COMP9117
  • USYD INFO3220
  • ITU & SMU
  • NJU 2014-2025

2026 年安排:

  • 4 月 / 5 月,第 8-10 周:软件架构概念、质量属性与战术
  • 5 月 / 6 月,第 11-14 周:架构模式、设计方法、架构评价、微服务架构
  • 6 月,第 16 周:课程复习

第 8 页

课程设计:架构部分 2

授课:

  • 课堂中鼓励互动

作业:

  • 应用你学到的原则和方法
  • 针对技术进行独立调研
  • 利用你的编程和技术背景
  • 所有作业都会进行查重

小组练习:

  • 学生将独立完成个人作业,并被分配到小组完成小组任务
  • 这些环节用于强化对课堂材料的学习,帮助你获得理解和技能
  • 小组练习中,需要系统地创建和 / 或评价一个带有部分设计的软件架构

第 9 页

最终成绩

  • 期末考试组成:
    • 50% 来自架构设计
    • 50% 来自设计模式
  • 总评成绩 = 期末考试 × 60% + 作业 × 40%
  • 期末考试包括多种题型:
    • 简答题
      • 知识:回忆概念、原则和方法
      • 理解:解释、比较、对比等
    • 设计与评价练习
      • 理解:将知识迁移到新场景中,推断原因等
      • 应用:把学过的内容应用到新的具体情境中
  • 考试会提供必要的参考材料

第 10 页

参考书目:没有指定官方教材

  • Bass、Clements、Kazman:《Software Architecture in Practice》
  • Cervantes、Kazman:《Designing Software Architecture: A Practical Approach》
  • Richardson:《Microservices Patterns》
  • Clements 等:《Documenting Software Architectures: Views and Beyond》
  • Taylor、Medvidovic、Dashofy:《Software Architecture: Foundations, Theory, and Practice》
  • Bass、Lu、Weber、Zhu:《Engineering AI Systems: Architecture and DevOps Essentials》

第 11 页

课程事务页面汇总

这一页是前面课程安排、联系方式、评分方式、参考书等内容的缩略图总览。

第 12 页

导论
Introduction

第 13 页

理解软件工程

  • 软件 × 工程
    • 软件 vs. ?
    • 科学 vs. 工程

图中表达的是:

  • 科学路径:研究已有事物,例如天文学、生物学、化学等;常用观察、测量和实验
  • 工程路径:制造新的事物,例如金字塔、船、汽车、电话等;常用构造和评价
  • 更好的工具、更好的材料理解和测量方法,会让科学与工程相互促进

第 14 页

什么是软件架构?

定义 1:

一个程序或计算系统的软件架构,是该系统的一个或多个结构。这些结构由软件元素、这些元素的外部可见属性,以及它们之间的关系组成。——SEI 软件工程研究所

定义 2:

软件架构是一个系统的基本组织结构,体现在系统的组件、组件之间的关系、组件与环境之间的关系,以及指导系统设计和演化的原则中。——IEEE 1471-2000

第 15 页

架构 vs. 设计

  • 架构属于软件设计
    • 所有架构都是软件设计,但不是所有设计都是软件架构
    • “架构化”活动是设计过程的一部分
  • 其他观点:
    • 架构是高层设计
    • 架构是一组设计决策
  • 架构描述系统的结构 / 组织:
    • 元素:组件与连接件
    • 关系:静态关系与动态关系
  • 架构还描述属性:
    • 元素的属性
    • 元素组合的属性
    • 整个系统的属性

第 16 页

架构 vs. 结构

  • 结构指将系统分解为组件、模块或子系统
  • 架构进一步定义:
    • 组件接口
      • 一个组件能做什么?
    • 组件通信和依赖
      • 组件之间如何通信?
    • 组件职责
      • 当你请求一个组件时,它到底会做什么?

第 17 页

结构与架构

这一页通过图示说明:架构不仅是组件的分解,还包含组件之间的依赖、交互方式和组织方式。不同的结构组织会导致不同的依赖关系,也会影响系统的可维护性和演化成本。

第 18 页

架构规定通信

通信包括:

  • 数据传递机制,例如:
    • 函数调用
    • 远程方法调用
    • 异步消息
  • 控制流
    • 组件之间的消息流如何配合以实现所需功能
    • 顺序执行
    • 并发 / 并行执行
    • 同步机制

第 19 页

架构处理非功能需求

  • 非功能需求 NFRs 定义“系统工作得有多好”
  • 非功能需求很少被完整地包含在功能需求中
    • 也叫架构需求
    • 必须由架构师主动挖掘
  • 非功能需求包括:
    • 技术约束
    • 业务约束
    • 质量属性
  • 讨论:你能列出哪些质量属性?

第 20 页

设计是一种抽象

  • 架构提供了设计的更高层次抽象视图
    • 隐藏设计复杂性和实现细节
    • 架构元素与软件元素之间不一定存在直接映射关系
  • 黑盒设计与白盒设计
    • 对系统结构和交互进行非正式描述
    • 体现架构中包含的设计哲学
  • 讨论:为什么设计中需要抽象?

第 21 页

架构视图

  • 软件架构代表一个复杂的设计产物
  • 架构可能有很多种视图
    • 可以类比建筑:平面图、外部视图、电气图、管道图、空调图等

含义是:同一个系统可以从不同角度观察,不同视图服务于不同关注点和不同利益相关者。

第 22 页

如何开展设计?

通用设计策略:

  • 分解
  • 抽象
  • 逐步进行:分而治之
  • 生成并测试
  • 迭代:增量式求精
  • 可复用元素

第 23 页

P. Krutchen 的 4+1 视图模型

  • 逻辑视图:描述架构中具有架构意义的元素,以及它们之间的关系
  • 进程视图:描述架构中的并发和通信元素
  • 物理视图:描述主要进程和组件如何映射到应用硬件上
  • 开发视图:描述软件组件在开发环境中的内部组织方式,例如配置管理工具中的组织
  • 架构用例:捕获架构需求,通常与多个特定视图相关

第 24 页

建筑师与软件架构师

引用:

建筑师设计结构,以满足人的需要。——James Fitch, 1972

架构师的角色保持一致:

  • 倾听客户,理解整体需求
  • 审查可行性
  • 形成结构的实践愿景并创建蓝图
  • 监督构建过程,确保符合计划
  • 在设计变化、危机和模糊性中引导愿景

软件架构师监督软件构建专业人员:

  • 程序员、工程师、设计师

著名软件架构师:

  • Bill Gates:微软首席软件架构师
  • Tim Berners-Lee:万维网发明者和首席架构师
  • Roy Fielding:REST 架构风格提出者

第 25 页

软件架构师做什么?

  • 沟通协调
    • 在客户、技术团队、业务 / 需求分析人员之间沟通
    • 与管理层或市场人员沟通
  • 软件工程
    • 掌握软件工程最佳实践
  • 技术知识
    • 深入理解技术领域
  • 风险管理
    • 管理与设计和技术选择相关的风险
    • 以及其他风险

第 26 页

通用设计模型

设计过程的输入包括:

  • 需求规约
  • 约束条件,例如资源、组织、经验、已有软件复用等
  • 设计者的决策

设计过程的输出是:

  • 程序描述

也就是说,设计过程是在需求、约束和设计者决策共同影响下,把需求转化为可实现的程序描述。

第 27 页

软件设计过程

左侧图示:

  • 需求规约
  • 架构设计决策
  • 逻辑设计细节
  • 详细设计决策
  • 物理设计细节

右侧图示:

  • 澄清需求本质
  • 分析需求并建立问题的黑盒模型
  • 提出白盒设计方案
  • 验证方案,包括使用原型
  • 以合适形式实现设计方案

这一页强调:设计是从需求到架构、逻辑设计、详细设计和物理设计逐步细化的过程。

第 28 页

架构活动

  • 为系统创建业务案例
  • 理解需求
  • 创建和选择架构
  • 与利益相关者沟通架构,包括开发者
  • 分析或评价架构
    • 总体方法论
    • 面向特定质量属性的技术
  • 实现架构
  • 确保实现符合架构

第 29 页

软件架构过程

图中过程包括:

  • 明确架构显著需求 ASRs
  • 识别并优先排序质量属性场景
  • 结合需求、约束、模式和战术进行架构设计
  • 得到候选视图草图
  • 选择并合并视图
  • 进行架构文档化
  • 进行架构评价
  • 利益相关者持续参与反馈

第 30 页

架构生命周期

主要阶段包括:

  • 架构分析:检查架构关注点和上下文,形成架构显著需求
  • 架构综合:针对给定的架构显著需求设计架构方案
  • 架构评价:用架构显著需求评价候选架构方案
  • 架构实现:通过详细设计和开发实现架构
  • 架构维护:修改或演化架构,以进行修正和扩展

第 31 页

软件设计与架构知识领域

  • 软件设计基本概念
    • 通用设计概念
    • 软件开发生命周期中的上下文:需求、设计、构造和测试
    • 设计过程:策略、角色、活动
  • 关键技术问题:
    • 并发
    • 控制与事件处理
    • 分布式
    • 异常处理
    • 交互式系统
    • 持久化
  • 软件结构与架构
    • 架构结构与视点
    • 架构风格和模式:宏观架构
    • 设计模式:微观架构
  • 软件设计方法
    • 架构方法,例如属性驱动设计
    • 设计方法,例如领域驱动设计

第 32 页

软件设计与架构知识领域

  • 软件设计质量分析与评价
    • 质量属性
    • 质量分析与评价方法、技术和工具
      • 设计评审,例如 SEI 的架构权衡分析方法 ATAM
      • 静态分析和动态分析
      • 仿真和原型
    • 度量
      • 架构层面度量
      • 技术特定度量
  • 设计建模与表示
    • 架构与设计符号,例如架构描述语言 ADL
    • 统一建模语言 UML
    • 设计文档:视图以及更多内容
    • 其他:能力、关注点和领域各不相同,例如 ACME、Rapide

第 33 页

架构课程预览

  • 第 1 讲:导论
    • 软件架构概念
  • 第 1-3 讲:质量属性与架构战术
    • 质量属性、非功能需求和场景
    • 实现质量属性的战术
    • 架构显著需求
  • 第 4 讲:架构模式
    • 软件设计中的模式
    • 架构风格和模式
  • 第 5/6 讲:架构设计方法
    • 通用设计策略
    • 软件设计过程与架构化过程
    • ADD 方法:属性驱动设计

第 34 页

架构课程预览

  • 第 7 讲:微服务架构
  • 第 8 讲:课程复习 —— 软件架构
  • 期末考试

第 35 页

参考书

这一页展示了若干软件架构参考书封面,包括:

  • Software Architecture in Practice
  • Designing Software Architectures
  • Engineering AI Systems
  • Microservices Patterns
  • Documenting Software Architectures
  • Software Systems Architecture

第 36 页

导论部分页面总览

这一页是前面导论相关页面的缩略图总览。

第 37 页

架构的作用

  • 架构是最早的设计产物之一,它表示关于“需求如何被实现”的决策。作为早期设计决策的体现,架构代表那些最难改变的设计决策,因此值得最谨慎地考虑
  • 架构是在产品线工程中取得成功的关键产物。产品线工程是以更少的努力、费用和风险,系统化开发一族相似系统的学科
  • 当有人开始处理一个系统时,架构通常是第一个被检查的设计产物
  • 软件架构为维护和修改决策提供参考框架

第 38 页

为什么软件架构重要?

  • 软件架构提供沟通工具
    • 它是一个参考框架,在其中可以识别并协商相互竞争的利益
    • 与用户协商需求
    • 让客户了解进度、成本等情况
    • 落实管理决策和资源分配
  • 软件架构体现最早的一组设计决策
    • 它约束实现和开发人员
    • 实现必须符合架构
    • 资源分配决策会约束各个组件的实现

第 39 页

为什么软件架构重要?

早期设计决策的体现:

  • 软件架构决定开发和维护工作的组织结构,例如:
    • 团队划分
    • 预算和计划单位
    • 工作分解结构的基础
    • 文档组织
    • 配置管理库的组织
    • 集成的基础
    • 测试计划和测试的基础
    • 维护的基础

第 40 页

为什么软件架构重要?

  • 架构会促进或阻碍质量属性的达成,例如可修改性、安全性、易用性等
  • 架构会影响质量,但不能保证质量,因为还有许多其他因素参与其中
  • 架构会引发关于潜在变化的讨论。一个系统 80% 的工作量可能发生在部署之后
  • 架构把变化分为三类:
    • 局部变化:修改单个组件
    • 非局部变化:修改多个组件
    • 架构级变化:修改系统的基本结构、通信机制和协调机制

第 41 页

为什么软件架构重要?

  • 架构是一种可迁移、可复用的抽象,是一对多映射:一个架构可以对应多个系统
  • 架构是产品共性的基础:一整条产品线可以共享一个架构
  • 系统可以通过架构来集成独立开发的组件,这就是基于组件的软件工程 CBSE

第 42 页

手机系统架构

这一页展示一个移动电话系统架构示例。图中包含电话呼入呼出、移动性管理、无线资源管理、认证、寻呼、加密、切换、位置登记、数据库等组件及其交互关系。

第 43 页

洗衣机架构

这一页展示洗衣机系统的架构示例。它说明嵌入式系统也有架构:传感器、控制逻辑、洗涤流程、用户输入、执行部件等需要通过清晰结构协作。

第 44 页

AI 护栏架构

这一页展示 AI Guardrail Architecture。图中包含输入护栏、RAG 护栏、执行护栏、输出护栏、多模态护栏、知识库、检索式 AI 模型、外部工具、基础模型等元素。

含义是:AI 系统也需要架构设计,通过多层护栏、知识检索、工具调用和模型服务来控制风险并提升系统质量。

第 45 页

软件研发效能实验室

这一页是实验室宣传与联系方式,包括 DevOps 相关活动、公众号和联系二维码。