我正在开发用于图像搜索的移动应用程序
这是我的用例图
演员=智能手机用户
系统=客户端应用程序
在发送到服务器之前,在客户端预先处理查询(例如,将声音查询转换为文本查询)
我应该将这个用例添加到我的图表中吗?
我认为它可能是像这样的扩展使用cqse
答案 0 :(得分:2)
首先"作为一般建议":
"不要浪费你的时间通过询问"我应该添加吗?"。因为你 是唯一能说出这个的人吗?只要问问自己:显示或 将其添加到您的图表中,您将获得什么样的好处?
建模意味着显示隐藏细节的重要概念。你是 谁会识别什么是重要的,什么是详细的。因为你将实施系统而让你的手弄脏。
其次" Techically"
扩展意味着"执行用例/场景" 是可选的还是有条件的。
所以如果"预处理查询" [我不知道它是什么 手段。无论是什么,都可以根据条件执行[ 假设当x条件为真时在"进行查询"用例,然后 "预处理查询"用例/场景将被执行],技术上是真的使用扩展关系。 所以你可以做 你自己的判断。
最后:技术上的正确并不意味着它是正确的。
尽可能不要使用" include"或"延伸" 关系。它们使您的用例和图表更加复杂。
首先使用您的用例作为文本然后如果您发现"相同 场景"在您的用例中[repating]将它们作为单独的用例提取。使用 "包含" 将这些常见用例/方案附加到主要用途 例/场景。使用扩展"关系"每当你找到/发现新的 主要用例可选择执行的重要场景。
我的个人想法:
对我来说,你甚至不应该显示" Make Query"在您的图表中。[当然,在编写用例时,如果所有这3个用例都以相同的方式进行查询,请将其作为单独的用例编写,然后将主要用例场景文本包括在内,使用include关系可以节省时间。这并没有错。小心我说"将用例写成文本"]。
主要问题是"我应该在我的用例图中显示它"。所以你应该问,谁会阅读我的用例图?或者为什么我创建这样的图表?根据您的背景做出自己的判断。务实。
更多信息:
用例是"文本故事"一些演员使用系统来实现目标。 在您的情况下,您的演员是智能手机用户。
请问问自己,用户想要对您的系统做些什么?
拍照。 [合理合理]
键盘类型 [声音不好]:为什么他/她键入键盘?她/他的主要目标是什么?也许你的意思是搜索图片...在那种情况下"键入键盘"用例不是一个好用的候选者。要搜索图片,他可能会用键盘图片名称来编写。但打字键盘不是他/她的主要目标:它是" 按文字搜索图片"的一部分。用例。
对待查询:[将语音查询转换为文本查询]因此它不是用例。它可能是"按语音搜索"的一部分: 当您编写"按语音搜索"用例文本:
主要情景:
...
替代方案
2 a)图像搜索应用程序无法识别语音: .....
对我来说,即使这样也增加了不必要的技术细节:我们可能不会提到第2步。只需说: "图像搜索应用程序搜索名称由语音给出的图片" 。 从语音生成文本查询是实现细节。如何做到这一点。 但用例重点是"用户可以使用您的应用做什么"。
不要忘记用例不是图表:用例图表非常适合直观地提供系统主要功能概述。 用例是"文字故事"。
因此,有很多方法可以在用例图中显示它们:
通常使用最小扩展,包含,泛化关系 在您的用例图中。不要浪费太多时间来识别 用例中的关系。
为了好的免费用例资源,请查看Craig Larman的畅销书中的免费章节:
答案 1 :(得分:0)
首先,我会使用<<include>>
代替<<extend>
。 `<<extend>>
定义扩展用例的补充和可选行为,扩展用例不需要此行为即可。另一方面,<<include>>
会将添加的行为显示在包含用例中。此外,由于此行为是您在make query
用例中所做的一部分;只需在make query
用例的描述中描述它。