代码之家  ›  专栏  ›  技术社区  ›  athena

理解和修改大型项目

  •  17
  • athena  · 技术社区  · 15 年前

    我是一个新手程序员,作为我项目的一部分,我必须修改一个开源工具(用java编写),它有数百个类。我必须修改它的一个重要部分,以适应项目的需要。在过去的一个月里,我一直在努力阅读代码,试图找出每个类的功能,并试图找出从头到尾的管道。

    一个月的代码阅读帮助我理解了基本架构。但是我还没有弄清楚我需要为我的项目做什么样的改变。有一次,我开始修改代码的一部分,很快做了太多的修改,我已经记不得了。

    一个朋友建议我试着写下类的层次结构。有更好的(标准)吗怎么办?

    8 回复  |  直到 15 年前
        1
  •  10
  •   Boris Pavlović    15 年前
    • 签入一些源代码存储库中的代码(Subversion、CVS、Git、Mercurial…)
    • 如果您已经有一个应用程序使用这个开源工具,请尝试删除二进制依赖关系,并在eclipse或任何其他IDE中引入项目依赖关系。运行您的代码并逐步完成您想要理解的代码
        2
  •  8
  •   Jacob Mattison    15 年前

    有一本很棒的书叫做 Working Effectively with Legacy Code ,作者:迈克尔·费瑟。有一个简短的文章版本 here .

    他的观点之一是,最好的办法就是为现有代码编写单元测试。这有助于您了解入口点在哪里以及代码应该如何工作。然后它让你重构它而不用担心你会破坏它。

    1. Identify change points
    2. Find an inflection point
    3. Cover the inflection point
       a. Break external dependencies
       b. Break internal dependencies
       c. Write tests
    4. Make changes
    5. Refactor the covered code.
    
        3
  •  5
  •   Bozho    15 年前

    Eclipse(以及其他ide)提供了两件事来“对抗”这种情况。我在大型项目中使用过:

    • 调用层次结构-右键单击一个方法并选择“调用层次结构”,或使用CTRL+ALT+H。这将为您提供调用所选方法的所有方法,并提供进一步检查树的选项。此功能是 真正地

    • 类型层次结构-请参阅类的继承层次结构。在eclipse中是F4或CTRL+T。

    也:

    • 找到一种方法使更改在保存时生效,而不必重新部署
    • 在IDE中使用调试程序-在调试模式下运行,以便查看流是如何进行的
        4
  •  2
  •   DJClayworth    15 年前

    我的朋友,你陷入了困境。修改大型的、文档记录糟糕的遗留代码是那些让经验丰富的程序员认真思考销售保险或其他替代职业的乐趣的项目之一。然而这不是不可能的,这里有一些建议,我希望能有所帮助。

    您的首要任务是尽可能多地理解代码。你至少在正确的轨道上。对类结构有一个好的认识是绝对重要的,而图表可能是最好的方法。我建议的另一件事是,当您发现一个类做了什么时,自己添加缺少的文档。这样,当你回到过去,你就不会忘记你发现了什么。

    别忘了调试器。如果您想找出真正发生的事情,单步执行相关代码,或者简单地找出调用堆栈在某个特定点上的实际情况,都会非常有帮助。

        5
  •  1
  •   Dani Cricco    15 年前

    有些项目的文档比其他项目更好。我知道有几个项目组织得很好: Tomcat , Jetty Hudson ,

    你应该检查一下 java-source

        6
  •  1
  •   Mike G Jesse Barnum    15 年前

    就个人而言,我认为一次理解整个应用程序是非常困难的。相反,试着只关注某些模块。例如,如果您可以确定需要更改的模块(例如,基于屏幕或某个输入/输出点),则首先进行一个小更改并对其进行测试。从那里开始,做一个小小的改变,测试,然后继续前进。

    另外,如果你的项目有单元测试(认为你自己很幸运),请检查你所关注的模块的单元测试。这将帮助您了解该模块的预期功能。

        7
  •  0
  •   frm    15 年前

    在我看来,没有标准的方法来理解一个项目。这取决于许多因素,从您正在分析的代码/体系结构的可理解性到您以前在大型项目中的经验。

    我建议您使用建模工具对代码进行反向工程,这样您就可以从现有的源代码生成一些UML模型。在分析代码的过程中,这些图表可以作为图形指导。

    在重构以更改项目以满足您的需要之前,请务必编写一些测试用例,以便验证您的修改不会以意外的方式破坏代码。

        8
  •  0
  •   Sean    15 年前

    以下是一些建议

    • 把代码放到CVS中。 如果你开始改变 你可以随时回顾过去
    • 花点时间把你所做的记录下来 已经学会/经历了。Javadoc很好 为了这个。
    • 为您的代码创建一个UML结构。 有很多插件在那里,会给你一个很好的表现你的代码布局。