scripting - 为跨程序的例程使用流程图或图表

标签 scripting refactoring flowchart

我有一组繁忙的例程来验证或下载当前的客户端应用程序。它以调用 .WSF 文件的 Windows 桌面快捷方式开始。这会调用几个 .VBS 文件、一个用于设置的 .INI 和一个可能的 .BAT 文件。其中一些脚本文档具有内部功能。最后阶段打开一个 Microsoft Access 数据库,该数据库需要一个 AutoExec 宏,该宏启动一些 VBA,包括一个在 VBA 中具有自己的加载例程的表单。

这些细节都不是特别重要(所以请不要添加 VBA 标签,或者批评我宝贵的复杂性)。关键是我有各种各样的工具和容器,它们可能在功能上是嵌套的。

我需要更好的技术来在流程图中解析它。目前,我依赖以下任何或所有内容:

  • 独特的颜色
  • 一个包含例程的大盒子
  • 经典的“控制权转移”符号
  • 也许是一个解释性的标注

  • 我不应该增加我的流程图词汇吗?教程解释了正方形、菱形、圆形,仅此而已。 FC肯定能帮我处理这类事情:
  • 过多的脚本类型让我可以回答不同的需求,我想指出工具/语言。
  • 子例程可能会导致整个任务的中止或错误,我想展示更高级别的“封闭”例程(或后果)对此的处理。
  • 我想将“内部”子例程与不同脚本文件中的子例程区分开来。
  • 并发脚本处理可能变得至关重要,所以我想指出这一点。
  • .INI 文件让我可以为所有例程提供持久值。那是怎么上图的?
  • 一个函数可能有一个参数和一个返回值/引用......我什至不知道如何有效地引用它。

  • 请提供指导或将我指向一个额外有用的资源。如果你推荐一个分析工具集(比如 UML,我还没有掌握它的窍门),也请告诉我在哪里可以找到一个好的介绍。

    我对软件不感兴趣。请将此视为白板练习。

    最佳答案

    对该问题的讨论表明流程图没有用或不准确。

    准确性取决于流程图的构建方式。如果它们是手动构建的,它们就像任何其他手动构建的文档一样,几乎会立即过时;这使得手工构建的流程图真的毫无用处,这就是为什么人们倾向于喜欢看代码的原因。

    [此响应的其余部分违反了“对软件不感兴趣(生成流程图)”的 OP 要求,因为我认为这是使它们以某种有用的形式出现的唯一方法。]

    如果流程图是通过适当的语言精确分析工具从代码中导出的,它们将是准确的。请参阅 http://www.semanticdesigns.com/Products/DMS/FlowAnalysis.html 中的示例这些示例在语义上是精确的,尽管那里的页面没有提供确切的语义,但这只是一个文档细节。

    很难找到这样的工具 :-} 特别是如果您想要跨越多种语言和多个“执行范例”的流程图(OP 希望包括他的 INI 文件;它们是某种隐含的赋值语句,我很确定他'想要对没有有用流程图的 SQL 操作进行建模,因为它们往往是对表的纯计算)。

    还不清楚这样的流程图是否有用。我提供的页面上的例子应该是半说服力的;如果您考虑到所有微观细节(例如,从每个子例程调用发出的 ABORT 控制流弧的可能性 [因为每个调用都可能引发异常]),这些图会变得非常大、非常快。图表占用空间(方框、菱形、线条、大量空白)这一事实使这种情况更加严重。一旦它们变大,你就会在弧线之后迷失在空间中。同样,这是人们避免整个系统流程图的一个很好的理由。 (人们喜欢文本语言的另一个原因是它们实际上非常密集;您可以在具有简洁语言的页面上获得很多信息,然后等着看 APL :)

    如果函数具有复杂的逻辑,它们可能对单个函数有边际帮助。

    我认为您不太可能获得能够为您想要的所有语言生成流程图的语言精确分析器,这样的分析器可以很好地编写他们的流程图(您希望 JavaScript 调用 C# 运行 SQL ...?)

    您可能希望的是一个折中的解决方案:显示带有指向其他工件的各种超链接的代码。您仍然需要生成此类超链接代码的能力(请参阅 http://www.semanticdesigns.com/Products/Formatters/JavaBrowser.html 了解可能的一种方式),但您还需要跨语言边界的超链接。

    我知道目前没有工具可以做到这一点。而且我怀疑您是否有兴趣或意志力自行构建此类工具。

    关于scripting - 为跨程序的例程使用流程图或图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6112569/

    相关文章:

    linux - 使用 AWK 在 n 个匹配项之后和 m 个匹配项之前查找并替换

    java - 如何将测试代码与生产代码一起重构?

    jquery - 流程图在HTML/CSS中的定位?

    sql - 你如何阅读 sqlite3 图表/流程图?

    linux - 我如何使用 linux free 命令(free | grep mem | awk '{print $4/$2 * 100.0}')向我的脚本添加时间戳

    python - lldb python处理断点命中

    linux - sed 用变量中的文本替换文本

    ruby - 生成一系列字符

    c++ - 这对于用循环重构来说太具体了吗?

    c - 有什么办法可以在不增加变量的情况下解决这个数学问题吗?