It's a neat tool for Java that helps coders find part of your software that are plain redundant or might even run into "bugs" in the future (I prefer to call them "defects" rather than plain "bugs").
I had already used FindBugs in the Eclipse IDE last year, but only recently started using this tool for the NetBeans IDE and now I really appreciate its value.
To install this tool as an integrated plugin of Netbeans is fairly simple and covered widely across the Internet (here's an example).
When I started applying FindBugs on my current project, I noticed that my code was syntactically correct and ran as intended on the test cases, but FindBugs flagged some relevant concerns.
For example, it would flag a warning when new objects were created in a redundant manner or even when a given result might not be handled properly (null handling).
But what I found to be the most useful feature of them all, is the help for coding systems where multiple concurrent threads share information between them.
I mean, a developer already has some notion of practices necessary to prevent thread starvation and other concurrency errors but there exists a good amount of human effort and possibility of human flaw that frustrate your coding progress.
This is where FindBugs came to the rescue. While coding it was consistently able of reporting to me which methods were required to be synchronized in order to prevent thread locking and inherent locking of the outputs expected by other threads.
I would have been able of solving the synchronization issues on my own but having this tool available to help was a real time saver.
If you're still resistant to the idea of using FindBugs after reading all this, do try it by yourself at least once and then let me know what you think.