《A++ 敏捷开发》- 18 软件需求

需求并不是关于需求 (Requirements are not really about requirements)

大家去公共图书馆寄存物品,以前都是扫二维码开箱,有些图书馆升级了使用指纹识别。
“是否新方法比以前好?”我问年轻的开发人员。
“当然用指纹识别好。新技术!现在已经很少看到使用条码的系统了。”
“如果取物时指纹识别失败怎么办?以前还有条码纸条作为凭证,找管理员人工开箱处理,但用指纹识别的话,就无法证明自己是寄存那个人,甚至连寄存在哪箱都可能忘记了。而且指纹识别的错误率比条码高,所以虽然是新科技,成本也提升了,但未必带来价值。”
每次培训,我都会用这例子提醒学员需求并非只谈需求,必须为拥有它的人提供最理想的价值。有些产品经理混淆了解决方案与需求本身:“寄存需要用指纹识别开箱”,
但如果把需求写成:“让寄存者取得凭证,之后用来开箱”
设计师就不一定选择用指纹识别,它只是其中一种方案。
如果希望IT系统给用户带来价值,就需要从整个业务全面分析,有些需要由IT系统支持,有些不需要。
下面会举例说明。
很多团队都未能做好以下3点:

  • 需求分析
  • 识别关键干系人
  • 非功能性需求

需求分析

业务用例,包括产品用例,可以帮助我们分析整个业务流程,确保能为业务产生价值。
使用下面的模型,可以有效地按以下顺序系统地分析与设计业务用例(Business Use Case BUC) 、产品用例 (Product Use Case PUC)。

  • 现在业务流程(Now,How)
  • 现在业务用例(Now,What)
  • 未来增强后的业务用例(Future,What)
  • 未来的产品用例(Future,How)

当前未来.jpg

例如:线上在超市购物,产品用例就包括处理买家的结账请求,连接信用卡数据,更新买家的购物历史和等待发货的订单信息。但业务用例就包括系统以外的其他配合工作,包括:超市员工在货架上按订单取货,联系物流公司把货品送到买家地址。
首先描述现在的处理方式(左下角)。
在左上角描述现在业务用例,柜台处理的方式,然后在右上角想象用了系统后,网上选购与下订单的未来业务用例,哪些流程应该在线上做更容易(右下角)。

“刚年底审查了我们某针对医院临床软件系统,发现整年开发的功能中,有86%都未被使用。”
我们从而了解到,把需求分优先级很重要,所以要制定开发什么功能,集中精力这些会被使用的20%功能,而不是浪费时间在开发完都没有用的80%功能。
有人提出,其实可以反过来看,怎么筛选哪些功能不应该做,可能更容易。
但应怎么筛选呢?

某家专门做高端安防系统的P公司,为一家大卖场S公司开发一款廉价的安防系统,如下:

RDM1.3 s15.jpg


签订合同后两个月,开发团队已经开始设计和编程,S公司的代表提出以下新需求:“增加了一个需求即能够很精确的定位入室的盗贼的位置;以及他的去向,还可以检测出该盗贼就屋里呆了多久。”

请问你作为产品经理会如何反应?
我的经验,有百分之八十的学员都会说让我和工程部先内部沟通,再回应是否能实现?费用是否增加?加多少?
我说:“如果你很有经验,你应该立马问客户先生为什么要做这个需求,因为你不用问工程部,已经可以猜出来开发这个功能需要大量的成本和时间,但未必有价值,如果你当成问客户他也提不出对业务的重要性,你应当场拒绝。”

--==+++==--

“增加一个缺失的需求去检测损坏的窗口”很多学生会立马问(因为刚刚听完第一条的解读。):“客户为什么要做这个功能?”
客户说:“如果系统能够识别出破碎的窗户,便可以报上保险公司申请节省时间。”
但如细心想想,这需求其实是不可能实现,因为系统只能从传感器检测到波动的幅度,但无法判断是否破损(例如:不碎玻璃)。

从以上例子看到产品经理不仅仅是传话,要利用业务的知识,了解和过滤需求,拒绝没有价值的需求。
需求人员过滤了不合理的需求后,还是要分析成本和给客户的价值,对价值比成本高的需求分优先级。

