de_DEen_USes_ESfa_IRfr_FRhi_INjapl_PLpt_PTru_RUvizh_CNzh_TW

从文本到UML模型:将问题描述转化为类图和顺序图的实用案例研究

引言

在现代软件工程中,将模糊的业务需求转化为精确、可操作的系统模型是一项关键技能。文本分析作为自然语言问题陈述与正式UML(统一建模语言)图之间的强大桥梁。本案例研究展示了一个完整、分步的流程,用于从实际问题描述中提取候选类,通过系统化的排除标准进行优化,并将其演变为稳健的类图和顺序图。

以Saturn国际停车场安全系统作为我们的实际示例,我们展示了产品经理、业务分析师和软件架构师如何利用Visual Paradigm的文本分析功能,加速需求发现,减少歧义,并生成可维护的设计成果。无论您是在建模访问控制系统、企业工作流还是面向客户的应用程序,本文提出的方法论都提供了一个可重复的框架,将文字转化为可工作的模型。

Transforming Problem Descriptions into Class and Sequence Diagrams


问题描述

以下问题描述将在本教程中使用。让我们来看一下。

Saturn国际管理层希望加强其建筑及现场的安全措施。他们希望阻止非公司人员使用停车场。

Saturn国际已决定向所有员工发放身份卡。每张卡片记录员工的姓名、部门和编号,并赋予其进入公司停车场的权限。员工在场内时需佩戴此卡。

停车场入口处设有栏杆和读卡器。当驾驶员驾车进入停车场时,需将身份卡插入读卡器。读卡器随后验证卡片编号,以确认其是否在系统中登记。若编号被识别,读卡器会发送信号,触发栏杆升起。驾驶员便可驾车进入停车场。

停车场出口处另有另一道栏杆,当车辆欲驶离停车场时,该栏杆会自动升起。

当停车场无空位时,入口处的指示牌会显示“满”。只有当车辆驶离后,该指示牌才会关闭。

还有一种用于访客的卡片,同样允许进入停车场。该卡片记录编号和当前日期。此类卡片可提前发放,或从接待处领取。所有访客卡片必须在访客离开Saturn国际时归还至接待处。


从文本中识别类

创建文本分析

  1. 创建一个新项目。选择 项目 > 新建 从主菜单中选择。在 新建项目 窗口中,将项目命名为 教程 并点击 创建空白项目 以确认。

  2. 创建一个新的文本分析。选择 图表 > 新建 从主菜单中选择。

  3. 在 新建图表 窗口中,选择 文本分析并点击下一步。输入安全改进作为图表名称,然后点击确定.

    Create Textual Analysis

  4. 这将打开文本分析编辑器。复制上方提供的问题描述并将其粘贴到编辑器中。可以通过按下Ctrl-V或在编辑器上右键单击并选择粘贴.

    Identify candidate class

从文本中识别候选对象

通读问题描述以识别候选类。找到候选对象后,在文本段落上右键单击并选择将文本添加为类从弹出菜单中。

Problem statement pasted

以下是获得的候选类列表:

土星公司 安全措施 建筑 场地
不属于公司的人员 停车场 身份卡 员工
姓名 部门 编号 公司员工
访问 障碍 读卡器 驾驶员
卡号 系统 信号 出口
客人使用的另一种卡 接待 客人卡 访客

到目前为止,文本分析编辑器应如下所示:

Candidate classes identified

拒绝候选对象

在本节中,将根据拒绝规则列表审查这些候选类。本节结束时,将获得一个类模型列表。

现在,请根据以下拒绝规则审查候选类列表:

  • 重复:如果两个或多个对象只是同一事物的不同名称。

  • 无关:存在于问题领域中,但并非有意包含的对象。

  • 模糊:仔细考虑词语时,有时会发现它们没有明确的含义,无法成为系统中有用的基础。

  • 过于宽泛:含义过于宽泛。

  • 属性:作为对象的属性。

  • 关联:实际上表示对象之间的关系。

  • 角色:有时指在系统特定部分中扮演特定角色的对象。

下表列出了审查结果:

