{"id":52,"date":"2018-03-09T16:50:25","date_gmt":"2018-03-09T15:50:25","guid":{"rendered":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/?p=52"},"modified":"2022-11-30T16:50:48","modified_gmt":"2022-11-30T15:50:48","slug":"werkzeuge-zur-erhaltung-der-softwarearchitektur-werkzeugintegration-und-konfiguration-teil-6","status":"publish","type":"post","link":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/?p=52","title":{"rendered":"Werkzeuge zur Erhaltung der Softwarearchitektur &#8211; Werkzeugintegration und -konfiguration &#8211; Teil 6"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Werkzeugintegration<\/h2>\n\n\n\n<p>Die Tools zur Vermeidung technischer Schulden k\u00f6nnen auf verschiedenen Ebenen in die Entwicklung eingebunden werden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Entwicklungsumgebung<\/h3>\n\n\n\n<p>In der Entwicklungsumgebung erhalten wir bei der t\u00e4glichen Arbeit direkt Feedback zu Problemen. Beim Speichern und automatischen Kompilieren der Dateien werden Marker erstellt, die Probleme im Quellcode kennzeichnen. Durch dieses direkte Feedback k\u00f6nnen wir bei der Entwicklung umgehend Schulden vermeiden. In den IDEs gibt es verschiedene Varianten der Integration. In Eclipse laufen die meisten Prozesse kontinuierlich. Bei jedem Speichern oder auch beim &#8222;Builden&#8220; des Workspaces werden alle Pr\u00fcfungen durchgef\u00fchrt und direkt angezeigt. Dieses Vorgehen ben\u00f6tigt nat\u00fcrlich etwas Zeit, liefert aber auch die besten Informationen w\u00e4hrend der Entwicklung. Insbesondere wenn wir technische Schulden Abbauen wollen, ist so ein Gesamt\u00fcberblick sichergestellt. IntelliJ bzw. Android Studio verfolgen eher eine Pre-Commit Strategie. Die Pr\u00fcfungen werden nicht permanent durchgef\u00fchrt, sondern mit den Aktionen beim einchecken in das SCM.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">SCM &#8211; Einchecken<\/h3>\n\n\n\n<p>Beim Einchecken in das Sourcecode-Managmentsystem k\u00f6nnen mit &#8222;pre-commit hooks&#8220; Aktionen durchgef\u00fchrt werden. Auf dem Server k\u00f6nnen so Tools beim Einchecken ausgef\u00fchrt und bei nicht eingehaltenen Regeln die Daten\u00fcbernahme mit einen Fehler beenden werden. Durch das Ablehnen der Daten ist dies eine &#8211; im Gegensatz zu der mehr oder weniger &#8222;freiwilligen&#8220; Pr\u00fcfung in der IDE &#8211; harte Grenze f\u00fcr nicht konformen Code. Erst wenn wir in der Entwicklung alle Fehler behoben haben gelangt der Code und das zugeh\u00f6rige Artefakt in den weiteren Build-Prozess.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">CI-System<\/h3>\n\n\n\n<p>Bei der regelm\u00e4\u00dfigen Erzeugung der Builds werden z.B. w\u00e4hrend des Maven-Build-Prozesses die Analyseergebnisse verschiedener Tools abgelegt. Diese werden dann im CI-System (hier Jenkins) in der GUI oder in Dashboards angezeigt. Bei der Auswertung der Analysedaten kann Jenkins bei (neuen) Fehlern den Build-Prozess brechen und somit weitere Entwicklungsaktivit\u00e4ten fordern. Wird Jenkins so konfiguriert, stellt dies eine weitere harte Grenze dar, die verhindert, dass nicht konformer Code in das System gelangt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Anwendungen au\u00dferhalb des Build-Prozesses<\/h3>\n\n\n\n<p>Auch au\u00dferhalb des Builds k\u00f6nnen Pr\u00fcfungen erfolgen. Werkzeuge des QS-Managements (z.B. SonarQube) k\u00f6nnen verschiedene Analysen kombinieren und auch weiterreichende Informationen wie Begr\u00fcndungen zu nicht korrigierten Fehlern speichern. Werkzeuge zur explorativen Code-Analyse wie jQAssistant erm\u00f6glichen interaktive Analysen der Softwarestruktur und sehr weitreichende Regeln (hierzu sp\u00e4ter mehr).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jenkins &#8211; Werkzeugkonfiguration<\/h2>\n\n\n\n<p>In Jenkins k\u00f6nnen die im Folgenden beschriebenen Konfigurationen sowohl in der klassischen GUI basierten Job-Definition, als auch in den neuen &#8222;Pipeline as code&#8220; Builds erfolgen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Post-Build-Aktionen<\/h3>\n\n\n\n<p>Post-Build-Aktionen sind der Kern des automatischen Prozesses. In Ihnen werden f\u00fcr die verschiedenen Werkzeuge Schwellwerte definiert,<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>die den Gesundheitszustand des Builds beeinflussen.<\/li>\n\n\n\n<li>die sicherstellen, dass keine oder wenige technische Schulden entstehen.<\/li>\n<\/ul>\n\n\n\n<p>Basirend auf den Werten wird dann der Build abgebrochen oder nur als &#8222;nicht gesund&#8220; gekennzeichnet.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Das ist ja ganz nett, aber ich habe kein Greenfield Projekt!!!<\/h3>\n\n\n\n<p>Wenn die QS nachtr\u00e4glich in das Projekt integriert wird, ist im Allgemeinen die Anzahl der Meldungen anf\u00e4nglich sehr hoch. Diese k\u00f6nnen dann unm\u00f6glich in angemessener Zeit bearbeitet werden. Eine M\u00f6glichkeit w\u00e4re die \u00c4nderung bzw. Reduzierung der angewendeten Regeln. Dies ist aber nicht zielf\u00fchrend. In einer solchen Situation kann Jenkins feststellen, ob neue Regelverst\u00f6\u00dfe aufgetreten sind. Hierf\u00fcr vergleicht Jenkins die aktuellen Fehler mit denen eines Referenzbuilds. Einzustellen ist dies ebenfalls in den &#8222;Post-Build-Schritten&#8220; unter &#8222;Neue Warnungen bestimmen (bez\u00fcglich Referenzbuild)&#8220;. Durch dieses Vorgehen ist es m\u00f6glich neue Schulden zu verhindern ohne alte vollst\u00e4ndig abbauen zu m\u00fcssen. Es wird als die M\u00f6glichkeit eines geordneten Abbaus von technischen Schulden geschaffen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jenkins &#8211; Dashboard<\/h2>\n\n\n\n<p>In Jenkins werden alle Fehler und Ergebnisse in Dashboards oder als \u00dcbersichtsseiten angezeigt. In diesen k\u00f6nnen wir mit &#8222;click through&#8220;, wie man es eventuell aus DWH Produkten kennt, bis auf Quellcodeebene die Fehler verfolgen und nach verschiedenen Kategorien unteruschen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Werkzeugintegration Die Tools zur Vermeidung technischer Schulden k\u00f6nnen auf verschiedenen Ebenen in die Entwicklung eingebunden werden. Entwicklungsumgebung In der Entwicklungsumgebung erhalten wir bei der t\u00e4glichen Arbeit direkt Feedback zu Problemen. Beim Speichern und automatischen Kompilieren der Dateien werden Marker erstellt, die Probleme im Quellcode kennzeichnen. Durch dieses direkte Feedback k\u00f6nnen wir bei der Entwicklung umgehend [&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-52","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\/52","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=52"}],"version-history":[{"count":1,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/52\/revisions"}],"predecessor-version":[{"id":53,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/52\/revisions\/53"}],"wp:attachment":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=52"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=52"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=52"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}