聊聊需求的工作量估算

这是鼎叔的第八十七篇原创文章。行业大牛和刚毕业的小白,都可以进来聊聊。

欢迎关注本专栏和微信公众号《敏捷测试转型》,星标收藏,大量原创思考文章陆续推出。本人新书《无测试组织-测试团队的敏捷转型》已出版(机械工业出版社)。

度量交付需求的数量和时间相对容易,但度量每个需求的大小则比较难落地,我们需要统一的方法来度量各个团队的需求交付规模,它有利于精细化的组织改进,推动团队以比较舒服的节奏完成承诺,还能稳妥处理紧急需求插入,潜在收益远大于成本。

迭代需求拆解

按照敏捷理论,迭代计划会议要对本迭代的需求进行合理拆解,工作量估算,结合PO决策的需求优先级,确认本迭代要完成的用户故事有哪些。表面看起来,这个迭代计划会议不是测试主导,但是计划制定和测试安排的合理性密切相关。

如果需求或用户故事的颗粒度太大,不利于迭代内的高质量交付,这是最常见的项目风险情形。我经常见到测试人员排期的困境,就是由于需求过大,导致测试设计及场景讨论上就花了太多时间,交付速度很慢。如果一个用户故事的开发周期在2~3人天内,它的测试验收效率是非常高的,可以当天完成测试任务并提交反馈,避免开发等待时间过长。

因此,敏捷特性团队应该对偏大的用户故事进行拆解,以便在本迭代内可以排期完成。相关方法可以参考聊聊用户故事的估算和拆解。

作为测试角色一定要关注这个拆解的“可测试性”,拆解后的用户故事应该可以完整验收,否则违背了敏捷迭代的原则。如图所示,我们应该采用下图中第二行的交付方式,每个迭代完成一个让用户可以使用的“增量”产品。

图片

图:每个迭代都交付可用的产品

需求交付的度量

对于软件交付公司,最核心的交付度量指标,也就是北极星指标,应该是需求交付平均吞吐率(或者需求交付平均周期)。它体现了响应用户需求的速度,自然和市场满意度直接相关。

需求复杂度差异极大,而吞吐率也是看上线需求的数量占比,考虑到敏捷团队会经常改变需求计划,这两个指标很难进一步推进团队提效。

如果管理层想了解“我们每个月交付了多大规模的需求”(或者人均每月交付了多大规模的需求),这对团队的度量就提出了更高的要求。

公司使用的研发管理平台,度量交付需求的数量和时间相对容易(虽然有误差),记录每个需求的大小则比较难落地,我们需要一个统一的共识方法来度量各个团队的需求交付大小。

这篇文章聊聊用户故事的估算和拆解有相关介绍,不同需求的大小可能差异巨大:最小规模的需求就是用户故事;中等规模的需求是特性故事;大型规模的需求是史诗故事。中大规模的需求要能准确评估大小,就要拆解到用户故事的粒度再来评估。

通常,用户故事的大小为3个故事点以下时,开发估算准确度、交付信心和测试效率都会达到一个高水平。反之,故事点大于10的用户故事,交付风险和效率都会迅速恶化,建议尽量拆解为多个可测的用户故事。

需求任务的工作量估算

我们可以把一个故事点的规模锚定为1个“理想人天”的研发工作量,这就可以在系统中把“需求规模”和“评估工时”变成同一件事情。一个需求估算为多少个故事点,就意味着需要技术团队多少“人天”来承担。

注意:交付需求的最小价值尺度是“用户故事”,只有完整实现了用户故事才算交付了完整的价值。但一个用户故事的具体研发工作可以拆分为多个“任务”,其中包括测试任务,完成任务并不代表价值被交付了。因此,有些团队把拆解后的任务定义为“子需求”,这是错误的。

在测试工作量的预估上,我们认为“任务”是最小的工作量估算层次。建议测试任务的划分也不要太粗,单个任务的完成时间不超过一人天,这样有利于团队找到测试效率可以提升的地方,同理,不同测试人员的任务也建议分开估算。

测试任务的独占周期太长,也会影响迭代需求的完成目标,我们有必要具体看看测试范围和优先级,找到合理覆盖策略,保障核心功能用例的验收。

故事点(或工时)度量的意义

针对一个组织的每个交付需求,都在系统上填写故事点或工时,有利于精细化的组织改进。它可以大幅提升度量团队交付效能的准确度,有利于管理层全盘视角,潜在长期收益远大于成本。 比如:

