{"id":12273,"date":"2022-07-08T00:00:00","date_gmt":"2022-07-07T22:00:00","guid":{"rendered":"https:\/\/www.kurago.software\/blog\/unkategorisiert\/the-technical-debt-in-software-a-present-issue-with-future-implications\/"},"modified":"2023-12-12T12:04:41","modified_gmt":"2023-12-12T11:04:41","slug":"technische-schulden-in-software-ein-aktuelles-problem-der-zukunft","status":"publish","type":"post","link":"https:\/\/kurago.software\/de\/blog\/make-digital-happen\/technische-schulden-in-software-ein-aktuelles-problem-der-zukunft\/","title":{"rendered":"Technische Schulden in Software: ein aktuelles Problem der Zukunft"},"content":{"rendered":"<style>.wp-block-kadence-advancedheading.kt-adv-heading12273_0f1e8e-ef, .wp-block-kadence-advancedheading.kt-adv-heading12273_0f1e8e-ef[data-kb-block=\"kb-adv-heading12273_0f1e8e-ef\"]{font-style:normal;}.wp-block-kadence-advancedheading.kt-adv-heading12273_0f1e8e-ef mark, .wp-block-kadence-advancedheading.kt-adv-heading12273_0f1e8e-ef[data-kb-block=\"kb-adv-heading12273_0f1e8e-ef\"] mark{font-style:normal;color:#f76a0c;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}<\/style>\n<h2 class=\"kt-adv-heading12273_0f1e8e-ef post-intro wp-block-kadence-advancedheading\" data-kb-block=\"kb-adv-heading12273_0f1e8e-ef\">Zu Beginn der Software-Ideationsphase besteht das grundlegende Ziel darin, L\u00f6sungen f\u00fcr die von Nutzern des Softwareprodukts aufgeworfenen Fragen zu finden. Aber die Art und Weise dieser Softwareentwicklung hat selbstverst\u00e4ndlich Einfluss auf die Anpassung an neue Bed\u00fcrfnisse und damit auch auf die Erstellung k\u00fcnftiger Versionen. Der Schl\u00fcssel zu einer langfristig tragf\u00e4higen Software liegt darin, dass neue Entwickler verstehen, wie das System kodiert ist und sie in der Lage sind, es zu erweitern, weiterzuentwickeln und zu aktualisieren. An dieser Stelle kommen zwei Konzepte ins Spiel: Legacy-Code und technische Schulden.<\/h2>\n\n\n\n<p>Im strengen Sinne handelt es sich bei der Definition von Legacy-Code um einen Code, der von einem Softwareentwickler erstellt wurde und anschlie\u00dfend von einem anderen weitergepflegt werden muss. Diese Tatsache sollte an und f\u00fcr sich kein Problem darstellen, solange der Code bestimmten Regeln entspricht, so dass ein Dritter ihn bei seiner \u00dcbernahme verstehen und sich an die neuen Erfordernisse anpassen kann, ohne dass dies einen allzu gro\u00dfen Zeitaufwand darstellt.<\/p>\n\n\n\n<p>Der Legacy-Code ist sicherlich ein wichtiges Thema f\u00fcr einen Software-Ingenieur, aber die eigentliche Sorge bei einer \u00dcbernahme der Wartung oder Entwicklung von bereits bestehender Software sind die technischen Schulden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"was-aber-bedeuten-technische-schulden\">Was aber bedeuten technische Schulden?<\/h2>\n\n\n\n<p>Im Jahre 1992 f\u00fchrte Ward Cunningham, Programmierer und Mitverfasser des Manifests f\u00fcr agile Softwareentwicklung, das Konzept der technischen Schuld ein. Cunningham wollte die Bedeutung des Refactorings, d. h. der regelm\u00e4\u00dfigen Codekorrektur, f\u00fcr Software veranschaulichen. Auf diese Weise kann verhindert werden, dass die Software im Laufe der Zeit aufgrund zunehmender betrieblicher und struktureller M\u00e4ngel mehr Schulden macht. Technische Schulden treten immer dann auf, wenn eine L\u00f6sung mit einer kurzfristigen Vision oder durch \u00fcberm\u00e4\u00dfige Einsparung von Ressourcen entwickelt wird, um auf die jeweiligen Anforderungen reagieren zu k\u00f6nnen, ohne dabei aber an eine Codestruktur zu denken, die die Lesbarkeit f\u00fcr zuk\u00fcnftige Entwickler ohne gro\u00dfen Wartungsaufwand m\u00f6glich macht. Die Entwicklung von Software unter dieser Pr\u00e4misse ist auf lange Sicht eine gro\u00dfe Belastung bei der Softwareweiterentwicklung, da zun\u00e4chst die nicht optimierten oder unsauber gel\u00f6sten Teile behoben werden m\u00fcssen.<\/p>\n\n\n\n<p>Aus diesem Grund ist es unerl\u00e4sslich, \u00fcber ein Software-Engineering zu verf\u00fcgen, das daf\u00fcr verantwortlich ist, die festgelegten Anforderungen nicht nur zu l\u00f6sen, sondern dies auch nachhaltig zu tun. Jede Software muss sich weiterentwickeln lassen, wobei sich einige auf den bereits erstellten Teil auswirken. Wichtig dabei ist, dass derjenige, der diese \u00c4nderungen vornehmen muss, dies mit dem vorhandenen Material auf m\u00f6glichst einfache Weise tun kann. Sollte dies nicht der Fall sein, muss ein Patch f\u00fcr die Probleml\u00f6sung gefunden werden, was das System weiter belasten w\u00fcrde. Die Schaffung von Systemen unter diesem Gesichtspunkt erfordert Disziplin und einen h\u00f6heren Zeitaufwand, ist aber auf lange Sicht weitaus rentabler.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\">\n<p>Zweck sollten die verschiedenen Szenarien ber\u00fccksichtigt werden, in denen die Software eingesetzt werden kann. Au\u03b2erdem gilt es zu vermeiden, dass die spezifischen Anforderungen der Benutzer zu restriktiv behandelt werden.<\/p>\n<\/blockquote>\n\n\n\n<p>Bei der Entwicklung eines neuen Softwaresystems ist es notwendig, daf\u00fcr zu sorgen, dass die technischen Schulden im Zuge der Weiterentwicklung und des Wachstums im Laufe der Zeit gegen Null tendieren. Zu diesem Zweck sollten die verschiedenen Szenarien ber\u00fccksichtigt werden, in denen die Software eingesetzt werden kann. Au\u03b2erdem gilt es zu vermeiden, dass die spezifischen Anforderungen der Benutzer zu restriktiv behandelt werden.<\/p>\n\n\n\n<p>Zwar k\u00f6nnen wir eine Funktionalit\u00e4t f\u00fcr eine sehr begrenzte und zuvor beschriebene Umgebung l\u00f6sen, aber das System wird wahrscheinlich nicht in der Lage sein, in dieser neuen Umgebung zu funktionieren, wenn sich der Anwendungsbereich des Systems sp\u00e4ter \u00e4ndert. Um zum Beispiel das Problem der Konnektivit\u00e4t zwischen Maschine und Werkstatt zu l\u00f6sen, beschlie\u00dfen wir, ein System zu entwickeln, das dieses spezielle Maschinenmodell mit dem Betriebssystem des in der Werkstatt verwendeten Computers verbindet. Aber was geschieht bei einem Wechsel der Computer oder des Maschinenmodells oder dem Hinzukommen weiterer Maschinen oder Computer? Wahrscheinlich muss dann die Software ge\u00e4ndert und zus\u00e4tzliche Entwicklungsarbeit geleistet werden. F\u00fcr den Software-Ingenieur bedeutet dies &nbsp;also ein st\u00e4ndiges Dilemma. Auf der einen Seite geht es um die Priorisierung der erforderlichen Anstrengungen, um die Systeme so vorzubereiten, dass sie sich an k\u00fcnftige Situationen anpassen k\u00f6nnen und auf der anderen Seite um die Kosten, die dies mit sich bringt.<\/p>\n\n\n\n<p>Ziel also muss es sein, die vorhersehbaren, meist auftretenden Fragen zu ber\u00fccksichtigen, damit es langfristig zu einer drastischen Verringerung des Zeitaufwands f\u00fcr die Verbesserung bestehender Funktionen oder die Implementierung neuer Funktionen kommt.<\/p>\n\n\n\n<p>Die Frage, die wir uns stellen, ist folgende: kann die technische Schuld, gemessen am Aufwand und damit an den finanziellen Kosten des Produkt, gegen Null tendieren? Die Antwort darauf ist: ja. Kompliziert ist, dass es keinen Legacy-Code gibt, d. h. die Menge an Code, die f\u00fcr Software verwendet wird, die durch die weitere Arbeit an diesem System vererbt wird. Dieser Code muss selbstverst\u00e4ndlich immer wieder ge\u00e4ndert und verbessert werden. Ist jedoch die L\u00f6sung und damit der Code auf Nachhaltigkeit ausgelegt, sind diese \u00c4nderungen relativ simpel und erfordern keinen gro\u00dfen Aufwand, um die technischen Schulden auf ein Minimum zu reduzieren. Es handelt sich hierbei um eine Investition von Zeit und Geld, die dem Erfolg des Produkts oder der Systeme entspricht, die wir pflegen und weiterentwickeln. Die technische Schuld w\u00e4chst jedoch jedes Mal, wenn der Kodex nicht auf nachhaltige Weise ge\u00e4ndert wird.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\">\n<p>Software-Ingenieur sollte daher die Pflege und Wartbarkeit des Quellcodes eine seiner wichtigsten Aufgaben sein<\/p>\n<\/blockquote>\n\n\n\n<p>Der Schl\u00fcssel liegt darin, ausreichend Zeit zu investieren, nicht nur um die Anforderungen zu erf\u00fcllen, die diese Software in Zukunft l\u00f6sen muss, sondern auch um sie so zu entwickeln, dass die technische Integrit\u00e4t gew\u00e4hrleistet ist. Die Software sollte immer auch den Anschein erwecken, von derselben Hand entworfen und entwickelt worden zu sein. Konzeptionelle Integrit\u00e4t sorgt daf\u00fcr, dass sich alle Teile des Systems \u00e4hnlich verhalten, sodass die Benutzererfahrung dieselbe ist, unabh\u00e4ngig davon, ob die \u00e4ltesten oder die neuesten Teile verwendet werden. Da das System st\u00e4ndig weiterentwickelt und angepasst wird, werden m\u00f6gliche L\u00f6sungen f\u00fcr Neuentwicklungen auf technische Ausrichtungen beschr\u00e4nkt sein, die sowohl auf den neuen Code als auch auf den alten Teil des Systems angewendet werden k\u00f6nnen.<\/p>\n\n\n\n<p>F\u00fcr einen Software-Ingenieur sollte daher die Pflege und Wartbarkeit des Quellcodes eine seiner wichtigsten Aufgaben sein, da die Anwendung guter Software-Engineering-Praktiken es f\u00fcr Dritte einfacher macht, ihn zu verstehen und in Zukunft zu erweitern. Wenn diese Arbeit riguros durchgef\u00fchrt wird, kann ein Code problemlos vererbt werden, da die technische Schuld so weit wie m\u00f6glich reduziert wurde.<\/p>\n\n\n\n<p>Das bedeutet aber nicht, dass die Lebensdauer des Codes eines Systems unendlich ist. Irgendwann werden wir wahrscheinlich an einen Punkt gelangen, an dem wir wieder erneut bei fast Null anfangen m\u00fcssen. Der Schl\u00fcssel liegt demnach darin, diesen Punkt so lange wie m\u00f6glich hinauszuz\u00f6gern. Je l\u00e4nger der Lebenszyklus, desto erfolgreicher das Produkt: sowohl f\u00fcr Stakeholder, Nutzer und Softwareentwickler.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Art und Weise, wie die Software entwickelt wird, wirkt sich auf ihre F\u00e4higkeit aus, sich an neue Anforderungen anzupassen, um zuk\u00fcnftige Versionen zu erstellen.<\/p>\n","protected":false},"author":3,"featured_media":14237,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_eb_attr":"","_gspb_post_css":"","_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"footnotes":""},"categories":[213],"tags":[442,443,446,394,447,449,450],"taxonomy_info":{"category":[{"value":213,"label":"Make Digital Happen"}],"post_tag":[{"value":442,"label":"agile manifesto"},{"value":443,"label":"code"},{"value":446,"label":"legacy code"},{"value":394,"label":"software"},{"value":447,"label":"software engineer"},{"value":449,"label":"sustainability"},{"value":450,"label":"technical debt"}]},"featured_image_src_large":["https:\/\/kurago.software\/wp-content\/uploads\/2023\/07\/iStock-1319526080-1-2-1200x1063.jpg",1200,1063,true],"author_info":{"display_name":"Asier Ortiz","author_link":"https:\/\/kurago.software\/de\/blog\/author\/asier-ortiz\/"},"comment_info":0,"category_info":[{"term_id":213,"name":"Make Digital Happen","slug":"make-digital-happen","term_group":0,"term_taxonomy_id":213,"taxonomy":"category","description":"","parent":0,"count":14,"filter":"raw","cat_ID":213,"category_count":14,"category_description":"","cat_name":"Make Digital Happen","category_nicename":"make-digital-happen","category_parent":0}],"tag_info":[{"term_id":442,"name":"agile manifesto","slug":"agile-manifesto-de","term_group":0,"term_taxonomy_id":442,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":443,"name":"code","slug":"code-de","term_group":0,"term_taxonomy_id":443,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":446,"name":"legacy code","slug":"legacy-code-de","term_group":0,"term_taxonomy_id":446,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":394,"name":"software","slug":"software-de","term_group":0,"term_taxonomy_id":394,"taxonomy":"post_tag","description":"","parent":0,"count":11,"filter":"raw"},{"term_id":447,"name":"software engineer","slug":"software-engineer-de","term_group":0,"term_taxonomy_id":447,"taxonomy":"post_tag","description":"","parent":0,"count":5,"filter":"raw"},{"term_id":449,"name":"sustainability","slug":"sustainability-de","term_group":0,"term_taxonomy_id":449,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":450,"name":"technical debt","slug":"technical-debt-de","term_group":0,"term_taxonomy_id":450,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"}],"_links":{"self":[{"href":"https:\/\/kurago.software\/de\/wp-json\/wp\/v2\/posts\/12273"}],"collection":[{"href":"https:\/\/kurago.software\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kurago.software\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kurago.software\/de\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/kurago.software\/de\/wp-json\/wp\/v2\/comments?post=12273"}],"version-history":[{"count":0,"href":"https:\/\/kurago.software\/de\/wp-json\/wp\/v2\/posts\/12273\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kurago.software\/de\/wp-json\/wp\/v2\/media\/14237"}],"wp:attachment":[{"href":"https:\/\/kurago.software\/de\/wp-json\/wp\/v2\/media?parent=12273"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kurago.software\/de\/wp-json\/wp\/v2\/categories?post=12273"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kurago.software\/de\/wp-json\/wp\/v2\/tags?post=12273"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}