FindBugs looks for bugs in Java programs. It is based on the concept of bug patterns. A bug pattern is a code idiom that is often an error. Bug patterns arise for a variety of reasons: * Difficult language features * Misunderstood API methods * Misunderstood invariants when code is modified during maintenance * Garden variety mistakes: typos, use of the wrong boolean operator FindBugs uses static analysis to inspect Java bytecode for occurrences of bug patterns. We have found that FindBugs finds real errors in most Java software. Because its analysis is sometimes imprecise, FindBugs can report false warnings, which are warnings that do not indicate real errors. In practice, the rate of false warnings reported by FindBugs is generally less than 50%. FindBugs is free software, available under the terms of the Lesser GNU Public License. It is written in Java, and can be run with any virtual machine compatible with Sun’s JDK 1.4. It can analyze programs written for any version of Java. FindBugs was originally developed by Bill Pugh, and is maintained by Bill Pugh and David Hovemeyer. FindBugs uses BCEL to analyze Java bytecode. It uses dom4j for XML manipulation.