一,迭代计划的需求总规模(点数),是否大于技术总理想人天(工程师人数*迭代工作日)?

比如一个有十个技术人员的Scrum团队,在一个双周迭代能交付的需求规模应该只有100故事点(人天)。

如果排期的需求规模偏大,很可能导致交付目标难以达成,或者交付质量低于预期。因此需要对计划完成的需求进行缩减。

二,度量“计划故事点(工时)”和“实际完成故事点(工时)”的偏差。可以用于迭代复盘,Scrum团队总结如何提高估算技巧,或找到拖慢研发速度的罪魁祸首。

三,如果产品/需求本身有优先级的标签,整个组织就可以度量多少人力投放到了公司战略项目,多少人力投放到了非核心项目上。

有些同学提出几个疑问,我们来回答下。

一,每个Scrum团队的故事大小/工作量预估方法都不同,是否要拉通对齐么?

答案是:不需要!故事点/工时是用来校准Scrum团队的计划执行准确率的,每个团队的成员级别、技能和经验不同,天然会有不同的效率(研发速率)。对于敏捷研发组织来说,重要的是交付可预测,节奏稳定。强行要求不同团队有一样的产出,容易产生灾难性的后果。

因此,我们需要花费几个迭代的时间,让每个Scrum团队内部进行集体估算和集体讨论的实验。初期不太准是正常的,后面的团队估算实践会越来越准确和快速,以比较舒服的节奏完成承诺。

二,既然故事点评估尺度不需要跨团队拉通,那研发团队怎么互相学习呢?

答案也简单,派代表围观其他团队如何集体进行需求大小评估的,识别各种风险对于工作进度的影响。

当开发估算有分歧时,会分享各自的原因,暴露自己不知道的风险,让团队能互相学习。测试等角色也从中受益。为工时估算付出一点成本,会带来极大收益,同时让后期工作计划更靠谱,团队也能更自信。

通过跨团队的故事点实践对比,故事点交付代码规模小、质量相对低的团队,可以像指标高的团队学习,但还是要保持自身的稳定节奏和交付满意度。

估算开发工作人日,可以用一个理想人日完成的工作打一个折扣,比如20%,用于应对迭代工作以外的干扰、学习、会议、交流放松等。如果实践下来发现这个折扣偏高,说明团队应该进行治理,降低非迭代的干扰。

三,有同学会提出自己的担心,故事点度量会用于工程师的考核么?

当然不会,每个团队的人员成熟度和经验不同,业务难度不同,都会形成一个适合自己的开发吞吐节奏,有利于产能最大化和自主改进。

之所以要团队集体估算,也是要减少对个人故事的追踪。

如果把故事点和个人绩效挂钩,会导致个人在评估时降低要求(提高估计值),同时阻碍团队内的互助合作。

四,很多开发工作和需求故事不是强相关,但是scrum团队还是必须完成,比如线上故障,大促,技术债等。怎么办?

把技术故事明确拆解出来,并估算故事点。和产品一起确认哪些技术故事能排入高优先级,能在当前迭代内完成。或者分配指定比例的工作量预留给日常开发运营工作。

五,有些团队没有用户故事拆解的实践,会阻碍故事点的度量实践么?

不会,没有进行用户故事拆解,开发也可以凭团队经验估算工作量大小。

但是用户故事估算实践是行业推荐的主流敏捷方法,有利于团队成员互相学习和提升,估算效果也更稳定。

六,技术团队目前都很支持产品经理的各种需求,如果按照故事点度量,会不会导致支持力度下降,协作意愿下降?

敏捷和精益理论都鼓励跨岗位合作,one team-群策群力。但是这些一定要建立在健康节奏之上才能持续高效,即:团队迭代速率(完成故事点)是一定的,WTP(在制品)最大数量是一定的。

限制故事总大小才能让团队聚焦交付价值的最大化,养成复盘需求的习惯。

当团队为尽可能多的需求实现而精疲力尽时,我们需要扪心自问,真的在交付高价值产品么?

七,业务方要求发布日期不能变,需求工作倒排怎么办?产品经理对接的业务方不止一个,业务方要求都要上线怎么办?

发布日倒排不是问题,从倒排日计算多少个迭代,根据团队速率计算总故事点,看看哪些需求能排入发布计划即可。

