如何编写高质量的用户故事

news2024/9/24 17:40:28

本文详细介绍了如何在敏捷开发过程中编写高质量用户故事(User Story),包括用户故事的定义、结构、撰写技巧以及如何与产品待办列表(Product Backlog)中的其他工作项(PBI)相结合,以提高软件开发效率和产品质量。原文: How to Write High-Quality User Story

从用户故事开始

用户故事是敏捷项目管理中必不可少的部分,是构建产品待办列表(Product Backlog)层级架构的核心 PBI(Product Backlog Item),也是开发团队在每个冲刺阶段为客户提供的主要价值。因此,在敏捷开发中,理解用户故事以及提高其质量至关重要。如何写好用户故事有很多技巧和最佳实践,一旦理解了这些内容,就能极大提高敏捷项目的绩效,此外还可以将这些实践应用到其他类型的 PBI 上,如 bug、变更规范、重构等。

本文假定读者了解产品待办列表(Product Backlog)和产品待办项 (PBI)。

  • 产品待办列表(Product Backlog)是敏捷的核心工具,敏捷团队将需求、估算、进度状态、沟通等所有信息整合在一起。在瀑布式项目中,又被称为 WBS(Work Breakdown Structure)。
  • 产品待办项(Product Backlog Item) 是产品待办列表中的一项工作,可以是工单、任务或问题。敏捷团队根据 PBI 进行计划、工作和交付。
alt
什么是用户故事?

在敏捷中,"用户故事"(User Story)有两种含义:一种是 PBI 类型,另一种是描述用户可以用产品做什么的句子。在本文中,当我提到"用户故事"时,主要使用第一种含义。

alt

用户故事(User Story)中包含一些信息,定义了用户可以使用产品完成的需求。作为最佳实践,用户故事应包含三组信息:用户故事(句子)、验收标准和可视化文档。

产品待办列表层级架构和用户故事

产品待办列表的架构层级包括四个层次:主题(theme)、史诗(epic)、用户故事(user story)和任务(task)。有些人认为应该是五层,但根据我的研究和经验,通常四层就足够了,也更常用。用户故事位于史诗和任务之间的第三层。

主题代表高层业务战略和长期目标。史诗是无法在一个冲刺周期内完成的,有价值的大型产品待办项(PBI),必须分解成几个较小的用户故事。用户故事是有价值的单个 PBI,足够小,可以在一个冲刺周期内完成。最后,任务是用户故事的细分。下表提供了每个 PBI 的细节、长度和示例。

alt

当用户故事过大时,应将其划分为更小的用户故事。创建"用户故事"的最佳实践之一是确保其足够小,可以在一个冲刺周期内完成。较小的实施和发布周期可以减少错误数量并提高软件质量。软件复杂度会随着实施规模的扩大而呈指数级增长,而非线性增长。然而,创建小的用户故事可能具有挑战,因为软件本身具有内聚性。因此,更好的拆分用户故事是产品待办列表管理的关键。

Humanizing Work, LLC 的 The Story Splitting Cheat Sheet 提供了各种拆分技巧。文中列出了多种方法,并附带每种方法的解释。本文只介绍两个例子。

  • 业务规则变化(Business Rule Variations)
  • 主要工作(Major Effort)
  • 简单/复杂(Simple/Complex)
  • 数据变化(Variations in Data)
  • 数据录入方法(Data Entry Methods)
  • 推迟执行(Defer Performance)
  • 业务(Operations)
  • 拔出钉子(Break Out a Spike)

主要工作示例 根据所需工作量拆分用户故事。

[用户故事]作为用户,我想使用一些社交平台账户登录。

[拆分] - 作为用户,我想用 Instagram 帐户登录; - 作为用户,我想用 X (Twitter) 帐户登录; - 作为用户,我想用 Github 帐户登录。

*数据变化示例 基于 CRUD(创建、读取、更新、删除)的数据拆分验收标准

