ELEC5620 Week 12 全课复习与考点总览讲课总结
ELEC5620 Week 12:Unit Review 全课复习与考点总览
课程:ELEC5620 — Model Based Software Engineering,Semester 2 2026 讲师:Dong Yuan 来源:讲义 PDF
Unit Review.pdf(47 页)+ELEC5620-TUT-12.pdf(30 页,Profile 与 OCL 回顾)。Week 12 文件夹没有 Lab Note;课程文件夹中没有 Exam Prep 材料。本周无转录稿。期末考形式(见 Week 01 1.2):闭卷、线下,占 40%,以建模为主——给定场景,画模型、设计模型;老师明确说不会考“写出软件架构的定义”这类默写题。所以本篇按“会画什么、画对的标准是什么”来组织。
一、全课地图(Unit Review 第 2 页)
讲义把整门课归纳成四类模型:
| 类别 | 内容 | 对应周次 |
|---|---|---|
| Requirement Models | Ad hoc requirements、feature diagram、use case overview diagram、use case specification | W3 |
| Design Models — Build-time | class diagram、package diagram、profile diagram | W5、W8、W11 |
| Design Models — Runtime | object diagram、collaboration、port、structured class、activity diagram、communication diagram、sequence diagram、interaction overview diagram、state machine diagram | W6、W7 |
| Meta-Models | 元模型、MOF、四层架构、UML 元模型实例化 | W10 |
| Development Models | Heavy weight:Waterfall、Spiral;Light weight:Agile、DevOps | W8、W9 |
另外贯穿全课的架构概念:架构定义、视点与视图(4+1)、MoC、控制与功能、架构模式(W1、W2、W4、W5)。
1.1 各周笔记索引
- Week 1:软件架构导论 → Week 01
- Week 2:MBSE 导论 → Week 02
- Week 3:需求建模 → Week 03
- Week 4:架构设计(上):视点、MoC、控制 → Week 04
- Week 5:架构模式 + 结构建模(上) → Week 05
- Week 6:复杂结构 → Week 06
- Week 7:行为建模 → Week 07
- Week 8:模型组织 + 敏捷 → Week 08
- Week 9:软件过程模型 → Week 09
- Week 10:元建模 → Week 10
- Week 11:Profile 与 OCL → Week 11
- Lab:Lab 1–6 → Lab 1–6 总结
二、需求模型
2.1 三种方法(讲义复习页原文要点)
| 方法 | 视角 | 特点 |
|---|---|---|
| Ad hoc | 混合 what / how / how well | 不系统、非正式、易出错(遗漏、冲突、不一致、歧义),但最常见的起点 |
| Feature analysis | capability-based view | 系统 = 一组期望属性 |
| Use case analysis | operational view | 系统 = 实现利益相关者目标的功能能力 |
三者务实结合最好。
2.2 特征图(复习页的新例子:PC Configuration)
PC Configuration |
练习:一共有多少种合法配置?
约束 “Windows 7 ⇒ 3 GB” 排除 (Windows 7, 1 GB) 这一组合:OS×RAM
合法组合从 4 降为 3,所以合法配置
2.3 Use case
- 概念框架:Actor(有目标)↔︎ System under consideration(有职责支持 actor 目标)↔︎ Other system
- Cockburn 要素:目标驱动;trigger 开始;以明确结果结束(成功/失败场景);失败从失败点分叉
- 模板:Name / Goal / Level / Precondition / Success condition / Failure condition / Trigger + main scenario + extensions
- 关系:
«include»指向被包含用例;«extend»指向基用例(带 extension point);泛化空心三角指向父 - Agentic use case(W3):业务结果目标、权限(能力 ≠ 许可)、可观察成功证据、失败/不确定性作为正常分支、人工检查点
画 use case 图检查清单: - [ ] 系统边界框 + 系统名 - [ ] Actor 在框外,是角色(名词),外部系统也算 actor - [ ] Use case 是动词 + 名词的目标,不是 UI 步骤 - [ ] include / extend 箭头方向正确,extend 标条件或扩展点 - [ ] 至少一个核心 use case 写出完整描述(含 extension)
三、架构与设计原则(复习页提到的部分)
| 概念 | 必会要点 |
|---|---|
| Architects and Stakeholders(Kruchten 图) | 架构师平衡终端用户、销售、开发经理、开发者、系统管理员的关注点 → “Where do we start?” |
| Architecture and Evolution | 架构根本性地影响演化能力;架构选择(单机 vs 分布式)决定新需求落到哪个解 |
| Viewpoint vs View | 视点 = 关注点 + 表示技术;视图 = 视点应用于具体系统的结果 |
| 4+1 | Logical(类/顺序图)、Development(包图)、Process(活动图,并发)、Physical(部署图)、+1 Scenarios |
| MoC | structure-dominant / procedural / data flow;不要混淆 agent 推理循环与系统 MoC |
| 控制 | 分离控制与功能;集中控制;星形/递归控制模式 |
| 模式 | pipe-and-filter、shared-data、layering、SOA、MVC;agent 模式按不确定性 × 协调选 |
四、设计模型:构建时(Build-time)
4.1 类型、实例、分类器
- Type 规定一类实体,instance
是其中个体;模型(M1)
«represents»真实世界(M0) - Classifier:共享特征 + 可按特征划分子集合;Class、Association、Interface、UseCase、Behavior、Collaboration、Component、Node……所有分类器都可作类型
- Class = 对象集合的规格;Association = 链接集合的规格
4.2 泛化 vs 关联(复习页强调)
Generalization 是类之间的关系(不是实例之间的);Association 表示实例之间的关系。 例:
Person◁—Adult、Child(泛化);Adult (parent 1..2) —— (child 0..*) Child(关联)。类模型抽象掉了所有具体个案。
4.3 类图记号速查
| 元素 | 记号 |
|---|---|
| 类 | 三栏:名 / 属性
vis name : Type [mult] = default {prop} / 操作
vis op(p : T) : R |
| 可见性 | + public、-
private、# protected、~ package |
| 派生属性 | /name |
| 关联 | 实线,两端多重性 + 角色名;导航箭头;端点黑点 = 由对端类拥有 |
| 多重性修饰 | {unique}(默认)、{ordered}(默认
unordered) |
| 聚合 / 组合 | 空心 / 实心菱形在整体端;组合 = 删除语义 |
| 泛化 | 实线 + 空心三角指向父;泛化集 |
| 接口实现 / 使用 | 虚线 +
空心三角(realize);«uses» 虚线箭头;lollipop /
socket |
| 依赖 | 虚线 + 开放箭头,client → supplier |
| 关联类 | 关联线上虚线挂一个类 |
| 约束 | {...} 行内或附注(OCL) |
4.4 包图
- 包 ≈ 文件夹,是命名空间;限定名
A::B::C «import»(public,可传递,private 元素不导入,重名用限定名)、«access»(private,不传递)、«merge»(同名元素合并)- 复习页的 merge 例子:X{A, D}
«merge»Y{A, B, C} ⇒ X{A, B, C, D} - Model(三角形图标,有 viewpoint
属性)、
«modelLibrary» - 包含用 ⊕ 或嵌套,不用黑菱形
4.5 Profile 图
«profile»包内:«stereotype»通过 Extension(实线 + 实心三角) 扩展«metaclass» UML::Class / UML::Operation …- 构造型的属性 = tag definitions;约束用 OCL
- 复习页再次给出 Semaphore
例子:
«stereotype» Semaphore { limit : Integer; getSema : Operation; relSema : Operation },约束{active->size() <= limit}、{limit <= MAXlimit}
五、设计模型:运行时(Runtime)
5.1 为什么需要运行时模型
复习页再次放出
“这个类图描述了多少种运行时配置?”——ClassA/ClassB 各有
left/right 两条 1 对 1 关联,可以是
a1⇄b1,也可以是 a1→b1→a2→b2→a1
的环……无穷多种 ⇒ 类图不足以精确表示运行时结构。
5.2 对象图、协作、结构化类
| 元素 | 要点 |
|---|---|
| Object diagram | 快照;name : Class(下划线);只有名称+属性值两栏;链接没有多重性;共享对象只画一个 |
| Collaboration | 一组通过连接器通信的角色;“角色可以代表一个实例或更抽象的东西”;不能实例化;受约束角色
Hamlet : YoungMan vs 无约束 Ghost |
| Collaboration Use | 应用协作规格:BrokeredSale 中
wholesale : Sale、retail : Sale,broker
两次扮演不同角色 |
| Structured class | 外部端口 + 内部 parts / connectors;委托连接器连外部端口与内部 part;可作为单元创建销毁;一端口一接口 |
5.3 行为
| 主题 | 必会 |
|---|---|
| Passive vs Active | 被动:被调用就响应(可能冲突);主动:只在 receive 时响应(消息队列,RTC) |
| Action | 活动中的原子步骤,圆角矩形 |
| Activity diagram | 初始/活动终止/流终止;decision/merge;fork/join;对象节点、pin;泳道;可中断区域;前后置契约(复习页再次给出 Order Processing 例子) |
| Sequence diagram | 生命线、同步(实心箭头)/
异步(开放箭头)/
返回(虚线);alt、opt、loop、par、ref、sd(复习页再次给出
ATM-transaction + CheckPin 例子) |
| Communication diagram | 带序号消息,强调链接结构(1 query、2a/2b get) |
| Interaction overview | 活动图外壳,节点是交互(ref Authorization、ref DoMore) |
| State machine | 初始伪状态、状态、trigger [guard] / action、终止状态;exit
→ transition → entry(复习页再次给出
LampOn/LampOff 例子);junction vs
choice;层次状态、组转移、完成转移、正交区域 |
状态机动作顺序复习题(复习页例子,答案必背):
| 情况 | 序列 |
|---|---|
| LampOn 收到 off,转到 LampOff | printf("exiting") →
printf("to off") → lamp.off() |
| LampOff 收到 off(自转移) | printf("exiting") →
printf("needless") → lamp.off() |
| W7 例题:S1::S11 收到 E1 → S2 | exS11 → exS1 → act1 → enS2 → enS21 |
六、元模型
| 要点 | 内容 |
|---|---|
| 定义 | 规定建模语言抽象语法、定义良构规则,独立于具体语法;模型是元模型的实例 |
| DSL | 由元模型定义,是自动化、工具支持处理的基础 |
| 四层 | M0 运行时对象 / M1 模型 / M2 元模型(UML)/ M3 元元模型(MOF,自描述) |
| 语言组成 | 抽象语法 + 具体语法 + 语义(+ 映射) |
| UML 元模型片段(复习页版本) | Element ← NamedElement{name};DirectedRelationship{sources 1.., targets 1..} ← Generalization;Classifier{generalizations 0.., features 0..};**TypedElement —types 1..*→ Type;Class{attributes, operations};PrimitiveType** |
| 图的种类 | Structure:Class、Object、Package、Deployment、Composite Structure、Profile;Behavior:Activity、Statechart、UseCase、Interaction(Sequence、Communication、Timing、Interaction Overview) |
复习页练习(与 W10 相同,必会):把
A [a 0..1] —— [b 0..2] B 画成元模型实例:
a : AssociationEnd {lowerBound = 0, upperBound = 1} ──target──▶ : Class {name = "A"} |
七、开发过程模型
| Waterfall | Spiral | Agile | DevOps | |
|---|---|---|---|---|
| 类型 | 重量级 | 重量级 | 轻量级 | 轻量级(敏捷的延伸) |
| 核心 | 阶段、可预测 | 风险 | 迭代、反馈 | 交付与运行、自动化 |
| 适合 | 需求稳定、多地点大型工程 | 复杂高风险 | 需求多变 | 持续演化的在线服务 |
复习页的一句话动机:系统太大太复杂,一个人建不出来 ⇒ 需要一个协调人的计划。 传统模型:Waterfall、Spiral;敏捷模型:Extreme Programming(以及 Scrum)。
Scrum 三三三:Product Owner / Scrum Master / Team;Product Backlog / Sprint Backlog / Impediments List;Planning / Daily Scrum / Sprint Review(+ Retrospective)。敏捷宣言四对价值要能写出来。
八、Tutorial 12 要点:Profile 与 OCL 回顾
Tutorial 12 回顾 Week 11 的内容,没有新增知识点:
- 特化 UML、SysML/MARTE、Profile 的两种用途、Stereotype 与 tag definition
- Semaphore 和 AI Agent 构造型;Extension vs Generalization 记号
- Overlay Profile(apply/unapply 不改变模型)
- OCL:context/inv、
.vs->、数据类型、运算符、集合操作、exists/forAll、pre/post/@pre/body - HealthcareAgent 案例:Decision / Controller /
Service
三组件;四阶段工作流;
«Agent»、«Tool»(扩展 Operation)、«DataSource»三个构造型
详细内容和 OCL 练习见 Week 11。
九、综合建模练习(模拟“给定场景画模型”)
场景(自拟,覆盖全课):一家一人 AI 宠物医院预约公司。宠物主人在网页上描述宠物症状;Triage Agent 判断紧急程度:紧急则立即通知值班兽医;不紧急则 Booking Agent 查询诊所排期系统、给出时段,主人选择后预约;预约需要兽医批准后才最终确认;预约前 24 小时发提醒。诊所排期系统和短信服务是外部系统。
9.1 Use case 图
- Actors:Pet Owner、Vet、Clinic Scheduling System、SMS Service、(时间触发的)Scheduler
- Use cases:Describe Symptoms、Book Appointment、Approve Booking、Send Reminder、Notify Emergency
- 关系:
Book Appointment --«include»--> Check Availability;Notify Emergency --«extend»--> Describe Symptoms(条件:urgent)
9.2 Use case 规格(Book Appointment,agentic 写法)
| 字段 | 内容 |
|---|---|
| Goal | 宠物在合适时间被兽医看诊(业务结果) |
| Authority | Booking Agent 可读排期、创建待审批预约;不能直接确认预约 |
| Success | 兽医批准的预约已确认,主人收到通知 |
| Failure | 未确认任何预约;主人收到原因 |
| Extensions | 3a {无可用时段} → 提供候补名单;5a {兽医拒绝} → 释放时段并通知主人;任意步 {排期系统不可用} → 重试 3 次后转人工 |
| Human checkpoint | 第 5 步兽医批准 |
9.3 类图(关键部分)
classDiagram
class Agent {
<<abstract>>
name : String
maxSteps : Integer
perceive()
act()
}
class TriageAgent {
assess(report) : Urgency
}
class BookingAgent {
proposeSlot() : Slot
}
class Orchestrator {
dispatch(request)
}
class Appointment {
status : AppStatus
time : DateTime
approve()
reject()
}
class Pet {
name : String
species : String
}
class Owner {
name : String
phone : String
}
class SchedulingAPI {
<<interface>> getSlots()
book(slot)
}
Agent <|-- TriageAgent
Agent <|-- BookingAgent
Orchestrator o-- "1..*" Agent
Owner "1" --> "1..*" Pet : owns
Pet "1" -- "0..*" Appointment
BookingAgent ..> SchedulingAPI : uses
(Mermaid 简化了记号:画在纸上时 Owner ◆— Pet
是否用组合取决于“删除主人是否删除宠物记录”,要在答案中说明理由。)
9.4 对象图(某一时刻)
triage1 : TriageAgent、booking1 : BookingAgent、orch : Orchestrator、alice : Owner {phone = "04xx"}、milo : Pet {species = "cat"}、appt42 : Appointment {status = pendingApproval, time = 2026-11-20 10:00};链接
orch—triage1、orch—booking1、alice—milo、milo—appt42。只画一个
appt42。
9.5 活动图
泳道 Owner / Triage Agent / Booking Agent / Vet / Scheduling System:Describe symptoms → Assess urgency → ◇ urgent? → [yes] Notify vet(flow final 或进入紧急流程);[no] Get slots → Present slots → Select slot → Create pending booking → Vet approves? ◇ → [yes] Confirm → fork(Send confirmation SMS ∥ Schedule reminder)→ join → end;[no] Release slot → Notify owner。
9.6 顺序图
owner → orch: describe(symptoms);orch → triage1: assess();alt [urgent]
orch → vet: notifyEmergency();[else]
ref BookAppointment。sd BookAppointment:booking1 → scheduling: getSlots()(同步)……booking1 → vet: requestApproval()(异步,开放箭头);alt [approved]
/ [rejected]。
9.7 状态机(Appointment)
stateDiagram-v2
[*] --> Proposed
Proposed --> PendingApproval : ownerSelects / createBooking()
PendingApproval --> Confirmed : vetApproves / notifyOwner()
PendingApproval --> Cancelled : vetRejects / releaseSlot()
PendingApproval --> Cancelled : after(24h) / releaseSlot()
Confirmed --> Reminded : when(now >= time - 24h) / sendSMS()
Reminded --> Completed : visitDone
Confirmed --> Cancelled : ownerCancels
Completed --> [*]
Cancelled --> [*]
覆盖了 signal/call 事件、time 事件(after)、change 事件(when)——考试中最好三种事件都能体现。
9.8 包图 & 部署图
- 包:
UI、Agents、Domain、Integration;UI --«import»--> Agents --«import»--> Domain;Agents --«access»--> Integration - 部署:
«device» Owner Browser—HTTPS—«node» App Server {Orchestrator, Agents}—JDBC—«node» DB Server;App Server —HTTPS—Clinic Scheduling System、SMS Gateway、LLM API(只发去标识化数据)
9.9 Profile 与 OCL
«profile» PetClinicAgent |
context PetClinicAgent::Tool inv WriteNeedsApproval: |
9.10 元模型实例(加分项)
把类图里的 Pet "1" -- "0..*" Appointment 画成
: Association + 两个
: AssociationEnd {lowerBound, upperBound} + 两个
: Class 的对象图(同 W10 练习)。
十、期末复习策略与高频易错点
10.1 复习顺序建议
- 先把七种图画熟:use case、类图、对象图、活动图、顺序图、状态机、包图(+部署图、profile 图)——每种至少徒手画 2 次
- 再过概念对比表:view vs viewpoint、structure vs behavior MoC、active vs passive、junction vs choice、include vs extend、import vs access vs merge、Extension vs Generalization、M0–M3、四种过程模型
- 最后看 agentic 部分:有界自治 use case、agent vs service 决策树、agent 模式选型、BDI、agentic 元模型与 HealthcareAgent profile——老师每讲都把这部分放在最后,是本学期新增重点
10.2 高频易错点汇总
| # | 易错点 | 正确做法 |
|---|---|---|
| 1 | include/extend 箭头方向 | include → 被包含;extend → 基用例 |
| 2 | Actor 写成人名或系统内部组件 | Actor 是外部角色 |
| 3 | 组合菱形画在部分端 | 菱形在整体端 |
| 4 | 对象图写多重性 | 链接没有多重性 |
| 5 | 共享对象画两次 | 一个身份只画一个框 |
| 6 | 用 join 合并 decision 分支 | decision 配 merge,fork 配 join |
| 7 | activity final 与 flow final 混淆 | 前者全停,后者只停一条 |
| 8 | 顺序图同步/异步箭头 | 同步实心,异步开放,返回虚线 |
| 9 | 状态机动作顺序 | exit(内→外)→ transition → entry(外→内);自转移也 exit/entry |
| 10 | 守卫有副作用;choice/junction 混用 | 守卫纯谓词;依赖前半段计算结果用 choice |
| 11 | 正交区域建模并发对象 | 正交区域只表示同一实体的不同视角 |
| 12 | 包含关系用黑菱形 | 包包含用 ⊕ 或嵌套 |
| 13 | «access» 当成可传递 | access 是私有导入,不传递 |
| 14 | Profile 中构造型到元类用空心三角 | Extension 用实心三角 |
| 15 | OCL 集合用点号 | 集合用 ->,属性用
. |
| 16 | M1/M2 层次说错 | 问“它是谁的实例” |
| 17 | 敏捷宣言说成“右边没价值” | 右边有价值,左边更重要 |
| 18 | 所有功能都做成 agent | 无需上下文判断的用确定性服务;写操作加审批 |
结语
讲义最后引用丘吉尔:
“Now this is not the end. It is not even the beginning of the end. But it is, perhaps, the end of the beginning.”
并提醒大家填写 SET(Student Experience of Teaching)问卷,老师希望至少 67% 的回复率。