候选类 接受/拒绝 拒绝原因
土星国际管理 拒绝 与系统无关
安全措施 拒绝 模糊
建筑 拒绝 与系统无关
地点 拒绝 与系统无关
公司以外的人员 拒绝 与系统无关
停车场 接受
身份证明 接受
员工 拒绝 与‘公司员工’重复
姓名 拒绝 属性
部门 拒绝 属性
编号 拒绝 属性
公司员工 拒绝 角色
访问 接受
障碍 接受
读卡器 接受
驱动程序 拒绝 角色
卡号 拒绝 属性
系统 拒绝 过于宽泛
信号 接受
退出 拒绝 与系统无关
客人使用的另一种卡 拒绝 与客人卡重复
接待 拒绝 与系统无关
客人卡 接受
访客 拒绝 角色

为了区分被接受和被拒绝的候选类别,让我们将被接受的类别的高亮颜色改为绿色。为此,请点击带有黄色高亮的单元格,并从颜色选择器中选择绿色。

Change highlight color

因此,现在得到的候选类别列表如下:

停车场 身份卡 访问 障碍
读卡器 信号 访客卡

重新表述已识别的类别

让我们重新表述被接受的候选类别,要求:(1) 统一单数和复数形式的名词表达;(2) 准确反映提取文本的含义。

请阅读下方表格,了解所需更改及更改原因。

提取的文本 重述为 原因
停车场
身份卡 员工卡 “身份卡”字面意思是各种卡片,但根据文章内容,“身份卡”一词来自短语“发放给所有员工的身份卡”,因此实际上指的是员工卡。我们应将其重述以避免混淆。
访问
障碍
读卡器
信号
出口
访客卡 访客卡 改为使用单数名词,使其与其他词语保持一致

相应地更新候选类别的名称:

Renaming candidate

从文本创建类模型元素

您已经确定了一组类。要将它们用于模型构建,您需要将它们从文字转换为模型元素。

  1. 选择表格中的七个类。要进行多选,请按住 Ctrl 键,然后逐行点击。

  2. 右键单击您的选择,然后选择 创建模型元素 从弹出菜单中。

    Create element

  3. 您将被提示在图表中可视化创建的元素。请保持选择 创建新图表 已选。将类图重命名为 停车场系统 并点击 创建.

    Visualize classes into class diagram
    这将创建一个类图。
    Class diagram formed


开发类模型——识别结构关系

您已经获得了一组在类图中可视化显示的类。现在,通过使用关联、泛化和依赖等关系连接器将它们连接起来,来识别它们的结构关系。下图展示了结果。在此过程中,可能会添加新的类,例如本例中将“card”类作为“员工卡”和“访客卡”子类的父类添加。

Class diagram updated


开发交互模型——识别属性和操作

