【问题标题】:Functional depedency analysis功能依赖分析
【发布时间】:2010-12-18 05:49:28
【问题描述】:

使用过 Eclipse 的开发人员不能错过 Cntrl+Shift+G 组合 - 查找对工作区中特定成员/方法/类的所有引用的最简单方法。 考虑一个场景,你是一个新人,维护一个用 java 编写的 web 应用程序。现在,您将要更改方法签名,并执行 Cntl+Shift+G 以查找对所述方法的所有引用(是的,希望您没有进行依赖注入/反射等)。然而,一个新人,不想搞砸应用程序中的任何功能。如何确保功能依赖不受影响?

我猜..问题有点不清楚.. 换个说法...假设您正在更改某些功能(业务规则中的 if 循环或 whateva) - 这肯定会在应用程序的上下文中更改其他内容..在这一点上你希望在eclipse中有一些东西(插件?),它会告诉你 - “嘿,noob ..不要改变这个 - 它会影响这个......” - 现在,如果你要为 Eclipse 创建一些东西(插件?) - 你会从哪里开始? (标记部分 scr 代码并引入依赖树?等等?)

【问题讨论】:

  • 如果你有单元测试,那么它们应该足以表明更改已经破坏了预期的行为。
  • 对代码进行单元测试?

标签: java eclipse generics jakarta-ee eclipse-plugin


【解决方案1】:

也许我没能理解你的问题,但我想我可能会有答案。看看nWire for Java(或PHP)。它是一个用于代码探索的插件。专注于一段代码,开发者可以快速确定在哪里调用方法,在哪里使用类等。这样更容易理解你要改变什么。

我是这个插件的开发者。如果这不是您要查找的内容,请告诉我,我很乐意更好地了解您要查找的内容。

【讨论】:

  • @zvikico 我刚刚查看了 nWire 的演示。它看起来很漂亮,但我想要的是非常不同的......想象一下......假设你有一个“项目”和“资源”在一个项目上工作。显然,代码不是自我意识的,但我正在谈论您在项目中更改某些内容(功能更改)的可能方式,这将改变应用程序在“资源访问项目”方面的行为方式 - 我猜..这是一个糟糕的例子..但我希望这是有道理的?
  • alrite.. 我读了..我添加的内容对我来说毫无意义.. :-( 这是另一个例子.. 假设您有一个共享软件应用程序,并且您将要注册它,所以有这个“名称”和“密钥”提示。并且,假设在代码中有一个这样的检查: if(key generated from name) = then make program registered else fail; 现在,如果我将 if 条件更改为 != 而不是 =,这会改变程序的行为方式,不是吗?如果您的 IDE 以某种方式警告您可能会影响什么,那不是很好吗?
  • 你正在修改一段代码。此代码会影响使用它的所有代码片段。干净利落。如果您了解这些部分是什么,您就知道会受到什么影响。自然,您应该继续探索这种依赖关系,以确定所有可能发生变化的领域。所以,我看不出有什么区别。仅仅是从 UI 的角度来看吗? (即我更改了代码,我想知道我的 UI 的哪些部分会受到影响?)
  • @zvikico “如果你知道这些部分是什么,你就知道会受到什么影响”——正确。我们正在谈论消除这个具有知识概念的开发人员。当开发人员编写代码时,他知道,但是一旦编写应用程序的开发人员离开,新手将花费大量时间来理解依赖关系。有没有更简单的出路?有办法吗?
  • 因此,从技术上讲,您正在寻找能够找到给定方法的调用者的传递闭包的能力。这将使您很好地了解给定更改可能会影响什么。
【解决方案2】:

此外:ALT+SHIFT+C 是更改方法签名的方法。 ALT+SHIFT+G "only" 查找引用,这当然很有帮助。

vickirk 提到这里最重要的方面:如果没有测试和良好的代码覆盖率,您将无法应用任何更改而不冒以后系统故障的风险。

Robert C Martin 的《有效地使用遗留代码》一书很好地解释了这一点:所有未被测试覆盖的代码都是遗留代码。您可以得出结论,在应用任何功能更改之前,您需要确保足够的测试覆盖率。

在源代码中标记部分似乎是个坏主意,因为这些标记需要额外维护,而这在项目中通常不会真正发生。 :)

【讨论】:

    【解决方案3】:

    JDepend 呢?

    【讨论】:

      猜你喜欢
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 2016-08-12
      • 2013-01-09
      • 2011-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多