[用户故事]作为管理员,我想操作用户的数据。

[拆分] - 作为管理员,我想创建一个新的用户账户。 - 作为管理员,我想读取用户数据。 - 作为管理员,我要更新用户数据。 - 作为管理员,我要删除用户数据。

alt

此外,还可以应用 INVEST 框架,稍后将对此进行说明。INVEST 框架提供了如何制作优质 PBI 以及分解 PBI 的方法。

史诗与用户故事

Epic 是 PBI 类型之一,位于主题和用户故事之间的第二层。Epic 比用户故事大,不能在一个冲刺周期内完成,它是多个用户故事的集合。如果发现一个用户故事太大,无法在一个冲刺周期内完成,就应该拆分成几个,可以将用户故事升级为 Epic,并在其下创建多个用户故事。

alt
用户故事(句子)

用户故事(User Story)在句子上下文中是一个简单的句子,由谁、做什么和为什么组成,概述了用户想用产品做什么以及原因。这三个要素涵盖了所有必要方面,让我们无论身处何种岗位,都能获得全面的见解。无论你是开发人员还是业务人员,都应该能够完全理解需要构建什么来满足用户期望。然而,由于用户故事只提供了概述,缺乏细节,因此你需要知道如何编写带有验收标准的详细需求,下面将以如下图片为例加以详细说明。

alt

作为句子的用户故事示例

结构:作为一名……,我希望……

示例:作为用户,我希望使用唯一凭证访问平台,以便安全使用。

可视化文档

使用可视化文档可以让团队更好的理解产品需求。这些图像可以有多种形式,如草图、线框图或复杂的设计,只要能清晰直观的表达产品的外观和功能即可。"用户故事"和"验收标准"都是基于文本的表达方式,在效果上有局限性,而可视化文档可以弥补这些不足。作为人类,我们倾向于通过视觉来处理信息,而使用视觉图像可以帮助我们更深入的了解产品。

验收标准

验收标准是敏捷方法的重要方面,用于表示需求并补充用户故事。验收标准可以用于验收测试,从而消除了单独编写文档的需要。在传统瀑布式项目中,需求和测试用例是分开记录的,这就造成了工作冗余和效率低下。验收标准被认为是敏捷方法的重大创新,也是专业性的标志,需要技能、知识和经验来实施,并对质量控制产生重大影响。

由 Cucumber 创始人 Aslak Hellesøy 开发的"小黄瓜语法"(Gherkin Syntax)是一种广泛使用的验收标准编写规范,由四个简单元素组成:场景(Scenario)、给定(Given)、何时(When)以及然后(Then),描述了软件应如何运行。该框架涵盖了软件行为的所有基本方面,是定义需求和验收测试的理想选择。

[介绍] "场景"描述测试(需求)的内容。"给定"描述用户采取任何行动前的初始情境或状态。"何时"描述用户采取的行动。"然后"描述用户行动的预期结果或后果。

[示例] 场景:成功登录。给定:用户已有账户。何时:输入电子邮件地址和密码。然后:按下登录按钮。然后:登录平台。

统一语言(Ubiquitous language)

统一语言是由 领域驱动设计 的作者埃里克-埃文斯(Eric Evans)提出,改进了用户故事(User Story)和验收标准(Acceptance Criteria)。统一语言是一本词典,定义了技术和业务专业人员之间的通用术语。使用统一语言并与团队成员分享,每个人都能准确理解用户想要做什么以及产品应如何运行,从而避免误解。

例如,你的产品有多种类型的用户,你将他们划分并定义为客户和管理员。在登录页面,将"用户"替换为"管理员",指定哪些用户将使用该页面,如下所示。

[非统一语言] 作为用户,我希望使用独特的凭证访问平台,以便安全使用。

[使用统一语言] 作为管理员,我希望使用唯一的凭证访问平台,以便安全使用。

FR 和 NFR

