用例规约要细致到万无一失吗?

探讨用例规约在软件开发中的应用及存在的问题,强调团队协作的重要性,并提出通过迭代开发来逐步完善用例规约的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网友的来信:

  谭先生,您好!
      最近在拜读您的大作《大象》,收益良多,正是我在寻找的一份有正在将uml运用于实际场景过程的好教材。在阅读中,我反复回顾并结合了我在实践中的一些积累。有一个关于用例规约的小问题想请教下。
      先介绍下问题的背景,我从事的产品以web界面为主,业务逻辑本身并不十分复杂,产品设计人员产出物为 用例规约和原型demo,开发即开始进行相应的表设计,开发,没有做到您提的三个层级建模的过程(这样的人才和资源要求比较高)。(呵呵,我想这是国内很多公司的做法吧:-D)。
      问题就产生于这样的产品开发流程中,到了产品的深入开发以及测试阶段,开发、测试、产品设计人员往往会对于一些用例规约的模糊地带产生比较多的分歧,诸如,用例中是否应该包含ui的信息,比如怎么交互,使用什么控件,反馈信息应该如何。另外,用例规约对于一些实现层面的异常流程的处理的说明如果缺失话,往往会造成争持,而作为用例产出者的产品设计人员也往往很委屈,觉得无法做到"事无巨细"。
      关于这样的问题,个人理解,归结到底,就是用例的细腻程度应该如何?望谭先生不吝赐教!
      另,还在学习中,如有疑问的产生还希望得到您的继续指教,非常感谢!

我的回复:

     你好。用例当中有关于UI设计的内容, 在RUP当中称为用例示意板。 在实际操作当中往往用界面原型进行描述, 如您的产品以WEB为主, 那么使用静态html配合用例规约就是比较适合的方法。 在你所描述的情况当中,交互信息、 异常情况是应当尽量考虑清楚的,但是不论如何仔细, 永远都不可能做到事事具备。 如果花费过于大的精力去描述用例的各个方面, 把争持认为是用例规约没有描述清楚, 很容易走入过度设计的死胡同。 我不相信谁能够保证把用例规约写到没有万一的地步, 那不符合软件规律。
   所以,我们要接受现实,不是用例规约出了问题, 而是实施方法出了问题。用例不仅是分析人员的事, 也是测试人员的事,也是开发人员的事。在实施上, 他们都应当参与进来,而不是等待分析员的结果。 在决定一个用例规约的时候,测试人员就应当能够产生测试用例, 对于模糊地带,在讨论用例的过程当中来进行澄清。 RUP之所以使用迭代的开发方法, 就是要在每一个迭代时重新审视、修改用例规约, 让各方都参与进来,把模糊地带搞清楚。
   请告诉你的同事们,用例规约的责任不仅仅是产品设计人员的事, 也是开发,测试的事,他们也是责任者而不仅仅是使用者和旁观者。 争执是不可避免的, 但是争执如果发生在用例讨论过程当中而不是产品开发和测试时, 争执就是好事情而不是委屈了。


最后再做一点补充:
在一个敏捷的团队里,一个用例就相当于一个work item,或者一个task,或者一个userstory,不论叫什么名字,这个用例是由整个团队来维护的讨论的,不同职责的成员关心它的不同部分,但大家讨论的是同一个用例。在迭代的过程中,这些讨论被不断的深入,一个一个的模糊地带被不断的澄清,大家对同一个问题越来越清楚。当必要的改变发生时,大家分别负责改变自己的部分。最后,需求部分、分析部分、设计部分、代码、测试用例、测试代码、测试结果、缺陷纪录、变更纪录....所有围绕用例产生的东西都成为了用例的一个组成部分。
可见,用例规约不是一开始就事无巨细的。这位网友的问题其实是在软件过程中产生的,非常普遍,方法好讲,解决起来并不容易。关键是要建立一个自驱动的团队,大家都意识到用例是所有人的,软件过程是迭代的而不是瀑布的,这样,用例驱动的意义才能够体现出来。
### 用例建模中用例规的组成部分 用例规是一种以用例为核心来组织需求内容的方式,用于详细描述系统的行为和功能。以下是用例规通常包括的部分及其具体内容: #### 1. ### 参与者 参与者是指与系统交互的外部实体,可以是人或其他系统。这些参与者在用例中扮演特定角色并与系统进行通信。例如,在库存管理系统中,参与者可能包括仓库管理员、仓库经理和系统管理员[^3]。 #### 2. ### 目标 目标是对用例目的的高度概括说明,解释该用例旨在实现什么业务价值或解决哪个具体问题。这有助于确保所有相关人员对用例的目的有一致的理解。 #### 3. ### 前置条件 前置条件是在用例启动之前必须满足的状态或束条件。它们定义了系统进入某个用例所需的初始状态。需要注意的是,前置条件应该是可验证的状态而非动作,并且需要用核心领域术语描述。例如,“用户已登录”不是一个合适的前置条件,因为它是动作的结果而不是状态[^2]。 #### 4. ### 后置条件 后置条件描述了用例成功完成后系统的最终状态或结果。如同前置条件一样,后置条件也需要能够被检测并使用核心领域词汇表达。例如,对于一个提交订单的用例来说,其后置条件可能是“订单已被保存到数据库”。 #### 5. ### 主要事件流(基本路径) 主要事件流表示用例最常见的情况下的执行流程,也就是所谓的“happy path”。这是用例中最简单直接的成功场景,展示了如何一步步完成既定的目标。每个步骤都应该清晰地指出谁做了什么事情以及系统对此作出怎样的响应。 #### 6. ### 替代事件流(异常处理/分支逻辑) 除了正常的主干流程外,还应该考虑各种可能出现的例外情况或者替代方案。这部分涵盖了错误输入、失败尝试以及其他偏离常规的操作情形。通过提前规划好这些特殊情况的手动干预措施或自动化恢复策略,可以使整个应用变得更加健壮可靠。 #### 7. ### 特殊需求 特殊需求通常是那些不容易融入到传统意义上的功能性和非功能性分类里的额外规定事项。这类条目往往涉及法律法规遵从度、用户体验指标设定、安全性考量等多个层面的要求。例如,某些行业可能存在严格的隐私保护条例要求;再比如,关于软件界面美观性的主观评判标准也可能被列入其中作为参考依据之一[^1]。 #### 8. ### 测试准则 最后但同样重要的一点是要明确测试的标准是什么样子的。这意味着不仅要清楚知道什么时候认为这个特性已经达到了预期的功能性水准,而且还要知晓怎样衡量它的性能表现是否达标等问题的答案. --- ```python def example_use_case(): """ This function demonstrates an abstract representation of a use case structure. Parameters: None Returns: dict: A dictionary containing the components of a typical use-case specification. """ return { 'actors': ['User', 'System'], 'goal': 'To allow users to log into their accounts.', 'preconditions': [ "The system must be operational.", "A valid user account should exist." ], 'postconditions': ["If successful, the session will start."], 'main_flow': [ ("Enter username", "Prompted by System"), ("Verify credentials", "Performed internally within System") ], 'alternate_flows': {"Invalid Credentials": [("Display error message",)]}, 'special_requirements': [], 'test_criteria': [] } ```
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值