【实用长文】需求定义不清?看这一篇就够了(另赠需求分析工具箱)

本文深入探讨了如何清晰定义需求,解决需求模糊不清的问题。通过实例解析,提供一套完整的需求分析工具箱,助你有效管理需求变更,避免频繁改需求的困扰。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引导5.png



你们现在的团队都有什么痛点?


当我问一个团队这样的问题的时候,经常会得到各种不同的回答,这些回答中,出现频率居高不下的就是:


需求定义不清楚


这种情况下,我通常都会去看一看他们最近的需求文档,然后去找研发团队聊一聊,请他们对每个需求文档说说他们的看法。


先来说说我看到的需求定义的常见问题。要说明这个问题,要从什么样的需求定义是好的定义说起。


1如何判断一个需求文档写的怎么样?


以我的经验,判断一个需求文档写得怎么样,大概可以看三个维度,完整性,清晰度,和效率。


1. 完整性


完整性指的是软件解决方案是否定义完整。


完整性没做好的例子有:

  • 只定义了正常业务流程软件的行为,没有定义分支流程的软件行为;

  • 缺少交互的定义;

  • 接口缺乏定义;

  • 缺乏异常处理定义,等等。


2. 清晰度


清晰度指的是软件解决方案的描述是否清楚。


3. 效率


效率指的是软件解决方案的描述是否简洁明了。


以上这三个类别是有排序的,


完整性最重要,其次是清晰度,再次是效率。


这就引出了:


2需求定义的常见问题是什么?


大部分需求定义不清楚的问题,其实是定义不完整。


我看到的需求文档存在的首当其冲的问题,就是把上面的这个优先级顺序给弄颠倒了。


这些文档通常都是“效率”优先。


我见过的最“高效”的一个文档,打开来看只贴了一张UI设计图。研发团队用“一脸懵逼“来描述他们看到这个文档的感受。


还有一种观点更加夸张,认为敏捷就是不写文档,或者写一个故事卡片就可以了。


这种情况我通常会给对方看一个简单的需求模型:

这个需求模型,不论你是采用传统的瀑布开发方法,还是采用敏捷,都能用到的。


这个模型的本质,就是PMP倡导的“渐进式规划”。


在初始阶段,我们的定义可以概括一些,但是当要进入开发的时候,需求应该是定义清晰的。


清晰的标准是:团队沟通顺畅,和团队对交付件有一致共识。


如果产品和研发团队有长期的顺畅合作的关系,需求文档才会考虑到效率维度。


而在很多的团队当中,以当前产品和研发团队之间的合作顺畅程度,需求文档根本谈不上拼效率。


所以对于这类团队,我的建议是:先把解决方案定义完整,写清楚,再来说是否花太多时间写文档了。


毕竟写需求文档的本质,不是写文档,而是产品定义。产品定义是一份严肃的全职工作。


你不能说一个开发人员是否花太多时间开发了,同样的,你也不能说一个产品人员,是否花太多时间定义产品了。


在我们开始正式介绍如何写好需求文档(定义需求)之前,我们先来看看:


3需求分析的目的是什么?


有人说需求分析的目的,就是把用户的需求分析一下,拆解一下。


不对。


还记得我在需求总变怎么办?一文中讲的故事吗?


用户提的需求“要做一个手机订餐系统”其实并不是用户的需求,用户的真正需求是“外出办公,中午回到公司还有午饭吃”。


所以,


需求分析的目的是把握用户的真正需求。


要做到这一点,就要把用户的真正需求,和用户为了满足他的需求而提出的解决方案区分开来。


4需求文档包含什么内容?


包含两部分的内容:需求分析和软件设计。


需求分析是弄清楚用户需求是什么,软件设计是设计一个解决方案,来满足用户需求。


举个例子,大热天,用户既不想不出门,也不想动手,但是想要吃饭。这个是用户的需求。


为了满足用户的这个需求,可以有百度外卖,也可以有美团外卖,后面两个就是为了满足同一个需求做出的两个不同的解决方案。


5需求文档的撰写角度


有一种常见的撰写角度就是以产品经理或者开发团队的角度来写。


这样的角度也不是一定不可以,但是这个角度有一个问题,就是很容易把方案写成一个自嗨(自我感觉良好)的方案。


我的建议是:


从用户的角度来写需求文档,这样可以确保不会丢失用户角度。


具体怎么从用户角度来写,请往下看,这个角度会影响到需求文档的各个方面。


6需求文档怎么写?


下面是一些需求文档的模块,大家可以视情况挑选觉得有用的用在自己

### 关于ESP8266的全面学习资料 #### ESP8266简介与功能详解 ESP8266是一款专为物联网(IoT)设计的Wi-Fi模块,具备强大的网络连接能力。此款微控制器仅支持TCP/IP协议栈还提供了一系列用于处理字符串的API接口以及最佳实践指导[^1]。 对于基于ESP8266的应用开发而言,理解其内置函数库至关重要。这些库涵盖了从基本的数据类型定义到复杂的网络编程等多个方面: - **字符串操作**:包括创建、复制、拼接等常见任务; - **内存管理**:动态分配和释放堆空间的方法; - **串口通讯**:通过UART与其他设备交换数据的技术细节; - **网络安全特性**:确保传输过程中的信息安全措施; - **性能调优技巧**:提高应用程序运行效率的方式; - **错误恢复机制**:当遇到意外情况时如何优雅地应对并恢复正常服务; 以上各项内容均能在官方文档中找到详尽描述,并配有实际案例供参考学习。 #### 示例代码展示 为了更好地掌握上述知识点,在这里给出一段简单的Python风格伪代码来说明怎样利用ESP8266发送HTTP请求获取网页内容: ```python import urequests as requests # 导入轻量级http客户端库 def fetch_webpage(url): try: response = requests.get(url) # 发送GET请求至指定URL if response.status_code == 200: # 如果状态码表示成功,则打印页面主体部分 print(response.text) response.close() # 记得关闭连接以节省资源 except Exception as e: print(f"Error occurred while fetching webpage: {e}") ``` 这段代码展示了如何使用`urequests`这个专门为MicroPython环境定制的小型化版本requests库来进行标准HTTP GET请求的操作流程。它能有效地简化原本较为繁琐的过程,让开发者可以更专注于业务逻辑本身而是底层实现。 外,还有更多实用的例子可以在开源项目【ESP8266-Demos】里发现,该项目包含了多个同场景下的具体实施方案,非常适合用来加深理解和练习技能[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值