{"id":48,"date":"2018-01-16T16:48:14","date_gmt":"2018-01-16T15:48:14","guid":{"rendered":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/?p=48"},"modified":"2022-11-30T16:48:36","modified_gmt":"2022-11-30T15:48:36","slug":"werkzeuge-zur-erhaltung-der-softwarearchitektur-massnahmen-qs-teil-4","status":"publish","type":"post","link":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/?p=48","title":{"rendered":"Werkzeuge zur Erhaltung der Softwarearchitektur &#8211; Ma\u00dfnahmen \/ QS &#8211; Teil 4"},"content":{"rendered":"\n<p>Im letzten Post haben wir definiert, welche Messwerte wir bez\u00fcglich der technischen Schulden erreichen wollen. Dieser Post besch\u00e4ftigt sich mit den Ma\u00dfnahmen f\u00fcr deren Umsetzung. Die grundlegenden Aussagen meiner Posts gelten allgemein f\u00fcr die Softwareentwicklung. Die Beispiele beziehen sich hier auf ein Entwicklung auf Basis von JAVA.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Reduzierung der Komplexit\u00e4t<\/h2>\n\n\n\n<p>Es sollen wenige Zyklen und Abh\u00e4ngigkeiten auf allen Ebenen (Artefakte, Packages) der Software entstehen und eine lose Kopplung mit geringer Koh\u00e4sion (Zusammenhalt in Modulen) erreicht werden, da<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>sie die Erweiterbarkeit erleihctern<\/li>\n\n\n\n<li>sie weniger fehleranf\u00e4llig sind<\/li>\n\n\n\n<li>sie die Testbarkeit erh\u00f6hen (geringerer Aufwand bei Testerstellung, bei wenigen Abh\u00e4ngigkeiten)<\/li>\n\n\n\n<li>sie zuk\u00fcnftig leichter aufzuteilen sind (Partitionierung) und damit Refactorings erleichtern<\/li>\n<\/ul>\n\n\n\n<p>Es sollen kurze Klassen, Packages, Artefakte entstehen, da diese einfacher zu verstehen sind. Au\u00dferdem sollten nicht mehr genutzter Code-Teile gel\u00f6scht werden, da sie u.a. Mehraufw\u00e4nde bei Refactorings verursachen. Es sollte immer klar sein, welche Teile der Software genutzt werden und auch wof\u00fcr sie genutzt werden. Wie die meisten hier angesprochenen Punkte k\u00f6nnen auch nicht genutzte Softwareteile gro\u00dfteils automatisch erkannt und iterativ beseitigt werden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Einheitliche L\u00f6sungswege<\/h2>\n\n\n\n<p>Es sollten Entwurfsmuster verwendet werden. Hierdurch wird erreicht, dass einheitliche L\u00f6sungswege f\u00fcr \u00e4hnliche Probleme verwendet werden und wir uns besser zurecht finden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ordnung schaffen<\/h2>\n\n\n\n<p>Es muss eine fachliche und technische Schichtung sichergestellt und hierf\u00fcr fachliche Hierarchien auf allen Ebenen (Artefakte, Packages, ..) eingef\u00fchrt werden. Diese erleichtern die Orientierung. Wichtig ist, dass bei Paketen die Fachlichkeit die technischen Aspekte dominiert. Es sollte also<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> \n...basedata.entity \n...basedata.facade\n...accounting.entity \n...accounting.facade\n<\/pre>\n\n\n\n<p>und nicht<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> \n...entity.basedata\n...entity.accounting\n...facade.basedata\n...facade.accounting\n<\/pre>\n\n\n\n<p>verwendet werden. Im ersten Fall w\u00e4ren alle Entit\u00e4ten und Facades der Bereich in einer fachlichen Struktur zusammengefasst. Dies erleichter das Arbeiten, da bei \u00c4nderungen h\u00e4ufig alle fachlichen Klassen genutzt werden. Im zweiten Fall w\u00e4ren alle Entit\u00e4ten und alle Facades der Anwendung im Paketen zusammengefasst. Dies hat zur Folge, dass bei der Bearbeitung eines Bereichs viel im Paketbaum &#8222;gesprungen&#8220; werden muss.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tests<\/h2>\n\n\n\n<p>Eine hohe Testabdeckung stellt sicher, dass Software das Gewollte erledigt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fehlerreduzierung<\/h2>\n\n\n\n<p>Eine Vielzahl von Fehlern lassen sich automatisch erkennen. Viele NPE oder falsche instanceof Vergleiche werden erkannt und sollten in der Entwicklung nicht mehr auftreten. Ebenso sollten Optimierungen wie die Verwendung von StringBuilder \/ StringBuffer und ArrayList statt Vector immer automatisch gepr\u00fcft werden. Weiterhin tragen regelm\u00e4\u00dfige Code-Reviews und last but not least auch Datenbankintegrit\u00e4ts-Bedingungen zur Fehlerreduzierung bei. Den letzten Punkt habe ich explizit aufgenommen, da nach meinen Eindruck dies eigentlich selbstverst\u00e4ndliche Thema immer weniger Beachtung findet. Dadurch wird die Datenkonsistenz und damit auch die Funktion der Software gef\u00e4hrdet. Wir treffen erstaunlich oft auf Datenbanken ohne jegliche Konsistenzbedingungen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dokumentation<\/h2>\n\n\n\n<p>Insbesondere im Quellcode ist Dokumentation sehr wichtig, da wir im Code arbeiten und diesen ohne langes Suchen schnell verstehen m\u00f6chten.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Strukturelle Einheitlichkeit und Konsistenz des Codes<\/h2>\n\n\n\n<p>F\u00fcr eine einfache Orientierung und schnelles Verstehen des Gesehenen sind eine durchg\u00e4ngig einheitliche Formatierung und m\u00f6glichst einheitliche Bezeichnungen im Quellcode sehr wichtig.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Werkzeuge<\/h2>\n\n\n\n<p>In den n\u00e4chsten Posts stelle ich verschiedene Werkzeuge vor, die jeweils Teile der geforderten Ma\u00dfnahmen sicherstellen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im letzten Post haben wir definiert, welche Messwerte wir bez\u00fcglich der technischen Schulden erreichen wollen. Dieser Post besch\u00e4ftigt sich mit den Ma\u00dfnahmen f\u00fcr deren Umsetzung. Die grundlegenden Aussagen meiner Posts gelten allgemein f\u00fcr die Softwareentwicklung. Die Beispiele beziehen sich hier auf ein Entwicklung auf Basis von JAVA. Reduzierung der Komplexit\u00e4t Es sollen wenige Zyklen und [&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-48","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\/48","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=48"}],"version-history":[{"count":1,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/48\/revisions"}],"predecessor-version":[{"id":49,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/48\/revisions\/49"}],"wp:attachment":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=48"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=48"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=48"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}