创建顺序图以可视化对象之间的交互,即上述识别出的那些类的实例。在此过程中,将识别出属性和操作,从而使类模型完整。让我们创建一个顺序图,以可视化公司员工驾车进入停车场的情况。

  1. 创建一个顺序图。选择 图表 > 新建 从主菜单中。

  2. 在 新建图表 窗口中,选择 顺序图 并点击 下一步。选择 空白作为模板并点击下一步。输入停车场(使用员工卡)作为图表名称并点击确定.

    Create sequence diagram

  3. 该场景从一名司机将员工卡插入读卡器开始。让我们创建一个参与者员工。要创建一个参与者,请选择参与者工具,从图表工具栏中拖动到图表上。

    Create actor

  4. 我们需要将读卡器显示为一个对象。与其创建生命线,不如从读卡器类创建一个对象实例。实现这一点有几种方法。其中一种方法是通过模型浏览器。点击模型浏览器标签,位于应用程序窗口的左侧(或选择视图 > 面板 > 模型浏览器如果标签不存在)。然后,将类“读卡器”拖动到图表上。

    Drag reader class onto diagram

  5. 选择生命线以创建类型时的提示。

  6. 生命线会自动命名为“读卡器”,遵循分类器的名称。由于名称是可选的,我们将其删除。这也能使图表更易读。

    Card reader lifeline created

  7. 连接员工: 读卡器。将鼠标指针移至参与者员工。按下 资源目录按钮并将其拖动到生命线 : 卡片读取器.

    To create sequence message

  8. 释放鼠标指针并选择 消息 从 资源目录.

    Selecting sequence message to create

  9. 输入 插入员工卡 作为消息的名称。

    Sequence message created

  10. 作为输入设备,卡片读取器接收卡片后,会请求系统进行验证。让我们为系统创建一条生命线。由于我们没有此类,可以直接创建生命线。拖动 生命线 从图表工具栏拖到图表上。将生命线命名为 停车场系统.

    Create car parking system lifeline

  11. 创建一条消息 验证卡片() 从 : 卡片读取器 到 停车场系统.

    Verify card message created

  12. 有两种可能的结果:成功或失败。我们将对这两种情况建模。在UML顺序图中,可以使用替代组合片段来建模多种可能的流程。创建一个覆盖参与者和生命线的替代组合片段。随着越来越多的生命线被添加,我们将调整其大小以覆盖更多生命线。

    Alternative combined fragment created

  13. 如果成功,系统将加载员工卡的记录。创建一条自消息 加载员工()。为此,请将鼠标指针移至 汽车停车系统然后点击资源目录,然后选择自消息 -> 生命线资源目录。输入自消息的名称。

    Create self message

  14. 按照步骤4将类可视化员工卡作为生命线。再次,删除其名称。

    Staff card class visualized

  15. 假设最后一次访问时间将被设置为员工卡的记录。通过一个设置消息来表示这一点设置最后一次访问().

    Sequence message created

  16. 将创建一条访问记录。让我们将访问类在图中作为生命线可视化,然后通过一个创建消息连接到它。别忘了扩大替代组合片段以覆盖生命线。

    Create message created

  17. 还将创建一个信号以触发栏杆升起。让我们将信号类在图中可视化,然后通过一个创建消息连接到它。到目前为止,你的顺序图应与下面的图相似。

    Sequence diagram updated

  18. 升起栏杆。将栏杆类作为生命线可视化,并通过一个升起()消息连接。这里我们将生命线命名为入口因为入口和出口都有栏杆,而在此图中我们指的是入口处的栏杆。

    Barrier class visualized

  19. 最后,请求读卡器显示一条消息,以表明员工卡验证成功。创建一个顺序消息“显示成功消息”,连接在汽车停车系统: 卡片读取器.

    Show success message

  20. 当卡片无法验证时会发生什么?让我们在alt.组合片段的下部对其进行建模。假设系统将请求卡片读取器显示验证失败消息。在图中创建这样的消息。

    Show fail message

  21. 无论成功或失败,验证过程结束后员工卡都将被弹出。让我们创建序列消息弹出卡片连接停车系统: 卡片读取器.

    Eject card message created

  22. 最后,创建一个从: 卡片读取器返回到参与者员工。为此,创建该消息,然后右键单击它并从弹出菜单中选择类型(未指定)> 回复从弹出菜单中。

    Card returned message created

  23. alt.组合片段的两个部分被称为操作数。将操作数的条件作为约束输入。右键单击组合片段左上角的标签alt,然后从弹出菜单中选择操作数 > 管理操作数从弹出菜单中。在弹出窗口中,将两个操作数的约束分别设置为卡片已接受卡片被拒绝分别。

Manage operand

  1. 让我们从序列消息创建操作。首先,从停车系统生命线创建一个类。右键单击生命线,然后从弹出菜单中选择选择类 > 创建类“停车系统”从弹出菜单中。

    Create class from lifeline

  2. 参考以下图像。对于每个高亮的连接器,右键单击它并选择输入 > 调用 > 创建操作从弹出菜单中选择。

    Create operations

  3. 返回类图。操作会自动显示在类模型中。

    Class model updated

通过为不同场景创建越来越多的顺序图,类模型将逐步得到丰富,包含系统所需的所有操作和属性。


结论

