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
├── RAM ⟨xor⟩ 1 GB | 3 GB
├── OS ⟨xor⟩ Windows 7 | Linux
└── ○ Extras ⟨or, at least one⟩ DVD drive | Printer | Display Screen
Constraint: if (Windows 7) then 3 GB

练习:一共有多少种合法配置?

不选或选个

约束 “Windows 7 ⇒ 3 GB” 排除 (Windows 7, 1 GB) 这一组合:OS×RAM 合法组合从 4 降为 3,所以合法配置 。(如果 Extras 是 mandatory 而非 optional,则为 ——做题时先看清 Extras 是实心还是空心圆点。)

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"}
b : AssociationEnd {lowerBound = 0, upperBound = 2} ──target──▶ : Class {name = "B"}
: Association ──ends──▶ a, b

七、开发过程模型

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
«stereotype» Tool ━▶ «metaclass» UML::Operation { effect : Effect, approvalRequired : Boolean }
«stereotype» Agent ━▶ «metaclass» UML::Class { maxSteps : Integer }
context PetClinicAgent::Tool inv WriteNeedsApproval:
self.effect = Effect::write implies self.approvalRequired
context Appointment inv OneActivePerPet:
self.pet.appointment->select(a | a.status = AppStatus::Confirmed)->size() <= 1
context Appointment::approve()
pre: self.status = AppStatus::PendingApproval
post: self.status = AppStatus::Confirmed

9.10 元模型实例(加分项)

把类图里的 Pet "1" -- "0..*" Appointment 画成 : Association + 两个 : AssociationEnd {lowerBound, upperBound} + 两个 : Class 的对象图(同 W10 练习)。


十、期末复习策略与高频易错点

10.1 复习顺序建议

  1. 先把七种图画熟:use case、类图、对象图、活动图、顺序图、状态机、包图(+部署图、profile 图)——每种至少徒手画 2 次
  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、四种过程模型
  3. 最后看 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% 的回复率。