3. 项目管理基础

做嵌入式项目这么多年,我见过太多“做出来没人用”的产品。原因往往不是技术不行,而是需求没搞清楚。说白了,需求分析就是回答三个问题:为什么要做?用户想要什么?系统该干什么?

这一章,我们聊聊需求分析的三个层次和三种获取方法。这些都是我踩过坑之后总结出来的经验。

需求的三层结构

刚入行时,我总觉得需求就是“客户说啥我做啥”。后来发现,客户说的往往是表象。需求其实分三层:

层次 定义 典型表述 产出物
业务需求 组织或客户的高层目标 “我们要降低30%的能耗” 项目愿景、商业论证
用户需求 用户使用系统要完成的任务 “运维人员能远程查看设备状态” 用户故事、用例图
功能需求 系统具体实现的行为 “每5秒采集一次温度,超过阈值报警” 需求规格说明书

关键认知:业务需求是“为什么”,用户需求是“做什么”,功能需求是“怎么做”。三层必须对齐,否则项目必出问题。

业务需求:项目的原点

业务需求来自客户的高层管理者或出资方。它回答的是:投入资源做这个项目,到底图什么?

我记得有个智能家居项目,客户一开始说“要做个智能窗帘”。聊了半小时才发现,他们的真实业务需求是“降低写字楼空调能耗”。智能窗帘只是手段之一。如果只盯着功能做,最后可能方向都偏了。

业务需求通常很抽象,但它是所有决策的判据。功能做不做、优先级怎么排,都要回到业务需求来判断。

用户需求:从用户视角看问题

用户需求描述的是用户与系统的交互。它不关心内部实现,只关心用户能不能完成任务。

举个例子:

  • 业务需求:提升生产线质检效率20%
  • 用户需求:质检员能用扫码枪快速录入缺陷信息
  • 功能需求:扫码枪触发中断,系统在200ms内显示对应工单

写用户需求时,我习惯用“用户故事”格式:作为[角色],我想要[功能],以便[价值]。比如:“作为产线组长,我想要实时看到每台设备的运行状态,以便及时安排维修。”

我的经验:用户需求一定要让真实用户参与确认。别只跟项目经理聊,他们往往替用户做决定,但替不了用户干活。

功能需求:落到代码层面的契约

功能需求是开发团队真正要实现的。它必须可量化、可测试、无歧义。

我曾经接手过一个项目,需求里写着“系统响应要快”。结果测试时,我认为500ms算快,客户认为100ms才算。这就是功能需求没写清楚。

好的功能需求长这样:

功能:温湿度数据采集
触发条件:系统上电后自动启动
采集周期:每10秒采集一次
精度要求:温度 ±0.5°C,湿度 ±3%RH
异常处理:连续3次采集失败,触发硬件看门狗复位
输出格式:JSON,包含设备ID、时间戳、温湿度值

需求获取方法:三种武器

需求不会自己从天上掉下来。你得主动去挖。我常用的方法有三种,各有各的适用场景。

方法 适用场景 优点 缺点
访谈 探索性需求、高层目标 深度高、能挖掘隐性需求 耗时、样本少
问卷 大范围收集、量化统计 覆盖面广、效率高 无法追问、深度有限
原型法 需求不明确、交互复杂 直观、能快速验证 迭代成本高、可能误导

访谈:面对面挖需求

访谈是我最常用的方法。尤其是项目启动阶段,我会约客户的关键干系人聊1-2小时。

访谈的技巧:

  1. 先列提纲:准备10-15个开放式问题,别上来就问“你要什么功能”
  2. 多问“为什么”:客户说“我要一个报警功能”,追问“报警给谁看?什么情况报警?报警后做什么?”
  3. 记录+录音:我习惯带个录音笔,回头整理时能捕捉到细节
  4. 区分“想要”和“需要”:客户可能想要镀金功能,但真正需要的是核心价值

避坑指南:我曾经访谈时只顾着记笔记,没注意客户的表情和语气。后来发现客户说“这个功能最好有”时,其实是在犹豫。真正的需求往往藏在那些“嗯…可能吧”的含糊回答里。

问卷:规模化收集

当用户群体很大(比如上百个设备操作员),访谈就不现实了。这时候问卷是高效的选择。

设计问卷要注意:

  • 问题要具体:别问“你对系统满意吗”,问“你希望系统在几秒内完成数据导出”
  • 选项要互斥:每个选项之间不能有重叠
  • 留一个开放题:让用户写点自由意见,往往有惊喜
  • 先小范围试填:找3-5个人试填,看看有没有歧义

问卷的缺点是深度不够。所以我通常用它做前期摸底,然后针对关键发现再安排访谈。

原型法:让需求“看得见”

嵌入式系统做原型,不一定非得是硬件。我常用的是:

  • 低保真原型:纸面草图或PPT,快速验证交互逻辑
  • 高保真原型:用Qt或HTML做界面模拟,甚至用开发板跑个最小系统

原型法的核心价值是降低认知偏差。你说“系统会显示报警”,客户点头说懂。但你把原型摆在他面前,他可能说“不对,我要的是弹窗,不是状态栏闪烁”。

我记得一个医疗设备项目,需求文档写了30页,客户都签了。结果原型一出来,客户说“这个操作流程不对,护士没时间点三级菜单”。最后改了四版原型才定下来。如果直接开发,那30页需求就是废纸。

我的建议:原型法不要追求完美。用最快的方式让用户“摸到”系统,然后观察他们的操作。用户做出来的动作,比他们说出来的话更真实。

需求层次与获取方法的对应关系

这三种方法不是孤立的。我一般这样组合使用:

需求层次与获取方法对应关系 业务需求 高层目标 / 商业价值 用户需求 任务 / 交互 / 场景 功能需求 规格 / 接口 / 性能 访谈 深度挖掘 问卷 规模化收集 原型法 快速验证 组合策略 1. 访谈获取业务需求 2. 问卷摸底用户需求 3. 原型验证功能需求 4. 迭代反馈修正 关键原则: • 自上而下逐层细化 • 每层都要干系人确认 • 变更要追溯回业务层 • 避免跳过层级直接编码

你看这个图就清楚了:业务需求靠访谈深挖,用户需求用问卷广撒网,功能需求拿原型来验证。三层之间是逐层细化的关系,每一层都要有对应的干系人确认。

需求分析的常见陷阱

最后,分享几个我踩过的坑:

陷阱一:混淆用户需求和功能需求

用户说“我要一个报表”,你直接开始设计数据库表结构。错了。用户需求是“我要能看到每周的故障统计”,功能需求才是“系统按周聚合故障数据,生成PDF报表”。先搞清楚用户要什么,再想怎么实现。

陷阱二:只收集不验证

我曾经花了两周做问卷,回收了200份。结果一分析,发现题目有歧义,一半数据不能用。现在我的习惯是:收集完立刻找3-5个人做回访,确认我理解的对不对。

陷阱三:忽略非功能需求

嵌入式系统尤其要注意:功耗、实时性、可靠性、安全性。这些往往不会写在用户故事里,但漏掉一个就可能导致项目重做。我一般会在需求文档里单独列一节“质量属性”,跟功能需求同等对待。

需求分析没有捷径。但把三层结构理清楚,三种方法用到位,至少能保证你做正确的事。至于怎么把事做正确,那是后面架构设计的事。