标签: codebase

熟悉大型代码库的最佳方法是什么?

加入已经存在大型代码库的现有团队可能会令人生畏.什么是最好的方法;

  • 宽; 尝试从代码中全面了解所有内容如何链接在一起
  • 狭窄; 一次关注一小部分代码,了解它们如何完全工作
  • 选择一项功能,随着您的发展和学习
  • 尝试从类图和uml中获取洞察力(如果有的话)(并且是最新的)
  • 还有别的吗?

我正在研究目前大约20k行的C++应用程序和库(编辑:在宏观方案中很小!).在工业界,我想你会得到一位经验丰富的程序员的介绍.但是,如果不是这种情况,您可以做些什么来尽快开始增值?

-
答案摘要:

  • 在调试模式中逐步执行代码以查看其工作原理
  • 与比你更熟悉代码库的人配对,轮流成为编码人员和观看/讨论的人.在团队成员之间轮换合作伙伴,以便知识得到传播.
  • 写单元测试.首先断言您认为代码的工作方式.如果结果如你所愿,你可能已经理解了代码.如果没有,你有一个难题要解决,或者要进行调查.(谢谢Donal,这是一个很好的答案)
  • 以与上面类似的方式,通过现有的功能代码单元测试
  • 阅读UML,Doxygen生成的类图和其他文档,以获得对代码的广泛感受.
  • 进行小编辑或错误修复,然后逐步建立
  • 记下笔记,不要跳进去开始开发; 花时间理解比生成凌乱或不合适的代码更有价值.

这篇文章是一个部分重复的 - 最好的方式 - 熟悉自己与继承的代码库

legacy legacy-code codebase

73
推荐指数
7
解决办法
1万
查看次数

如何将Assembly.CodeBase转换为C#中的文件系统路径?

我有一个项目,将模板存储在\TemplatesDLL和EXE旁边的文件夹中.

我想在运行时确定这个文件路径,但使用的技术可以在单元测试和生产中使用(我不想在NUnit中禁用阴影复制!)

Assembly.Location 是不好的,因为它在NUnit下运行时返回阴影复制程序集的路径.

Environment.CommandLine 也是有限的用途,因为在NUnit等人它返回NUnit的路径,而不是我的项目.

Assembly.CodeBase 看起来很有希望,但它是一个UNC路径:

file:///D:/projects/MyApp/MyApp/bin/debug/MyApp.exe
Run Code Online (Sandbox Code Playgroud)

现在我可以使用字符串操作将其转换为本地文件系统路径,但我怀疑有一种更简洁的方法可以将它隐藏在.NET框架中.有人知道这样做的推荐方法吗?

