知识卡片
用例图与用例规约的抗变性差异
内容
用例图和用例规约处于”需求层次论”(业务需求、用户需求、行为需求)的不同层次,这直接决定了它们面对需求变更时的”抗变性”截然不同——书中用一个真实需求变更案例(1999年11月1日我国开始对个人储蓄存款利息征收个人所得税)说明这个差异。开征利息税之前,储蓄系统用例图包含开户、销户、结息三个用例(柜员执行开户销户,结息在每年6月30日例行执行,销户时也会引起结清利息处理)。开征利息税之后,对用例图复审,用例图完全无需变化——因为用例图描述的是软件系统的整体功能结构,其中对用例的描述一般仅包括用例名,”开征利息税”这件事只是让”结息”这个功能的内部业务规则变了,用例图上只反映”储蓄系统必须有结息功能”这一层信息,并不受这层业务规则变化的影响。但用例规约就完全不同:开征利息税直接影响了”结息”用例的用例规约,主事件流必须增加扣除利息税的相关步骤,其他步骤也有重要改变——原因是对软件开发影响巨大的需求变更,其实更多发生在行为需求层面,而用例规约的主事件流和备选事件流恰恰就是在反映行为需求,越精确的描述,越容易随着业务规则细节的变化而变化。这个案例揭示的一般规律是:需求描述的层次越高、越抽象(用例图),越能抵御需求变更的冲击;需求描述的层次越低、越精确(用例规约),越容易被需求变更牵动——”因为精确所以易变”这句话点破了很多人对文档质量的直觉误区:以为写得越细致就越”稳固”,实际恰恰相反。
结构图:
flowchart TB
A["需求变更事件:\n开征个人储蓄存款利息税"] --> B{"用例层次"}
B -->|"用例图(用户需求层)"| C["无需变化\n仅记录'必须有结息功能'\n不涉及业务规则细节"]
B -->|"用例规约(行为需求层)"| D["主事件流必须修改\n增加扣除利息税步骤"]
参考来源
- 位置:《软件架构设计:程序员向架构师转型必备》第6章《用例与需求》"6.2.3 用例与需求变更"节(源文件:_epub-src/OEBPS/text00009.html)
- 结论依据:原文完整叙述利息税案例,说明"开征利息税之后,对用例图进行复审,用例图无需任何变化……开征利息税影响了'结息'用例的用例规约……对软件开发影响巨大的需求变更其实更多地发生在行为需求层面——用例规约的主事件流和备选事件流正是反映行为需求",直接支撑本卡片结论与结构图。
- 原始内容:开征利息税之前……用例图……包含开户、销户、结息这3个用例……开征利息税之后,对用例图进行复审,用例图无需任何变化……进一步看,开征利息税影响了"结息"用例的用例规约。