{"id":65,"date":"2018-04-04T15:44:39","date_gmt":"2018-04-04T13:44:39","guid":{"rendered":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/?p=65"},"modified":"2022-12-01T15:44:59","modified_gmt":"2022-12-01T14:44:59","slug":"werkzeuge-zur-erhaltung-der-softwarearchitektur-findbugs-teil-11","status":"publish","type":"post","link":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/?p=65","title":{"rendered":"Werkzeuge zur Erhaltung der Softwarearchitektur &#8211; FindBugs &#8211; Teil 11"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">FindBugs<\/h2>\n\n\n\n<p>Der dritte im Bunde der &#8222;magischen drei&#8220; ist FindBugs. FindBugs hat eine fantastische Fehlererkennung. Wir hatten intern bereits \u00f6fter Diskussionen zu den angezeigten Meldungen und mussten im Allgemeinen am Ende immer die Meldungen von FindBugs best\u00e4tigen. Im Gegensatz zu den anderen Tools analysiert FindBugs den Byte-Code.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Besonderheiten<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>bestes Werkzeug f\u00fcr Fehlerpr\u00fcfungen (NPE, &#8230;)<\/li>\n\n\n\n<li>Pr\u00fcfung logischer Ausdr\u00fccke<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Integration<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>IDE<\/li>\n\n\n\n<li>Maven-Build (Ausf\u00fchrung und Erzeugen von Basisdaten)<\/li>\n\n\n\n<li>Jenkins (GUI und Grenze f\u00fcr ung\u00fcltige Artefakte)<\/li>\n<\/ul>\n\n\n\n<p>Ein (einfacher) SVN Pre-Commit Hook Einsatz ist hier nat\u00fcrlich nicht m\u00f6glich, da FindBugs den Byte-Code analysierert, der erst erzeugt werden m\u00fcsste.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">False\/Positive<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Parametrisierung<\/li>\n\n\n\n<li>Codestellen \u00fcber Annotation von der Pr\u00fcfung ausschlie\u00dfen<\/li>\n\n\n\n<li>Ausschluss von Projekten \/ Packages<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Regelerweiterung<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Externe Erweiterungen: z.B. Security Regeln http:\/\/find-sec-bugs.github.io\/<\/li>\n\n\n\n<li>Eigene Regeln in Java mit Wissen \u00fcber ByteCode erstellen<\/li>\n\n\n\n<li>https:\/\/www.ibm.com\/developerworks\/library\/j-findbug2\/<\/li>\n<\/ul>\n\n\n\n<p>Beispiel Blacklist f\u00fcr Regeln<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;FindBugsFilter&gt;\n    &lt;Match&gt;\n        &lt;Bug code=\"EI,EI2,Se,SECSQLIJPA,SECHCP,SECPTI,SECCI,SECPTO,SECUR\" \/&gt;\n    &lt;\/Match&gt;\n    &lt;Match&gt;\n        &lt;Class name=\"~.*\\.R\\$.*\" \/&gt;\n    &lt;\/Match&gt;\n    &lt;Match&gt;\n        &lt;Class name=\"~.*\\.Manifest\\$.*\" \/&gt;\n    &lt;\/Match&gt;\n&lt;\/FindBugsFilter&gt;\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Stand bis hierher<\/h2>\n\n\n\n<p>Mit den bis hier vorgestellten Werkzeugen haben wir die Pflicht der QS sichergestellt. Mit der Grundausstattung Open Tasks, FindBugs, PMD und Checkstyle k\u00f6nnen eine Vielzahl technischer Schulden vermieden und automatisch gefunden werden. Die Regeln sind bei allen Tools konfigurierbar und k\u00f6nnen sukzessive eingef\u00fchrt werden.<\/p>\n\n\n\n<p>Aus meiner Sicht sollte <strong>niemand<\/strong> auf dies Tools verzichten. Wenn im aktuellen Projekt noch zu viele Probleme existieren, kann mit kleinen Regels\u00e4tzen gearbeitet werden. Wenn die Integration in den Build-Prozess nicht m\u00f6glich ist, k\u00f6nnen die Werkzeuge auch nur in der IDE eingesetzt werden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>FindBugs Der dritte im Bunde der &#8222;magischen drei&#8220; ist FindBugs. FindBugs hat eine fantastische Fehlererkennung. Wir hatten intern bereits \u00f6fter Diskussionen zu den angezeigten Meldungen und mussten im Allgemeinen am Ende immer die Meldungen von FindBugs best\u00e4tigen. Im Gegensatz zu den anderen Tools analysiert FindBugs den Byte-Code. Besonderheiten Integration Ein (einfacher) SVN Pre-Commit Hook Einsatz [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-65","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"_links":{"self":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/65","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=65"}],"version-history":[{"count":1,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/65\/revisions"}],"predecessor-version":[{"id":66,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/65\/revisions\/66"}],"wp:attachment":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=65"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=65"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=65"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}