(如果UNC路径不是file:///URL,则抛出异常在此上下文中绝对正常)

.net c# nunit codebase

60
推荐指数
3
解决办法
2万
查看次数

从相同的rails代码库运行多个站点?

我有一个客户想要把他们的Rails应用程序在一个利基中成功并将其应用到另一个类似的利基市场.这个应用程序的新实例将开始非常相似:所有相同的功能,不同的徽标和颜色.但是,如果新网站成功,则不可避免地需要进行大量自定义,而这些自定义不应该应用于原始网站.同时,如果修复了错误并对一个应用程序进行了改进,那么这两个应用程序应该能够共享这些改进.

任何人都可以提出解决此问题的策略或资源吗?如何保持适用于这两个应用的更改花费更长时间来测试和实施?

是的,我知道答案涉及SCM,插件,宝石和Rails引擎.这些工具将被使用.但我想知道何时以及如何使用这些工具来解决这个问题.

也欢迎链接.


这个问题与以下不一样:

多个网站在相同的代码库上运行? 在我的问题中,我没有使用不同的设置运行完全相同的应用程序.

如何在多个代码库之间同步更改?我问了一个类似的问题,但我特别询问Rails应用程序.

ruby-on-rails codebase

21
推荐指数
1
解决办法
4799
查看次数

理解一大堆未经证实的源代码?

我一直对葡萄酒感到惊讶.有时我想破解它,修复一些小东西并且通常理解它是如何工作的.所以,我下载了Wine源代码,之后我感到不堪重负.代码库是巨大的 - 与Linux内核不同 - 几乎没有关于代码的指南.

理解如此庞大的代码库的最佳实践是什么?

wine codebase

17
推荐指数
4
解决办法
6281
查看次数

混合两种或多种语言(如Java和C++)时组织源代码库

几天前,当我不得不将C++文件引入Java项目时,我遇到了一个问题.它首先需要测量Java进程的CPU使用率,并决定使用JNI来调用用C编写的本机库(Unix机器上的共享库).问题是找到一个合适的位置将C文件放入源存储库(顺便说一下Clearcase),它只包含Java文件.

我想到了几个选择:

(a)创建一个单独的目录,用于将C文件(特别是一个.h文件和一个.c文件)放在源代码库的顶部,如:

/ vobs/myproduct/javasrc/vobs/myproduct/cppsrc

我不喜欢这个,因为我只有两个C文件,在这样的语言级别拆分源代码库似乎很奇怪.如果项目的大部分内容在C++和Java中或多或少地写得相同,那么这可能没问题.

(b)将C文件放入使用它的Java包中.

我在/ vobs/myproduct/com/mycompany/myproduct/util /中调用了Java类,C文件也在那里.

我不喜欢这个,因为我认为C文件不属于Java包.

以前有人解决过这样的问题吗?通常,在组织混合两种或更多语言的代码库时,应该遵循什么样的策略?

更新:我没有任何计划在我的项目中使用任何C或C++,也许是一些Jython,但你永远不知道我的客户何时需要一个只能通过使用C解决的功能或者最好用C解决的功能.

polyglot codebase

12
推荐指数
1
解决办法
2283
查看次数

如何确定Eclipse变慢的原因?

我们有相当大的代码库(150多个项目,400,000多行Java代码,一些Groovy和Gradle代码,一些Perl代码,一些XML,许多JSP等).我设法在Spring Tools Studio 2.6中打开所有这些项目,我还为Groovy,Perl,Checkstyle,PMD添加了一些插件.

问题是Eclipse一直在忙着占用我的CPU.当我更新某些东西时它真的很慢,它正在缓慢地构建,任何类型的UI操作都会延迟发生.

此外,我有相当不错的机器64位,8GB的RAM,我运行64位版本的STS,我给Eclipse 2GBs(但它不会高出1GB的堆).

所以,我的第一个问题是有一种方法来确定是什么让它变慢?你们中的一些人是否成功地在一个工作区中使用如此庞大的代码库?

我已经尝试查看运行Eclipse的JVM的线程(使用jconsole),但我找不到任何有用的东西.

eclipse performance codebase

12
推荐指数
2
解决办法
6514
查看次数

更快地浏览大型Python代码库

作为程序员,我们阅读的内容比编写的要多.我开始在一家使用几个"大"Python软件包的公司工作; 具有较高KLOC的包裹或包裹系列.例证:Zope.

我的问题是我无法快速/轻松地浏览此代码库.我目前的策略是

  • 我开始阅读一个我需要改变/理解的模块
  • 我打了一个我需要了解更多的导入
  • 我通过在导入和回显模块之后放置Python调试(pdb)语句来找出导入的源代码的位置,这告诉我它的源文件
  • 我导航到它,在shell或Vim文件资源管理器中.
  • 大部分时间模块本身都会导入更多的模块,在我知道之前我已经"在我的盘子上"有10KLOC

或者:

  • 我看到了一个我需要了解更多的方法/类
  • 我在整个代码库中搜索(ack-grep)该方法/类的定义(这可能很痛苦,因为代码库部分在〜/ .buildout-eggs中)
  • 我找到一个或多个定义该方法/类的代码
  • 我必须推断出哪一个是我需要阅读的

这花费了大量时间,这对于大型代码库来说是可以理解的.但我觉得导航一个庞大而未知的Python代码库是一个常见的问题.

所以我正在为这个问题寻找技术工具或战略解决方案....

无法想象使用上述策略的硬核Python程序员.

python vim codebase

12
推荐指数
2
解决办法
6082
查看次数

您如何熟悉没有文档的代码库?

我不知道,我被告知以前的开发人员在接收和直接编码时没有遇到任何重大问题.我想知道我是否做错了,要求我的经理在这里与一些高级程序员进行一些简短的会谈.是否更加小心谨慎并完成这个时间敏感的追踪器,或者在截止日期前赶紧吃肉?

在旁注中,维护这个应用程序的以前的程序员在公司工作不到一年之后就已经消失了.不知道是否有任何关系.

maintenance codebase

11
推荐指数
2
解决办法
1086
查看次数

用于历史目的的注释代码的替代方案

有没有人有一个有效的替代方案,使用已注册的代码进入存储库以查找可查找性?

我问的原因是因为我最近与一位开发人员讨论过检查注释掉的代码.我的立场是,注释掉的代码永远不应该被检查到我们的VCS中,因为它在技术上不是代码库的一部分,因此令人烦恼的事情并不值得它占用的字节,可以这么说.

他的反对意见是,他检查过的一些注释掉的代码仍然说明了他希望将来修复的一些工作(在这一特定点上,评论发生在2年前,但除了这一点之外).他希望将它保留在代码库中,以便他可以轻松找到它,即使它目前无法编译,它仍然在全局范围内显示解决它的正确方法.

最后,他同意了,注释掉的代码不属于.但是当我们想到他可能的替代品时,我们的确很短.

我能想到的唯一选择是:

  • 维基:只需将其粘贴到维基上.这样做的缺点是它会与其他非代码相关的wiki内容混在一起,这可能会使搜索很难.
  • 索引所有VCS版本:这对我来说很大程度上是理论上的,但有哪些系统可以使代码库及其整个历史记录可搜索?

有没有人知道/使用任何替代品?我的两个选项听起来都比实际值得多,但这可能会因我的推理而倾斜,因为无论如何注释掉代码都是毫无价值的.我讨厌必须去"嘿,如果你现在没有时间来解决这个问题并不重要,无论如何都要留在代码库中"路线(但如果没有可行的替代方案,我会这么做).

对不起这个可怕的头衔,我无法想出一个更好的头衔

version-control comments codebase

11
推荐指数
1
解决办法
215
查看次数

在 React JS 应用程序中使用 Flutter Web 小部件

我有这个项目,我必须编写一个网站以及 ios 和 android 应用程序。

我必须在非常有限的团队(基本上是我自己)的帮助下完成这项工作。因此,我希望在这些平台之间共享尽可能多的代码,以避免尽可能地维护不同的代码库。

我开始考虑 flutter:dart 中的逻辑(以及与后端的交互)可以编译为 ios 和 android,也可以编译为 javascript 以供网站调用。我也喜欢使用 flutter 构建 UI 的方式。

对于网站,我知道有 flutter web 可用于制作网络应用程序,但我希望我的网站感觉更像是一个网站,而不是一个单页应用程序。我想过用React+Gatsby来做网站的ui,同时调用dart编译的js进行逻辑。这将实现高页面加载速度、良好的搜索引擎优化,同时通过 dart 到 js 编译保持 React 应用程序的交互性和单一代码库逻辑。

我想知道这对您来说是否是一个好方法,如果不是,您会如何做。

在这种方法中,我想知道是否可以将 flutter web 小部件嵌入到 React js 组件中,始终关注维护尽可能低的平台特定代码。除了将它们嵌入到 iframe 中之外,我还没有找到任何其他方法来做到这一点,这似乎不是一个好主意,不是吗?

widget codebase reactjs flutter flutter-web

10
推荐指数
1
解决办法
3458
查看次数