CINXE.COM

Using Static Analysis to improve your Java Coding - EvilTester.com

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="X-HUGO-PAGE-KIND" content="page"> <meta name="X-HUGO-PAGE-TYPE" content="blog"> <meta name="robots" content="index, follow"> <title>Using Static Analysis to improve your Java Coding - EvilTester.com</title> <meta name="description" content="Using SpotBugs, CheckStyle, PMD, FindBugs from IntelliJ for Static Analysis to improve your Java Coding."> <meta name="author" content="Alan Richardson"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link href="https://www.eviltester.com/index.xml" rel="alternate" type="application/rss+xml" title="EvilTester.com - Exploratory Testing, Automation, Development (Agile &#43; Web)"> <link href="https://www.eviltester.com/index.xml" rel="feed" type="application/rss+xml" title="EvilTester.com - Exploratory Testing, Automation, Development (Agile &#43; Web)"> <link rel="canonical" href="https://www.eviltester.com/post/java/using-static-analysis-for-java.html"> <meta property="og:title" content="Using Static Analysis to improve your Java Coding"> <meta name="twitter:title" content="Using Static Analysis to improve your Java Coding"> <meta property="og:description" content="Using SpotBugs, CheckStyle, PMD, FindBugs from IntelliJ for Static Analysis to improve your Java Coding."> <meta name="twitter:description" content="Using SpotBugs, CheckStyle, PMD, FindBugs from IntelliJ for Static Analysis to improve your Java Coding."> <meta property="og:url" content="https://www.eviltester.com/post/java/using-static-analysis-for-java.html"> <meta name="twitter:card" content="summary_large_image"> <meta property="og:image" content="https://www.eviltester.com/images/postthumbs/2020-06-24-using-static-analysis-to-improve-your-java-coding.jpg"> <meta name="twitter:image" content="https://www.eviltester.com/images/postthumbs/2020-06-24-using-static-analysis-to-improve-your-java-coding.jpg"> <link rel="shortcut icon" href="/images/icons/favicon.ico"> <link rel="stylesheet" href="/css/eviltester.css"> <link rel="stylesheet" href="/css/replacestrap.css"> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7132305589272099" crossorigin="anonymous"></script> </head> <body> <header> <a class="skip-main" href="#skip-to-main-content">Skip to main content</a> <div class="container cssmenu"> <nav aria-label="Site menu"> <div id="cssmenu"> <ul> <li class="rootdropdownmenuitem"><a class="brand-link" href="/">Home</a></li> <li class="rootdropdownmenuitem"><a href="/blog/">Blog</a> </li> <li class="rootdropdownmenuitem"><a href="/page/books/">Books</a> <ul class="dropdownmenu"> <li class="dropdownmenuitem"><a href="/page/books/java-for-testers/">Java For Testers</a></li> <li class="dropdownmenuitem"><a href="/page/deareviltester/">Dear Evil Tester</a></li> <li class="dropdownmenuitem"><a href="/page/books/automating-testing-api-casestudy/">Automating API</a></li> <li class="dropdownmenuitem"><a href="/page/books/">... All Books</a></li> </ul> </li> <li class="rootdropdownmenuitem"><a href="/page/onlinetraining/courses/">Training</a> <ul class="dropdownmenu"> <li class="dropdownmenuitem"><a href="/page/onlinetraining/courses/#evil-tester-talks-testing">Evil Tester Talks</a></li> <li class="dropdownmenuitem"><a href="/page/onlinetraining/courses/#technical-web-testing-101">Technical Web Testing</a></li> <li class="dropdownmenuitem"><a href="/page/onlinetraining/courses/#protect-the-square">JavaScript</a></li> <li class="dropdownmenuitem"><a href="/page/onlinetraining/courses/">... All Courses</a></li> </ul> </li> <li class="rootdropdownmenuitem"><a href="/page/services/">Resources</a> <ul class="dropdownmenu"> <li class="dropdownmenuitem"><a href="/page/agile/">Agile Testing</a></li> <li class="dropdownmenuitem"><a href="/page/recommended-reading/">Recommended Books List</a></li> <li class="dropdownmenuitem"><a href="/page/patreon/">Patreon Mentoring</a></li> </ul> </li> <li class="rootdropdownmenuitem"><a href="/conference/">Talks</a> </li> <li class="rootdropdownmenuitem"><a href="/page/tools/">Tools</a> </li> <li class="rootdropdownmenuitem"><a href="/show/">Podcast</a></li> <li class="rootdropdownmenuitem"><a href="https://www.youtube.com/user/EvilTesterVideos?sub_confirmation=1&cbrd=1&ucbcb=1">Videos</a></li> <li class="rootdropdownmenuitem"><a href="/page/contact/">Contact</a> <ul class="dropdownmenu"> <li class="dropdownmenuitem"><a href="/page/emaillist/">Email List</a></li> <li class="dropdownmenuitem"><a href="/page/contact/">Contact Form</a></li> </ul> </li> </ul> </div> </nav> </div> </header> <div class="container"> <section id="content" class="content"> <div class="container main-content"> <div class="image-center"> <img alt="blog title image" class="image-blog-thumb" src="/images/postthumbs/2020-06-24-using-static-analysis-to-improve-your-java-coding.jpg"> </div> <div class="summary-post-details"> <p class="meta"> 3 minute read - <a class="catlabel" href="https://www.eviltester.com/categories/intellij/">IntelliJ </a><a class="catlabel" href="https://www.eviltester.com/categories/java-for-testers/">Java For Testers </a><a class="catlabel" href="https://www.eviltester.com/categories/java/">Java </a> </p> </div> <div class="jumbotron"> <h1 id="title" class="text-center">Using Static Analysis to improve your Java Coding</h1> </div> <div style="float:right">Jun 24, 2020</div> <nav id="TableOfContents"> <ul> <li><a href="#using-static-analysis">Using Static Analysis</a></li> <li><a href="#sonarlint">SonarLint</a></li> <li><a href="#pmd-plugin">PMD Plugin</a></li> <li><a href="#checkstyle-plugin">CheckStyle Plugin</a></li> <li><a href="#spotbugs-plugin">SpotBugs Plugin</a></li> <li><a href="#demo-of-qaplug-plugin-with-pmd-findbugs-and-checkstyle">Demo of QAPlug plugin with PMD, FindBugs and CheckStyle</a></li> <li><a href="#related-links">Related Links</a></li> </ul> </nav> <div id="skip-to-main-content" tabindex="-1"></div> <section id="postcontent" class="postcontent"> <article> <p>I&rsquo;m always looking for simple ways that I can improve my Java programming. And SpotBugs, CheckStyle and PMD can help me do that.</p> <p><em>NOTE: updated 20200625 because I no longer use QAPlug or FindBugs, I install PMD, CheckStyle and SpotBugs directly from the IntelliJ plugins. Updated 20200713 to include recommendation of SonarLint</em></p> <p>I&rsquo;m always looking for simple ways that I can improve my Java programming.</p> <p>I use SonarLint, PMD, SpotBugs, CheckStyle IntelliJ Plugins my IDE.</p> <ul> <li><a href="https://www.sonarlint.org/intellij/">SonarLint</a></li> <li><a href="https://plugins.jetbrains.com/plugin/1137-pmdplugin">PMD Plugin</a></li> <li><a href="https://plugins.jetbrains.com/plugin/14014-spotbugs">SpotBugs Plugin</a></li> <li><a href="https://plugins.jetbrains.com/plugin/1065-checkstyle-idea">CheckStyle Plugin</a></li> </ul> <h2 id="using-static-analysis">Using Static Analysis</h2> <p>Using Static Analysis is like having a coach sitting by you when you are writing code. And some of the suggestions the tools make you won&rsquo;t understand, so you have to search and learn what they mean - forcing you to learn that little bit more about your chosen language.</p> <p>Don&rsquo;t take all the suggestions at face value. You choose which suggestions to act on, and you can configure the tools to warn you about some things and not others.</p> <p>Over time, you might choose to add the command line and build versions of the tools into your CI process rather than just your personal coding approach.</p> <h2 id="sonarlint">SonarLint</h2> <p><a href="https://www.linkedin.com/in/kathyrollo">Katherine Rollo</a> recommended I try <a href="https://www.sonarlint.org/intellij/">SonarLint</a>.</p> <p>The interesting part of SonarLint is that it works &lsquo;on the fly&rsquo;. It is a little easier to use because you open the tab for SonarLint and it shows you any issues with the current file you are working with.</p> <p>I&rsquo;ve been finding the speed and accessiblity of the tool very useful, so I have been using SonarLint more than the other tools, which means I&rsquo;ve been using Static Analysis to help me improve my coding more than ever.</p> <p>By keeping the tab open, it is like having someone to pair with, who comments on your Java coding as you go. I find it very useful.</p> <ul> <li>Open the SonarLint Tab</li> <li>Read the results of the analysis</li> </ul> <iframe src="https://share.getcloudapp.com/BluOm5ZW?embed=true" style="border:none" allowfullscreen="true"></iframe> <p><a href="https://share.getcloudapp.com/BluOm5ZW">SonarLint Demo</a></p> <h2 id="pmd-plugin">PMD Plugin</h2> <ul> <li>right click on the project</li> <li>choose &ldquo;PMD&rdquo;</li> <li>choose profile</li> <li>analyse the results</li> </ul> <iframe src="https://share.getcloudapp.com/yAuYyN6L?branding=true&amp;embed=true&amp;title=true" width="575" height="400" style="border:none" allowtransparency="true" allowfullscreen="true"></iframe> <p><a href="https://share.getcloudapp.com/yAuYyN6L">PMD Demo</a></p> <h2 id="checkstyle-plugin">CheckStyle Plugin</h2> <ul> <li>configure using Preferences \ Tools \ Checkstyle</li> <li>set to scan scope including tests</li> <li>click the Checkstyle tab</li> <li>Check Project</li> <li>Analyse the results</li> </ul> <iframe src="https://share.getcloudapp.com/JruLxJAP?branding=true&amp;embed=true&amp;title=true" width="575" height="400" style="border:none" allowtransparency="true" allowfullscreen="true"></iframe> <p><a href="https://share.getcloudapp.com/JruLxJAP">CheckStyle Demo</a></p> <h2 id="spotbugs-plugin">SpotBugs Plugin</h2> <ul> <li>click the SpotBugs tab</li> <li>analyse project file including test sources</li> <li>Analyse the Results</li> </ul> <iframe src="https://share.getcloudapp.com/Qwul5m4Q?branding=true&amp;embed=true&amp;title=true" width="575" height="400" style="border:none" allowtransparency="true" allowfullscreen="true"></iframe> <p><a href="https://share.getcloudapp.com/Qwul5m4Q">SpotBugs Demo</a></p> <h2 id="demo-of-qaplug-plugin-with-pmd-findbugs-and-checkstyle">Demo of QAPlug plugin with PMD, FindBugs and CheckStyle</h2> <div class="video-container"> <iframe width="560" height="315" src="https://www.youtube.com/embed/o4pdkgHfQS4" allow="autoplay; encrypted-media" allowfullscreen></iframe> </div> <div><p class="center-text"><a href="https://www.youtube.com/watch?v=o4pdkgHfQS4" target="_blank">Watch on YouTube</a></p></div> <p>QAPlug wraps it all up in an right click menu item to Analyze the source code and shows all the items in a list for you to work through.</p> <p>Just make sure you double click on the lowest branch in the tree to jump right to the code position where the tool identified the issue or suggestion.</p> <h2 id="related-links">Related Links</h2> <ul> <li><a href="https://checkstyle.sourceforge.io/">CheckStyle</a></li> <li><a href="https://pmd.github.io/">PMD</a></li> <li><a href="https://spotbugs.github.io/">SpotBugs</a></li> </ul> </article> </section> <div class="post-footer-info"> <div style="background: #bcebb6;"> <p>If you like this content then you might be interested in my Patreon Community. I create exclusive content multiple times a week. Gain access to Patreon only content and online training courses for as little as $1 per month. <a href="/page/patreon/">Learn more about the EvilTester Patreon Community.</a></p> </div> <div class="newsletter-signup-promo"> </div> <div class="blogs-index-links"> <p> <a href="/blog/">All Posts</a> | <a href="/categories/">Categories</a> | <a href="/archive/">Archive</a> </p> </div> <div class="post-forward-back"> <div> <a href="https://www.eviltester.com/post/junit/differences-between-junit-4-5/" title="Basic Differences Between JUnit 4 and Junit 5">&lt;&lt; Basic Differences Between JUnit 4 and Junit 5</a> </div> <div style="text-align: right"> <a href="https://www.eviltester.com/show/013-how-to-get-a-job-in-testing/" title="Episode 013 - How to Get a Job in Testing - The Evil Tester Show">Episode 013 - How to Get a Job in Testing - The Evil Tester Show &gt;&gt;</a> </div> </div> </div> </div> <div class="sidebar"> <div style="background:#dbfbbf"> <h2 style="background:#aaf5a2">Join The Evil Tester Patreon Community</h2> <p><strong>Free training courses and ebooks (sold for over $200).</strong></p> <p><a href="/patreon">Learn more about EvilTester on Patreon</a></p> <p>Support our work and gain access to hints, tips, and prompts for improving your Software Development skills. Regular updates, multiple times a week for as little as $1 per month.</p> <p><a href="https://www.testerhq.com/member2">Patreon Members Login for exclusive courses and ebooks.</a></p> </div> <hr> <div> <ul> <li><a href="/blog/">Blog</a></li> <li><a href="/show/">Podcast</a></li> <li><a href="https://www.youtube.com/user/EvilTesterVideos?sub_confirmation=1&cbrd=1&ucbcb=1">YouTube</a></li> <li><a href="/page/onlinetraining/courses/">Online Training</a></li> <li><a href="/page/books/">Books</a></li> </ul> </div> <div> <h2>Contact</h2> <p><a href="/page/contact/">Contact Me</a></p> </div> <div class="sidebar-emaillist"> <div id="mc_embed_signup"> <form action="https://eviltester.us4.list-manage.com/subscribe/post?u=83b0fb8232910a09826751423&amp;id=2ee9bf52d6" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate> <div id="mc_embed_signup_scroll"> <h2>Join Email List</h2> <div class="mc-field-group"> <label for="mce-EMAIL">Email Address </label> <input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL"> </div> <div id="mce-responses" class="clear"> <div class="response" id="mce-error-response" style="display:none"></div> <div class="response" id="mce-success-response" style="display:none"></div> </div> <div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" name="b_83b0fb8232910a09826751423_2ee9bf52d6" tabindex="-1" value=""></div> <div class="clear"><input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button"></div> </div> </form> </div> <p class="center-text"><a href="/page/emaillist/">Email Privacy Details</a>.</p> </div> <hr> <div class="sidebar-courses"> <h2 class="title">Online Training Courses</h2> <p><a href="/page/onlinetraining/courses/#technical-web-testing-101">Technical Web Testing Course</a></p> <p><a href="/page/onlinetraining/courses/#technical-web-testing-101"><img src="/images/sidebar/techwebtesting_course.jpg" alt="Technical Web Testing Course" class="aligncenter"></a></p> <p><a href="/page/onlinetraining/courses/#evil-tester-talks-testing">Evil Tester Talks Bundle</a></p> <p><a href="/page/onlinetraining/courses/#evil-tester-talks-testing"><img src="/images/sidebar/evil_tester_talks_course.jpg" alt="Evil Tester Talks Technical Testing Bundle" class="aligncenter"></a></p> <p><a href="/page/onlinetraining/courses/#selenium-webdriver-support-classes-with-java">Selenium WebDriver Support Classes</a></p> <p><a href="/page/onlinetraining/courses/#selenium-webdriver-support-classes-with-java"><img src="/images/sidebar/support-classes-240x126.png" alt="Selenium WebDriver Support Classes in Java" class="aligncenter"></a></p> <p><a href="/page/onlinetraining/courses/">All Courses</a></p> </div> <hr> <div class="sidebar-books"> <h2>Books</h2> <a href="/page/deareviltester/" title="Dear Evil Tester"> <img src="/images/sidebar/dear_evil_tester_book.png" alt="Buy Dear Evil Tester Book"> </a> <a href="/page/books/java-for-testers/" title="Java For Testers"> <img src="/images/sidebar/java_for_testers_book.png" alt="Buy Java For Testers Book"> </a> <a href="/page/books/automating-testing-api-casestudy/" title="Automating and Testing a REST API"> <img src="/images/sidebar/automating_testing_rest_api_book.jpg" alt="Buy Automating and Testing a REST API"> </a> <a href="/page/books/selenium-simplified/" title="Selenium Simplified"> <img src="/images/sidebar/selenium_simplified_book.gif" alt="Buy Selenium Simplified Book"> </a> <p><a href="/page/books/">Learn more about our books</a></p> </div> <hr> <div> <h2>Follow</h2> <div class="social-media-icons"> <p> <a href="/page/contact/"><img src="/images/icons/email.png" alt="Connect via email" title="Contact Form"></a> <a href="https://twitter.com/eviltester"><img src="/images/icons/twitter.png" alt="Follow on Twitter" title="Twitter"></a> <a href="https://www.youtube.com/user/EvilTesterVideos?sub_confirmation=1&cbrd=1&ucbcb=1"><img src="/images/icons/youtube.png" alt="Subscribe to my YouTube Channel" title="YouTube"></a> <a href="https://uk.linkedin.com/in/eviltester"><img src="/images/icons/linkedin.png" alt="Connect on LinkedIn" title="Linkedin"></a> <a href="https://github.com/eviltester"><img src="/images/icons/github.png" alt="Follow on GitHub" title="Github"></a> <a href="https://www.pinterest.co.uk/eviltester"><img src="/images/icons/pinterest.png" alt="Follow on Pinterest" title="Pinterest"></a> <a href="https://www.instagram.com/eviltester/"><img src="/images/icons/instagram.png" alt="Follow on Instagram" title="Instagram"></a> <a href="https://www.facebook.com/eviltester/"><img src="/images/icons/facebook.png" alt="Follow on Facebook" title="Facebook"></a> <a class="rss" href="/index.xml"><img src="/images/icons/rss.png" alt="Subscribe to my RSS Feed" title="RSS Feed"></a> </p> </div> </div> <div> <h2>Podcasts and Videos</h2> <p><a href="/show/">Podcasts</a></p> <p><a href="https://www.youtube.com/user/EvilTesterVideos?sub_confirmation=1&cbrd=1&ucbcb=1">Subscribe to YouTube Channel</a></p> </div> <div> <h2>Need some motivation?</h2> <p>Try the <a href='/apps/sloganizer/version/default/sloganizer'>Sloganizer</a></p> <div class="sidebar-sloganizer"> <p class="sidebar-slogan">"<span id="sidebar-slogan">Of course I'm not evil, I just pretend to be.</span>"</p> </div> </div> <div> <h2>Recent Blog Posts</h2> <p><a href="https://www.eviltester.com/show/021-context-in-context-driven-testing/">Episode 021 - Context In Context Driven Testing - The Evil Tester Show</a></p> <p><a href="https://www.eviltester.com/blog/eviltester/modelling/modelling-for-naming/">Modelling Software Testing for Naming and Understanding</a></p> <p><a href="https://www.eviltester.com/blog/eviltester/devops/some-kubernetes-kubectl-cheat-sheet-notes/">Kubernetes kubectl cheat sheet notes</a></p> <p><a href="https://www.eviltester.com/blog/eviltester/news/github-updates-and-talk-recordings/">Updated Github Repos and Released Conference Talk</a></p> <p><a href="https://www.eviltester.com/blog/eviltester/career-advice/recruitment/recruiting-and-interviewing-testers/">Recruit And interview people. Do not just fill roles</a></p> <p><a href="https://www.eviltester.com/blog/eviltester/apps-i-wrote/the-triangle-application/">Testing The Triangle Application</a></p> <p><a href="https://www.eviltester.com/blog/eviltester/modelling/on-modelling/">On Modelling</a></p> <p><a href="https://www.eviltester.com/blog/eviltester/summaries/2023-06-june-2023-summary/">June 2023 EvilTester.com and Patreon Content Summary</a></p> <ul> <li><a href="/categories/">All Blog Categories</a></li> <li><a href="/archive/">Blog Post Archive List</a></li> </ul> </div> <div> <h2>Also...</h2> <p><a href="/page/recommended-reading/">Recommended Reading List</a></p> </div> </div> </section> </div> <div style="clear:both"> <footer> <div class="container footer"> <div class="fifty-left"> <p>&copy; Alan Richardson, <a href="https://compendiumdev.co.uk">Compendium Developments Ltd</a> 2022 - <a href="/page/privacy/">Privacy Policy</a> | <a href="/page/contact/">Contact Us</a> </p> </div> <div class="fifty-right"> <div style="text-align: center"> <div class="social-media-icons"> <p> <a href="/page/contact/"><img src="/images/icons/email.png" alt="Connect via email" title="Contact Form"></a> <a href="https://twitter.com/eviltester"><img src="/images/icons/twitter.png" alt="Follow on Twitter" title="Twitter"></a> <a href="https://www.youtube.com/user/EvilTesterVideos?sub_confirmation=1&cbrd=1&ucbcb=1"><img src="/images/icons/youtube.png" alt="Subscribe to my YouTube Channel" title="YouTube"></a> <a href="https://uk.linkedin.com/in/eviltester"><img src="/images/icons/linkedin.png" alt="Connect on LinkedIn" title="Linkedin"></a> <a href="https://github.com/eviltester"><img src="/images/icons/github.png" alt="Follow on GitHub" title="Github"></a> <a href="https://www.pinterest.co.uk/eviltester"><img src="/images/icons/pinterest.png" alt="Follow on Pinterest" title="Pinterest"></a> <a href="https://www.instagram.com/eviltester/"><img src="/images/icons/instagram.png" alt="Follow on Instagram" title="Instagram"></a> <a href="https://www.facebook.com/eviltester/"><img src="/images/icons/facebook.png" alt="Follow on Facebook" title="Facebook"></a> <a class="rss" href="/index.xml"><img src="/images/icons/rss.png" alt="Subscribe to my RSS Feed" title="RSS Feed"></a> </p> </div> </div> </div> </div> </footer> </div> <script> var links = document.links; for (var i = 0, linksLength = links.length; i < linksLength; i++) { if (links[i].hostname != window.location.hostname) { links[i].target = '_blank'; links[i].setAttribute("rel","noopener noreferrer"); } } </script> <script defer data-domain="eviltester.com" src="https://plausible.io/js/plausible.js"></script> <script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10