我希望了解你在接手别人的软件项目时的经验 - 特别是在原软件开发者已经离职的情况下。
我尽可能采用实用主义方法:学习代码库,四处闲逛。试图理解需求和代码之间的关系,即使最初没有明确的关系。总会有“噢”的时刻,当你意识到为什么要以这种或那种方式执行某些操作时。如果你仍然认为某些东西实现方式错误,如果可能的话,请进行重构。并使用模拟框架来隔离您无法更改的代码片段进行单元测试。
向维护开发者致敬。
我曾经加入过一个团队,他们接手了一堆烂摊子的外包项目。原始项目是基于Java、Struts、Hibernate|Oracle的多媒体内容管理器,结构良好(看起来像是几个人一起编程,明智地使用设计模式,进行了一些单元测试)。然后有人继承了这个项目,不断地复制粘贴功能,放宽业务规则,修补,分支,直到它变成了一个巨大的意面怪物,其中包含着精心制作的代码片段:
List<Stuff> stuff = null;
if (LOG.isDebugEnabled())
{
stuff = findStuff();
LOG.debug("Yeah, I'm a smart guy!");
for (Stuff stu : stuff)
{
LOG.debug("I've got this stuff: " + stu);
}
}
methodThatUsesStuff(stuff);
隐藏在其他杰出的创意中。
通过耐心的重构(更多的提取方法和类),不时地注释代码,重新组织一切,直到代码库缩小了30%,随着时间的推移变得越来越易于管理,我驯服了这个野兽。
我在多个场合接手过其他人的代码,质量参差不齐。以下是我的一些建议:
从第一分钟开始努力记录任何重要信息的结构化笔记:利益相关者的姓名、业务规则、代码和文档位置等。最好专门准备一个新的螺旋笔记本,这样如果需要的话就可以撕掉页面。
利用市场上最好的免费索引和桌面搜索工具之一(如Google桌面搜索、MS Windows搜索)。将所有文档、电子邮件、代码位置添加到其中。
在开发任何东西之前进行文档分析:在网络和打印出来的文档中找到您可以获取的所有内容,努力阅读它。即使在未完成的草稿中,也有很多有用的信息。
随着进展,进行代码、架构等思维导图。
对于较少记录和维护的系统,您不可避免地会有绝望的时刻,这可能会让您陷入拖延模式。特别是在您的头几天或一周内,您的大脑必须消化大量新信息的数量令人不知所措。在这些时候,有人提醒您(或自己做)放松心态,集中精力先处理重要事项,并尝试采取更小的步骤来获得理解,而不是试图向前跨越。
继续记录笔记、制作图表、绘制丰富的图片和思维导图。这确实有助于消化大量新信息,大多数情况下是杂乱无章的。
嗨,祝你好运!
实际上,我们有一组特定的“可交付成果”,这些成果必须存在才能让我们接手一个项目。
如果有机会,我们会先尝试将我们的人员插入到开发项目的小组中。这样,我们在接管代码之前就可以获得第一手知识。(与@Guy所说的相似)
话虽如此,对我来说最重要的部分是:
对于我来说,这是接管代码和项目的关键