理解非常大的C ++应用程序的最常用方法是什么?

时间:2009-09-15 15:36:47

标签: c++ project-management

当一个新的C ++项目传递给你时,通过它并熟悉整个代码库的标准方法是什么?你刚开始在顶级文件开始阅读所有x-100文件?您是否使用工具为您生成信息?如果是这样,哪个工具?

19 个答案:

答案 0 :(得分:12)

我使用变更请求/错误报告来指导我学习一些新项目。尝试一次性消耗全部内容对我来说绝对没有意义。变更单或错误报告为我提供了指导,可以专注于系统的这一个卷须,通过代码跟踪它的活动。

在合理数量之后,我可以很好地理解项目的基本原理。

答案 1 :(得分:10)

这是我的一般过程:

  • 首先了解应用程序的功能以及使用方式。 (我看到有太多开发人员完全跳过这一关键步骤。)
  • 搜索与项目相关的任何开发人员文档。 (但是,意识到这几乎总是错误的并且已经过时 - 它只会提供有用的线索。)
  • 尝试弄清楚组织中的逻辑。主体系结构是如何定义的?使用了什么样的大规模模式? (即:MVC,MVP,IoC等)
  • 尝试找出与项目中“大”对象相关的主要类。这有助于上述观点。
  • 在您尝试维护项目时,慢慢开始重构和清理。
通常,这会让我至少有点速度。然而,通常我最终给出了这样的项目,因为必须修复或增强某些东西,并且时间并不总是现实的,在这种情况下,我经常只需要跳进去祈祷。

答案 2 :(得分:8)

  • 开始研究它,也许是 添加一个小功能。
  • 在调试器中逐步启动应用程序。

答案 3 :(得分:8)

您可以尝试通过doxygen运行它,最后给出一组可浏览的文档 - 但基本上唯一的方法是调试器,一些trace / std :: cerr消息和大量咖啡。

编写测试用例的建议是Working-Effectively-Legacy-code的基础和cppunit测试库的要点。如果你可以采取这种方法取决于你的团队和你的设置 - 如果你是新的初级,你不能真正重写应用程序以支持测试。

答案 4 :(得分:4)

尝试为各种类编写单元测试。

答案 5 :(得分:3)

我知道有一个可以帮助您的工具,它目前处于测试阶段,名为CppDepend,可以帮助您了解类和解决方案中项目之间的关系。

除此之外,您可以通过阅读来尝试理解代码:

  • 从标题(.h / .hpp)文件开始,阅读它们有助于理解类之间的“接口”
  • 如果解决方案有多个项目,请尝试了解每个项目的责任。
  • 找一个熟悉项目的人可以给你和概述,5分钟与合适的人一起使用调试器可以节省一个小时

答案 6 :(得分:3)

了解代码的使用方式通常非常有用。

如果这是一个库,请查看客户端代码和单元测试。如果没有任何单元测试,请写一些。

如果这是一个应用程序,请详细了解它的工作原理。再读一读&写单元测试。

基本上,它都是关于接口的。了解接口,您将大大了解代码的工作原理。通过界面,我的意思是,如果它是一个库的API,如果它是图形应用程序的UI,入站和放大器的内容;出站消息,如果它是服务器。

答案 7 :(得分:1)

首先有多大?

我不认为你可以在不知道场景的另一半的情况下回答这个问题。更改代码的要求是什么?

您是否只是在出错时支持/修复它?开发新功能?将代码移植到新平台?升级新C ++编译器的代码?

根据您的要求,我会以不同的方式开始。

答案 8 :(得分:1)

以下是我解决问题的方法

  • 首先修复容易出错的错误。对这些错误采取极端的措辞,并大量使用调试程序来发现问题
  • 代码审查进入系统的每个更改。在一个令人难以置信的大型系统上,选择一个较小的子集并查看所有这些变化
  • 最重要的是:提出很多问题!

答案 9 :(得分:1)

