实现ConcurTaskTrees(CTT)与UML 2.0活动图的集成
1. 背景与目标
在软件开发中,特别是在交互式系统设计领域,将任务模型与软件建模语言有效集成是一项重要需求。ConcurTaskTrees(CTT)是一种用于描述交互式系统中任务对话的强大符号,而统一建模语言(UML)则广泛应用于软件系统的建模。本文旨在提出一种通过扩展UML 2.0活动图来实现CTT与UML集成的方法,以促进交互式系统的协同进化开发,并为软件工程和人机交互领域的工具和从业者之间的工件交换提供便利。
2. ConcurTaskTrees概述
CTT是一种基于图形符号的任务建模方法,它考虑了以往任务建模的经验,并添加了新特性,以提供一种易于使用且强大的方式来描述交互式系统中的对话。
-
结构特点
:CTT基于图形符号,支持任务的层次结构。任务之间通过一组强大的操作符相互关联,这些操作符描述了子任务之间的时间关系。
-
语义定义
:CTT中时间关系的形式语义使用标记转移系统(LTS)形式主义进行定义。
-
任务属性
:CTT允许设计者指定一系列可选的任务属性,如类别(任务执行的分配方式)、类型、对象操作、频率和执行所需的时间。
-
支持工具
:CTT符号由CTTE(ConcurTaskTrees环境)支持,这是一组免费的工具,用于支持任务模型的编辑和分析。CTT符号在人机交互领域被广泛认可,在多所大学用于教学和研究,并且在开发项目中也有应用。
3. UML 2.0活动图概述
UML从早期版本开始就采用Harel状态图来表示软件密集型系统的动态方面,UML 1.x版本还包括活动图,它被定义为状态图的一个子集。在UML 2.0中,活动图进行了重新设计,遵循“Petri网”语义,从而将活动图与状态图分离。
-
基本单元
:活动图的基本行为规范单元是动作(Action)。动作接收一组输入并将其转换为一组输出,输入或输出集可以为空。动作分为三种类型:
1.
调用动作(Invocation Actions)
:用于执行操作调用、信号发送和接受事件动作。
2.
读写动作(Read and Write Actions)
:用于访问和修改对象及其值。
3.
计算动作(Computation actions)
:将输入值转换为输出。
-
其他元素
:除了动作,活动图还可以包含控制节点、对象节点、活动边和活动组。其中,可中断活动区域(Interruptible Activity Region)在本文中被频繁使用,它支持活动部分中令牌流的终止。
4. 将CTT映射到UML 2.0活动图
为了将CTT语义表示在UML活动图中,我们从应用时间操作符于两个任务所获得的行为角度进行分析。在UML 2.0方法中,原子CTT任务映射为动作,复合任务映射为调用行为动作。任务是否启用取决于是否拥有令牌。
以下是对每个CTT时间操作符的UML语义分析:
| 操作符 | 描述 | UML 2.0映射 |
| ---- | ---- | ---- |
| 独立并发(T1 ||| T2) | 两个任务的动作可以按任意顺序执行,无特定约束 | 使用分叉节点创建两个独立的控制流,使用合并节点同步。通过接受事件动作和发送信号动作控制任务的开始和结束,需要可中断区域确保只产生一个开始信号。 |
| 选择(T1 [] T2) | 可以从一组任务中选择一个执行,选择后其他任务至少在所选任务完成前不可用 | 使用可中断区域和接受事件动作确保只有一个任务执行。任务的开始和结束取决于其中一个任务发送的信号。 |
| 带信息交换的并发(T1 | [] | T2) | 两个任务可以并发执行,但需要同步以交换信息 | 与独立并发操作符的解决方案相同,此外使用中央缓冲区节点进行信息交换。 |
| 顺序无关(T1 | = | T2) | 两个任务都必须执行,但一个任务开始后必须完成才能开始另一个任务 | 类似于选择操作符,不同之处在于当一个任务被禁用时,需要等待另一个任务执行完毕才能再次启用。两个任务都执行完毕后发送结束信号。 |
| 停用(T1 [> T2) | 第二个任务的第一个动作执行后,第一个任务永久停用 | 使用可中断区域和接受事件动作控制任务的启用和停用。任务的开始可以是T1或T2的开始,结束取决于其中一个任务的结束。 |
| 启用(T1 >> T2) | 一个任务结束时启用另一个任务 | 使用控制流连接两个任务。任务的开始对应T1的开始,结束对应T2的结束。 |
| 带信息传递的启用(T1 []>> T2) | 任务T1除了启用任务T2外,还向其提供一些信息 | 类似于启用操作符,增加了任务T1和T2之间的对象流。 |
| 暂停 - 恢复(T1 |> T2) | T2可以中断T1,T2结束后,T1可以从中断前的状态恢复 | UML 2.0规范中没有支持恢复功能的行为,因此该操作符不被现有UML语义支持。 |
| 迭代(T*) | 任务重复执行 | 第一次执行任务T1时发送开始信号,并为任务T1创建一个流循环。 |
| 有限迭代(T1(n)) | 设计者预先知道任务将执行的次数 | 使用局部变量计数迭代次数。迭代开始于任务T1的第一次执行,在n次完成信号后结束。 |
下面是一个简单的mermaid流程图,展示独立并发操作符的UML映射:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始]):::startend --> B{接受T1开始信号}:::decision
A --> C{接受T2开始信号}:::decision
B -->|成功| D(发送Start T1|||T2信号):::process
C -->|成功| D
D --> E(分叉节点):::process
E --> F(T1任务):::process
E --> G(T2任务):::process
F --> H(合并节点):::process
G --> H
H --> I{接受T1结束信号}:::decision
H --> J{接受T2结束信号}:::decision
I -->|成功| K(检查T2是否结束):::decision
J -->|成功| K
K -->|都结束| L(发送Finish T1|||T2信号):::process
L --> M([结束]):::startend
5. 为ConcurTaskTrees设计UML符号
虽然UML 2.0标准可以通过重新设计的活动图成功支持CTT语义,但即使是简单的任务树也会导致非常复杂的活动集,包含大量的动作和控制节点。这是状态图类符号的一个常见问题,随着状态数量的增加,图会变得难以阅读。
为了解决这个问题,我们对UML抽象语法进行了小的扩展。具体做法是创建一个名为“Tasks”的新包,以隔离扩展与实际的UML规范。在这个包中,我们引入了三个新的概念:
-
TaskTree
:作为Activity概念的特化,用于建模任务树。
-
Task
:用于建模任务的概念。
-
TaskEdge
:用于建模时间操作符。
这些新的概念允许创建一种专门的活动图类型,用于建模任务树,我们将其命名为任务树图(Task Tree Diagrams)。通过这种方式,我们保持了新任务概念与现有活动图之间的紧密关系,使得新符号易于与现有的UML 2.0符号连接。
以下是任务包和任务操作符的简单说明:
-
任务包结构
:
- 包含TaskTree、Task和TaskEdge等元素,它们与UML基本活动图中的元素(如Activity、Action、ActivityEdge)存在关联。
- TaskTree是Activity的特化,Task是建模任务的元素,TaskEdge用于表示任务之间的时间关系。
-
任务操作符
:
- 包括IndependentConcurrencyEdge、ChoiceEdge、EnablingEdge等,分别对应不同的CTT时间操作符。
通过这种扩展,我们可以更清晰地表示CTT语义,同时保持UML符号的一致性和可读性。例如,在表示简单任务树时,新符号中的时间操作符借鉴了UML活动图的符号,如独立并发与分叉/合并节点、选择与决策节点、停用与中断边等具有明显的相似性。对于任务之间的信息交换,我们采用对象流和引脚符号。任务与其细化子任务之间的关系借鉴了在同一图中显示包及其内容的符号,提供了适当的层次表示。
综上所述,通过扩展UML 2.0活动图,我们成功实现了CTT与UML的集成。这种集成不仅在语义上是正确的,而且通过引入新的符号和概念,解决了简单任务树在UML映射中变得复杂难以阅读的问题。这为交互式系统的开发提供了一种有效的方法,促进了任务建模在软件工程中的应用,同时也方便了软件工程和人机交互领域之间的工件交换。
实现ConcurTaskTrees(CTT)与UML 2.0活动图的集成
6. 集成的优势与意义
CTT与UML 2.0活动图的集成具有多方面的优势和重要意义,主要体现在以下几个方面:
-
促进协同进化开发
:实现了任务模型概念在UML框架内的真正统一集成,使得交互式系统的开发过程中,任务模型和软件模型能够协同进化。开发人员可以更方便地将任务分析的结果融入到软件设计中,同时在软件设计过程中也能更好地考虑任务的需求和约束。
-
提供通用基础
:为将任务建模有效引入软件工程提供了一个通用的基础。这有助于打破人机交互和软件工程两个领域之间的壁垒,促进两个领域的工具和从业者之间的交流与合作,实现工件的互换。
-
利用现有成果
:基于UML 2.0活动图的语义,CTT可以充分利用现有的关于活动图验证和执行的研究成果。这不仅可以提高任务模型的可靠性和可执行性,还可以降低开发成本和风险。
7. 实际应用案例分析
为了更好地理解CTT与UML 2.0活动图集成的实际应用效果,我们可以考虑一个简单的交互式系统开发案例,例如一个在线购物系统。
在这个系统中,用户的任务可以用CTT进行建模,如用户登录、浏览商品、添加商品到购物车、结算等。通过将这些CTT任务映射到UML 2.0活动图中,我们可以更清晰地展示系统的行为和流程。
| CTT任务 | UML 2.0活动图映射 |
|---|---|
| 用户登录(T1) >> 浏览商品(T2) | 使用控制流连接登录任务和浏览商品任务,登录任务结束后启用浏览商品任务。 |
| 浏览商品(T2) [] 搜索商品(T3) | 使用可中断区域和接受事件动作,用户可以选择浏览商品或搜索商品,选择后另一个任务在当前任务完成前不可用。 |
| 添加商品到购物车(T4) ||| 继续浏览商品(T5) | 使用分叉节点创建两个独立的控制流,用户可以同时进行添加商品到购物车和继续浏览商品的操作,最后使用合并节点同步。 |
以下是该案例的mermaid流程图:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始]):::startend --> B(用户登录):::process
B --> C{是否登录成功}:::decision
C -->|是| D(浏览商品):::process
C -->|否| B
D --> E{选择操作}:::decision
E -->|浏览商品| D
E -->|搜索商品| F(搜索商品):::process
F --> D
D --> G{是否添加商品到购物车}:::decision
G -->|是| H(添加商品到购物车):::process
G -->|否| D
H --> I(继续浏览商品):::process
D --> I
I --> J{是否结算}:::decision
J -->|是| K(结算):::process
J -->|否| D
K --> L([结束]):::startend
从这个案例可以看出,通过CTT与UML 2.0活动图的集成,我们可以更直观地展示系统的任务流程和交互逻辑,有助于开发人员更好地理解系统需求,提高开发效率和质量。
8. 未来发展方向
尽管CTT与UML 2.0活动图的集成已经取得了一定的成果,但仍然存在一些可以进一步探索和发展的方向:
-
语义扩展
:可以进一步扩展UML的语义,以支持更多复杂的CTT操作符和任务属性。例如,对于目前UML 2.0规范中不支持的暂停 - 恢复操作符,可以研究如何通过扩展语义来实现。
-
工具支持
:开发更完善的工具,帮助开发人员更方便地进行CTT与UML的集成。这些工具可以提供可视化的编辑界面、自动映射功能、验证和分析功能等,提高集成的效率和准确性。
-
跨领域应用
:将CTT与UML的集成应用到更多的领域,如物联网、人工智能等。在这些领域中,任务建模和软件设计的结合将更加重要,通过集成可以更好地满足这些领域的需求。
9. 总结
本文详细介绍了通过扩展UML 2.0活动图实现ConcurTaskTrees(CTT)与UML集成的方法。首先,我们对CTT和UML 2.0活动图进行了概述,了解了它们的基本概念和特点。然后,分析了如何将CTT的时间操作符映射到UML 2.0活动图中,并通过具体的案例和流程图进行了说明。接着,为了解决UML映射中任务树复杂难以阅读的问题,我们对UML抽象语法进行了扩展,引入了新的概念和符号。最后,探讨了集成的优势、实际应用案例和未来发展方向。
通过这种集成,我们实现了任务模型和软件模型的统一,为交互式系统的开发提供了一种有效的方法,促进了人机交互和软件工程领域的交流与合作。相信在未来,随着技术的不断发展和研究的深入,CTT与UML的集成将在更多的领域得到应用和推广。
超级会员免费看
3203

被折叠的 条评论
为什么被折叠?