如果我们必须构建软件,那么它必须为拥有它的人提供最理想的价值。

需求p2.1.jpg

以上面储物柜故事举例:
因为指纹识别成本高,但没有提供更多价值,所以不应该做。

用例与场景

用户故事针对“做什么”与“为什么”(“What”,“Why”); 场景针对“如何做”(“How”),例如普通市民用手机程序搜索下周一央视7台有什么节目。所以它们之间是互补,没有冲突。每个需求都应考虑各类场景,以银行个人用户用银行卡去ATM机取款为例:
正常情况:使用个人银行卡取300元
其他可选情况:从其他银行卡取款
异常情况:取款后没有及时取回银行卡,导致吞卡

正常场景是基础;但如果没有全面考虑各种场景便会导致最后开发出来的产品不满足客户需求。

实例:护照到期续证
比如我们护照更新,以前是要到柜台手工办理,如果我们把那个过程数字化,让市民可以在线做,不需要亲身到柜台办理。应怎样做呢?
某国家的做法是本来的手工填写模板直接变成系统页面(每个输入与手工表格一一对应),申请人在系统里按本来模板填写并提交,上传个人新照片,也是经过系统,我有一次尝试用系统线上填电子表单申请,但因表单很繁琐,有很多护照原有信息都需要重新填写,光是填那表就花了我接近一个小时,最大问题还不是在我花时间填手工表,而是最后要上传照片,因为照片像素高的话就很大,需要很好的网络才可以传得上,如果照片像素小,便导致模糊不清,不能通过。最后,一个半小时后,我用尽所有方式都还是无法传上照片,我最终放弃了在线上提交申请,直接预约去在柜台做!

之前描述的整个过程只是把原有的手工步骤信息化,和原本的申请手续一样。但线上办理和在柜台现场办理不同,在现场你可以要求对方直接把照片给你,也可以要求对方提供老护照,但在线上办理,应很容易从系统里找到个人护照信息,所以很多本来在柜台要手工填写的老护照信息就不需要再填了。
客户:怎么可以简化整个过程?最困难应是照片的更新?
我:有些国家是这样做法,比如你申请续证,只需要填上老证件的基本信息,系统就立马能识别出本来的证件 你确实有那个“旧”证后,便可立马提交申请。跟在网上购物一样,你确认过内容没问题,就在网上付费,然后打印申请表并在表上亲手签字,然后附上几张符合规格的照片,邮寄到政府机关。他做好新证件以后再邮寄回你。或者你自己到他规定的地点领取也可以。这样就能很简单地利用“低”科技解决方案,解决了刚才上传照片的困难。
从上面例子看到,我们应不仅是把那些本来手工的流程自动化,应该全局看要解决的问题本身,哪些过程自动化,哪些不应该自动化(比如传照片)。
甲方对怎么可以在线上做这个过程也没有概念,他只是知道,本来手工需要填表。
乙方也不知道,他只是做开发,也不知道有什么方面可以不用IT方式,而用其他方式更合理。
必须要一起探讨才可以有最好的解决方法。

以上例子,业务用例是线上续护照。但有些功能不靠系统处理,如上传照片,不归纳为产品用例,用其他方式手工处理。
以上只是考虑了正常业务流程,也要考虑各种异常场景才算全面。(请动脑筋,写出各种异常场景,附件里有以往学员的答案,供参考。)
所以作为业务分析师,你很可能要改变用户思考问题的方式,例如利用业务过程模型,配合场景与页面原型,与利益相关者一起探索问题的本质。软件系统必须为拥有它的人提供最理想的价值,构建软件系统本身(例如只是把现有流程自动化)不一定能解决客户业务问题。

识别利益相关者

