大型程序的开发流程_给大型应用程序开发人员的提示

大型程序的开发流程

假设您是一名Java开发人员,刚开始处理包含2000个类并使用多个框架的大型Java应用程序。 您将如何理解代码库? 在典型的企业Java团队中,可以帮助您的大多数高级开发人员可能会很忙。 文档将很少。 您将需要快速交付并向团队证明自己。 您将如何解决这种情况? 本文为从新项目开始的Java开发人员提供了一些建议。

1.不要试图了解整个应用程序

让我问你-为什么首先要理解代码? 很可能要求您修复错误或增强应用程序的现有功能。 您不应该做的第一件事就是尝试了解整个应用程序体系结构。 从头开始一个项目时,这种方法可能会让人不知所措。

即使具有超过10年扎实的编码经验的高级Java开发人员,即使在同一个项目上进行了一年以上的工作,也可能不了解应用程序某些部分的工作(假设他们不是原始开发人员)。 例如,它们可能会愉快地遗忘应用程序的身份验证机制或事务管理方面。

那他们如何管理? 他们只是非常了解他们正在研究的应用程序领域,并确保为团队带来价值。 如今,提供价值比花时间去了解可能会在以后帮不上忙的事情更为重要。

2.专注于交付即时价值

因此,我是否会阻止您了解应用程序体系结构? 一点都不。 我要问的是早日交付价值。 一旦开始一个项目,并在PC上设置了开发环境,交付的内容就不应花一两个多星期,尽管可能很小。 如果您是一位经验丰富的程序员,并且两周后仍未交付任何内容,那么经理将如何知道您是否在工作或阅读体育新闻?

因此,为了使所有人的生活更轻松,请提供一些东西。 在交付有价值的东西之前,不要以需要理解整个应用程序的态度去做。 这是一个完全错误的想法。 添加一个小型的本地化Java验证对于企业而言可能非常有价值,当您交付它时,经理感到放心,因为他能够证明您对高层管理人员的贡献是合理的,并能证明员工的公司价值。

经过数周的时间,在您提供了一些修复和增强功能之后,您将开始慢慢了解体系结构。 不要低估理解应用程序各个方面所需的时间。 给自己3至4天的时间来了解身份验证机制,也许需要2-3天的时间来了解事务管理。 这实际上取决于应用程序以及您对类似应用程序的先前经验,但是关键是要花一些时间来全面了解某些内容。 在修复缺陷之间浪费时间。 这段时间不要问经理。

找出应用程序是否具有维护良好的单元测试用例。 可用时,单元测试用例是理解大型代码库的好方法。 单元测试有助于从最小的代码段开始,并了解单元的外部接口(单元的调用方式和返回的内容)及其内部实现(调试单元测试用例比调试简单得多)整个用例)。

当您了解了一些内容后,请写笔记或绘制类,序列和数据模型图。 他们将帮助您和您的同行开发人员。

3.维护大型应用程序所需的重要技能

如果您被录用,那么您必须已经具有良好的Java技能。 让我谈谈其他可以帮助您在新项目中表现出色的技能。 大多数时候,您在项目上的任务将涉及错误修复或增强应用程序。

有两项重要的技能可以帮助您维护大型代码库。

3.1能够快速找到感兴趣的类别

对于任何类型的维护活动,无论是错误修复还是增强功能,首要任务都是识别要修复或增强的用例中调用的类。 一旦确定了要修复或增强的类和/或方法,便完成了一半的工作。

3.2能够分析变更的影响

进行必要的更改以修复缺陷或增强功能之后,最重要的是确保所做的更改不会破坏代码的任何其他部分。 您需要与其他框架知识一起使用Java语言技能,以找出可能受到更改影响的内容。 下面是两个简单的示例,用于详细说明最后一条语句:

  • a)更改类A的equals()方法时,包含A实例的列表上对contains()方法的调用将受到影响。 除非有人对Java有足够的了解,否则他们可能无法猜测。
  • b)在Web应用程序中,让我们假设“用户ID”存储在会话中。 新手程序员可能将某些内容作为错误修复的一部分附加到“用户ID”上,而并不知道这会影响依赖于“用户ID”的其他用例。

因此,必须充分了解应用程序中使用的Java语言和框架,以分析变更的影响。

一旦您掌握了以上两种技能,即使您对应用程序不太了解,大多数维护任务也将变得更加容易。 如果要修复错误,将首先找到该错误的位置,对其进行修复,并确保它不会破坏应用程序的其余部分。 如果您大多数时候需要增强功能或添加新功能,则只需要模仿具有类似设计的现有功能即可。

例如,在网上银行应用程序中,“查看帐户摘要”和“查看交易记录”的设计为什么会有很大的不同? 如果您了解“查看帐户摘要”的设计,则可以模仿它来开发“查看交易记录”。

最重要的是,您不需要了解所有2000类都在做什么,也不需要了解应用程序管道代码如何修复错误或增强应用程序。 如果您具备上述技能,则可以快速找到需要更改的代码部分,并使用Java和框架技能进行更改,确保所做的更改不会破坏应用程序的其他部分并交付您的更改,即使对应用程序设计的了解最少。

4.查找更改内容并查找更改影响的工具

继续以传递即时价值为主题,您应该寻找对应用程序了解不足的工具,以帮助您立即传递价值。

4.1快速查找更改内容的工具

无论是修复错误还是增强功能,首要任务是找出需要修复或增强用例的类和方法。基本上有两种方法可以理解用例的工作原理-静态源代码分析和运行时分析。

源代码分析工具会扫描整个代码库,并显示类之间的关系。 市场上有许多源代码分析技术和工具。 这些工具的一些示例是:Architexa,AgileJ,UModel,Poseidon等。

