编码实践:你对一个拥有1.7百万行代码的项目有什么想法?

7
我正在听一个小组讨论,其中一位提到他们的“引擎”不再是1.3,而是现在有170万行代码。这让我感到害怕。我无法想象那么多行代码,模块的数量等等。我一直觉得C++对模块的处理不如其他语言。我觉得管理大型项目更加困难,因此更喜欢保持代码行数合理。当我的代码达到1万行时,我就感到不适。我无法想象2万、5万、50万或100万行代码会是什么感觉。

在开发和维护这种规模的项目时,您有哪些实践经验?


9
他的引擎只需要 1.7 行代码?他一定在用 Perl。 - rlbond
那个人是否明确指出他们的“引擎”是1.7行**C ++**,还是你在讨论中提出的? - Pascal Cuoq
这是一个已知的引擎。他说过C++和一些C。 - user34537
1
我认为这应该发布到http://programmers.stackexchange.com/。 - Angelo Fuchs
1
@AngeloNeuschitzer:同意。在我提出问题的时候,我认为这个不存在。 - user34537
7个回答

7
一百万行的代码已经超出了大部分人的记忆能力范围。这意味着团队成员将会各自持有不完整的系统思维导图,这会使得设计讨论变得困难。
为了减少多个不完整的理解,您需要一些地图,以适当的架构图形式呈现。这些通常包括系统架构的高层级块状图,关键部分的更详细的低层级图以及描述关键交互的序列图。有这样的图表可以帮助团队在讨论系统时保持“同一页面”。
“子系统之间的依赖”图表也可以指出混乱的区域(例如“嗯?为什么持久性框架的那一部分要依赖于UI?!”),需要进行清理。最好能够找到一种方法来自动生成这些图表。Graphviz可以成为您的朋友。

6
你在开发和维护这样规模的项目时有什么做法?
分而治之,因此不会有这种规模的单体项目。

3

您在开发和维护这样大小的项目时有什么实践经验?

好的,这就是当您从开发人员进化为架构师的时候。

对于大型软件项目,项目负责人的关注点不应该只局限于实现,而是要关注结构层面:正确地模块化您的组件/库,将它们良好地解耦,并利用设计模式。


2

对我来说,重要的不是代码行数,而是设计的模块化程度以及模块的封装性。在某个阶段后,如果我可以像放大镜一样聚焦到一个模块上,了解其设计并编写功能和修复错误,那么代码行数就不重要了。可以说,我从未处理过超过100万行代码的系统。


0
这是什么类型的引擎?如果它是游戏引擎,那么它肯定被模块化为图形、声音、物理、地图处理和其他几十个模块。每个模块肯定包含多个子模块,例如图形被分成字体渲染、特效、GPU特定部分等。

0

我觉得这取决于情况。你可以给一个差的厨师和一个好的厨师同样多的食材(例如很多),差的厨师会做出让你呕吐的东西,而好的厨师则可以把它做得好吃易消化。

我认为一个项目不应该以代码行数来衡量,而是应该考虑项目本身的可维护性(就像你所提到的)。只要项目被模块化并且经过良好的重构,情况可能并不太糟。

因此,回答你的问题,我用于维护大型代码库的做法将与维护任何规模的代码库相同——我会考虑集成具有高代码覆盖率的自动构建(最好带有系统级测试),包括工具以帮助您编写可读性强(例如checkstyle)且没有重复代码(例如simian)等工具。

如果项目继续增长,达到了很多行代码,而您又能正确地开发代码库,那么我想这只能意味着您的客户感到满意,并且需要更多的功能。


0
在开发和维护如此规模的项目时,您有哪些实践经验呢?
管理大型软件项目有很多思路,而且很明显这主要取决于项目类型:
• 有资金支持的软件开发(可能涵盖一些企业正在贡献的开源项目,如 Eclipse);
• 成功的“业余”软件开发项目(如 Linux)。
资助软件开发将通常从一开始就使用正式流程,而“业余”项目则倾向于采用仅满足出现的问题所需的实践。
正如其他人指出的那样,这种规模的项目必然是一个团队的努力,面临的许多挑战来自于需要协调活动并限制混乱。
但是,他们都倾向于使用相同的“策略性”实践来处理复杂性。我建议您阅读这篇介绍 Joel Test 的文章,以了解一些有用/必需的实践。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接