RJF*_*ner 73 legacy legacy-code codebase
加入已经存在大型代码库的现有团队可能会令人生畏.什么是最好的方法;
我正在研究目前大约20k行的C++应用程序和库(编辑:在宏观方案中很小!).在工业界,我想你会得到一位经验丰富的程序员的介绍.但是,如果不是这种情况,您可以做些什么来尽快开始增值?
-
答案摘要:
这篇文章是一个部分重复的 - 最好的方式 - 熟悉自己与继承的代码库
Bri*_*ndy 24
如果可能的话,从一些小任务开始,围绕您的问题调试代码.在调试模式中单步执行代码是了解某些工作原理的最简单方法.
小智 17
另一种选择是为您感兴趣的功能编写测试.设置测试工具是确定系统具有哪些依赖关系及其状态所在位置的好方法.每个测试都以关于您认为系统应该工作的方式的断言开始.如果事实证明是这样的话,那么你已经取得了一些成就,并且你已经有了一些工作示例代码来重现它.如果它不能以这种方式工作,那么你就有一个难题需要解决,并且需要进行一系列的调查.
小智 10
我通常向尚未提及的人建议的一件事是,在成为开发人员之前,成为现有代码库的合格用户非常重要.当新的开发人员进入我们的大型软件项目时,我建议他们在尝试使用代码之前花时间成为专家用户.
也许这是显而易见的,但我看到很多人试图过快地跳入代码,因为他们渴望开始取得进展.
这完全取决于你是什么样的学习者和什么样的程序员,但是:
配对严格轮换.
如果可能的话,在浏览文档/代码库时,尝试使用严格轮换的配对.意思是,你们两个坐在一起一段固定的时间(比如说,一个2小时的会话),然后你切换对,一个人将继续处理该任务,而另一个人与另一个伙伴一起转移到另一个任务.
成对的你将获得一些知识,然后可以在轮换发生时将其提供给团队的其他成员.同样有益的是,当一对新人聚集在一起时,从事该任务的人(在这种情况下,调查代码)可以以更容易理解的方式总结和解释这些概念.随着时间的推移,每个人都应该处于相似的理解水平,并希望避免"哦,只有约翰知道那段代码"综合症.
从我可以告诉你的情况来看,你有一个很好的数字(3对),但是,如果你被分发,或者没有工作到相同的时间表,它是不可能的.
小智 5
我同意这完全取决于您是哪种类型的学习者。话虽如此,我曾在两家拥有非常大的代码库的公司工作过。通常,我是这样工作的:
如果可能,在查看任何功能代码之前,我会检查已经编写的单元测试。这些通常可以提供很多帮助。如果它们不可用,那么我会执行以下操作。
首先,我在很大程度上忽略了实现,只看头文件,或者只看类接口。我试图了解每个课程的目的是什么。其次,我从最重要的领域开始深入实施。这很难衡量,所以有时我只是从顶部开始,然后在文件列表中向下工作。我称之为广度优先学习。在这个初始步骤之后,我通常会深入了解其余的代码。最初的广度优先查看有助于巩固/修复我从界面级别获得的任何想法,然后深度查看向我展示了用于实现系统的模式,以及不同的设计理念。深度优先,我的意思是你基本上使用调试器单步执行程序,单步执行每个函数以查看它是如何工作的,等等。对于真正的大型系统,这显然是不可能的,但是 20k LOC 并没有那么多。:)