精华内容
下载资源
问答
  • 花6个月做的基于C2C的大型mall商城项目,包括商家后台管理系统(开店,菜单管理,商品管理,订单管理,权限管理,用户管理,店铺管理等等)以及app端用户系统(用户基本信息,商品浏览,加购,下单等操作),采用技术...
  • 开发维护大型项目的Java的建议

    千次阅读 2017-06-02 14:09:12
    开发维护大型项目的Java的建议.txt开发维护大型项目的Java的建议.txt1、不要试图一下子搞懂整个项目2、关注于尽快交付价值有效单元测试用例是理解大型项目代码很好途径 写一些笔记,或者画一些类图、时序图、...

    开发维护大型项目的Java的建议.txt

    开发维护大型项目的Java的建议.txt
    
    1、不要试图一下子搞懂整个项目
    
    2、关注于尽快交付价值
    
    有效的单元测试用例是理解大型项目代码的很好途径
    写一些笔记,或者画一些类图、时序图、数据模型图,以便你或日后其他的开发者维护
    
    3、维护大型项目所必须的技能
    
    3.1能够迅速发现需要的类
    3.2能够分析变更的影响
    模仿现有的特性使用相似的设计
    
    4、使用工具找到需要的变更内容以及变更产生的影响
    
    4.1 迅速发现需要变更内容的工具
    1)基本有两种方式理解一个用例的工作方式,静态代码分析和运行时分析。
    2)源码分析统计扫描所有代码并且展示类之间的关系,工具:Architexa, AgileJ, UModel, Poseidon等
    3)静态代码分析工具缺点在于无法确切展示用例中类或方法的运行时调用情况,可以通过“回调机制”(callback patterns)
    4)运行时分析工具能够展示类和方法在用例运行时的状态,工具包括:MaintainJ, Diver,jSonde,Java Call Tracer等。这些工具可以捕获运行时的堆栈状态,并以此为一个用例生成序列图和类图。
    
    5)序列图展示了该用例在运行时所有调用的方法
    
    6)若你在修复一个bug,那这个bug很可能就是这些被调用的方法之一。
    
    若你在增强已有功能,利用序列图理解调用流程然后再修改。可能是新增一个验证,修改DAO等。
    
    若你在新增功能,找到一些相似的特性,利用序列图理解调用流程然后模仿开发新功能。
    
    7)要小心挑选运行时分析工具
    
    8)若单元测试有效,可以通过运行单元测试发现变更有没有破坏其他测试用例
    
    9)仍然是有两种技术静态代码分析和运行时分析可以使用。市场中有很多静态代码分析工具可用。如:Lattix, Structure101, Coverity, nWire and IntelliJ's DSM。
    
    
    5、对上述内容的两个忠告
    
    5.1不要降低代码质量
    5.2 不要停止深入理解项目架构
    
    6、结论
    
    1)在对项目进行必要了解的前提下进行快速交付。
    2)你可以在不降低代码质量的前提下这么做。
    3)若修复一个bug,迅速定位并修复。
    4)有必要可以使用运行时分析工具。
    5)若新增一个特写,可以寻找相似特写,理解流程(有必要使用工具)并编写。
    展开全文
  • 原标题:开发维护大型 Java 项目的建议假设你是正在开发和维护一个包含2000个类并使用了很多框架的Java开发者。你要如何理解这些代码?在一个典型的Java企业项目小组中,大部分能够帮你高级工程师看起来都很忙。...

    原标题:开发维护大型 Java 项目的建议

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

    d2653fc7b1ca03ea7507ed48fbd482ea.png

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

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

    即便是有着10年可靠编程经验的Java开发者可能也没有理解项目的核心工作机制,尽管他们可能已经在这个项目工作超过一年(假设他们并非原始开发人员)。比如,对于认证机制或事务管理机制。

    他们是怎么做的?他们对于自己负责的部分非常了解,并且能够交付价值给小组。每天的交付价值远比了解一些以后还不确定有没有的东西重要的多。

    2、关注于尽快交付价值

    那我是否定了你对于项目架构理解的热情了么?完全不。我只是要求你尽早的交付价值,一旦你开始一个项目,搭建了开发环境,你就不应该花一两周时间才交付什么,无论他的规模大小。假如你是一个有经验的程序员却两周都没有任何交付,你的经理怎么会知道你是真的在工作还是在看新闻。

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

    日复一日,在你不断修复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修复和功能增强。根据文中的建议,对于维护活动中的经费的节省应当还是很有帮助的。

    基础知识

    责任编辑:

    展开全文
  • 原标题:开发维护大型 Java 项目的建议假设你是正在开发和维护一个包含2000个类并使用了很多框架的Java开发者。你要如何理解这些代码?在一个典型的Java企业项目小组中,大部分能够帮你高级工程师看起来都很忙。...

    原标题:开发维护大型 Java 项目的建议

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

    1ba25c9ca44a018c2adfa5e5b5f5a9d1.png

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

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

    即便是有着10年可靠编程经验的Java开发者可能也没有理解项目的核心工作机制,尽管他们可能已经在这个项目工作超过一年(假设他们并非原始开发人员)。比如,对于认证机制或事务管理机制。

    他们是怎么做的?他们对于自己负责的部分非常了解,并且能够交付价值给小组。每天的交付价值远比了解一些以后还不确定有没有的东西重要的多。

    2、关注于尽快交付价值

    那我是否定了你对于项目架构理解的热情了么?完全不。我只是要求你尽早的交付价值,一旦你开始一个项目,搭建了开发环境,你就不应该花一两周时间才交付什么,无论他的规模大小。假如你是一个有经验的程序员却两周都没有任何交付,你的经理怎么会知道你是真的在工作还是在看新闻。

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

    日复一日,在你不断修复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修复和功能增强。根据文中的建议,对于维护活动中的经费的节省应当还是很有帮助的。返回搜狐,查看更多

    http://mp.weixin.qq.com/s/GLKrcFfvgB_b2N-1EPhbgg

    程序员共读整理发布,转载请联系作者获得授权

    责任编辑:

    展开全文
  • 原标题:Java老司机对开发维护大型 Java 项目的建议假设你是正在开发和维护一个包含2000个类并使用了很多框架的Java开发者。你要如何理解这些代码?在一个典型的Java企业项目小组中,大部分能够帮你高级工程师看...

    原标题:Java老司机对开发维护大型 Java 项目的建议

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

    dd254abd95e60663317916916af0bf7d.png

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

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

    即便是有着10年可靠编程经验的Java开发者可能也没有理解项目的核心工作机制,尽管他们可能已经在这个项目工作超过一年(假设他们并非原始开发人员)。比如,对于认证机制或事务管理机制。

    他们是怎么做的?他们对于自己负责的部分非常了解,并且能够交付价值给小组。每天的交付价值远比了解一些以后还不确定有没有的东西重要的多。

    关注于尽快交付价值

    那我是否定了你对于项目架构理解的热情了么?完全不。我只是要求你尽早的交付价值,一旦你开始一个项目,搭建了开发环境,你就不应该花一两周时间才交付什么,无论他的规模大小。假如你是一个有经验的程序员却两周都没有任何交付,你的经理怎么会知道你是真的在工作还是在看新闻。

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

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

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

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

    维护大型项目所必须的技能

    你能从事当前的工作,必然已经具有良好的Java技术。我们来谈谈能够让你在新项目中良好表现的其他技能。大部分时间,你在项目中的任务是修复bug和增强功能。

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

    能够迅速发现需要的类

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

    能够分析变更的影响

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

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

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

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

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

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

    使用工具找到需要的变更内容以及变更产生的影响

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

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

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

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

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

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

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

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

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

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

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

    若单元测试有效,可以通过运行单元测试发现变更有没有破坏其他测试用例。有效维护并且覆盖大型企业应用的单元测试还是比较少的。下面有一些针对该情况的工具。

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

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

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

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

    对上述内容的两个忠告

    不要降低代码质量

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

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

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

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

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

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

    结论

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

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

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

    关注“”微信公众号,获取更多相关资讯,现在报名Java培训,可免费参加Java初级课程,亲身感受这里的学习氛围。返回搜狐,查看更多

    责任编辑:

    展开全文
  • 假设你是正在开发和维护一个包含2000个类并使用了很多框架的Java开发者。你要如何理解这些代码?在一个典型的Java企业项目小组中,大部 分能够帮你高级工程师看起来都很忙。文档也很少。你需要尽快交付成果,并向...
  • 原标题:Java开发最流行最广泛的大型项目实战技巧?假设你是正在开发和维护一个包含2000个类并使用了很多框架的Java开发者。你要如何理解这些代码?在一个典型的Java企业项目小组中,大部分能够帮你的高级工程师看...
  • 假设你是正在开发一个大型JAVA项目,那么你就很有必要花几分钟来看一下这篇文章。...有效单元测试用例是理解大型项目代码很好途径。单元测试能够帮助理解代码片段,包括一个单元外部接口(单元如何...
  • 作者:被触发出处:http://www.iteye.com假设你是正在开发和维护一个包含2000个类并使用了很多框架的Java开发者。你要如何理解这些代码?在一个典型的Java企业项目小组中,大部分能够帮你高级工程师看起来都很忙。...
  • 假设你是正在开发和维护一个包含2000个类并使用了很多框架的Java开发者。你要如何理解这些代码?在一个典型的Java企业项目小组中,大部分能够帮你高级工程师看起来都很忙。文档也很少。你需要尽快交付成果,并向...
  • 最近在研究为什么大家喜欢用java开发大型项目,而不用php开发大型项目,归根原因如下。 java 优点 1、java类有更好支持(如类向上转型,向下转型) 2、java对数据库连接池有更好实现 3、java数据类型...
  • 假设你是正在开发和维护一个包含2000个类并使用了很多框架的Java开发者。你要如何理解这些代码?在一个典型的Java企业项目小组中,大部分能够帮你高级工程师看起来都很忙。文档也很少。你需要尽快交付成果,并向...
  • 我只是要求你尽早交付价值,一旦你开始一个项目,搭建了开发环境,你就不应该花一两周时间才交付什么,无论他规模大小。假如你是一个有经验程序员却两周都没有任何交付,你经理怎么会知道你是真在工作还是...
  • 假设你是正在开发和维护一个包含2000个类并使用了很多框架的Java开发者。你要如何理解这些代码?在一个典型的Java企业项目小组中,大部分能够帮你高级工程师看起来都很忙。文档也很少。你需要尽快交付成果,并向...
  • 引言Spring Boot是由Pivotal团队提供全新框架,其设计目的是用来简化新Spring应用初始搭建以及开发过程。该框架使用了特定方式来进行配置,从而使开发人员不再需要定义样板化配置。通过这种方式,Spring ...
  • 在此项目中,所有包均以“com”开头。 功能模块包命名格式biz 业务层 biz.impl 业务层实现dao 持久层 dao.impl 持久层实现controller 控制层entity 实体以及mapper配置util 仅当前业务使用工具类1.2 class (*)...
  • 资料来源于网络,如有侵权请联系小编删除(小编微信:646448081)2019最新Java大型电商系统项目开发实战课程视频教程;电商系统项目:是一款按照企业级标准研发的项目。本套视频是目前国内市场第一套详细讲解商城类...
  • 开发维护一个大型Java项目的建议
  • 假设你是正在开发和维护一个包含2000个类并使用了很多框架的Java开发者。你要如何理解这些代码?在一个典型的Java企业项目小组中,大部分能够帮你高级工程师看起来都很忙。文档也很少。你需要尽快交付成果,并向...
  • 引言Dubbo是Alibaba开源分布式服务框架,它最大特点是按照分层方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型角度来看,...Dubbo项目拆分下踩坑记录autowired一个...
  • 引言Spring Boot是由Pivotal团队提供全新框架,其设计目的是用来简化新Spring应用初始搭建以及开发过程。该框架使用了特定方式来进行配置,从而使开发人员不再需要定义样板化配置。通过这种方式,Spring ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,807
精华内容 1,122
关键字:

java开发的大型项目

java 订阅