代码之家  ›  专栏  ›  技术社区  ›  z -

是否有任何代码分析工具可以使我的工作更容易?[关闭]

  •  8
  • z -  · 技术社区  · 15 年前

    最近我从一个刚刚退休的家伙那里继承了一个用C++编写的程序。经过一段时间的挖掘,我可以坦诚地说,其中至少95%属于 thedailywtf . 然而,我现在的任务是修改它,并将其移植到我所熟悉的语言中。

    程序本身接收从一个文件中读入的许多参数(50以上),并执行一系列计算并输出一个报告。一旦我完成了对3个字母变量(其中许多变量完全不相关)页面的搜索,我需要想出一种方法来测试我的代码,以确保它能得到与前一个代码相同的答案。

    这很可能是一厢情愿的想法,但是有没有任何自动化的代码分析工具可以以任何方式或形式帮助我完成这项任务?

    我会把它移植到Java。

    4 回复  |  直到 14 年前
        1
  •  2
  •   bakkal    15 年前

    我需要想出一个方法来测试 我的代码来确保它 与前一个代码的答案相同。

    单元测试

    既然您提到了它是关于一个程序,它接受文件中的参数并输出一个报告,那么您可以 生成一些能提供足够覆盖的输入 到要对旧代码的输出进行单元测试的部分。

    如果发生故障,不要忘记,也有可能在旧代码中发现了错误。

    http://www.junit.org/

    渐进式港口

    我会一块一块地移植它,我觉得它会适合你的问题,因为在一份报告中,你可以抓取特定的字段,忽略那些你还没有移植的字段(假设输出一个字段/计算,你不需要移植整个程序),并根据旧代码(或CA中的其他正确源)的正确值来验证它。旧代码中的错误)。

        2
  •  2
  •   Vineet Reynolds    15 年前

    我认为您应该开始编写测试,以确保移植的代码不会破坏现有报表的任何行为。

    至于自动化代码分析工具,在这方面最有可能帮助您的是数据流分析工具,它可以假设将文件中的数据流建模为变量并输出到报表中。不幸的是,对我来说,对这些工具的搜索导致了几周前的一次失败。你可能想在一些地方手绘DFD,只是为了确保你不会绊倒什么东西。 Graphviz 在这方面有帮助。

    它可能有助于将功能复制到Java(我知道这听起来很不正常),但是您可以在PMD、FunBug和Java中类似的代码质量保证工具的监视下仔细重构代码。

    编辑: 我忘记了在某个类别的工具中可以帮助的部分——这些是Java世界中的代码切片工具,我必须承认,到目前为止我还没有使用它们。这是一个可能有帮助的列表:

        3
  •  1
  •   Community CDub    8 年前

    一段时间前我问了一个有点关联的问题,这让我想到了一个可能的方法: Is there a Findbugs and / or PMD equivalent for C/C++?

    我想到的是,如果这段代码如此简陋,那么花些时间尝试在适当的地方修复/重构它可能是个好主意。显然,如果你转向Java,很难说服自己花时间去改进具有短寿命的C++代码。也就是说,如果您用改进的代码替换一些明显愚蠢的部分,那么在您试图说服自己新代码在功能上等同于旧代码时,它可能会更短、更紧凑、更明显地正确,并且更易于移植和分析。

    在回答我的问题时,最有用的工具是 Splint Cppcheck .

    一段时间前,还有一个更广泛的问题提出,可能有助于提出相关的想法: What open source C++ static analysis tools are available?

        4
  •  0
  •   Fredrick Pennachi    15 年前

    免责声明:我以前从未做过这样的事。

    你不能先使用一个C++到Java转换器吗?(一个快速的谷歌搜索把我引向一个产品,声称它能够以非常合理的价格做到这一点,如果它真的工作了。 C++ to Java Converter )

    然后,创建单元测试并开始重构。