编写"用户故事"和"验收标准"并不难,但需要考虑实际软件开发中的许多问题。请注意以下问题:

  • 如果用户没有账户,系统应如何操作
  • 如果有 100 个用户同时尝试登录,系统应该如何运行?
  • 电子邮件地址和密码允许的最少和最多字符数是多少?
  • 哪些浏览器与系统兼容--Safari、Chrome 还是 Edge?
  • 哪些设备与系统兼容--智能手机、平板电脑还是笔记本电脑?
  • 系统对色盲等残疾用户是否具有良好的可用性?
  • 对于阅读小字有困难的老年用户来说,显示的字是否足够大?
  • 不使用鼠标的用户能否轻松登录系统?

由于缺乏经验的软件工程师或项目经理往往会忽略这些具体要求,因此业余从业人员和专业从业人员之间存在着差异。这些详细需求可分为两类,即功能性需求(FR)和非功能性需求(NFR)。由于其复杂性,需求定义是最耗时的过程之一,需要全面的分析和更多的沟通。

alt
INVEST 缩写

INVEST 框架是一套有助于确保用户故事质量的准则,首字母缩写分别代表独立(Independent)、可协商(Negotiable)、有价值(Valuable)、可估算(Estimable)、小规模(Small)和可测试(Testable)。通过遵循这些标准,可以减少错误数量,避免不必要的需求,并做出更准确的估算。

  • 独立:用户故事应该是独立的,这样才更易于管理和开发。依赖关系会导致编程和管理的复杂性。
  • 可协商:用户故事应该是可协商的,允许开发团队对需求和估算进行讨论和完善。如果估算或范围不够现实,开发人员必须提出警告,并与产品负责人协商如何处理。
  • 有价值:用户故事应能为用户带来价值,而不仅仅是产品负责人、Scrum Master 或开发人员。用户故事的价值需要在 Scrum 团队内外进行讨论,并通过反馈进行验证。
  • 可估算:用户故事应该是可估算的,这样项目团队才能制定冲刺计划。
  • 小:用户故事应该足够小,以便在冲刺阶段内完成,因为编程的复杂性会随着故事的增大呈指数增长,而非线性增长。一个大的用户故事可能会造成错误,导致估算不准确。因此,应将其拆分成几个较小的用户故事。
  • 可测试:用户故事必须是可测试的。可测试性是通过验收标准来实现的,验收标准扮演着两种角色:需求和测试用例。

并非总能满足上述所有标准,但重要的是要牢记这些标准,并尽量满足,实践证明它们是切实有效的。例如,由于软件产品的性质,在某些情况下可能无法实现完全独立。不过,可以通过讨论使其具有一定程度的独立性。

三人原则

一旦创建了用户故事、验收标准和可视化表述,就必须对其进行审核,以避免出现任何错误。审查的最佳实践之一是"三人"原则。这项技术包括一名测试人员、一名业务人员和一名开发人员。如有必要,一个人可以扮演多个角色。

  • "测试人员":验收标准用于验收测试。测试人员或质量保证人员应参与了解和进行测试。
  • "业务人员":为确保产品符合预期,产品负责人(业务人员)必须负责检查和批准验收标准,无论这些标准是否由他们创建。
  • "软件工程师":为了评估可行性并预测任何技术挑战,开发人员必须仔细审核需求。需要注意的是,需求会对项目的范围和估算产生重大影响,因此开发人员必须与产品负责人进行协商。如果验收标准过多,开发人员应与产品负责人讨论是否可以减少其中一些标准以满足预期。
3C 模式(卡片、对话和确认)

罗恩-杰弗里斯(Ron Jeffries)是 敏捷宣言 的最初签署人之一,也是敏捷软件开发运动的创始人,他提出了 3C 模型。该模型概述了有效定义需求的三步流程,这三个步骤分别是卡片(Card)、对话(Conversation)和确认(Confirmation),每一步都建立在前一步的基础上。在第一步中,需求被记录在用户故事卡片中。第二步是"对话",利益相关者详细讨论用户故事。第三步是"确认",在用户故事中添加验收标准和可视化文档。了解这一基本流程对于编写高质量需求以及防止误解至关重要。

