Tag: 静态分析

用于在Java中查找Shared Mutable数据错误的工具

我有一个庞大的遗留系统来维护。 代码库使用遍布各处的线程,这些线程共享大量可变数据。 我知道,听起来不错。 无论如何,不​​回答“从头开始重写整个应用程序”或者我会投票给你:-)我试图在代码库上运行一些静态分析工具,但这些似乎都没有抓住这种情况发生了很多在我们的源代码中:多个线程正在读取和写入未标记为volatile或同步的变量。 通常这发生在“runFlag”类型的变量上。 这方面的一个例子是在Effective Java第2版第260页上: public class StopThread { private static boolean stopRequested; public static void main(String[] args) throws InterruptedException { Thread backgroundThread = new Thread(new Runnable() { public void run() { int i = 0; while (!stopRequested) { i++; } } }); backgroundThread.start(); Thread.sleep(1000); stopRequested = true; } } 此示例永远不会在Windows / Linux上完成,并为Sun […]

Java工具,以改善我的清洁代码开发

是否有针对Java的静态分析/重构/ …工具专门针对清洁代码开发(CCD) ? 我知道静态分析(PMD,Findbugs,Checkstyle),dependency injection,测试和代码覆盖的常用工具。 但我正在寻找一个工具,它给我提示我的代码是多么干净( 例如这里和鲍勃叔叔的清洁代码中描述的 ),我如何使它更清洁,最好适应我的清洁代码等级 。 一个工具,也可以告诉我如何随着时间的推移我的CCD改进将是最佳的。 这种工具的一个例子是CcdAddIn ,它根据你当前的CCD等级显示CCD值,但它仅适用于visual studio 🙁 所以你知道Java的这些工具吗? 哪一个最好? 他们完成了以上哪些工作? 或者你有理由不存在这样的工具吗? 如果你不知道这样一个工具:你知道一个静态分析工具,可以配置为检查Uncle Bob的清洁代码中给出的标准,例如警告我有关名称或评论的气味似乎选择不当,方法太长或参数太多,并立即建议一个特定的重构来解决这个问题?

如何强制使用@Override注释?

是否有一个静态分析工具可以一致地强制使用@Override注释,可以在IDE之外运行? CheckStyle有一个MissingOverride检查,但它只适用于使用@inheritDoc Javadoc标记的方法。 我正在寻找一种可以在持续集成机器上的新构建配置中运行的工具。

如何通过类型签名搜索Java API方法?

是否有任何可用的开源工具支持通过参数类型集和返回类型搜索Java方法? 举个例子,假设我正在寻找一种为int数组生成哈希码的方法。 我搜索一个采用int []参数并返回int的方法: int[] -> int 生产 java.util.Arrays#hashCode(int[]) … 或者我可能想要找到一个方法,它接受一个字符串,并替换字符,并将字符替换为。 所以我搜索一个匹配的方法: String, char, char -> String 生产 java.lang.String#replace(char, char) … 理想情况下,我喜欢Java等效于Haskell的Hoogle ,它支持按类型签名搜索function。 我希望该工具: 忽略参数的顺序 包括接受’更宽’类型作为参数的方法(例如超类) 包含返回’narrower’类型作为返回值的方法(例如子类) 将’self’值作为实例方法的参数处理(例如’String – > int’将包含String#hashCode) 我知道许多IDE支持搜索获取或返回给定类型的方法,但尚未看到通过参数类型和返回类型的组合来缩小搜索范围的工具。

如何静态地在JAR中识别缺失的方法(二进制兼容性)

我想validation2个JAR之间的二进制兼容性。 根据这个答案中的建议,我使用了jboss tattletale,但它只能找到缺少的类。 如何找到缺少的方法? 有可能吗? 例如 “取决于 – ” Foo 课取决于Bar(像许多其他中产阶级工人一样) import org.overlyusedclassnames.Bar public class Foo{ public void someMethod(){ Bar tender = new Bar(); tender.getJohnnyRedLabel(); tender.getJohnnyBlueLabel(); //this method is new in the Bar class } } “编译时间”课程 package org.overlyusedclassnames; /** * @Since 1992 * Changes: added blue and gold Johnny Walker labels */ public class […]