{"id":63,"date":"2018-04-03T15:43:51","date_gmt":"2018-04-03T13:43:51","guid":{"rendered":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/?p=63"},"modified":"2022-12-01T15:44:12","modified_gmt":"2022-12-01T14:44:12","slug":"werkzeuge-zur-erhaltung-der-softwarearchitektur-pmd-dry-teil-10","status":"publish","type":"post","link":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/?p=63","title":{"rendered":"Werkzeuge zur Erhaltung der Softwarearchitektur &#8211; PMD \/ DRY &#8211; Teil 10"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">PMD<\/h2>\n\n\n\n<p>Das Werkzeug PMD analysiert den Quellcode. Nach Angaben der Entwickler ist PMD <strong>kein<\/strong> Akronym. Besonders hervorzuheben sind folgende Analysepunkte<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cut and Paste Detector &#8211; Duplizierter Quellcode\n<ul class=\"wp-block-list\">\n<li>bl\u00e4ht den Quellcode auf<\/li>\n\n\n\n<li>erschwert die Wartung<\/li>\n\n\n\n<li>erh\u00f6ht den Testaufwand<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Zuweisungen in Schleifenbedingungen<\/li>\n\n\n\n<li>Komplexit\u00e4tsanalyse \/ Lose Kopplung (Law of Demeter)<\/li>\n\n\n\n<li>Umfangreiches, strukturiertes Regelwerk<\/li>\n\n\n\n<li>Erkennung von doppelten un\u00e4re Operationen (!!)<\/li>\n<\/ul>\n\n\n\n<p>F\u00fcr den Bereich Kommentare und Dokumentation ist PMD nicht geeignet (vergl. Checkstyle).<\/p>\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>SVN Pre-Commit Hook<\/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)\n<ul class=\"wp-block-list\">\n<li>DRY: Darstellung Cut and Paste Detector<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">False\/Positive<\/h3>\n\n\n\n<p>False\/Positives k\u00f6nnen auf folgende Weisen markiert werden<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Parametrisierung der Regeln<\/li>\n\n\n\n<li>Codestellen \u00fcber Annotation oder Kommentare markieren<\/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<p>Es werden verschiedene Regelpakete \/ Module bereitgestellt.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Java f\u00fcr JEE \/ Android<\/li>\n\n\n\n<li>https:\/\/pmd.github.io\/pmd-5.4.1\/pmd-java\/rules\/index.html<\/li>\n\n\n\n<li>nicht Java Code (z.B. JSF, JSP, JavaScript)<\/li>\n<\/ul>\n\n\n\n<p>Des Weiteren sind eigene Erweiterungen m\u00f6glich, wenn auch meistens nicht notwendig<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Java \/ Xpath<\/li>\n\n\n\n<li>http:\/\/pmd.sourceforge.net\/pmd-4.3.0\/howtowritearule.html<\/li>\n\n\n\n<li>http:\/\/pmd.sourceforge.net\/pmd-4.3.0\/xpathruletutorial.html<\/li>\n\n\n\n<li>https:\/\/pmd.github.io\/latest\/pmd-java\/rules\/index.html<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Beispiel Blacklist f\u00fcr Regeln<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?>\n&lt;ruleset xmlns=\"http:\/\/pmd.sourceforge.net\/ruleset\/2.0.0\"\n         xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n         name=\"pmd-eclipse\"\n         xsi:schemaLocation=\"http:\/\/pmd.sourceforge.net\/ruleset\/2.0.0 http:\/\/pmd.sourceforge.net\/ruleset_2_0_0.xsd\">\n    &lt;description>shoeso RuleSet&lt;\/description>\n\n    &lt;!-- Regeldefinition siehe https:\/\/pmd.github.io\/latest\/pmd-java\/rules\/index.html -->\n\n    &lt;rule ref=\"rulesets\/java\/basic.xml\">\n        &lt;exclude name=\"AvoidUsingHardCodedIP\"\/>\n        &lt;exclude name=\"CollapsibleIfStatements\"\/>\n    &lt;\/rule>\n\n    &lt;rule ref=\"rulesets\/java\/clone.xml\">\n    &lt;\/rule>\n    ...\n&lt;\/ruleset><\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>PMD Das Werkzeug PMD analysiert den Quellcode. Nach Angaben der Entwickler ist PMD kein Akronym. Besonders hervorzuheben sind folgende Analysepunkte F\u00fcr den Bereich Kommentare und Dokumentation ist PMD nicht geeignet (vergl. Checkstyle). Integration False\/Positive False\/Positives k\u00f6nnen auf folgende Weisen markiert werden Regelerweiterung Es werden verschiedene Regelpakete \/ Module bereitgestellt. Des Weiteren sind eigene Erweiterungen m\u00f6glich, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-63","post","type-post","status-publish","format-standard","hentry","category-softwarearchitektur"],"_links":{"self":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/63","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=63"}],"version-history":[{"count":1,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/63\/revisions"}],"predecessor-version":[{"id":64,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/63\/revisions\/64"}],"wp:attachment":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=63"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=63"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=63"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}