【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

用例还是用户故事?

  • 2008-08-03
  • 本文字数:2427 字

    阅读完需:约 8 分钟

Murali Krishna 告诉我们:

未能彻底明白用户故事的性质往往都是未能有效地转变到敏捷开发的重大问题。用户故事最重要的特点在於每一 个用户故事都是一个“可独立分配”的需求(特徵)单位。要达到“可独立分配”,就要从“用户”如何使用系统来表达用户故事。这样才让你实现到一个能让用户 交流,端到端(用户界面到后端)的功能单位。

Murali 想的跟众多敏捷社区的人仕一样——用户故事是最好的选择,并引用 Mike Cohn 写的一篇文章 Advantages of User Stories for Requirements 。文中指出:

每一个用户故事都包括三方面:

  1. 写下故事描述,用作计划和提示
  2. 故事的对话为故事细节
  3. 以测试作为细节的记录,用来判断故事是否完成实现

然后比较了用户故事和另一个出名的需求收集技巧——用例:

因为故事中有一些跟用例或传统需求语句相同的特征,所以弄清故事和这些早期的需求技术之间的差异是很重要的。这些分别特显出用户故事的好处。用户故事强调说话沟通,文书语言往往很不仔细,亦不能保客户和开发人员所理解的都一样。例如,餐牌上这样写:“前菜有餐汤或者沙拉和面包”这应该不难理解,但到底我可以选的是

  • 餐汤或者 (沙拉和面包)
  • (餐汤或者沙拉) 和面包

我们都按著貌似准确的文字去办事,但实情往往不是如此。试比较一下餐牌上写的和侍应生亲口说:「先生想点餐汤还是沙拉?」更好的应该是,在点菜之前送一篮面包过来。

如此看来使用用户故事比较好。但又是否如此呢? Alistair Cockburn,另一位敏捷社区内的名家,仍然使用用例,并从他过往使用用户故事的经验中指出所遇到的问题:

  1. 用户故事和 Backlog 上的项目不能提供设计师工作所需要的内容脉络——用户在做什么时候情况下做这事情,这行动的内容前文后理,以及在这一刻的高层目标。
  2. 用户故事和 Backlog 上的项目不能提供项目团队所需要的“完整性”——我发现开发队伍对项目估算的故事点随著工作开始以后不断增加,犹如无止境的一样。开发人员及项目赞助人也为此感到同样的沮丧。到底项目确确实实有多大呢?
  3. 跟 完整性有关的是,用户故事和 Backlog 上的项目不能提供一个合适的机制来考虑到未来工作的困难程度(原则上他们可以, 只是实际上他们不行)——我不断收到这样的投诉,「我们问客户 (产品负责人) 一条问题,他 / 她用上两星期时间才回覆我们。我们找错了人吗?」不是,他们没找错人,他们是过程出问题——有些问题需要长时间研究,因为不 同部门和用户组要找出什么是正确,平衡各方需要的答案。分析员看著用例中一系列的伸延的形势可以找出那一个较容易,那一个较困难,再进一步进行相关的研 究。用户故事和 Backlog 项目未能及时达到适合作出来那考虑的粒度——伸延的形势通常要在 Sprint 中才能观察到,这已经太迟。

Alistair 说了「为何不使用用户故事」后,进一步集中讨论「为什么使用用例」。

  1. 目标名称列表将系统对业务和用户的贡献进行了最简短的概括,提供给行政人员。这也提供了一个项目计划框架,可用作建立初始优先次序、估计、团队分配,以及时间的选择。这也是“完整性”的第一部份。
  2. 每个用例的主要成功场景能提供各参与者有关系统基本功能的协议,有时候更为重要的是,它可以告诉人们,哪些事情它不能做。给每一项需求提供脉络,这是其他工具很难办到的。
  3. 每 个用例的扩展条件可以给需求分析员提供一个框架,可以找出那些可能会用上 80% 的开发时间成本的烦琐细微之处。它提供一个考虑未来的机制,从而客户、产品负责人、业务分析员可以察觉到一些可能用上时间研究的问题。这些问题应优先处 理,让开发团队开始工作时这些资料也同时准备好。这用例伸延形势分析就是 “完整性” 的第二部份。
  4. 用例 扩展场景提供一些仔细而然往往也是难处理的细节,像编程员常常问到:「你想我如何处理这情况?」(通常回覆却是:「我不知道, 我未想过会有这情况。」)换言之,这是一个思考、文档纪录的框架,跟“如果……那么……否则”的情况作配对,帮助编程员思考不同的问题。分别在於这是在研 究阶段进行,不是到要开始编程时才进行。
  5. 整套用例系列反映出研究人员有详细思考不同用户需要,不同用户在 这系统上使用目的,以及一些业务上的差异。这是“完整性”的最后部份。(的确如是,我曾跟客户详细讨论长达 240 个用例,到最后,我去问她:「这是全部了吗?」她确认了。我们架建这系统,付运,收到应得的费用,而十年后这系统仍在使用。)

一如很多人所料,这回事不是黑白分明。我们该如何做好?我们现时在做的到底有用么?只有一个正确方法呢,还是有两个不同的 正确方法呢?或者视乎实际情况而定?会不会是有些情况下用用例较好,而有些情况下用用户故事较好呢?还是其实没太大分别呢——像用例中(或许)包含多个用 户故事而该用例因为一个用户情节内外都貌似用户故事呢)

