什么是功能分解?

Rob*_*Kam 37 language-agnostic

功能分解,它有什么用处,有什么优点/缺点?哪些有关如何使用的实例?

Jus*_*ner 62

功能分解是指采用复杂过程并将其分解为更小,更简单的部分的过程.

例如,考虑使用ATM.您可以将流程分解为:

  1. 走到自动取款机

  2. 插入您的银行卡

  3. 输入您的图钉

嗯......你明白了.

您可以考虑以相同的方式编程.想想运行该ATM的软件:

  1. 读卡代码

  2. PIN验证

  3. 转移处理

其中每一个都可以进一步细分.一旦到达子系统中分解最多的部分,就可以考虑如何开始编写这些部分.然后,您将这些小部件组成更大的整体.看看这篇维基百科文章:

分解(编程)

功能分解的好处是,一旦开始编码,您就可以使用可以为您的应用程序使用的最简单的组件.因此,开发和测试这些组件变得更加容易(更不用说您能够更好地构建代码和项目以满足您的需求).

明显的缺点是时间投资.要在复杂系统上执行功能分解,在编码开始之前需要花费大量时间.

就个人而言,我认为这段时间非常值得.


mea*_*ade 6

它与WorkBreakDown Structures(WBS),mindMapping和自上而下的开发相同 - 基本上将大问题分解为更小,更易于理解的子部分.

优点

  • 允许主动编程方法(重新激活代码的冲动)
  • 有助于识别项目的复杂和/或风险区域(在ATM示例中,安全性可能是更复杂的组件)
  • 帮助识别项目的所有组成部分 - 项目/代码失败的第一个原因(通过Capers Jones)缺少部分 - 直到项目后期才想到的事情(哎呀,我没有意识到我必须检查人的平衡在分发$)之前
  • 允许组件分离,以便更好地编程,共享代码和分配工作

缺点 - 在进行分解时没有真正的CONS,但是有一些常见的错误

  • 没有足够的分解或分解到远 - 每个人都需要确定快乐的细节水平,以便为他们提供对组件的洞察力而不会过度使用它(不要分解为编程代码行......)
  • 不使用预先存在的模式/代码模块(返工)
  • 不与客户一起审查以确保范围正确
  • 实际编码时没有使用故障(比如设计房子而不是忘记计划,只是开始将一些电路板钉在一起)