alt
其他 PBI

产品待办列表不仅包含用户故事,还包含其他内容,如错误修复、变更需求、重构和维护任务等。据我所知,这些 PBI 并没有标准格式,所以需要在团队中定义自己的标准。上述技巧、技术和实践并不仅限于用户故事,也可用于其他类型的 PBI。INVEST 是个可用于任何类型 PBI 的最佳实践,甚至适用于瀑布式项目中的 WBS。


你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。为了方便大家以后能第一时间看到文章,请朋友们关注公众号"DeepNoMind",并设个星标吧,如果能一键三连(转发、点赞、在看),则能给我带来更多的支持和动力,激励我持续写下去,和大家共同成长进步!

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2160975.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Elasticsearch系列廿二】特殊参数

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

解释器模式原理剖析和Spring中的应用

解释器模式原理剖析和Spring中的应用 解释器模式 是一种行为型设计模式,它定义了一种语言的文法表示,并提供了一个解释器来处理该文法的表达式。解释器模式可以用于构建语法解释器,例如计算器、简单编程语言的解释器等。 核心思想&#xff1a…

成功使用DDNS动态域名访问我的群晖NAS(TP-link路由器)

当NAS设备部署在动态IP环境中(如家庭或小型办公室宽带),远程访问常常受到IP地址频繁变动的困扰。为了解决这一问题,结合神卓互联NAS公网助手提供的DDNS(动态域名服务)功能,我们可以轻松实现通过…

蓝牙、WiFi、2.4G、Zigbee、LoRa、NB-IoT的区别与应用场景

在现代科技的推动下,无线通信技术已经成为我们生活中不可或缺的一部分。从智能家居到工业自动化,从远程监控到环境传感,每一种技术都有其独特的优势和应用场景。今天,我们将深入探讨六种主流的无线通信技术——蓝牙、WiFi、2.4G、…

