首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >学习遗留Java系统

学习遗留Java系统
EN

Stack Overflow用户
提问于 2009-02-09 00:33:45
回答 10查看 463关注 0票数 6

我的任务是维护和重构遗留Java系统。我目前正在做C#和.NET,尽管我对Java很熟悉。

遗留系统使用RMI,这是一种客户端/服务器架构,是为1.4JVM设计的。它用于UI (据我所知)、Swing和AWT。

我的问题是:与我刚刚收到的代码库达成协议的最佳方式是什么?我正在考虑屏幕的流程图,定义RMI调用之间的边界,并编写单元测试(针对可测试的部分)。

当你得到一个不熟悉的代码库时,你会怎么做?

谢谢!

-Jarrod

EN

回答 10

Stack Overflow用户

发布于 2009-02-09 00:37:41

我对任何新代码所做的第一件事就是查看现有的单元测试。编写新测试通常是第二件事。

票数 5
EN

Stack Overflow用户

发布于 2009-02-09 01:06:22

这在很大程度上取决于代码库的质量。实际上,您可以更狭义地定义它-这取决于代码的清晰度和注释的好坏(我写这篇文章的人反复处于继承文档不佳的遗留代码库的位置)。

代码库越差,你就越需要从外到内推断它的功能--如果你不能弄清楚一个函数在做什么,你至少可以弄清楚GUI似乎暗示着它在做什么。拥有RMI接口可能是一件好事,因为它可以让您简化GUI需要看到的内容-从远程接口中抽象出来是一个非常好的想法。

如果代码库真的很差,单元测试不太可能对您有所帮助,因为即使正确实现,您也可能测试出一些错误的东西。我继承的最后一个东西的例子:(故意删除名称和描述-它们在任何情况下对原始文件都没有帮助)

代码语言:javascript
复制
 public static int[] a (List<int[]> input){  

   ... lots of opaque rubbish
   return b(input);
 }

 public static List<int[]> b{ List<int[]> input)
 {
   ... more crap....
   return some horribly mangled list of int[];
 }

事实证明,a完成的是根据数组的第二个元素的值对数组进行排序。在这种情况下,测试b的正常行为是没有用的。

帮助你保持理智的建议:

  • 删除明显不在使用的代码。
  • 尝试分解出任何“魔术数字”
  • 找到任何硬编码文件、路径或资源引用,并将它们分解到属性中,或任何其他处理它们的中央通用方法中。
  • 尝试确定应用程序是否真的按照它应该的方式执行-对于一些非常复杂的功能,你无法弄清楚它实际上代表了用户认为“从未真正正确工作过”的东西,这并不罕见。
  • 查找最初设计该应用程序时的任何原始文档或规范。
  • 由于您提到了1.4,泛化映射可以澄清传递的是什么类型的对象。如果你有一个由HashMap支持的对象,它是如何被填充的是一个谜,它可以真正简化你的生活,确定它实际上是一个字符串到整数的映射-这通常比它实际应该做的事情容易得多。

当然,如果代码库写得很好,这大部分都是不必要的,但在任何情况下,你的工作都会容易得多。祝你好运。

票数 4
EN

Stack Overflow用户

发布于 2009-02-09 01:41:02

有一件事可以帮助我处理对我来说是新的代码--这对于写得很好的代码来说就不那么必要了--那就是对它进行一两天的大规模重构,然后放弃所有的更改。这个过程帮助我理解代码的作用;使用代码帮助我理解它。它还开始教我代码的哪些部分是脆弱的。

如果您有机会迁移到较新版本的Java,那么泛化所有集合将有助于理解传递的数据类型。

当然,我是在测试实验室中安装了该软件并尝试了一下,以了解它的作用之后才这样做的。

编辑:根据我的回答,同样有用的是启用所有诊断跟踪和日志记录,使用系统,然后研究日志。如果存在通信协议跟踪,那么查看此跟踪将有助于理解代码使用的通信协议,也许可以使用相同测试的Wireshark跟踪。

另一个有用的迁移是从旧的并发库迁移到新的Java5(和6)并发库。这将帮助您了解线程的位置以及它们何时启动和何时关闭。

当然,对于不熟悉的代码库上的任何代码更改,我都假定进行了适当的测试,以确保没有任何损坏!然而,为了平衡这一点,我了解到,在重构编写得很差的代码之后,新引入的bug通常比重构之前存在的bug更容易找到。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/526767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档