产品经理是需求优先级的第一责任人。业务方如果在产研团队外,需求不一定都能满足,这可能导致很多冗余需求。关键是产品经理和业务方能否深入沟通最本质最紧急的需求是什么,能否拉近业务方和研发的距离。比如把业务方卷入研发迭代规划会议,确认需求优先级,甚至参与需求验收。

产品的用户群体到底是谁,业务方是排序第几的用户群体?

产品经理有两种需求排期方式:一,先满足最重要用户群体的重要紧急需求,还有故事点空间再满足次重要群体的。二,给每个用户群体分配固定比例的故事点(即分配泳道大小)。

如何应对需求紧急插入

实际迭代排期中,经常出现产品负责人把新的需求紧急插入本迭代的场景,这会让开发和测试人员很不满。针对紧急插入需求,我们应该如何正确看待?

从敏捷价值观而言,我们拥抱变化。没有必要强制需求排期计划不能变更,哪怕是在本迭代这么短的时间内。但是我们有必要集体确认:新排入的需求优先级如何?它和本迭代中计划完成的其他需求对比起来,优先级是高还是低?如果它优先级比本迭代某个需求高,在迭代剩余工作量能完成的情况下,可以替换这个目前在做的需求。

简而言之,针对紧急需求插入,不能只做加法,而是有加有减。根据优先级拥抱变化,根据团队速率大小替换一定大小的排期需求。因此,我们也要检查产品backlog中的需求优先级,是不是有严格的唯一排序?这个很重要,有进就会有出。

存在一种可能性,有的产品需求,永远都无法排期开发上线,因为它的优先级PK永远不过后面的新需求。这也符合敏捷设计的原则,即适时设计。当前重要的产品想法,可能到了后期便不再重要了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小白水平理解面试经典题目LeetCode 102 Binary Tree Level Order Traversal【二叉树】

102. 二叉树层次顺序遍历 小白渣翻译 给定二叉树的 root ,返回其节点值的层序遍历。 (即从左到右,逐级)。 例子 小白教室做题 在大学某个自习的下午,小白坐在教室看到这道题。想想自己曾经和白月光做题&#xff0c…

加推科技,华为云上生长的营销革新

编辑:阿冒 设计:沐由 “我是个很幸运的人。”几天前的一次采访中,彭超——加推科技创始人、CEO,如此扼要简洁地总结自己的职业历程,完全不是我想象中那种前顶级Sales的口若悬河。 加推科技创始人、CEO 彭超 没错&…

【刷题记录】——时间复杂度

本系列博客为个人刷题思路分享,有需要借鉴即可。 1.目录大纲: 2.题目链接: T1:消失的数字:LINK T2:旋转数组:LINK 3.详解思路: T1: 思路1:先排序&#xf…

响应式编程三流处理

响应式编程三流处理 组合响应式流concatmergezipcombineLatest flatMap、concatMap、flatMapSequebtial操作符flatMapconcatMapflatMapSequential 元素采样sample 和sampleTimeout 流的批处理bufferwindow操作符group by将响应式流转化为阻塞结构在序列处理时查看元素物化和非物…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Marquee组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Marquee组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Marquee组件 跑马灯组件,用于滚动展示一段单行文本,仅当…

【hcie-cloud】【27】华为云Stack网络安全防护

文章目录 前言网络安全概述常见网络攻击类型流量型攻击DDoS单包攻击网络攻击防范 网络安全服务华为云Stack网络防护HCS租户网络纵深防护HCS常用网络安全防护服务对比 云防火墙详述云防火墙(CFW)- 定义云防火墙(CFW)- 实现原理云防…

【MySQL进阶之路】亿级数据量表SQL调优实战

欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送! 在我后台回复 「资料」 可领取编程高频电子书! 在我后台回复「面试」可领取硬核面试笔记! 文章导读地址…

Spark编程实验六:Spark机器学习库MLlib编程

目录 一、目的与要求 二、实验内容 三、实验步骤 1、数据导入 2、进行主成分分析(PCA) 3、训练分类模型并预测居民收入 4、超参数调优 四、结果分析与实验体会 一、目的与要求 1、通过实验掌握基本的MLLib编程方法; 2、掌握用MLLib…

Elasticsearch深度分页问题

