乐博娱乐»Java WEB»乐博娱乐开发维护大型项目的Java的建议

乐博娱乐开发维护大型项目的Java的建议

来源:itindex 宣布时间:2015-12-08 阅读次数:乐博

  假设你是正在乐博娱乐开发和维护一个包罗2000个类并使用了许多框架的Java乐博娱乐开发者。你要如何理解这些代码?在一个典型的Java企业项目小组中,大部门能够帮你的高级工程师看起来都很忙。文档也很少。你需要尽快交付结果,并向项目组证明自己的能力。你会如那边置惩罚这种状况?这篇文字为开始一个新项目的Java乐博娱乐开发者提供了一些建议。

乐博

  1、不要试图一下子搞懂整个项目

  好好考虑一下,为什么理解项目代码是第一位的?大部门情况是你被要求修复一个bug或者增强系统已有功效。你要做的第一件事情不是理解整个项目的架构。当对项目进行维护时,这样(理解整个项目架构)可能会对你造成巨大的压力。

  即即是有着10年可靠编程经验的Java乐博娱乐开发者可能也没有理解项目的焦点事情机制,尽管他们可能已经在这个项目事情凌驾一年(假设他们并非原始乐博娱乐开发人员)。好比,对于认证机制或事务治理机制。

  他们是怎么做的?他们对于自己卖力的部门很是了解,而且能够交付价值给小组。每天的交付价值远比了解一些以后还不确定有没有的工具重要的多。

  2、关注于尽快交付价值

  那我是否认了你对于项目架构理解的热情了么?完全不。我只是要求你尽早的交付价值,一旦你开始一个项目,搭建了乐博娱乐开发情况,你就不应该花一两周时间才交付什么,无论他的规模巨细。如果你是一个有经验的程序员却两周都没有任何交付,你的经理怎么会知道你是真的在事情照旧在看新闻。

  所以交付可以使各人都轻松起来。不要认为你能够做有价值的交付前必须理解整个项目。这是完全错误的。加一段javascript的验证代码对业务就很有价值,经理能够通过你的交付到达对你的信任。这样能够向上级领导证明你的孝敬以及员工价值。

  日复一日,在你不停修复bug及增强功效之后,就能够慢慢开始理解项目架构。不要低估对系统方方面面理解时需要花费的时间。花3-4天理解认证机制,2-3天理解事物治理。这些都是依靠之前的相似项目的经历,但要害照旧要花时间才气透彻的理解。要在日常事情中挤出时间,不要向经理要求特定的时间来做这些。

  找找项目是否有一些不停维护的单元测试用例。有效的单元测试用例是理解大型项目代码的很好途径。单元测试能够帮助理解代码片段,包罗一个单元的外部接口(单元如何被调用以及返回内容)及其内部实现(调试单元测试比调试整个实际用例简朴许多)。

  你如果能够很好的理解一些内容,写一些条记,或者画一些类图、时序图、数据模型图,以便你或日后其他的乐博娱乐开发者维护。

  3、维护大型项目所必须的技术

  你能从事当前的事情,一定已经具有良好的java技术。我们来谈谈能够让你在新项目中良好体现的其他技术。大部门时间,你在项目中的任务是修复bug和增强功效。

  有两项很重要的技术能够协助你维护大型项目代码。

  3.1能够迅速发现需要的类

  在任何维护运动中,无论是修复bug或增强功效,第一个行动就是识别出当前修复或增强的用例中调用的类。当你定位到需要修复或增强的类/要领,就已经完工了一半。

  3.2能够分析变换的影响

  当你在完成须要的修改或增强事情后,最重要的就是要确认你的修改没有破坏代码的其他部门。你要用你的java技术及对其他框架的理解找出变换可能影响的部门。下面有两个简朴的例子详细描述了最后提及的情况:

  a)当类A的equals()要领变换后,调用一个掩护A实例的List的contains()要领时就会被影响到。若Java知识不够,很难考虑到这样的影响。

  b)在一个web项目中,我们假设“user id”生存在session中。一个新入程序员可能在“user id”中加入一些信息作为bug修复的要领,但是却不知道会影响到那些关联“user id”的用例。

  当你提高了如上两个技术,尽管你对项目不是很是了解,但大部门的维护任务会变得简朴许多。若你修复一个bug,你会定位并修复这个bug,而且保证变换不会破坏项目的其他部门。若你增强或加入一个特性,基本上你只需要模仿现有的特性使用相似的设计。

  在一个在线银行项目中,为什么“检察账户摘要”和“检察交易历史”的设计需要巨大的差异呢?如果你理解了“检察账户摘要”的设计,完全可以模仿乐博娱乐开发出“检察交易历史”的功效。

  就修复bug和增强来说,你不必完全理解所有2000个类的事情内容和代码如何运行来推动系统。你若有上面的技术,就能很快定位需要修改的代码的部门,使用良好的java和框架技术修复,保证变换不会破坏项目的其他部门并交付,尽管你可能只知道一小部门项目的设计。

  4、使用工具找到需要的变换内容以及变换发生的影响

  继续我们尽快交付的主题,你应当寻找那些能够通过尽量少的了解项目但能帮助你尽快实施交付的工具作为辅助。

  4.1 迅速发现需要变换内容的工具

  无论是修复bug照旧系统增强,首先都要找到该用例调用的你需要修改的类及要领。基本有两种方式理解一个用例的事情方式,静态代码分析和运行时分析。

  源码分析统计扫描所有代码而且展示类之间的关系。市场上有许多设备与工具。好比:Architexa, AgileJ, UModel, Poseidon等。

  所有的静态代码分析工具缺点在于无法确切展收例中类或要领的运行时调用情况。因此Java新加入了特性,如回调机制(callback patterns)。如静态分析工具无法推断出当页面提交按钮被点击时哪个Servlet被调用了。

  运行时分析工具能够展示类和要领在用例运行时的状态。工具包罗:MaintainJ, Diver,jSonde,Java Call Tracer等。这些工具可以捕捉运行时的堆栈状态,并以此为一个用例生成序列图和类图。

  序列图展示了该用例在运行时所有调用的要领。若你在修复一个bug,那这个bug很可能就是这些被调用的要领之一。

  若你在增强已有功效,利用序列图理解调用流程然后再修改。可能是新增一个验证,修改DAO等。

  若你在新增功效,找到一些相似的特性,利用序列图理解调用流程然后模仿乐博娱乐开发新功效。

  要小心挑选运行时分析工具。信息过多是这类工具的主要问题。选择一些提供简朴过滤无效信息并能够方便的检察各种视图的工具。

  4.2 迅速发现需要变换内容的工具

  若单元测试有效,可以通过运行单元测试发现变换有没有破坏其他测试用例。有效维护而且笼罩大型企业应用的单元测试照旧比力少的。下面有一些针对该情况的工具。

  仍然是有两种技术静态代码分析和运行时分析可以使用。市场中有许多静态代码分析工具可用。如:Lattix, Structure101, Coverity, nWire and IntelliJ's DSM。

  给定一个变换后的类,上述工具均可识别对该类存在依赖的类的荟萃。乐博娱乐开发者需要凭据这些信息“推测”可能发生影响的用例,因为这些工具无法展示运行时类之间的调用关系。

  市场上的可以用于运行时影响分析的工具并不多,除了MaintainJ。MaintainJ先捕捉在一个用例中调用的所有类和要领。当所有用例的上述信息都 被捕捉之后,就很容易发现类的变换对用例的影响。MaintainJ能够有效事情的前置条件就是项目的所有用例都应当先运行一遍,以便能够获得运行时的依 赖关系。

  总之,目前你在迅速准确分析变换影响方面,照旧可以从工具中获得有限的帮助。首先凭据需要实施一些影响分析,然后凭据自己或小组其他高级成员评审来判断变换的影响。你可能需要上面提到的工具对你的判断进行重复确认。

  5、对上述内容的两个忠告

  5.1不要降低代码质量

  为了快速交付,所以没有全盘理解架构,但绝不能以降低代码质量为条件。下面是一些你可能因为只考虑快速交付而引发的代码质量问题。

  因为修改代码涉及到许多的依赖,所以新增代码相对而言风险较小。例如,有5个用例都调用了某个要领。为了革新某个用例,你需要修改这个要领的实现。最简朴的 做法就是复制这个要领,重命名,然后在革新的用例中调用新要领。千万不要这么做。代码冗余绝对是很是有害的。实验对要领进行包装或者重写,甚至是直接修 改,然后重新测试所有用例,通常停下来想一想,然后亲手去实施,是一个比力好的方式。

  另一个例子是将“private”要领改为“public”,使得此外类也可以调用。尽量不要将非必须的部门袒露出来。如果为了更好的设计需要重构,就应当着手去做。

  大部门应用都有确定的结构和模式来实施。修复或增强程序时,确认你没有偏离这样的模式。若对约定不确定,请其他的高级乐博娱乐开发者来审核你的变换。若你必须做一些违背约定的实施,尽量放置于一个规模较小的类中(一个200行代码的类中的私有函数应当不会影响应用的整体设计)

  5.2 不要停止深入理解项目架构

  凭据文章列出的方式,假设你能够在对项目了解较少的情况下进行交付并以此连续下去,可能你会停止对项目架构的深入了解。这样从久远角度来说对你的职业生涯没 有帮助。当你的经验增加时,你应当肩负比力大的模块任务。如构建一个完整的新特性或者修改项目的一些基础设计等较大的革新。当你能够做这些革新时,你对项 目的整体架构应该相当了解。文中列举的要领是让你在最短的时间内提升自己,而不是阻止你完整理解整个项目。

  6、结论

  整篇文章集中在对项目进行须要了解的前提下进行快速交付。你可以在不降低代码质量的前提下这么做。

  若修复一个bug,迅速定位并修复。有须要可以使用运行时分析工具。若新增一个特写,可以寻找相似特写,理解流程(有须要使用工具)并编写。

  或许这些听起来很简朴,但是实用吗?虽然。但前提是你有良好的java技术以及对框架足够了解才气先修改代码,然后对变换影响进行分析。对变换影响的分析比实施变换需要更多的技巧。你可能需要高级乐博娱乐开发人员协助你分析变换影响。

  约莫有50%的IT可操作预算用于简朴的bug修复和功效增强。凭据文中的建议,对于维护运动中的经费的节省应当照旧很有帮助的。