和杭州客户领导吃晚饭,领导就跟同桌的项目经理开玩笑说:“你们刚刚完成内部项目管理自动化工具,做调研的时候好像没有找过我? 其实我是其中一位经常要使用这系统的管理者,下面项目的监控、申请都是经过我,但我发现这个系统很不合用,对收集我需要的项目信息没有作用。比如没办法处理一些批准信息。”
从上面对话,可以了解如果没有全面识别项目的利益相关者,可能会影响到项目的成败。例如我接触一些有些具备开发经验的需求人员,但他们通常只注意功能需求的技术细节。
问他们:“哪些是你的项目干系人?”
答:“甲方有协调员,要访谈哪些人都是由甲方协调员安排,我们听他安排。”所以为了避免未能识别所有干系人的风险,就要主动跟甲方一起策划。我们说沟通计划必须是甲乙方一起合作做出来,而且会牵涉甲乙方各个层次的人。
例如要听甲方出资人的需求,可能就要乙方的总经理出马,乙方的需求人员顶多可以跟甲方对口的项目组人员沟通。(如何可以做好识别干系人,并制订沟通计划,可详见附件。)

非功能性需求

虽然很多项目有性能、易用性等非功能需求部分,但缺乏可衡量的量化指标。
例如,多少用户量、数据量、什么平台与网络环境下的反应时间。
“客户没有提非功能的具体需求。”需求人员可能说。
“但没有明确可衡量的需求不等于没有要求。假如验收时甲方项目经理换了人,项目可能会因为反应时间太慢,甲方说不能接受,但因为非功能需求不明确,你们也无法证明产品满足需求,最终项目可能被拒收。所以建议你们也要写上具体可验证的性能需求,保障自己。如果客户没有具体要求,可以依据以前同类项目性能测试结果,制定容易达到的性能规格,成为需求模板。”

除了性能 (Performance) 外,其他主要非功能需求包括:

  • 产品观感(Look and Fell)
    • 产品的外观和感觉越来越受重视,例子:苹果iPAD MacBook 等都让客户觉得产品设计精简但高贵
  • 可用性与易用性(Usability and Humanity)
    • 线上网购手机APP,能否容易找到喜欢的菜式、挑选并下单
  • 操作环境(Operational and Environmental)
    • 从肩高跌落时,产品仍能存活
    • 产品应在什么温度、湿度等条件下使用
    • 产品应节省电池寿命
  • 可维护性和支持(Maintainability and Support)
    • 产品应易于移植到Android和iOS
    • 能简单、快速地从原有的产品导出资料,更新到新一代同类产品
    • 应翻译成各种外文
  • 安全(Security)
    • 权限(Access),例如:只允许哪些人使用
    • 隐私(Privacy),例如:防止打印任何个人及机密资料;防止未经授权的人进一步或二手使用
    • 完整性(Integrity),例如:确保传输的数据相对应
    • 审计(Auditing),例如:在法定期间保留所有交易的日记账。
  • 文化(Cultural),法律(Legal)

其他最佳实践

用户故事卡

用户故事卡片目的是让用户(业务)与开发沟通的桥梁。
需求卡片除了包括需求描述,理由,验收标准外,还应有以下内容:

  • 顾客满意度/顾客不满意度:

用两个数比单纯用优先级能更全面反应客户声音。

19 满意度.jpg

19 不满意度.jpg

(如想多了解为什么要这样分,请看附件里的“客户声音:Kano Diagram”)

  • 来源:每项需求都应可追溯到源头.例如需求是哪个人,什么岗位提出.
  • 冲突与依赖其他需求:是/否; 确保需求之间的一致性。
  • 独立的需求编号:

因为设计、编码、测试用例都应与需求相互对应,有明确编号才能对应。

(用实体卡片,团队难以互动、分享,有些公司采用系统 记录与跟踪需求。电子卡也应包括以上内容。)

做好需求评审

很多团队都有做需求评审,但因为没有主要关注点,起不了质量把关的作用,可以利用以下的检查单提醒需求有没有犯了这些错误,尽早改正。

评价和验收的准则可包括:
  • 是否明确,陈述清晰、恰当
  • 唯一识别符合架构方法和质量属性的优先级
  • 可实施
  • 可测试
  • 可追溯到来源
  • 可实现与业务价值 (Value) 挂钩(镀金:未带来价值)
  • 是否由客户确定为优先事项
  • 超出范围,与项目目标无关
  • 不完整
  • 不一致(与其他需求有冲突)
  • 不正确
  • 有二义性
  • 属于解决方案(未全面考虑各种可行方案)