将自然语言需求转化为精确的UML模型既是一门艺术,也是一门科学。本案例研究证明,通过有纪律的方法——从文本分析开始,应用系统化的排除标准,重新表述以提高清晰度,并通过类图和顺序图迭代优化——团队能够将模糊的问题陈述转化为稳健且可实现的系统设计。

Saturn International停车场示例说明,即使看似简单的需求也包含多层复杂性:多种参与者类型、条件流程、硬件交互以及状态管理。通过利用Visual Paradigm的集成建模环境,实践者可以从初始文本追踪到最终代码,确保各图表之间的一致性,并在技术与非技术人员之间实现高效协作。

实践者的要点总结:

  • 从广泛的候选提取开始,然后通过明确的排除规则进行精炼

  • 使用单数且一致的命名规范以减少歧义

  • 利用顺序图揭示隐藏的操作和属性

  • 将建模视为一个迭代过程——每个场景都会丰富类模型

  • 保持需求、模型与实现之间的双向可追溯性

无论您是在设计访问控制系统、企业工作流,还是面向客户的应用程序,本文提出的方法论都提供了一个可重复、可扩展的框架,将文字转化为可工作的软件模型。


参考文献

  1. Visual Paradigm UML工具功能:全面概述Visual Paradigm的UML建模功能,包括对所有14种UML 2.x图类型的支特以及AI辅助建模功能。
  2. 14种UML图类型的概述:详细指南,解释结构型和行为型UML图及其在软件设计中的适用场景。
  3. Visual Paradigm用户指南PDF:官方文档,涵盖Visual Paradigm的安装、界面导航及核心建模工作流程。
  4. UML建模文档:逐步说明,介绍如何在Visual Paradigm环境中创建、编辑和管理UML图。
  5. 什么是UML图?:面向初学者的UML概念、图类型及其在软件架构和设计沟通中作用的友好入门介绍。
  6. 使用用例捕获需求:使用用例图和文本分析来获取、记录和验证系统需求的实用指导。
  7. AI辅助的UML类图生成器:概述Visual Paradigm的AI驱动功能,可从自然语言描述中自动生成类图。
  8. PlantUML转Visual Diagrams教程: 视频教程,演示如何将PlantUML脚本代码转换为Visual Paradigm中的交互式、可编辑的UML图。
  9. 什么是UML?: 对统一建模语言(UML)原理、历史及其在现代软件工程实践中的重要性的基础性解释。
  10. 代码工程工具: 描述了双向工程功能,支持多种编程语言的代码生成和逆向工程。
  11. 使用ORM进行数据库映射: 指导如何使用对象-关系映射技术,从UML类图生成数据库模式和持久层。
  12. 数据库工程的优势: 解释集成数据库建模如何提高数据一致性、缩短开发时间,并支持敏捷迭代。
  13. Visual Paradigm图库: 展示使用Visual Paradigm创建的示例项目、图示模板和行业特定的建模实例。
  14. 安装Visual Paradigm: 官方安装指南,涵盖系统要求、许可证激活和初始配置步骤。
  15. Eclipse中的UML集成: 文档说明如何将Visual Paradigm建模工具直接嵌入Eclipse IDE中,以实现无缝的开发工作流。
  16. 免费UML工具选项: 对比Visual Paradigm社区版功能与专业版能力,帮助评估建模解决方案的团队做出选择。
  17. UML建模软件流程: 概述UML工具如何融入迭代开发流程,包括敏捷、瀑布和混合方法论。
  18. 可视化建模工具功能: 详细的功能列表,突出智能元素复用、语法验证和资源目录功能,这些是专业建模工具的显著特征。
  19. 面向企业解决方案的UML工具: 面向企业用户的描述,突出Visual Paradigm的可扩展性、协作功能,以及与需求管理与敏捷规划工具的集成能力。
  20. Visual Paradigm主页: Visual Paradigm的主网站,提供产品下载、教程、社区论坛和支持资源,供建模实践者使用。
  21. UML教程合集: 精选的分步教程库,涵盖从入门到高级的多种图示类型的UML建模技术。
  22. 繁体中文UML工具指南: 针对繁体中文使用者和团队的本地化资源,提供UML建模指导和产品信息。