目录 什么是深度分页 深度分页会带来什么问题 深度分页问题的常见解决方案 滚动查询:Scroll Search search_after 总结 什么是深度分页 分页问题是Elasticsearch中最常见的查询场景之一,正常情况下分页代码如实下面这样的: # 查询第一…

Ps:堆栈模式在摄影后期的应用

Photoshop 的堆栈模式 Stack Mode为摄影师提供了一种强大的后期处理能力,通过堆叠和处理多张照片来实现无法单靠一张照片完成的效果。 正确的前期拍摄策略和后期处理技巧可以显著提高最终图像的质量和视觉冲击力。 ◆ ◆ ◆ 前期拍摄通用注意事项 在前期拍摄时&am…

【Linux学习】线程互斥与同步

目录 二十.线程互斥 20.1 什么是线程互斥? 20.2 为什么需要线程互斥? 20.3 互斥锁mutex 20.4 互斥量的接口 20.4.1 互斥量初始 20.4.2 互斥量销毁 20.4.3 互斥量加锁 20.4.4 互斥量解锁 20.4.5 互斥量的基本原理 20.4.6 带上互斥锁后的抢票程序 20.5 死锁问题 死锁…

【医学大模型 动态知识图谱】AliCG概念图 = 知识图谱 + 实时更新、细粒度概念挖掘、个性化适应

AliCG概念图 提出背景能力强化细粒度概念获取长尾概念挖掘分类体系进化对比传统知识图谱 部署方法如何提高信息检索的质量?如何在神经网络中学习概念嵌入?如何在预训练阶段利用概念图? 提出背景 论文: https://arxiv.org/pdf/2106.01686.pdf…

论文解读:MobileOne: An Improved One millisecond Mobile Backbone

论文创新点汇总:人工智能论文通用创新点(持续更新中...)-CSDN博客 论文总结 关于如何提升模型速度,当今学术界的研究往往聚焦于如何将FLOPs或者参数量的降低,而作者认为应该是减少分支数和选择高效的网络结构。 概述 MobileOne(≈MobileN…

《剑指Offer》笔记题解思路技巧优化 Java版本——新版leetcode_Part_2

《剑指Offer》笔记&题解&思路&技巧&优化_Part_2 😍😍😍 相知🙌🙌🙌 相识🍓🍓🍓广度优先搜索BFS🍓🍓🍓深度优先搜索DF…

九、java 继承

文章目录 java 继承3.1 根父类Object3.2 方法重写3.3 继承案例:图形类继承体系3.4 继承的细节3.4.1 构造方法3.4.2 重名与静态绑定3.4.3 重载和重写3.4.4 父子类型转换3.4.5 继承访问权限protected3.4.6 可见性重写3.4.7 防止继承final 3.5 继承是把双刃剑3.5.1 继承…

70.SpringMVC怎么和AJAX相互调用的?

70.SpringMVC怎么和AJAX相互调用的&#xff1f; &#xff08;1&#xff09;加入Jackson.jar&#xff08;2&#xff09;在配置文件中配置json的消息转换器.(jackson不需要该配置HttpMessageConverter&#xff09; <!‐‐它就帮我们配置了默认json映射‐‐> <mvc:anno…

Netty应用——实例-群聊系统(十六)

编写一个Netty群聊系统&#xff0c;实现服务器端和客户端之间的数据简单通讯 (非阻塞)实现多人群聊服务器端:可以监测用户上线&#xff0c;离线&#xff0c;并实现消息转发功能客户端:通过channel可以无阳塞发送消息给其它所有用户&#xff0c;同时可以接受其它用户发送的消息(…

哈夫曼树的学习以及实践

哈夫曼树 哈夫曼树的基本了解哈夫曼树的基本概念创建霍夫曼树的思路编码构建的思路代码实现创建HuffmanTree结点初始化HuffmanTree创建霍夫曼树霍夫曼树编码 哈夫曼树的基本了解 给定 n 个 权值 作为 n 个 叶子节点&#xff0c;构造一颗二叉树&#xff0c;若该树的 带权路径长…

C语言第二十三弹---指针(七)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 指针 1、sizeof和strlen的对比 1.1、sizeof 1.2、strlen 1.3、sizeof 和 strlen的对比 2、数组和指针笔试题解析 2.1、⼀维数组 2.2、二维数组 总结 1、si…

C语言每日一题(56)平衡二叉树

力扣网 110 平衡二叉树 题目描述 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,…