Language agnostic 什么是功能分解?
功能分解,它有什么用处?它的优点/缺点是什么?哪里有一些如何使用它的工作示例 功能分解是将复杂过程分解为更小、更简单的部分的过程 例如,考虑使用自动取款机。您可以将流程分解为:Language agnostic 什么是功能分解?,language-agnostic,Language Agnostic,功能分解,它有什么用处?它的优点/缺点是什么?哪里有一些如何使用它的工作示例 功能分解是将复杂过程分解为更小、更简单的部分的过程 例如,考虑使用自动取款机。您可以将流程分解为: 走向自动取款机 插入你的银行卡 输入您的pin码 好吧,你明白了 你可以用同样的方法来编程。想想运行ATM的软件: 读卡代码 PIN验证 传输处理 每一个都可以进一步细分。一旦您了解了子系统中最分解的部分,您就可以考虑如何开始对这些部分进行编码。然后将这些小部分组合成更大的整体。查看这篇维基百科文章: 功能分解的好处是
就个人而言,我认为花这么多时间是值得的。这里有一个例子:您的C编译器 首先是预处理器:它处理
\include
和\define
以及所有宏。给它一个文件名和一些选项,它会返回一个很长的字符串。让我们调用这个函数预处理(文件名)
然后是词法分析器。它获取一个字符串并将其拆分为标记。称它为lex(string)。解析器获取令牌并将其转换为一棵树,称之为parse(令牌)
。然后有一个将树转换为块的DAG的函数,称之为DAG(tree)
。调用代码发射器emit(dag)
,它获取一个dag的块并输出汇编程序
然后,编译器将:
emit(dag(parse(lex(preprocess(filename)))));
我们已经将一个大的、难以理解的函数(编译函数)分解为一组更小、更容易理解的函数。您不必将其作为管道,您可以将程序编写为:
process_data(parse_input(), parse_config())
这是比较典型的,;编译器是相当深入的程序,相比之下,大多数程序都比较广泛。功能分解是一种根据需要执行的任务而不是数据关系将复杂问题分解为简单问题的方法。该术语通常与较旧的面向过程的设计相关联
这与工作分解结构(WBS)、思维导图和自上而下的开发是一样的——基本上将一个大问题分解为更小、更容易理解的子部分 专业人士
- 允许采用主动式编程方法(重新调整编写代码的冲动)
- 帮助识别项目的复杂和/或风险区域(在ATM示例中,安全性可能是更复杂的组件)
- 帮助确定项目的所有组成部分-项目/代码失败的第一个原因(通过Capers-Jones)是缺少部分-直到项目后期才想到的事情(哎呀,我没有意识到我必须在分发美元之前检查此人的余额)
- 允许对组件进行解耦,以便更好地编程、共享代码和分配工作
- 不够详细或不够详细-每个人都需要确定所需的详细程度,以便在不过度使用组件的情况下为他们提供对组件的洞察(不要分解为编程代码行…)
- 不考虑使用预先存在的模式/代码模块(返工)
- 不与客户一起审查以确保范围正确
- 在实际编码时不使用细分(比如设计房子,而不是忘记计划,只是开始把一些木板钉在一起)
我在软件设计、开发和销售方面有很多经验,我使用功能分解作为开发的第一步。我把它作为合同的基础,这样客户就知道他们将得到什么,我也知道我必须提供什么。我问了,因为还没有答案,有人批评FD是一种设计方法,它在哪里说,除非它在Google上的点击率很低,否则不应该就此提出任何问题?我想补充一点,它不仅用于将流程分解为f