基于vue框架的大参林药品信息管理系统的设计与实现8b4gt(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:用户,药品分类,药品信息,医生 开题报告内容 基于Vue框架的大参林药品信息管理系统的设计与实现开题报告 一、引言 随着医疗健康行业的快速发展和信息化浪潮的推进,药品信息管理已成为提升医疗服务效率、保障患者用药安全、…

Activiti7《第九式:破气式》——流畅驱动工作流进程。面试题大全

冲冲冲!开干 这篇文章将分为九个篇章,带你逐步掌握工作流的核心知识。“破气式”,代表着工作流中的 无形之力,它是贯穿整个流程的 关键驱动 不知不觉已经到了独孤九剑最后一式了,我相信到这里之后各位都已经出神入化…

状态模式原理剖析

《状态模式原理剖析》 状态模式(State Pattern) 是一种行为设计模式,它允许对象在其内部状态改变时改变其行为。换句话说,当对象状态发生变化时,它的行为也会随之变化。 核心思想: 状态模式将对象的不同状…

爬虫逆向学习(七):补环境动态生成某数四代后缀MmEwMD

声明:本篇文章内容是整理并分享在学习网上各位大佬的优秀知识后的实战与踩坑记录 前言 这篇文章主要是研究如何动态生成后缀参数MmEwMD的,它是在文章爬虫逆向学习(六):补环境过某数四代的基础上进行研究的,代码也是在它基础上增…

华为HarmonyOS灵活高效的消息推送服务(Push Kit) -- 10 推送实况窗消息

场景介绍 实况窗是一种帮助用户聚焦正在进行的任务,方便快速查看和即时处理的通知形态。有关实况窗简介、权限申请、开放场景、设计规范等说明,请参见Live View Kit简介。 通过Push Kit发送的实况窗消息支持三种操作类型,分别是&#xff1a…

【全新课程】正点原子《基于GD32 ARM32单片机项目实战入门》培训课程上线!

正点原子《ESP32物联网项目实战》全新培训课程上线啦!正点原子工程师手把手教你学!彻底解决ARM32单片机项目入门难的问题! 一、课程介绍 本课程专为ARM32单片机的入门学习者设计,涵盖了环境搭建、编程软件使用、模块基础驱动和多…

矩阵的逆怎么算?逆矩阵公式来了(附逆矩阵计算器)

大家好,这里是效率办公指南! 📚 在线性代数中,逆矩阵是一个非常重要的概念。一个方阵如果存在逆矩阵,意味着该矩阵是可逆的,或者说是非奇异的。逆矩阵在解决线性方程组、计算矩阵的方根等方面有着广泛的应…

利用Accelerate()进行pytorch的多GPU加速

简介 官方Github:https://github.com/huggingface/accelerate Accelerate 是为喜欢编写PyTorch模型的训练循环但不愿意编写和维护使用多GPU/TPU/fp16所需的样板代码的PyTorch用户创建的。 它可以仅加速与多 GPU/TPU/fp16 相关的样板代码,并保持其余代…

Pyspark dataframe基本内置方法(5)

文章目录 Pyspark sql DataFrame相关文章toDF 设置新列名toJSON row对象转换json字符串toLocallterator 获取迭代器toPandas 转换python dataframetransform dataframe转换union unionALL 并集不去重(按列顺序)unionByName 并集不去重(按列名…

jenkins声明式流水线语法详解

最基本的语法包含 pipeline:所有有效的声明式流水线必须包含在一个 pipeline 块中stages:包含一系列一个或多个stage指令stage:stage包含在stages中进行,比如某个阶段steps:在阶段中具体得执行操作,一个或…

提升工作效率神器

这五款软件让你事半功倍 在当今快节奏的社会中,提高工作效率成为了每个人追求的目标。而在这个数字化时代,选择对的软件工具无疑是提高效率的关键。今天,我为大家推荐五款优秀的工作效率软件,帮助你在工作中事半功倍。 1、亿可达…

15个 Jenkins 面试题

Jenkins 已成为持续集成和持续部署 (CI/CD) 流程中使用最广泛的自动化服务器之一。凭借其强大的功能和广泛的插件生态系统,Jenkins 已成为全球软件开发团队的首选工具。如果您正在准备 Jenkins 面试,那么精通其概念、架构和最佳实践至关重要。 为了帮助…

1.3 MySql的用户管理

一、下载Mysql客户端 下载navicat:Navicat 中国 | 支持 MySQL、Redis、MariaDB、MongoDB、SQL Server、SQLite、Oracle 和 PostgreSQL 的数据库管理 二、安装Navicat 三、创建数据库 创建一个数据库的连接吧,因为这个界面儿是图形界面儿,所以我们创建…

深入分析MySQL事务日志-Redo Log日志

文章目录 事务日志-Redo Log2.1 Redo Log2.1.1 Redo Log与持久性2.1.2 Redo Log的工作原理2.1.3 Redo Log的落盘策略2.1.4 Redo Log的系统参数 事务日志-Redo Log 事务的隔离性是通过锁实现,而事务的原子性、和持久性则是通过事务日志实现。在MySQL中,事…

【吉林大学编译原理题库】正则表达式的书写

1. 2. 选A 3. 没啥好说的,按意思写就行: 4. 5.设字母表S{0,1},写正则表达式表示所有偶数个0和偶数个1组成的字符串。 6. 设字母表S{0,1},写正则表达式表示所有偶数个0和奇数个1组成的字符串。(提示&am…

Token usage of Content Filtered messages in Azure OpenAI Services

题意:在Azure OpenAI服务中,内容过滤消息的令牌使用 问题背景: When sending a message to a chat via GetChatCompletions as a response, I get a RequestFailedException. In the exception, I get an answer for which category content…