所有这些工具都使用静态时间代码分析,并且遭受这样的事实,即不可能准确确定用例在运行时调用的类和方法。 这样做的原因是Java绑定晚,回调模式等。例如,当单击页面上的Submit按钮时,静态分析工具永远无法推断将调用哪个Servlet。

运行时分析工具可以在运行时准确确定用例中调用的类和方法。 这些工具的一些示例包括:MaintenanceJ,Diver,jSonde,Java Call Tracer等。 这些工具通常在运行时捕获调用跟踪,并使用该信息为单个用例生成序列图和类图。

序列图显示了该用例在运行时调用的所有方法。 因此,如果您要修复错误,则该错误很可能是在所调用的方法之一中。

如果要增强现有功能,请使用顺序图了解该功能的调用流程,然后对其进行增强。 增强功能可能类似于添加新的验证,更改DAO等。

如果要添加新功能,请找到其他一些与您需要开发的功能类似的功能,使用运行时序列图了解该功能的调用流程,然后模仿该功能来开发新功能。

但是,请谨慎选择运行时分析工具。 详细性是这些工具的主要问题。 选择一种工具,该工具可以轻松过滤掉不需要的细节,并让您轻松阅读和理解图表。

4.2查找变更影响的工具

如果有单元测试用例,则应首先运行它们,以了解您所做的代码更改是否破坏了其他测试用例。 您可能经常找不到维护良好的单元测试,该单元测试涵盖了大型企业应用程序的大部分代码。 以下是在这种情况下可以使用的一些工具和技术。

同样,可以使用的两种技术是静态时间源代码分析和运行时分析。 市场上有许多静态分析工具。 一些示例是:Lattix,Structure101,Coverity,nWire和IntelliJ的DSM。

给定一个已更改的类,以上所有工具都使用静态时间代码分析来标识一组依赖于该类的类。 利用这些信息,程序员必须“猜测”受影响的用例,因为这些工具无法确定在运行时在用例中实际调用的类。

市场上没有多少工具可以执行运行时影响分析,只有MaintenanceJ除外。 首先,MaintainJ捕获用例中调用的所有类和方法。 一旦为所有用例捕获了该信息,就可以轻松找到受一组类更改影响的用例。 MaintenanceJ解决方案起作用的前提条件是,应首先运行应用程序的所有用例,以捕获运行时相关性。

总而言之,目前,您在工具方面的帮助有限,无法快速而准确地分析变更的影响。 首先认识到需要进行适当的影响分析,然后根据您的判断或团队中其他高级成员的判断来确定变更的影响。 您可以使用上述工具来交叉检查您的判断。

5.以上我的论点的两个警告

5.1不要牺牲代码质量

仅仅因为您在不了解整个应用程序体系结构的情况下就快速交付,所以您不应在代码质量上妥协。 以下是一些示例,在这些示例中,您可能会想在代码质量方面做出妥协,以便快速交付。

与更改具有许多依赖关系的现有代码相比,添加新代码通常风险较小。 例如,可能存在在五个用例中调用的方法。 作为增强一种用例的一部分,您可能必须更改该方法的实现。 最简单的方法可能是复制该方法,重命名该方法,然后在您要增强的用例中调用它。 永远不要那样做。 代码重复不好,没有两种解决方法。 检查您是否可以为该方法构建包装器或重写该方法,或者只是更改它并重新测试所有用例。 通常,如果您停下来思考并真正地运用自己,就会有更好的方法。

另一个示例是将“私有”方法更改为“公共”,以便可以从另一个类中调用它。 暴露比您必须暴露的更多总是不好的。 如果您需要进行一些重构以提出更好的设计,请继续进行下去。

大多数应用程序具有特定的服务器结构和模式。 在修复或增强应用程序时,请确保不偏离这些模式。 如果不确定您是否确认约定,请让高级开发人员查看您的更改。 如果您必须做一些不遵守约定的事情,至少要确保它对于一小类是局部的(一小类200行的私有方法可能不会破坏应用程序的设计)。

5.2不要停止努力来了解体系结构

通过遵循本文概述的方法,如果您仅通过学习就可以交付并在行业中生存,那么您可能会停止努力来理解应用程序体系结构。 从长远来看,这样做不会对您的职业有所帮助。 随着项目经验的增加,可以通过执行更大的任务来避免这种情况。 将会进行更大的增强,例如构建一个全新的功能或影响应用程序基本设计的更改。 在尝试进行此类更改时,您应该已经相当了解应用程序体系结构。 本文中介绍的方法旨在使您快速入门,并帮助您在最短的时间内完成交付,并且不会阻止您全面了解应用程序。

六,结论

本文的重点是通过充分了解应用程序来集中精力快速交付价值。 您可以做到这一点而不会影响代码质量。

如果要修复错误,请快速找到错误的位置并进行修复。 如有必要,使用运行时分析工具查找错误。 如果要添加新功能,请找到类似的功能,了解其调用流程(必要时使用工具)并进行增强。

您可能会说听起来很简单,但这真的很实用吗? 是的。 但是前提是您必须具备良好的Java语言技能,并且充分了解框架,才能首先进行代码更改,然后分析更改的影响。 与实际进行更改相比,需要更高的技能来分析更改的影响。 您可能需要高级开发人员的帮助来分析影响。

大约50%的IT运营预算用于简单的错误修复和增强。 通过遵循本文建议的方法,可以节省用于此类维护活动的大量金钱。

免责声明:本文的作者Choudary Kothapalli还是MaintenanceJ(本文中提到的产品之一)的创始人。

翻译自: https://www.infoq.com/articles/tips-to-developers-starting-on-large-apps/?topicPageSponsorship=c1246725-b0a7-43a6-9ef9-68102c8d48e1

大型程序的开发流程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值