【问题标题】:How to analyze an open source code without (or with not enough) documentation? [closed]如何在没有(或没有足够)文档的情况下分析开源代码? [关闭]
【发布时间】:2010-01-26 13:19:50
【问题描述】:

我有一个开源代码,大约 15 mb。我想了解那里使用的主要算法。 我开始分析该代码的每一部分,但我认为这需要很多时间。有什么方法可以使过程更容易吗?我以前没有这样做过,所以这是我的第一次体验。

这个,可能有人知道:https://launchpad.net/cuneiform-linux

【问题讨论】:

  • 什么语言?有一些语言的文档生成工具。
  • 它是用С++编写的。但是他们使用一些特制的cmets,不是吗?
  • 我的意思是源代码必须有一些特殊的cmets
  • 否 - Doxygen 将在没有特殊 cmets 的情况下工作。

标签: open-source code-analysis


【解决方案1】:

使用Doxygen。它创建了一个易于浏览的 HTML 代码库的交叉引用。它还可以创建依赖/类图(如果代码是OOP)。

代码不需要具有特殊格式的 cmets。尽管它确实有帮助,但 Doxygen 足够聪明,可以自行解析代码并找出问题所在。我最喜欢的是能够单击任何函数名、变量、类等,然后立即跳转到声明、定义和显示所有使用它的位置的列表。我过去使用 Doxygen 来研究一些相当大的代码库(例如 PHP 源代码),它为我节省了很多时间。

您还可以设置 Eclipse CDT 并将所有源文件导入一个项目并获得类似的代码浏览器。虽然,在这种情况下,函数/类索引等一些东西不可用。

【讨论】:

    【解决方案2】:

    由于它是 C++ 代码,您可能会发现 Source Navigator 很有用。

    【讨论】:

    • +1 SourceNav 将帮助您在代码中轻松导航,并使源代码不同部分之间的关​​系更加明显!
    【解决方案3】:

    边走边写,添加到文档中。运气好的话,会有更多的人在做同样的事情,在你们之间,你们将把文档的水平提高到所需的水平。这就是开源的意义所在。

    【讨论】:

    • 太好了!好主意,谢谢!
    • 我加入了这个项目,并向他们提出要一起制作一些文档。希望他们回应!
    【解决方案4】:

    分析代码将向您展示哪些例程很重要。按调用次数查看前 5% 和后 5%。

    【讨论】:

    • 是的,就像看到 main() 被调用一次和 std::string 构造函数一百万次会帮助任何人;)
    • 重要的是hash_password()和draw_form()。
    • 我建议按执行时间对它们进行排名。丢弃任何明显的时间槽(构造函数、网络 I/O),其余的应该是最重要的例程。不幸的是,这对于精心设计的 OOP 代码来说效果不如在结构化设计时代那样好......
    【解决方案5】:

    在您的问题中添加指向开源项目的链接 :-)

    也许其他人知道或知道替代方案。

    【讨论】:

      【解决方案6】:

      我要做的第一件事是弄清楚主要入口点是什么。大多数程序都有相当标准的格式:首先,输入检查(确保输入的数量和类型正确)。其次,预处理/准备(打开文件、分配缓冲区、初始化数据结构)。第三,他们做他们做的任何事情,主要的处理程序。之后,通常是输出和清理。当然,这些可能是混合的(输入检查可能涉及打开输入文件),可能很可怕;就像一个例程 fileAccessible(char *fileName) 打开文件,剥离标题,实例化解析器并通过读取第一个符号并将其放入扫描仪表来初始化词法分析器。值得庆幸的是,大多数开源项目并没有那么混乱,但你必须为任何事情做好准备。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-15
        • 2018-01-09
        • 1970-01-01
        • 1970-01-01
        • 2015-03-15
        • 1970-01-01
        • 2016-04-29
        • 2018-09-03
        相关资源
        最近更新 更多