一页纸需求的应对方法 五步法 - V2EX
document.addEventListener('DOMContentLoaded', function() { function escapeHtml(text) { if (text === null || text === undefined) return ''; return String(text) .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"') .replace(/'/g, '''); } function safeHttpsUrl(url) { if (url === null || url === undefined) return ''; var value = String(url); if (!/^https:\/\//i.test(value)) return ''; try { var parsed = new URL(value); if (parsed.protocol !== 'https:') return ''; return parsed.href; } catch (e) { return ''; } } function safeMemberUsername(username) { if (username === null || username === undefined) return ''; username = String(username); if (!/^[A-Za-z0-9_-]+$/.test(username)) return ''; return username; } function bindCampaignLinks(container) { var items = container.querySelectorAll('[data-pro-link]'); for (var i = 0; i < items.length; i++) { items[i].addEventListener('click', function() { var link = this.getAttribute('data-pro-link'); if (link) { window.open(link, '_blank', 'noopener'); } }); } } function renderCampaign(campaign) { let html = ''; let displayFormat = campaign.display_format || 'text-only'; let linkUrl = safeHttpsUrl(campaign.link); if (!linkUrl) return ''; let title = escapeHtml(campaign.title); let description = escapeHtml(campaign.description); let callToAction = escapeHtml(campaign.call_to_action); let link = escapeHtml(linkUrl); let imgSmallUrl = safeHttpsUrl(campaign.img_small_url); let imgBannerUrl = safeHttpsUrl(campaign.img_banner_url); let imgBigUrl = safeHttpsUrl(campaign.img_big_url); let memberUsername = safeMemberUsername(campaign.member && campaign.member.username); let promotedBy = memberUsername ? `Promoted by ${escapeHtml(memberUsername)}` : 'Promoted by V2EX member'; if (displayFormat === 'small-with-description' && !imgSmallUrl) { displayFormat = 'text-only'; } else if (displayFormat === 'banner-only' && !imgBannerUrl) { displayFormat = 'text-only'; } else if ((displayFormat === 'big-only' || displayFormat === 'big-with-description' || displayFormat === 'big-with-title-description-button') && !imgBigUrl) { displayFormat = 'text-only'; } html = `
${title}
`; switch(displayFormat) { case 'text-only': html += `
${description}
`; break; case 'small-with-description': html += `
${imgSmallUrl ? `
` : ''}
${description}
`; break; case 'banner-only': html += `
`; break; case 'big-only': html += `
`; break; case 'big-with-description': html += `
`; html += `
${description}
`; break; case 'big-with-title-description-button': html += `
`; html += `
${description}
`; html += ``; break; default: html += `
${description}
`; } html += `
${promotedBy}
` return html; } // Load campaign from emitter var xhr = new XMLHttpRequest(); xhr.open('GET', '/pro/emitter', true); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.Onreadystatechange= function() { if (xhr.readyState === 4) { if (xhr.status === 200) { try { var campaign = JSON.parse(xhr.responseText); if (campaign && campaign.id) { var html = renderCampaign(campaign); var cOntainer= document.getElementById('pro-campaign-container'); if (html) { container.innerHTML = html; bindCampaignLinks(container); } else { container.style.display = 'none'; } } else { document.getElementById('pro-campaign-container').style.display = 'none'; } } catch (e) { document.getElementById('pro-campaign-container').style.display = 'none'; console.log('Error parsing campaign data: ' + e.message); } } else { document.getElementById('pro-campaign-container').style.display = 'none'; console.log('Error loading campaign: HTTP ' + xhr.status); } } }; xhr.send); });
Coding.NET 轻量级社交
开源项目广场
使用帮助
意见反馈
CodingNET

一页纸需求的应对方法 五步法

  •  1
     
  •   CodingNET Nov 30, 2021 1748 views
    This topic created in 1632 days ago, the information mentioned may be changed or developed.

    文章来源于优普丰敏捷教练 Scrum ,作者王洪亮大锤

    前言

    一页纸需求是指的业务方在提需求的时候篇幅很短的情况。有的时候极端情况下,原始需求只有一句话,甚至只有几个字。比如说:“开四限四“就是一个涵盖了非常多的要求的一种需求。

    一页纸需求会让很多 BA 感到困惑。BA 也知道一页纸需求表达的不全面,但是需要科学的分析才能够将细节进行完善。否则就会变成散点式补充需求内容,也无法确认自己补充的内容是否完整。站在业务方的角度来看,一页纸需求也许是他们尽可能提出的最全面的内容了。业务方由于非 IT 背景,可能想提出更多的内容也无能为力。因此,需要 BA 承担对应的职责,将一页纸进行扩充完善。

    一般情况下,BA 会通过头脑风暴的方式来梳理一些问题,向业务方提出问题,获得答案。但是头脑风暴的方式在这里能够发挥的作用有限,即使是问了很多问题,仍然不知道自己是否梳理了所有该梳理的场景,是否还有场景遗漏。因此需要一个有条理,有脉络的方式进行一页纸需求的分析。从而能够快速而有效地建立起整个需求文档,以推进开发工作。

    应对一页纸需求,大锤梳理了一个五步法,得到广泛应用,并且妥善的解决了一页纸需求的问题。五步法是指通过业务价值、角色梳理、术语定义、主业务流程梳理、纲举目张详细分析的方式进行需求分析。

    当 BA 接到一页纸需求时,可以按照五步法需求分析法进行:

    五步法示意图

    第一步应要确认该需求的业务价值,通过业务价值来判断该需求的核心功能以及确认需求的优先级。以后的需求都要围绕着这个业务价值进行展开分析,这样才能够聚焦,才知道设计的功能是否必须的,是否能够帮助实现对应的业务价值。同时也能够判断对应的业务价值实现的方式是否科学。

    第二步应对该需求中所涉及的角色进行梳理。很多时候由于缺少对角色的梳理,并不能够正确的理解在业务中,各种角色如何完成自己的任务以达到实现业务价值的目标。如果遗漏了某些角色,那么会导致最后业务无法闭环运行的后果。另外也可能由于角色梳理的缺失导致需求分析结果的不正确。比如说,某个角色的功能都开发了,却缺少了对应的功能入口。

    第三步对需求的术语进行定义。在一些项目中可能涉及专业词汇术语,因此在前期明确术语的定义,后期在与客户确认需求功能时,可以统一用词习惯。不会出现一词多义或者一意多词的情况。并且,术语定义可以为开发工程师和测试工程师提供统一的用语,为开发过程的沟通效率提高奠定基础。并且由于术语定义的环节能够将术语的含义讲清楚,也对后续的需求分析理解产生了不可磨灭的重要作用。

    进行完前三步后,应对主流程进行梳理。一般来说,一页纸需求当中会包含必要的乐观路径的描述。通常描述主流程不会特别困难。但是缺失往往都在于悲观路径,边界条件等环节,因此第五步,通过纲举目张的方式对需求的细节进行梳理补充。纲举目张表示渔民晾渔网的时候,将渔网挂起来之后,渔网的孔就会自然的张开。引申到写文章的时候,文章的大纲要是先定义好了,文章的内容自然就清晰了。同样的,在分析需求的时候如果能够对于细节环节的梳理方式有个总体脉络,就可以清晰地梳理出各种隐含的需求。第五步可以包括:边界思维、对称思维、异常思维、发散思维、关联思维、并发思维等各种思维方式的应用,以梳理出各种需求的细节。

    1. 业务价值

    1.1 什么是业务价值

    解决别人愿意花钱解决的问题,就是业务价值。它通常是市场、企业、用户三方可以获得的价值主张,结合组织战略规划以及产品 /项目生命周期进行定义。

    1.2 业务价值解决的问题

    1.2.1 发现潜在需求

    干系人提供的原始需求可能包含的信息不充分,如果 BA 照搬就可能产生场景遗漏,但是如果 BA 能够考虑业务价值,从用户角度出发分析需求,就会发现潜在的需求。因此我们需要明确组织业务目标和价值,之后的分析都围绕这个目标展开。

    1.2.2 划分需求优先级

    需求的排序首先应该是依照业务价值来进行的,结合市场的趋势、产品所处的生命周期阶段、组织当前的产品 /项目组合战略、研发的投入成本等进行综合考虑。根据业务价值可以协助我们更好的对需求进行优先级划分。

    1.3 如何实现业务价值

    1.3.1 建立业务目标

    BA 在进行需求分析的过程中,会有很多想法和见解,但如果无法将其进行串联和推动,那就会忙于交付而不知道为什么交付。一般来说业务目标会有:赚钱、省钱这两大方向。赚钱又分为直接盈利(比如说:促进销售)和间接盈利(比如说:提高访问量,用户粘性等)。

    1.3.2 满足核心业务

    首先要满足核心业务,才能够确保价值的交付。然而核心的业务识别是一个相对较为有难度的事情。其实现方式也有很多种。之后会撰写文章讲述如何识别核心业务。比如在贷款业务中,还款模块可以分为:正常还款,提前划款,逾期还款,坏账还款等多个场景,而正常还款是最核心的业务。

    1.3.3 满足正确优先级划分

    优先级的分级最为常见的是按紧急、重要关联词构建。下图是常见的优先级划分方式,但是如果不掌握更具体的方式,就会陷入到,不知道该如何排序的境地。我们会在另外的文章中讲述如何进行合理有效地需求排序。这里先了解基本概念。

    在用四象限法时同时,我们要理解优先级划分的核心所在是最好的需求优先级还是跟着业务走。因此我们也需要思考以下几个问题来对优先级进行判断:

    1. 不做 - 是否会造成严重的问题和恶劣的影响?

    2. 做了 - 会产生的好处以及实现的目标?

    3. 是否跟核心用户利益有关?

    4. 是否跟大部分用户权益有关?

    5. 是否跟效率或成本有关?

    2. 角色梳理

    2.1 什么是角色梳理

    明确定义参与到业务和系统活动中的所有角色。

    2.2 角色梳理解决的问题

    角色梳理可以帮助我们差缺补漏,减少遗忘场景的问题。存在有可能不使用系统,但是对系统却有很大左右权的潜在角色。比如:老板给 HR 买了一套考勤打卡系统,他不打卡,但是他却要关注如何通过打卡系统管理员工。

    2.3 如何进行角色梳理

    2.3.1 进行角色分析

    系统为哪些类型的用户提供服务,他们都各自承担哪些不同的职责,并据此定义系统边界,也就是系统是对现实世界哪个范围的内容进行的模拟,这影响到需求设计和实现的范围以及工作。

    2.3.2 利用角色功能矩阵进行梳理

    在需求分析中,我们可以利用角色功能矩阵进行角色梳理,角色-功能矩阵将角色和功能进行正交排布,从而梳理那个角色可以执行哪个功能。

    2.3.3 利用角色权限矩阵进行梳理

    每个角色都有一个自己的权限矩阵,排布方式可能是树形目录。表明了该角色对应到详细的按钮级别的功能操作权限。

    3.术语定义

    3.1 什么是术语定义

    对术语进行定义,以便后续沟通能快速无二义。

    3.2 术语定义解决的问题

    进行需求梳理时,明确系统术语定义方便于后期的沟通与功能确认。

    3.3 如何对术语进行定义

    3.3.1 统一语言

    统一语言为今后的交流提供了统一的术语定义。要定义统一语言,最好是提供原名(本地语言)和英文名。英文名称是为了让开发者在源代码中统一名称。而它的描述是为了明确它是什么。如果可能的话,附上一张图片会增强可理解性。

    有的时候,一个术语可能在多种情况下有不同解释。因此可能需要建立一个 Wiki 才能够说明清楚。比如说:风险对冲。

    3.3.2 制作术语字典

    定义项目中使用到的所有术语,包括同义词。这里的内容就是一个字典,为每个名字写下简明扼要的定义,其中包括在需求规格说明书中使用的所有名称的含义。

    这个字典应该使用你的组织或行业使用的标准名称。这些名称也应该反映出在工作领域中当前使用的术语。该字典包括项目中用到的所有名称。请仔细地选择名称,以避免传达不同的、不期望的含义。

    4. 主业务流程梳理

    4.1 什么是主业务流程梳理

    利用闭环思维,需要从用户的视角来思考问题。具体是指以用户身份按照各种场景从头到尾走一遍,以确认场景的完整性。这里包括两种工具可以利用,一个是用户旅程,一个是对象旅程。

    4.2 主业务流程梳理解决的问题

    4.2.1 避免核心场景遗漏

    根据用户的视角来对主业务流程进行梳理,可以避免核心业务场景的遗漏,同时也避免遗漏页面和交互。比如说,在一个电商促销活动模块的开发中,一页纸需求中只描述了如何促销,却忘记了引流功能的描述,如果不加以分析,就会遗漏引流这个模块导致整个电商活动的失败。

    4.2.2 保证流程的逻辑性

    根据用户的视角来对主业务流程进行梳理,确保主业务场景和业务的完整性。

    4.3 如何对主业务流程梳理

    4.3.1 绘制主业务流程图

    流程图能够提供一种快速了解业务如何运作的视图。因此通过绘制主业务流程图能够快速明白业务的最终目标是什么,有哪些角色在参与以及他们的职责,以及彼此之间的联接。一般来说,流程图是个有效的工具,也有的场景只用流程图无法清晰的描述需求,可能要选取其他的合适工具。

    4.3.2 用户访谈

    采取用户访谈的形式来梳理主业务流程,通过访谈来判断是否遗漏业务场景。在进行用户访谈的时候注意带入到用户的身份中去。

    5. 纲举目张详细分析

    5.1 什么是纲举目张

    利用边界思维、闭环思维、对称思维、异常思维、发散思维、关联思维、并发思维等方式,梳理所有流程环节、判断条件及边界场景等各种细节。

    5.2 纲举目张解决的问题

    通过纲举目张的方式可以顺利的梳理出各种细节场景。对于已经有明确答案的,可以直接提供答案;对于有多个选项的,可以提供选项让业务代表选择;对于没有明确答案的情况,可以留白,让业务代表填写。这样通过较为有条理脉络的方式进行各种场景细节的梳理的方式,可以帮助更快的一次性建立较为完整的需求体系,并且迅速推动开发工作。并且在此过程中,容易对需求质量建立信心。不至于像散点式提问的方式,BA 自己也不清楚需求到底还有多少没有确认的细节。

    5.3 如何对纲举目张详细分析

    6. 案例

    6.1 案例介绍

    为了能够在下个销售季获得更好的销售业绩,特准备开通线上优惠活动。活动内容如下:

    新注册用户,赠送 200 元优惠券,有效期到 2019 年 12 月 31 日。

    老用户在活动期间下单,现金(含支付宝,微信,信用卡;不是预充值即可)支付,满 500 减 100 。每单单独结算。

    另外,充值满 1000 赠 100 。充值上限 10 万元。

    ** [前提假设] **

    已经存在一个电商系统,包括购物,下单,支付,物流等功能都已经存在;

    本次只考虑需求变更的部分;

    移动端使用。

    6.2 五步法分析需求

    1 )业务价值

    业务价值是指:解决别人愿意花钱解决的问题,就是业务价值。它通常是市场、企业、用户三方可以获得的价值主张,结合组织战略规划以及产品 /项目生命周期进行定义。

    本案例中,需要明确了商业价值才能够围绕着商业价值进行需求分析的展开,一切后续活动都是围绕着商业价值展开的。因此要明确商业价值:

    • 新用户注册,成为来年的消费群体
    • 老用户消费,年底回笼资金

    2 )角色分析

    角色分析是指:系统为哪些类型的用户提供服务,他们都各自承担哪些不同的职责,并据此定义系统边界,也就是系统是对现实世界哪个范围的内容进行的模拟,这影响到需求设计和实现的范围以及工作量。

    在对需求进行分析时,要明确该需求中涉及到的角色,避免产生遗漏问题。本案例中涉及的角色主要为 3 个:

    • 新用户

    • 老用户

    • 管理员

    3 )术语定义

    术语定义是指:统一语言为今后的交流提供了统一的术语定义。要定义统一语言,最好是提供原名(本地语言)和英文名。英文名称是为了让开发者在源代码中统一名称。而它的描述是为了明确它是什么。如果可能的话,附上一张图片会增强可理解性。

    因此需要对术语进行明确定义,本案例中需要确认的术语:

    • 满减活动( DiscountWithGivenAmount ):消费达到一定金额之后,就可以减扣一定的支付金额的方式为满减活动。

    4 )主流程梳理

    主流程梳理是指:利用闭环等思维,以用户身份按照各种场景从头到尾走一遍,以确认场景的完整性。

    梳理流程过程中,需要注意的是流程是否产生遗漏、业务整体逻辑是否正确。因为我们可以借助一些思维方式来保证需求分析的质量。

    • 闭环思维:干系人提供的原始需求可能包含的信息不充分。如果 BA 照搬就可能产生场景遗漏,但是如果 BA 能够考虑业务价值,从用户角度出发分析需求,就会发现潜在的需求。不采用闭环思维仍然可以做出完整的功能,但是这些功能可能因为缺少入口而无法访问。

    在本案例中,可以利用闭环思维来确认整个活动流程的节点和出口:

    • 边界思维:很多事物都有自己的边界,如上限和下限,开始日期和结束日期。而且数据类型本身也有范围限制,比如整数( Integer ),长整数( Long )或者双精度浮点数( Double )。未定义边界的需求在实现过程中会存在非常大不确定性,每个人理解的最佳实现方式是不同的,与业务需求的偏差往往就是 Bug 。有报道称,惠普的 SSD 硬盘会在使用一定的时间长度之后发生故障,就是因为时间超过了 Integer 的上限。

    本案例中,可以使用边界思维来确认活动的条件,避免出现恶意事件:

    • 关联思维:比如说在做登录的时候,会有密码,那就要考虑,密码是从哪来的,是管理员分配的还是用户设置的,还是默认的,还是通过手机短信通知临时获取的。这样可以考虑到更全面的场景。

    本案例中,利用并联思维来分析容易遗漏的场景,做到需求全面覆盖。

    优惠券和代金券可以并用吗?

    代金券和充值金如何进行消费的,可以单独使用代金券吗?

    充值金额是可以任意的吗?

    赠送的金额和消费顺序?

    • 发散思维:发散思维帮助 BA 发现更多的潜在场景。如果有个条件 A ,也许还有个条件 B 和 C 。比如说,性别不只是男女,有的公司定义了 70 多种性别,要把多样性考虑进来。一个自然数的输入框如果输入了下列内容到底会不会被认作是有效数字呢?“.0”, “0.”, “00”, “01” or “2e5”。通过发散思维可以发现更多的可能性来识别潜在需求。

    本案例中,利用发散思维来挖掘更多的潜在需求,例如凑单。

    11.jpg

    • 对称思维:如果有注册,那就有注销;如果有支付,那就有退款;如果有订货,那就有退货;如果有审批通过,那就有驳回。

    本案例中,利用对称思维进一步来检查需求分析是否存在遗漏,整体流程逻辑是否无误。

    • 时间轴:用时间轴来定义事件的时间边界;也可以用于其他的范围描述的内容。

    12.jpg

    用时间轴代替大量文字,并且可以更好的展现出对时间的边界有。本案例中,利用时间轴来明确优惠券等有效期限。

    确认优惠券的有效期限:

    o1MkKs.jpg

    o1MP2Q.jpg

    确认订单的积分时效:

    7 月 1 日之 7 月 31 日间的订单可以得到 2 倍积分。

    o1MArn.jpg

    确认双时间的范围:

    7 月 1 日之 7 月 31 日间的订单的积分可以在 10 月 1 日到 12 月 31 日间使用

    16.jpg

    确认不同角色协作:

    政策指定时间段(例如 7 月 1 日 - 7 月 31 日)符合政策的从本公司的采购可以累积积分。

    o1MEbq.png

    同时还可以利用时间轴描述对称流程:

    o1MZV0.png

    其他 - 对象建模 - 资金池:

    根据对象建模,把储值金额进行区分开,以原有储值、新储值、新储值赠礼进行拆解形成资金池,更好的判断资金的来源并统一汇集。

    o1MeaV.png

    7.总结

    通过以上一页纸需求分析的详细说明和案例解析,我们对五步法有了深刻的了解,同时对五步法的实践也有了深刻的认识。

    在一页纸需求分析中,我们不仅要考虑到业务价值、角色梳理、术语定义、主流程梳理以及纲举目张的表面含义,同时要正确的理解其中每一步涉及使用的工具,还要通过实践来进行学习。

    作者介绍:

    作者:王洪亮 /大锤

    可视化业务需求分析工具箱创始人,优普丰敏捷咨询首席教练、培训师。

    o1Mm5T.jpg

    社区知名技术大牛,资深软件开发及敏捷咨询师,精益创业导师。他整理了一套独到的需求分析工具箱。该套工具箱的工具以可视化为主要特点,帮助企业在需求分析的过程中以图和表为主的形式来展现需求,提高需求分析全面性的同时,缩短需求分析所需要花费的时间。并且为开发人员和测试人员在需求理解的过程中节省时间,减少反复确认,从而对整体开发效率起到了提升的作用。

    No Comments Yet
    About     Help     Advertise     Blog     API     FAQ     Solana     5192 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 49ms UTC 08:50 PVG 16:50 LAX 01:50 JFK 04:50
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86