查看英文原文 Use Cases or User Stories?

译者附注:

用户故事好还是用例好的问题,其实不像作者前面提到用户故事为大多数偏爱使用的工具,像 ICONIX、FDD、OpenUP 都很依赖或者支持用例的使用,不过明白两者分别极为重要。知道分别才可以作出合适的决定。 Scott Ambler 曾经在 < Artifacts for Agile Modeling > 指出两者的分别:

工具 通常应用 什么时候保存 用例 1. 主要使用需求综述
2. 分析现有系统使用需求 使用需求综述 用户故事 1. 探索用户需求
2. 与项目参与者对话的提示 功能实现后扔掉

很明显两者的使用情况和目的都很不同。甚至有需要下,两者可共同使用及存在。这就不存在到底是那个比较好的问题,亦不应该单靠一些报告说那个比那个好就麻木 跟从。重要的是如何更适合当前的情况,这包括项目上的需要,也包括团队的能力。长远来说,是让团队更敏捷。(有别於前文 Murali 中 「敏捷」和「不敏捷」的二元分辨)


译者简介:麦天志(Steven Mak),现职系统工程经理,工馀时间除了游水、观赏足球赛事、看电影以外则喜欢钻研有关软件开发过程、另类编程语言、美学、道德、创意、和预测市场等问 题。从小对编程产生兴趣,毕业於香港大学,主修计算机科学,并於伦敦帝国学院获取工商管理学项士学位。

2008-08-03 23:555391
用户头像

发布了 21 篇内容, 共 53726 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

面试官:如何实现 List 集合去重?

王磊

java面试

阿里云田涛涛解读未来自动化运维新思路:CloudOps

阿里云弹性计算

CloudOps 云上运维

吃透负载均衡

高性能架构探索

负载均衡 架构 分布式 微服务 签约计划第二季

Homebrew大神面试Google被拒,只因写不出一道算法题

博文视点Broadview

react源码解析11.生命周期调用顺序

buchila11

React

流量控制-从原理到实现

高性能架构探索

架构 分布式 微服务 签约计划第二季

智能运维之时间序列预测中的经典时序模型

云智慧AIOps社区

机器学习 算法 智能运维 云智慧 指标预测

Elasticsearch 查询最大时间(qbit)

qbit

sql UTC TimeZone 时区

openLooKeng社区Apache Log4j2高危安全漏洞修复完成,建议用户升级

openLooKeng

大数据 安全漏洞 openLooKeng Apache Log4j2 远程代码执行

有了代码变更分解提交工具SmartCommit,再也不担心复合提交了

华为云开发者联盟

代码 复合提交 SmartCommit 代码提交 代码提交原子性

欢迎举报Perforce Helix Core盗版行为

龙智—DevSecOps解决方案

盗版软件 perforce盗版 打击盗版

Scrapy Spider中间件,你学会了吗?本篇博客有一案例

梦想橡皮擦

12月日更

C++ 开发笔记

行者孙

内容合集 签约计划第二季

lock-free在召回引擎中的实现

高性能架构探索

架构 分布式 微服务 签约计划第二季

亿级流量实验平台设计与实现

高性能架构探索

架构 分布式 微服务 签约计划第二季 实验平台

彻底搞通服务发现的原理和实现

高性能架构探索

架构 分布式 微服务 服务发现 签约计划第二季

netty系列之:小白福利!手把手教你做一个简单的代理服务器

程序那些事

Java Netty 代理 程序那些事 12月日更

带波浪效果的CollapsingToolbarLayout + RecycleView

阿策小和尚

28天写作 Android 小菜鸟 12月日更

前端架构师修炼指南精选

杨成功

前端 架构师 内容合集 签约计划第二季

用户文章转载:一图看懂 | 我用这张图,看懂了 P4 Reconcile

龙智—DevSecOps解决方案

perforce 一图看懂 P4 Reconcile

一文带你熟知ForkJoin

华为云开发者联盟

jdk 并发编程 并发 forkjoin 多线程并发

实用机器学习笔记十四:多层感知机

打工人!

人工智能 机器学习 算法 学习笔记 12月日更

react源码解析12.状态更新流程

buchila11

React

React进阶(五):导航守卫

No Silver Bullet

React 路由 12月日更

【LeetCode】寻找旋转排序数组中的最小值Java题解

Albert

算法 LeetCode 12月日更

Flyway让数据库版本管理更简单

恒生LIGHT云社区

数据库 sql SqlServer

深入理解Flutter相机插件【Flutter专题22】

坚果

flutter 28天写作 签约计划第二季 12月日更

JerryScript:物联网开发者的得力工具

华为云开发者联盟

物联网 LiteOS JerryScript 引擎 物联网应用

给弟弟的信第13封|一个北京姑娘的艰辛生活

大菠萝

28天写作

Linux中国对话龙蜥社区4位理事:龙蜥操作系统捐赠的背后,是谁在推动?

OpenAnolis小助手

Linux 国产操作系统 龙蜥社区

技术实力过硬,旺链科技斩获“年度区块链技术突破奖”!

旺链科技

区块链 区块链技术 产业区块链

用例还是用户故事?_研发效能_Amr Elssamadisy_InfoQ精选文章