UML实验报告实战:用EA7.5完成网上选课系统八图建模
简介面向系统分析与建模课程的UML实验报告是一份完整的课程实践资料适合软件工程专业学生、建模初学者及相关课程教师参考。报告从实验0熟悉Enterprise Architect开发环境入手系统覆盖用例图、类和对象图、交互图、状态图、活动图、包图、物理图等主要UML图形设计并以网上选课系统、订单系统等案例展示从需求分析、结构建模到行为建模的完整过程。每项实验均写明目的、环境、内容与要求、过程结果及小结体会方便读者对照EA工具逐步练习、检查建模思路和撰写实验总结。资源为单个PDF文档压缩包大小约386KB内容精炼、结构清晰适合直接阅读、打印或作为课程作业参考。目前已有126人学习浏览是快速了解UML实验设计流程和EA操作要点的实用资料。1. 一份UML实验报告能当什么用先别急着当“作业模板”如果你手里压着一门“系统分析与建模”的课程设计或者下周就要交UML实验报告、连Enterprise Architect都还没打开过这份PDF值得先拆开看一遍。它不是讲UML理论的教材而是一份从实验0到实验7完整跑下来的实验报告工具固定用EA 7.5业务案例是一个网上选课系统从用例图一路画到物理图每个实验的“目的、环境、内容要求、过程结果、小结体会”都写全了。对正在赶实验报告的学生它是一份能直接对照的作业底稿对要带实验课的老师它是一套现成的指导书结构对想搞懂“UML图之间到底怎么衔接”的从业者它比任何概念讲解都直观。我先说结论这份资源最大的价值不是某一张图画得多标准而是把同一套选课系统贯穿了八种UML图让你看清需求、结构、行为、架构在建模时是怎么逐层落地的。下面按实验顺序拆一遍把画图顺序、关联基数、状态条件和常见坑一起说清楚。新手可以照着从头到尾画一遍熟手可以直接跳到第4章的避坑清单和第6章的自检路径。2. EA 7.5建模全流程拆解从用例图到物理图的八步动作2.1 EA 7.5界面六大区域与项目创建实验0放在整份报告最前面任务是“熟悉软件开发环境”。很多学生觉得这步没有技术含量直接跳过去结果后面画用例图时找不到元素面板画完才发现浏览器里模型树乱成一团最后只能重建。我自己的习惯是凡是第一次用建模工具都先花半小时把界面区域名称和各自职责记下来后面能省出两小时。EA 7.5的界面可以拆成六大块这份报告在实验0里列得很清楚菜单、浏览器、文档窗口、图窗口、日志窗口和工具栏。它们的分工如下表。界面区域主要职责常见误用菜单全局命令入口项目新建、保存、导入导出都在这里只在右键菜单里找功能忽略菜单栏浏览器模型树所有包、图、元素、关系的管理中心直接在图上改导致浏览器与图不同步文档窗口显示选中元素的详细规范包括属性、操作、约束把它当成记事本图窗口实际绘制UML图的画布只会在图上拖元素不会用右键快捷菜单日志窗口输出校验、脚本运行、版本控制日志报错后不看日志就直接重试翻车两三次才回头工具栏图形元素的快捷绘制入口找不到元素时不知道换工具栏以为图元要用菜单一个个建这里最容易被忽略的是浏览器。实验0要求你在浏览器里完成六类操作增加模型元素角色、用例、类、组件、图等、查看现有模型元素、查看元素之间的关系、移动模型元素、更名、访问元素的详细规范。这些操作看着琐碎但后面所有实验都建立在这套树形结构上——包下面挂图图下面挂元素元素的属性窗口就是文档窗口。如果在项目初期不规划好包结构实验6的包图就会和实验1到实验5的图对不上这是很多人的翻车点。创建项目的标准动作是这样启动EA后选择Project向导选一个目标模型模板然后命名项目并保存。向导会生成一个包含多个包的初始模型树你只需要在对应的包下新建图。我在实际带项目时习惯把“需求分析”“结构建模”“行为建模”“架构部署”四个顶层包先建好再把每个实验的图分别挂进去最后交付时按包导出结构非常清晰。实验0里还给出两个练手案例读者借书还书续借的用例图以及一个订单系统的包图。前者让你练活动者和用例的摆放后者让你练包的依赖关系都是两分钟能画完的小图但把EA的基本操作过了一遍。提示实验0里强调“在图中增删图元素”和“在浏览器中增删图元素”是两种操作。前者只影响当前图后者影响整个模型。如果你在图上按Delete删掉一个元素浏览器里往往还留着它的定义真要从模型里删干净必须在浏览器里操作。这个区别后面会反复踩到。2.2 用例图、类图、交互图需求到结构的三连跳实验1到实验3处理的是系统建模最早期的三张图用例图、类图和交互图。这三张图在逻辑上是承接关系——用例图回答“系统要给谁做什么”类图回答“用什么对象来实现”交互图回答“对象之间怎么协作”。这份报告因为是实验报告形式每个实验独立成章但你在自己做课程设计时最好把这三张图当成一条线来画。实验1的用例图用了网上选课系统作为案例。系统按三层模型划分接入层用户界面包括登录界面、管理界面、选课界面、业务逻辑层对用户输入做逻辑处理再映射到数据层操作、数据核心层数据库操作。用例图的三要素是系统、活动者和用例活动者不止人还可以是外部系统——报告里把“数据库管理系统”也画成了活动者这个细节很多人会漏掉。用例之间允许泛化、使用、包含、扩展四种关系实验报告在选课系统里用到了泛化管理员和学生从people派生和包含修改课程、删除课程、开设课程都包含“维护课程信息”这个公共流程。这个“公共流程抽取”的思路值得记下来两个以上用例都要做的数据操作就抽成一个被包含用例避免事件流里重复写一大段。类图在实验2里承接了用例图的分析结果。报告从选课系统里抽象出的类包括People基类、管理员、学生、课程、界面、控制对象和数据库。People持有姓名、年龄、密码三个属性管理员和学生从它派生各自补充自己的属性和操作。类图的学习要点是三个分隔区类名、属性含类型和值、操作含参数表和返回类型。可见性用“”“-”“#”分别表示public、private、protected。关联基数这节是最容易出错的后面第4章专门说这里先记住一个原则基数贴在哪一端读的就是“另一端的一个实例能对应这一端的多少个实例”。实验3的交互图把“选课”这个用例拆成了对象之间的消息序列。序列图由对象、生命线、消息组成协作图由对象、关联、消息组成报告里明确写了一句两者语义等价可以彼此转换。这句话是理解交互图的钥匙——序列图强调消息的时间顺序适合描述实时性强、顺序敏感的场景协作图强调对象间的连接关系适合一眼看清哪些对象参与了协作。实际画的时候我一般先画序列图把顺序理清楚再转成协作图而不是反过来。序列图上的消息名用动词短语描述意图比如“查询课程信息”“判断是否可选课”不要直接写“course.query()”这种实现代码建模阶段不关心方法签名。2.3 状态图、活动图、包图、物理图行为与架构的分工实验4到实验7是后半程的四张图分别管行为细节和架构组织。状态图描述单个对象从创建到销毁的生命周期报告里给了两个例子课程对象和电梯对象。课程对象的状态链路是“创建→数据库→课表→课程终止”迁移靠事件驱动守卫条件写成[学生数最大学生数]这样的布尔表达式。电梯状态图更典型包含向上运行、向下运行、停滞、等待进电梯等状态以及“有人按键”“未到达目的层”“电梯未满”等守卫条件。状态图的画法要领是状态是稳定的“停留位置”事件是触发迁移的瞬时信号守卫条件是带方括号的布尔判断三者不能混写。活动图处理的是流程逻辑可以理解成UML版的流程图。实验5把添加课程的事件流重画成活动图节点包括输入课程信息、验证课程、判断添加课程是否合法、创建课程对象、在数据库中查询课程、在数据库中添加该课程、判断添加课程是否成功、显示成功/错误信息、提示重新输入。这张图有两个判定分支合法性判断和成功性判断失败都回流到“提示重新输入”。活动图的要素比状态图多动作状态、活动状态、动作流、泳道、对象流以及初始状态、终止状态、判定、分岔、接合。泳道用于划分责任对象报告里特别提醒活动图对动作与对象关系的表达不如交互图直接最好和其他行为图搭配使用。实验6的包图解决的是系统总体结构。包图由包和包之间的联系构成节点之间用依赖或泛化弧连接。选课系统的包图包含People、主程序、管理员、学生、界面、课程、数据库、控制对象这些包。这里要澄清一个术语问题UML里组件图构件图和包图不是同一张图但在这份实验报告里“包图组件图”是混着叫的——很多教材把系统分层结构画成包图把部署单元画成组件图。你在套用这份报告时注意自己课程要求的是哪种命名交上去之前按老师的术语口径统一一下。报考软考的朋友对“构件图 uml”这类题应该不陌生考的就是节点、构件、接口、依赖关系这几样。报告里还提了一个进阶要求用包图做配置管理建模时要显示与版本有关的标签值——这是实际交付系统时的做法课程设计里用不上但工作后做基线管理会用到。实验7的物理图部署图在报告里着墨最少只要求“了解物理图的组成并绘制物理图”。物理图描述的是软件和硬件设备的物理布局节点代表硬件或运行时环境构件代表可交付的软件单元节点之间用通信路径连接。选课系统的物理图通常就是客户端浏览器、应用服务器、数据库服务器三个节点加两条通信路径。这张图在课程设计里一般画到“能说明系统怎么部署”即可不用像企业级架构图那样细化到端口。3. 网上选课系统建模实操画图顺序、关联基数与状态条件这一章把实验1到实验5的可抄作业部分逐项展开。画图顺序建议固定为先用例图定边界再类图定结构再交互图定行为再状态图和活动图补细节最后包图和物理图做组织。这样每张图都有前一张图的产物作为输入不会画到一半发现边界变了。3.1 用例图怎么摆活动者、用例与include/extend用例图第一步是找活动者。报告里选课系统有3个活动者管理员、学生、数据库管理系统。管理员和学生都有姓名、学号这类特征所以抽象出基类活动者people管理员和学生从people派生。这个抽象动作是实验1里的得分点——很多学生的用例图只有两个小人不会做泛化抽象。抽象的原则是“共同特征提取”两个活动者共享一组属性和权限时才有必要建父活动者只是名字像行为完全不同就不要硬捏。第二步是列用例。用例要以活动者目标为中心从活动者视角用主动语态命名。选课系统的用例清单如下活动者用例说明管理员登录进入管理界面的前置动作管理员开设课程创建新课程并写入数据库管理员修改课程调整已有课程信息管理员删除课程移除课程学生查询已选课程查看选课结果学生选课选择课程并触发付费学生付费选课后的交费动作数据库维护课程信息被多个用例包含的公共数据操作实验报告把修改课程、删除课程、开设课程都指向“维护课程信息”用 标注。include的读法是“基用例总是包含目标用例”方向是从调用方指向被包含方。选课和付费的关系在报告里没有明确画成extend但按UML惯例“付费”可以作为“选课”的扩展用例在选课成功后的扩展点触发。自己画的时候如果业务上付费不是每次选课都发生就用extend而不是include——extend表达的是“不一定发生发生时插入到指定扩展点”。第三步是写事件流。报告里“添加课程事件”写了12步基本流另有A1密码错误和A2有冲突两个备选流。选课事件写了11步基本流备选流A1验证失败和A2课程不可选。事件流的写作要求是从活动者触发动作开始写系统响应遇到分支就编备选流编号每个备选流要有明确的进入条件和结束位置。这个格式在软考的uml图试题里也经常考属于必会的基本功。三个错误事件分支——密码错误、验证失败、课程不可选——都采用了“三次失败拒绝访问”的策略这是系统设计里的常见防御性写法画用例图时一并写进事件流后面做活动图和状态图就有依据。3.2 类图怎么画可见性符号与关联基数的读法“uml类图怎么画”是搜索量很高的词核心就三件事类怎么表示、可见性怎么标、关联基数怎么读。类的表示是带三个分隔区的矩形顶端类名中间属性类型和值底端操作参数表和返回类型。选课系统里的类有课程上课地点、上课时间、授课老师、界面、控制对象、数据库保存路径:string、People密码、年龄、姓名、管理员、学生密码、学号。注意报告里学生和管理员的属性略有冗余——学生只列了密码、学号People里已经有年龄、姓名、密码这说明建模时把父类属性重复写了严格来说应该完全继承。你自己画的时候子类只写新增属性和重写操作即可这是比这份报告做得更严谨的地方。可见性符号是高频考点表示public-表示private#表示protected。报告里控制对象的操作全部是public查询课程、核实课程、确认删除课程等数据库的保存路径标了-表示私有。操作名后面要写括号带参数时填参数名返回类型写在冒号后。这里容易犯的错是漏写操作括号或者把属性类型漏掉——类型不是可选项属性区必须写成“属性名: 类型”的格式比如“保存路径: string”。关联基数单独列一张表这是实验2里最值得抄的配置关联描述基数写法读法学生、管理员与界面的对应1一个用户对象对应一个界面界面与课程的关系0..n一个界面可能关联0到多个课程控制对象与数据库的关系1一个控制对象对应一个数据库操作接口数据库被控制对象访问0..n数据库可被多个控制对象访问基数的读法贴在被关联的那一端贴着“课程”写0..n读作“一个界面可以关联0到多个课程”贴着“界面”写1读作“一个课程至少对应一个界面”。很多学生把基数画反导致语义完全颠倒这属于必扣分项。报告里有个“o..n”的写法其实是0..n的排版变形照抄时要写成标准0..n。控制对象和数据库之间用的是1和0..n的配合意味着一个控制对象完成对数据库的一次操作但数据库可能被多个控制对象访问这个配置在分层架构里是标准画法。3.3 序列图和协作图消息编号怎么保持一一对应序列图是实验3的核心产出。选课用例的时序图画了4条生命线SelectForm选课界面、ControlCourse控制对象、Course课程、Student学生7条消息序号消息方向1进入选择课程界面Student → SelectForm2选择需修课程Student → SelectForm3查询课程信息SelectForm → ControlCourse4判断是否可选课ControlCourse → Course5执行选课ControlCourse → Course6返回选课成功信息ControlCourse → SelectForm7显示选课成功信息SelectForm → Student画序列图的要点是生命线顺序按“发起者→界面→控制→领域对象”排消息自上而下严格按时间序。消息名用动词短语比如“查询课程信息”“判断是否可选课”不要写“调用方法名()”这种伪代码UML建模阶段不关心实现细节。回执消息第6、7条是虚线返回普通请求是实线带箭头这个线型区别在考试里经常被单拎出来考。协作图和序列图表达同一组交互差别只在组织方式协作图把对象画成节点用连线表示关联消息编号挂在连线上。报告里协作图的消息编号是1.进入选择课程界面、2.选择需修课程……一直到7.显示选课成功信息和序列图的序号完全对应。嵌套消息用1.1、1.2这种子编号表示消息1内部引发的子交互。检查协作图对不对最快的方式就是逐条对照序列图序号漏一条就是错。序列图和协作图在语义上等价、可以彼此转换这句话落实在操作上就是这个编号规则。添加课程用例的时序图在报告里是单独一张admin → ControlForm → IdentifyCourse7条消息从进入管理界面到验证是否有冲突。这里没有画数据库对象逻辑上验证流程应该在控制对象和课程/数据库之间完成报告简略了。你自己画的时候建议补上数据库生命线把“验证是否有冲突”细化成一次查询。这种“报告里省略、但你交作业时应该补全”的地方就是课程设计拉开分数差距的细节。3.4 状态图与活动图判定条件写成布尔表达式状态图的难点是把“状态”和“事件”分清。报告里课程对象的生命周期是这样变迁的当前状态触发事件守卫条件下一状态创建添加课程无数据库数据库修改课程无课表数据库删除课程无课程终止课表选课人数达上限[学生数最大学生数]课程终止锁定课表学期结束无课程终止状态图里的迁移箭头上写“事件[守卫条件]/动作”守卫条件是布尔表达式比如[学生数最大学生数]、[学生数最大学生数]。这是最容易翻车的地方——有人把箭头写成“学生数增长”这种过程描述没有方括号也没有布尔条件阅卷老师一看就知道概念没懂。电梯状态图也是同样套路等待进电梯、向上运行、向下运行、停滞4个主要状态迁移条件全是[有人按键]、[未到达目的层]、[未满中途有人按上]这类带方括号的守卫。注意状态图里“停滞”和“等待进电梯”是两个不同状态停滞是电梯静止待命等待进电梯是门开着等人进出区分不开的话电梯图就画成了只有两个状态的简陋版本。活动图这部分直接把添加课程的流程按节点走一遍输入课程信息作为起始活动。验证课程进入判断“添加课程是否合法”。不合法 → 提示重新输入 → 回到输入课程信息。合法 → 创建课程对象。在数据库中查询课程然后在数据库中添加该课程。判断“添加课程是否成功”。成功 → 显示添加成功信息失败 → 显示添加错误信息然后统一回到提示重新输入。这个流程里有个建模细节值得学合法性判断和成功性判断是两个独立的判定节点失败都汇合到“提示重新输入”。这样画的好处是任何一步失败的处理逻辑都收敛到同一个动作不会出现两条失败分支各写各的。活动图的判定用菱形分岔和接合用粗横条。如果一个动作原子不可再分画成动作状态圆角矩形如果是一组动作的组合画成活动状态。泳道用于划分责任对象比如把“管理员”“系统”“数据库”各画一条泳道把节点拖进对应泳道就能直观看出谁在干活。报告在实验5小结里提醒活动图对动作和对象关系的表达不够直接所以它一般作为状态图和交互图的补充而不是替代。4. UML图避坑与常见问题排查五个最容易翻车的地方4.1 用例图阶段的三个典型坑坑一include和extend画反。现象修改课程、删除课程这类用例被画成“被包含”或者“付费”被画成“选课”的include阅卷直接判错。原因include描述的是“基用例总是调用目标用例”比如修改课程必然要做维护课程信息extend描述的是“扩展用例在特定条件满足时才插入基用例的扩展点”比如付费只在选课成功后可选。很多人把“可选”误判成include把“必然”误判成extend本质上是没分清“每次都发生”和“条件满足才发生”。解决问自己一句话——这个子流程是否每次都会执行每次都执行用include箭头从调用方指向被调用方偶尔才执行用extend箭头从扩展用例指向被扩展的基用例并标注扩展点。这份报告里“维护课程信息”被三个管理员用例include就是因为这三个操作必然要碰数据库而“付费”如果画成extend扩展点就标在“选课成功”之后。坑二用例图的系统边界画没了。现象整张图只有一堆椭圆和人形没有矩形系统边界活动者跑到边界内部去了。原因建模工具默认新建用例图时可能不显示边界框或者学生直接删掉了它导致分不清哪些东西是系统内部职责、哪些是外部角色。解决画完后检查凡是以外部视角与系统交互的实体都在边界外的活动者区所有用例必须整体落在系统边界矩形内部。报告里数据库管理系统是外部活动者所以它在边界外但维护课程信息这个用例在边界内这一里一外正好对应三层模型的分层边界。判断标准很简单活动者是被动等系统服务的对象用例是系统主动提供的功能两者之间隔着的就是系统边界。坑三用例粒度不统一。现象有的用例大得离谱比如“管理系统”有的小到像方法比如“验证密码”。“管理系统”包含几十个流程“验证密码”又只是“登录”的一步两级粒度混在一张图上。原因没有以活动者目标为中心去命名用例想到什么功能就画什么把系统内部步骤也当成了用例。解决写用例名时检查它是不是“一个活动者通过系统完成的一个可交付目标”。登录、选课、付费、查询已选课程都是目标输入密码、验证密码、写入数据库都是步骤步骤应该写进事件流而不是画成用例。这份报告里“维护课程信息”粒度偏大但它作为被包含的公共流程可以接受你自己画时最好把此类公共流程拆成明确的子用例比如“写入课程数据”“校验课程冲突”分开画。4.2 类图与动态图阶段的常见问题坑四可见性符号和关联基数贴错。现象属性前面乱标/-/#基数写成“0..n”却贴错了类导致“一个课程对应0到多个界面”这种明显违背常识的语义。原因可见性符号记混public和private对应关系颠倒基数分不清该贴在哪一端。说白了就是背了符号没理解语义。解决表示对外可见-表示仅类内部可见#表示对子类可见。基数永远贴在“被描述的那一端”——在界面那端写0..n读的是“一个课程能关联多少界面”在这条关联的另一端写1读的是“一个界面必须关联至少1个课程”。写完后把句子完整读一遍确认符合业务直觉再往下画。我给学生的一个土办法基数写好后把关联线两端各读一句两句都通顺才算过。坑五状态图的守卫条件写成了事件。现象状态迁移箭头上写“学生数增长”“选课人数已满”没带方括号或者写了方括号但内容是动词短语。原因把状态图的迁移三要素事件、守卫条件、动作混成一体甚至拿活动图里的动作描述直接贴到状态图。这两个图的表达习惯太像一不注意就串味。解决守卫条件是布尔表达式必须能判断题真伪标准写法是[学生数最大学生数]、[学生数最大学生数]、[未到达目的层]这类。事件是触发迁移的那个瞬时信号写“学期结束”“管理员删除课程”它不放进方括号。如果你发现一个迁移上既写了事件又写了守卫那守卫条件必须用方括号独立出来两者之间用斜杠分隔这是EA里画状态迁移的标准格式。画完状态图逐条检查迁移标注没有方括号的条件一律是有问题的。5. 把实验报告改造成课程设计复用边界与三种扩展思路5.1 换业务域时六张图必须重画很多人下载这份报告是想“换个系统直接交”。能不能换能但要知道边界在哪。强绑定业务域的图有六张用例图、类图、交互图、状态图、活动图、包图里的业务包。这六张图的内容全部由业务规则决定比如你把选课系统换成图书借阅系统用例要从“选课、付费”变成“借书、还书、续借”类要从“课程、学生”变成“图书、读者、借阅记录”状态图要从“课程创建→课表→终止”变成“图书在馆→借出→归还”。硬套的后果是答辩时一问业务就露馅。可以保留骨架的是包图和物理图。包图的顶层结构表现层、业务层、数据层三层分包在绝大多数管理系统里通用你只需要替换包内的功能包名字物理图的三节点结构客户端、应用服务器、数据库服务器更是系统通用改个节点标注就能用。报告里实验0的读者借书还书续借用例图和订单系统包图正好可以作为“换业务域”的示范同样的EA操作换个业务图就跟着变了。换域操作我一般按四步走。第一步从需求描述里提取活动者和用例画出新系统的用例图这一步定边界第二步从用例的事件流里提取候选类画类图并标好基数和可见性这一步定结构第三步挑选2到3个核心用例画序列图把用例的事件流翻译成对象间的消息这一步定行为第四步补状态图和活动图把对象生命周期和关键流程细化。每完成一张图回看上一张图核对一次不要等全画完再检查——交互图画到一半发现类图缺一个类回头补类的成本比重画交互图低得多。5.2 可以直接复用的模板与表达报告里真正能直接复用的是两套表达模板。第一套是实验报告结构实验目的、实验环境、实验内容与要求、实验预习和准备、实验过程与结果、实验小结和体会。这个六段式结构是国内高校实验报告的标准格式你把自己的建模过程按这个结构填进去老师的格式要求基本就稳了。每个实验单独成章章内用同样的骨架阅卷老师翻起来非常顺手。第二套是事件流描述模板。报告里添加课程事件写得最完整基本流从“管理员选择进入管理界面”开始到“用例结束”收尾每个系统响应都编号备选流用A1、A2编号每个备选流都写明进入条件和回归点。这个“基本流备选流”的写法是UML用例描述的标准在uml期末考试试题里几乎是必考题型。你可以把模板抄下来换成自己的业务事件按同样的编号方式重写。备选流的编号规则是A1、A2按出现顺序编号每个备选流内部再分步骤编号比如A1123并明确写“转到基本流第X步”或“用例结束”。还有一个值得抄的细节实验报告在每个实验小结里写了“注意问题”比如用例要简单明了、用主动语态、垂直绘制继承和扩展、水平绘制包含。这些不是套话而是评审老师真正会盯的规则——垂直画泛化、水平画包含是UML图布局的约定俗成很多人把包含关系画成竖线看着别扭但说不出哪里错。照这份报告的布局习惯画能少挨不少批注。报告里还有一句“不要被include和extend所困扰”翻译过来就是先按业务直觉画画完再套关系类型别一开始就纠结箭头的语义。如果你是为了考试复习这份报告还有一个用途把实验1到实验7的图当作真题解析来读。软考的uml图试题通常就是给一段需求描述让你补全类图、画时序图或者找关联错误这份报告里的选课系统案例足够典型把每个实验的“实验内容与要求”当成题干“实验过程与结果”当成标准答案考前过一遍比刷十道概念题管用。尤其是“根据描述绘制类关系图注意对象之间关联的类型”这类要求几乎每年软考都有同款题型报告里那张类图就是现成的参考答案。6. 验证UML图是否合格三条快速自检路径6.1 自检路径一需求追溯查遗漏拿一张白纸把系统需求里的每个功能点列出来然后在用例图里逐个找对应的用例。找不到的要么需求没实现要么用例没画全。选课系统需求里有“管理员可以改动和删除课程”对应修改课程、删除课程两个用例需求里有“学生可以查询已选课程、选课、付费”对应三个用例。对照完如果发现某个需求没有任何用例承接那就是漏了。反向再查一遍用例图里画出来的用例如果需求描述里根本没有出处那就是画蛇添足该删。这条路径解决的是“图齐全但不对题”的问题课程设计里很多低分不是因为图少而是因为图和需求对不上。6.2 自检路径二图间一致性核对UML的问题大多是图与图之间对不上。我给自己定的核对清单是这样类图里出现的类在序列图、协作图里必须能找到对应的对象生命线或节点用例图里的每个用例至少有一张序列图或协作图去细化它的实现状态图里的每个状态迁移触发事件要在活动图或事件流里找得到对应动作包图里的包名要和浏览器模型树里的包名完全一致连大小写都要一致。这份报告里添加课程事件有三张相关的图——时序图、活动图、状态图都涉及“添加课程”你完全可以用这个用例当试金石逐张核对同一动作在不同图里的命名是否统一。命名不统一是建模界的老大难同一个“查询课程信息”不能在一张图里叫“查询”另一张图里叫“获取课程”答辩时一旦被问起很难圆回来。6.3 自检路径三用EA做模型级检查画完别急着导出先用EA自带的检查功能扫一遍模型。常见做法是右击浏览器里的包或图选择模型验证相关的选项EA会检查出重复命名、断开的关联、未定义的属性类型这类低级错误。日志窗口会列出问题项双击能定位到具体元素。我在检查时固定做三件事一是看日志窗口有没有报错有报错先处理再继续二是逐个打开元素的属性窗口确认属性类型和基数写法规范比如0..n不要写成o..n三是用这份报告摘要里的要求反向核对——每张图的要素是否齐全用例图有没有系统边界类图有没有可见性符号状态图守卫条件有没有方括号。这套流程走下来大概半小时但能拦下大半低级错误。从带课程设计到现在我每次交图前都强制走一遍这三条路径。UML建模这种东西很多时候不是概念不懂而是细节翻车——基数贴反、include方向错、守卫条件没加方括号这些坑一份一份踩过来最后发现解决办法都很简单就是老老实实按同一套清单核对。这份实验报告的最大价值也在这里它把八种UML图在同一个业务案例里串成了一个完整闭环你拿它对照着画一遍比看十篇“UML入门”都管用。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