总结

上面简述了3类需求常见问题:

  • 需求没有按价值过滤与分析,分优先级;没有全面考虑各种场景
  • 没有全面识别利益相关者
  • 没有明确描述非功能需求,并可验证

和2条实践:

  • 用户故事卡
  • 需求评审

都可以与CMMI模型对应:

  • 需求分析:RDM 3.5, 3.6, 3.2 ( 场景 )
  • 干系人:PLAN 2.4, MC 2.2 ( 沟通的策划与监控 )
  • 非功能需求:RDM 2.2 ( 客户需求,包括功能与非功能需求 )
  • 需求卡片:RDM 2.2 , 2.4 ( 客户需求与活动或工作产物之间双向可追溯 )
  • 需求评审:RDM 2.3

附件

利益相关者

利益相关者计划检查单 (Stakeholders Plan Checklist):

1) 列出所有潜在的利益相关者(List all potential stakeholders)

1a. 类型/分组 (What are the base Segments)

1b. 可否再细分(Any sub-segments)

2)把她们分为 F(友好)、I(忽略)、U(不友好)

Assign F (Friendly)、I (Ignore)、 U (Unfriendly) to them

3)他们最关注什么?

What is important to them?

4)学习目标 (Learning objectives):

针对某利益相关者,我们需要了解什么?

For each stakeholder, what will we need to learn?

5)怎样沟通 (How)
6)什么时间 (When)

抽样计划 (Sampling plan)

如何招募(How to recruit)

如何能获得承诺(How to get commitment)

[针对以上第1至第3项,参阅以下实例/解读]

实例/解读(Examples / Explanation)

某公司专门设计、开发新一代手提电脑产品。

1) 全面考虑各类利益相关者(Stakeholders)
出资人 (Sponsor):出资人为产品的开发付钱
顾客 (Customer):顾客购买产品。必须对他们有足够的了解,理解他们认为什么有价值,所以会购买什么产品。
用户 (User):确定用户的目的是为了理解他们所做的工作,以及他们认为哪些改进有价值。
在开发消费产品、大市场软件时,应该考虑用一个“假想用户”。假想用户是一个虚拟用户,它是大多数用户的原型。

类型/分组的例子如下
未来笔记本电脑的潜在用户
大类:

  1. 商业人士 (Business)
  2. 媒体专业人士(Media Pro)
  3. 家庭用户(Home)

细分:

  1. 主要用户(Lead User)
  2. 有极高要求者(有挑战的 Demanding)
  3. 潜在用户(有潜力的 Potential)
  4. 追求技术完美者 (技术流 Tech-Phobic)

296页替换图片.jpg

2) 策划包括哪些用户(User inclusion strategy)
依据设计人员会怎么对应,把不同识别出来的利益相关者分成 FIU
例:以针对笔记本电脑创新产品
F(Friendly)友好,比如家庭用户、商业用户、媒体专员
I(Ignore)忽略 ,比如忽略残疾人士
U(Unfriendly)不友好,比如黑客、小孩(禁止他下载游戏、玩游戏)

3) 他们注重什么(主要关注点)

干系人角色/概况质量关注重点
商业用户长期出差者
-坐长途飞机
-做演示
-保护某些秘密文档
-待机时长
-屏幕清晰度
-安全性
专业媒体创造性工作;并要协同。
录音和录视频
数字带宽(声音和视频)
电脑速度和内存
家庭用户

  • 以上有那些在调研之前已知,其他有那些需要挖掘。

客户声音:Kano Diagram

可以用下图分析用户对需求优先级:

19 满意程度.jpg

解读上下两个箭头应怎样看:

  • 下面的箭头代表理所当然(Take it for granted),如果缺乏,客户会很不满意,包括觉得是理所当然 (例如满意度:中立1,非常不满5)
  • 上面的箭头代表是加分项 (Attractive),如果包括会非常满意,但如果缺乏不会觉得不满意 (例如满意度:非常满意5 ,不满意度:中立1)

所以“需求卡片”用两个系数:顾客满意度+顾客不满意度,能更好判断某功能属于哪类功能需求。

线上续护照的 异常场景

以下是部分异常场景: 个人信息类

  • 信息不符,无法识别
    • 生僻字姓氏,系统无法识别

付款

  • 支付失败
    • 直接经银行付款
    • 经渠道支付验证出错

系统类

  • 系统间接口兼容性问题,提交失败
  • 系统出现故障,无法登录或无法上交
  • 浏览器兼容性问题

特殊情况

  • 法定假日,不接受申请
  • 紧急情况:申请人遇到急病,亲人海外死亡等紧急情况,需加急处理
  • 信息错误:申请表信息填写不完整或填写错误,需补正
  • 照片不符合规格

特殊人群

  • 申请人属于未成年人
  • 父母国籍不一致,无法线上判断国籍

参考 References

  1. Beck, Kent , with D. West. "User Stories in Agile Software Development" , Ch.13 of Scenarios, Stories, Use Cases: Through the Systems Development Life-Cycle edited by F. Alexander(2004)
  2. Robertson, S. Mastering the requirements process. (2006) 2/e

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【智能体架构:Agent】LangChain智能体类型ReAct、Self-ASK的区别

1. 什么是智能体 将大语言模型作为一个推理引擎。给定一个任务, 智能体自动生成完成任务所需步骤, 执行相应动作(例如选择并调用工具), 直到任务完成。 2. 先定义工具:Tools 可以是一个函数或三方 API也…

Vue进阶之Vue3源码解析(一)

Vue3源码解析 目录结构编译compiler-corepackage.jsonsrc/index.ts 入口文件src/compile.ts生成ASTsrc/parse.ts 代码转换src/transform.ts几种策略模式src/transforms/transformElement.tssrc/transforms/transformText.tssrc/transforms/transformExpression.ts 代码生成src/…

servlet tomcat

在spring-mvc demo程序运行到DispatcherServlet的mvc处理 一文中,我们实践了浏览器输入一个请求,然后到SpringMvc的DispatcherServlet处理的整个流程. 设计上这些都是tomcat servlet的处理 那么究竟这是怎么到DispatcherServlet处理的,本文将…

【我的待办(MyTodolists)-免费无内购的 IOS 应用】

我的待办(MyTodolists) 我的待办:智能任务管理助手应用说明主要功能为什么选择"我的待办"?隐私保障使用截图 我的待办:智能任务管理助手 应用说明 "我的待办"是一款智能化的任务管理应用&#x…

GCC RISCV 后端 -- C语言语法分析过程

在 GCC 编译一个 C 源代码时,先会通过宏处理,形成 一个叫转译单元(translation_unit),接着进行语法分析,C 的语法分析入口是 static void c_parser_translation_unit(c_parser *parser); 接着就通过类似递…

Vim复制内容到系统剪切板

参考链接 【Vim】Vim 中将文件内容复制到系统剪切板的方法_vi 复制到系统剪贴板-CSDN博客 [转]vim如何复制到系统剪贴板 - biiigwang - 博客园 1. 确定Vim是否支持复制到系统剪切板 输入命令 vim --version | grep clipboard 如果是开头,说明支持系统剪切板&…

测试用大模型组词

已经把hanzi-writer的js的调用、hanzi-writer调用的数千个汉字的json文件,全都放在本地了。虽然用的办法还是比较笨的。我注意到 大模型也可以部署本地,虽然使用频率低的情况下不划算。 尝试直接通过html的javascript通过api key调用大语言模型&#x…

华为eNSP:配置单区域OSPF

一、什么是OSPF? OSPF(Open Shortest Path First,开放最短路径优先)是一种链路状态路由协议,属于内部网关协议(IGP),主要用于在单一自治系统(AS)内部动态发现…

P62 线程

这篇文章我们来讲一下线程。截止到目前,我们的代码都是在单线程上运行的,现在看起来没有什么问题,但是目前所有的计算机几乎都不只有一个逻辑线程,所以如果我们一直使用单线程运行,这样的话效率会很低。尤其是如果我们…

Android AudioFlinger(五)—— 揭开AudioMixer面纱

