Language agnostic 什么是功能分解?

Language agnostic 什么是功能分解?,language-agnostic,Language Agnostic,功能分解,它有什么用处?它的优点/缺点是什么?哪里有一些如何使用它的工作示例 功能分解是将复杂过程分解为更小、更简单的部分的过程 例如,考虑使用自动取款机。您可以将流程分解为: 走向自动取款机 插入你的银行卡 输入您的pin码 好吧,你明白了 你可以用同样的方法来编程。想想运行ATM的软件: 读卡代码 PIN验证 传输处理 每一个都可以进一步细分。一旦您了解了子系统中最分解的部分,您就可以考虑如何开始对这些部分进行编码。然后将这些小部分组合成更大的整体。查看这篇维基百科文章: 功能分解的好处是

功能分解,它有什么用处?它的优点/缺点是什么?哪里有一些如何使用它的工作示例

功能分解是将复杂过程分解为更小、更简单的部分的过程

例如,考虑使用自动取款机。您可以将流程分解为:

  • 走向自动取款机

  • 插入你的银行卡

  • 输入您的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)基本上是功能分解的文本表示。直接从FD进行编码对于过程语言来说可能还可以,但是对于面向对象的解决方案来说,它还不够好,因为它不能识别对象。两者都不适用于可用性规划和测试

    我的意见是,你应该花一些时间来创建一个FD,但不要用太多的时间。咨询每一位了解系统所遵循流程的人,以找到所需的所有功能


    我在软件设计、开发和销售方面有很多经验,我使用功能分解作为开发的第一步。我把它作为合同的基础,这样客户就知道他们将得到什么,我也知道我必须提供什么。

    我问了,因为还没有答案,有人批评FD是一种设计方法,它在哪里说,除非它在Google上的点击率很低,否则不应该就此提出任何问题?我想补充一点,它不仅用于将流程分解为f