尝试使用Doxygen或类似的东西生成文档(如果尚未完成) 浏览API并查看是否有一些不清楚的内容并查看代码,如果您仍然没有得到它,请询问之前已经处理过它的开发人员。
始终要检查你必须要做的事情 如果您没有任何UML文档,请查看它们:

  1. 捣乱从事这项工作的开发人员。很遗憾他们没有像UML类图那样做基本的东西。
  2. 尝试从代码中生成它们。它们不准确,但它们会给你一个良好的开端。
  3. 如果有某些特定的东西你不理解或认为是错的,请问开发它的团队。他们可能会更清楚。

答案 10 :(得分:1)

要做的事情:

  • 看一下销售手册告诉你的内容,设定你期望的范围
  • 安装它,您在安装程序中有哪些选项,请阅读快速入门/安装指南
  • 找出它的作用,甚至执行,你有多个可执行文件
  • 是否有开发者设置指南/ wiki,指向VCS的指南
  • 获取代码并使您的构建环境工作,记录SDK,构建您需要的工具(如果还没有)
  • 查看构建过程,项目依赖性,是否有构建机器/ CI服务
  • 查看生成的doc输出(如果有的话!)
  • 找一个有趣的解决方案,看看它是如何工作的,入门点是什么/它如何工作/寻找主类和接口
  • 复制错误,停止程序中的有趣功能以获得概述并深入研究跟踪代码。
  • 开始修复问题,但要确保通过适当的单元测试来修复问题,以显示它现在已被破坏以及何时修复。

答案 11 :(得分:1)

我一直在整合一些中型项目的源代码。我从这个过程中学到的最重要的一课是在进入源代码之前,你必须确定你最感兴趣的源代码部分。然后,您应该通过查看日志/警告消息或查看类/函数名称来进入该片段。在理解源代码时,您应该在调试器中运行它或插入您自己的警告消息。总之,你应该专注于你感兴趣的事情。你想要的最后一件事是阅读所有的源代码。

答案 12 :(得分:0)

修复错误适用于任何项目,而不仅仅是c ++。

答案 13 :(得分:0)

我不确定是否有标准方法。有一些付费工具可以执行C ++类图/调用图并提供某种代码级视图。 doxygen是一个很好的免费的。我的低技术方法是找到顶级文件并开始对其提供的内容进行分类以及如何在需要时记笔记。

答案 14 :(得分:0)

如前所述,抓住doxygen并为源代码构建HTML文档。

如果代码设计得很好,你会很容易看到一个漂亮的类层次结构,清晰的调用图以及许多其他需要花费很长时间才能发现的东西。当某些部件行为不清楚时,请查看单元测试或编写自己的部件。

但是,如果结构看起来扁平或混乱,或两者兼而有之,那么您可能会遇到某种麻烦。

答案 15 :(得分:0)

阅读文档。如果可能,请与前维护者联系。然后,查看第一次提交的代码库和VCS的第一个版本,并花一些时间查看它们。不要完全理解,只是略读并了解哪些是主要组件以及它们的作用。然后阅读每个主要版本的更改日志和发行说明。然后开始打破一切,看看是什么打破了什么。做一些bug修复。查看测试套件并了解每个测试关注的组件。添加一些测试。在调试器中逐步执行代码。重复。

答案 16 :(得分:0)

请一位熟悉代码库的人概述开发过程中使用的基本概念。

他不需要解释每个细节,但应该大致了解软件如何工作以及各个模块如何相互连接。 另外,我过去发现有用的是在开始考虑代码之前首先设置一个有效的开发环境。

答案 17 :(得分:0)

使用Total Commander在文件层次结构中浏览,尝试概述结构。尝试识别主头文件的位置。还可以找到main()函数所在的文件。

答案 18 :(得分:-2)

在C ++中,最常见的问题是在低级别任务上浪费了大量精力和时间,例如“内存管理”。

托管语言中没有脑子的东西在C ++中很难实现。