前言: 在 Android 音频系统中,AudioMixer 是音频框架中一个关键的组件,用于处理多路音频流的混音操作。它主要存在于音频回放路径中,是 AudioFlinger 服务的一部分。 上一节我们讲threadloop的时候,提到了一个函数pr…

im即时聊天客服系统SaaS还是私有化部署:成本、安全与定制化的权衡策略

随着即时通讯技术的不断发展,IM即时聊天客服系统已经成为企业与客户沟通、解决问题、提升用户体验的重要工具。在选择IM即时聊天客服系统时,企业面临一个重要决策:选择SaaS(软件即服务)解决方案,还是进行私…

DeepSeek系列模型技术报告的阅读笔记

DeepSeek系列模型技术报告的阅读笔记 之前仔细阅读了DeepSeek系列模型的主要技术方面内容与发展脉络,以下是DeepSeek系列模型技术报告的笔记,有错误的地方欢迎指正! 文章目录 DeepSeek系列模型技术报告的阅读笔记GQADeepseek MoEAbstractIn…

【VUE】第二期——生命周期及工程化

目录 1 生命周期 1.1 介绍 1.2 钩子 2 可视化图表库 3 脚手架Vue CLI 3.1 使用步骤 3.2 项目目录介绍 3.3 main.js入口文件代码介绍 4 组件化开发 4.1 组件 4.2 普通组件注册 4.2.1 局部注册 4.2.2 全局注册 1 生命周期 1.1 介绍 Vue生命周期:就是…

Spring-framework源码编译

版本统一(搭配其他版本会遇到不可知错误): 1)spring 5.2.X(5.5.26) 2)JDK8 3)Gradle:5.6.4 可以在gradle-wrapper.properties中修改 https\://services.gradle.org/distribution…

使用 Deepseek + kimi 快速生成PPT

前言 最近看到好多文章和视频都在说,使用 Deepseek 和 kimi 能快速生成精美的 ppt,毕竟那都是别人说的,只有自己尝试一次才知道结果。 具体操作 第一步:访问 deepseek 我们访问 deepseek ,把我们想要输入的内容告诉…

火绒终端安全管理系统V2.0--纵深防御体系(分层防御)之规则拦截层

火绒终端安全管理系统V2.0--多层次主动防御系统。 率先将单步防御和多步恶意监控相结合,监控百个防御点(包含防火墙),有效阻止各种恶意程序对系统的攻击和篡改,保护终端脆弱点。 ✅ 内容拦截层(Content-B…

如何在WPS中接入DeepSeek并使用OfficeAI助手(超细!成功版本)

目录 第一步:下载并安装OfficeAI助手 第二步:申请API Key 第三步:两种方式导入WPS 第一种:本地大模型Ollama 第二种APIKey接入 第四步:探索OfficeAI的创作功能 工作进展汇报 PPT大纲设计 第五步:我的使用体验(体验建议) …

力扣35.搜索插入位置-二分查找

class Solution:def searchInsert(self, nums: List[int], target: int) -> int:# 初始化左右指针left, right 0, len(nums) - 1# 当左指针小于等于右指针时&#xff0c;继续循环while left < right:# 计算中间位置mid (left right) // 2# 如果中间元素等于目标值&…

云计算专业必考三大证书,助你抢占职业发展先机!【云计算认证学习资料分享(考试大纲、培训教材、实验手册等等)】

随着云计算技术的飞速发展和广泛应用&#xff0c;云计算行业对专业人才的需求也日益旺盛。拥有权威的云计算认证&#xff0c;不仅能够证明你的技术实力&#xff0c;更能为你的职业发展增添砝码&#xff0c;赢得高薪offer&#xff01; 本文将为大家介绍云计算专业最值得考的三大…

Redis - 核心原理深度解析:线程模型、持久化与高可用性

文章目录 概述一、Redis线程模型演进1. 经典单线程模型&#xff08;Redis 4.0前&#xff09;2. 多线程优化演进 二、数据持久化机制1. AOF&#xff08;Append Only File&#xff09;2. RDB&#xff08;Redis Database&#xff09;3. 混合持久化&#xff08;Redis 4.0&#xff0…