当一个新的C ++项目传递给你时,通过它并熟悉整个代码库的标准方法是什么?你刚开始在顶级文件开始阅读所有x-100文件?您是否使用工具为您生成信息?如果是这样,哪个工具?
答案 0 :(得分:12)
我使用变更请求/错误报告来指导我学习一些新项目。尝试一次性消耗全部内容对我来说绝对没有意义。变更单或错误报告为我提供了指导,可以专注于系统的这一个卷须,通过代码跟踪它的活动。
在合理数量之后,我可以很好地理解项目的基本原理。
答案 1 :(得分:10)
这是我的一般过程:
答案 2 :(得分:8)
答案 3 :(得分:8)
您可以尝试通过doxygen运行它,最后给出一组可浏览的文档 - 但基本上唯一的方法是调试器,一些trace / std :: cerr消息和大量咖啡。
编写测试用例的建议是Working-Effectively-Legacy-code的基础和cppunit测试库的要点。如果你可以采取这种方法取决于你的团队和你的设置 - 如果你是新的初级,你不能真正重写应用程序以支持测试。
答案 4 :(得分:4)
尝试为各种类编写单元测试。
答案 5 :(得分:3)
我知道有一个可以帮助您的工具,它目前处于测试阶段,名为CppDepend,可以帮助您了解类和解决方案中项目之间的关系。
除此之外,您可以通过阅读来尝试理解代码:
答案 6 :(得分:3)
了解代码的使用方式通常非常有用。
如果这是一个库,请查看客户端代码和单元测试。如果没有任何单元测试,请写一些。
如果这是一个应用程序,请详细了解它的工作原理。再读一读&写单元测试。
基本上,它都是关于接口的。了解接口,您将大大了解代码的工作原理。通过界面,我的意思是,如果它是一个库的API,如果它是图形应用程序的UI,入站和放大器的内容;出站消息,如果它是服务器。
答案 7 :(得分:1)
首先有多大?
我不认为你可以在不知道场景的另一半的情况下回答这个问题。更改代码的要求是什么?
您是否只是在出错时支持/修复它?开发新功能?将代码移植到新平台?升级新C ++编译器的代码?
根据您的要求,我会以不同的方式开始。
答案 8 :(得分:1)
以下是我解决问题的方法
答案 9 :(得分:1)
尝试使用Doxygen或类似的东西生成文档(如果尚未完成)
浏览API并查看是否有一些不清楚的内容并查看代码,如果您仍然没有得到它,请询问之前已经处理过它的开发人员。
始终要检查你必须要做的事情
如果您没有任何UML文档,请查看它们:
如果有某些特定的东西你不理解或认为是错的,请问开发它的团队。他们可能会更清楚。
答案 10 :(得分:1)
要做的事情:
答案 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 ++中很难实现。