【问题标题】:Are there any code analysis tools that will make my job easier? [closed]是否有任何代码分析工具可以让我的工作更轻松? [关闭]
【发布时间】:2010-08-27 02:14:16
【问题描述】:

我最近从一个刚刚退休的人那里继承了一个用托管 C++ 编写的程序。在花了一些时间挖掘它之后,我可以诚实地说至少 95% 属于thedailywtf。但是,我现在的任务是修改它并将其移植到我熟悉的语言中。

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

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

我将把它移植到 Java 上。

【问题讨论】:

    标签: java c++ managed-c++


    【解决方案1】:

    我需要想出一种测试方法 我的代码以确保它出现 与前面的代码相同的答案。

    单元测试

    由于您提到它是关于一个程序,该程序接受文件中的参数并输出报告,您可以生成一些输入,以提供足够的覆盖率到您想要针对旧代码的输出。

    如果出现问题,别忘了你也有可能在旧代码中发现错误。

    http://www.junit.org/

    渐进式端口

    我会逐个移植它,我觉得它会适合您的问题,因为在报告中您可以获取特定字段并忽略您尚未移植的那些(假设输出一个字段/计算您不需要移植整个程序)并根据旧代码中的正确值(或其他正确来源,以防旧代码中存在错误)进行验证。

    【讨论】:

    • 是的,我很了解单元测试,我会做很多单元测试,我希望除此之外还有一些东西可以执行代码的逻辑分析并确定它们是否等效.我知道一个事实,因为我还不是 100% 熟悉这个系统,所以有一些特质正等着咬我。
    • 我不熟悉 Managed C++(以及扩展它的相关工具),我认为您想要分析的是旧代码以理解它并获得更大图片。至于后半部分,就穿超厚的裤子,几乎是写端口的要求;)
    • 这不是真正令人头疼的测试,而是代码的编写方式。例如,大多数前端 + 字符串检查发生在一个 10000 行长的头文件中……他在其中逐个字符地检查字符串。仅他的时间/日期检查器(他不使用任何库方法,他甚至有自己的愚蠢的 atan 函数)大约有 200 行。
    【解决方案2】:

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

    至于自动代码分析工具,最有可能在这方面为您提供帮助的是数据流分析工具,它可以假设数据流从文件到变量并输出到报告的建模。不幸的是,对我来说,几周前对此类工具的搜索导致失败。您可能希望在某些地方使用手绘的 DFD,以确保您不会被某些东西绊倒。 Graphviz 可以在这方面提供帮助。

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

    编辑:我忘记了某个类别的工具可以提供帮助的部分 - 这些是 Java 世界中的代码切片工具,我必须承认我没有使用过他们到目前为止。以下列表可能会有所帮助:

    【讨论】:

    • 很遗憾听到您的搜索也失败了
    • @yx,您可能想查看更新后的答案。我不得不稍微回忆一下。
    【解决方案3】:

    前段时间我问了一个有点相关的问题,这让我想到了一种可能的方法: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】:

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

      您不能先使用 C++ 到 Java 转换器吗(通过 Google 的快速搜索让我找到了一款声称能够以非常合理的价格做到这一点的产品,如果它确实有效C++ to Java Converter)。

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

      【讨论】:

      • 哈哈哈,您提供的链接中的演示程序在进入第一个 .cpp 文件的过程中崩溃了大约 20%,至少看着它崩溃很有趣:D
      • 哦,好吧,我想这值得一试 :) 如果那里有任何好的 C++ 到 Java 生成器,也许其他人知道,这仍然不是一个坏主意。
      猜你喜欢
      • 2015-06-10
      • 2010-12-06
      • 2010-12-08
      • 2011-02-21
      • 1970-01-01
      • 2011-01-28
      • 2012-06-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多