Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

需求与边界

复习

  • 从算法到软件:软件要长期使用与维护
  • 抽象:加一层,把复杂藏起来
  • 输入与输出:程序处理数据并给出结果

TL;DR

  • 需求是“要解决什么问题”
  • 边界是“明确不解决什么”
  • 说不清边界,就容易做不完、做错方向
  • 先弄清需求,再动手

正文

  做软件的第一步,不是写代码,而是搞清楚要做什么。这听起来是废话,却是最多项目栽跟头的地方。

需求:到底要解决什么

  需求(requirement)描述的是:用户真正想要解决的问题,以及希望达到的效果。

  这和算法题很不一样。算法题里,输入、输出、规则都被出题人规定好了;而真实的软件里,用户往往只说一句“我想要个方便记账的东西”——细节全是模糊的。把模糊的期望,变成清晰、可实现的目标,就是需求分析。

边界:明确不做什么

  比“要做什么”更容易被忽略的,是“不做什么”。

  任何一个软件都不可能承担无限多的功能。如果不划清边界(scope),就很容易陷入一种困境:

  • 功能越加越多,永远做不完
  • 中途发现方向不对,返工代价巨大
  • 该做的没做,不该做的却花了大功夫

  所以,明确“本次不做 X”,和明确“要做 Y”同样重要。 边界不是偷懒,而是把有限的精力集中在真正重要的目标上。

说不清的代价

  需求不清、边界不明,会带来一连串问题:

  • 你以为要做 A,用户以为要做 B,最后谁都不满意
  • 做着做着发现漏了关键前提,推倒重来
  • 无法判断“什么时候算做完了”

  “解决问题,先从理解问题开始。” 这也是整个指南反复强调的一句话——在写第一行代码之前,先花时间把问题想清楚,往往能省下后面成倍的返工。

思考题 1

  为什么“明确不做什么”和“明确做什么”同样重要?

思考题 2

  需求没弄清就动手,可能带来什么后果?

小结

知识点

  • 需求是用户真正要解决的问题与目标
  • 边界明确本次要做什么、不做什么
  • 需求模糊、边界不清会导致返工与失控
  • 动手前先把问题想清楚

参考资料

  1. Wikipedia(zh):需求分析:明确并整理用户的需求
  2. Wikipedia(zh):范围 (项目管理):项目要完成与不完成的内容

思考题答案(仅供参考)

思考题 1

  因为资源与时间都有限。若不划清“不做什么”,功能会无限膨胀,导致做不完、方向失控;明确边界才能把精力集中在真正重要的目标上,也才能判断“何时算完成”。

思考题 2

  可能出现做出来的不是用户想要的、漏掉关键前提而返工、或者无法判断何时完成等问题。理解错了问题,越努力反而错得越远,返工的代价也更大。

协议

  本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

封面图

设计师 | 南国微雪