YOLOv8瓶子检测源码实战:从训练到Docker部署全链路拆解

YOLOv8瓶子检测源码实战:从训练到Docker部署全链路拆解

简介:本资源面向深度学习目标检测初学者与进阶开发者,提供一套基于YOLOv8的瓶子识别检测完整工程,可用于物品检测课程设计、毕业项目或工业质检场景的快速复现。压缩包共488个文件,约89.27MB,以115个Python源码、173个…

2026/10/11 19:52:46 阅读更多 →
Linux下Ad-Hoc无线网络实战:IBSS模式配置与驱动级调试

Linux下Ad-Hoc无线网络实战:IBSS模式配置与驱动级调试

简介:本资源是一份面向高校计算机网络课程实验的Ad-Hoc无线自组网实践指导文档,适用于网络工程、通信技术等专业学生及初学者,解决无AP环境下快速构建临时对等无线网络并实现文件共享的实际问题。文档完整覆盖实验目的、原理(强调…

2026/10/11 19:52:46 阅读更多 →
深入排查npm报错:Cannot read properties of null (reading ‘matches‘)的完整指南

深入排查npm报错:Cannot read properties of null (reading ‘matches‘)的完整指南

先别急着清缓存重装,这个报错我前后折腾过好几次,每次原因都不一样。先花两分钟把错误本身看明白,后面能省一大堆时间。1. 报错拆解:这行错误到底在说什么1.1 错误信息的语法结构这行报错是典型的 JavaScript TypeError&#xff0…

2026/10/11 19:51:46 阅读更多 →

最新新闻

滑块验证中的UA动态生成与轨迹建模工程实践

滑块验证中的UA动态生成与轨迹建模工程实践

简介:本资源是一份面向Python安全研究与自动化开发者的滑块验证码逆向分析实践案例,聚焦阿里巴巴X82YX5SEC滑块验证机制的识别与模拟突破。内容涵盖核心算法实现、通用滑块处理逻辑及配套客户端环境,适用于Web安全学习、验证码对抗技术研究及…

2026/10/11 20:35:22 阅读更多 →
termite 1.8.4 多系统多架构发布包:安装配置与排错实战

termite 1.8.4 多系统多架构发布包:安装配置与排错实战

简介:Termite 1.8.4 是一套轻量级跨平台远程管理工具包,覆盖 Linux、macOS、Windows 等主流系统,并适配 x86、x64、arm、mips 多种硬件架构。工具整体分为管理端 admin 与客户端 agent,支持跳板机互联、正反向级联和内置 Shell 操…

2026/10/11 20:35:22 阅读更多 →
QT+PaddleOCR打造桌面OCR识别工具:架构与实战避坑指南

QT+PaddleOCR打造桌面OCR识别工具:架构与实战避坑指南

简介:面向需要快速搭建OCR应用界面的Qt开发者与PaddleOCR初学者,这套demo压缩包将源码与发布版本打包在一起,可作为从零开始接触文字识别界面开发的完整示例。压缩包整体大小约454.7MB,源码部分涵盖Qt窗口设计、调用PaddleOCR识别…

2026/10/11 20:35:22 阅读更多 →
中文社区为何一夜开写 SemIf:从 Kev 到 GLiNER,语义判断这波热度有迹可循

中文社区为何一夜开写 SemIf:从 Kev 到 GLiNER,语义判断这波热度有迹可循

中文社区为何一夜开写 SemIf:从 Kev 到 GLiNER,语义判断这波热度有迹可循 【免费下载链接】SemIf-OpenJev Semantic ifs from open models, on a 3090 at home. Independent; not affiliated with Jev or TypeSafe. 项目地址: https://gitcode.com/gh_…

2026/10/11 20:35:22 阅读更多 →
MySQL事务隔离级别实战:脏读、幻读、MVCC与间隙锁全解析

MySQL事务隔离级别实战:脏读、幻读、MVCC与间隙锁全解析

1. 先讲清楚:隔离级别不是“四个等级”,而是“四组权衡”很多人面试被问“MySQL 事务隔离级别有哪几种”,都能背出四个名字:读未提交、读已提交、可重复读、串行化。但真正的难点从来不是背名字,而是搞懂每个级别到底堵…

2026/10/11 20:35:22 阅读更多 →
YashanDB单机部署实操:从环境准备到实例启动的完整指南

YashanDB单机部署实操:从环境准备到实例启动的完整指南

数据库这玩意儿,平时看着没啥存在感,可真到要部署的时候,环境、依赖、权限、端口、内核参数,哪一个拎出来都能把人折腾得没脾气。最近一段时间,因为项目选型,我在几台机器上反复部署过YashanDB——一款国产…

2026/10/11 20:34:21 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →