Zum Inhalt springen

YAGNI

aus Wikipedia, der freien Enzyklopädie

YAGNI ist ein Akronym und steht für You Aren’t Gonna Need It, zu deutsch: „Du wirst es nicht brauchen“.<ref name="Extreme Programming Installed">{{#invoke:Vorlage:Literatur|f}}</ref><ref name="Extreme Programming Examined">{{#invoke:Vorlage:Literatur|f}}</ref> Es bezeichnet ein Prinzip des Extreme Programming (XP), das besagt, dass in einem Programm erst dann Funktionalität implementiert werden sollte, wenn klar ist, dass diese Funktionalität tatsächlich gebraucht wird.

Hintergrund

Entgegen diesem Vorgehen wird in der Praxis oft versucht, Programme durch zusätzlichen oder allgemeineren (generischen) Code auf mögliche künftige Änderungsanforderungen vorzubereiten. Die dahinter liegende Überlegung ist, dass Änderungen später aufwändiger umzusetzen sind als sie jetzt bereits vorwegzunehmen.

Oft stellt sich später heraus, dass dieser Zusatzaufwand unnötig war, weil sich die ursprünglich erwartete Anforderung in der gedachten Form tatsächlich nie ergeben hat. Stattdessen ergeben sich häufig Anforderungen, die bei der ursprünglichen Entwicklung nicht vorhergesehen wurden und deren Umsetzung durch den Code, der eigentlich Änderungen erleichtern sollte, nicht unterstützt und oft sogar behindert wird.

YAGNI führt also in erster Linie zu schlankerem, einfacherem Code und ermöglicht damit, später kommende Anforderungen kostengünstig umzusetzen. Weitere Überlegungen hinter YAGNI sind:

  • Zielgerichtete Verwendung der Arbeitszeit für die Umsetzung der aktuell geforderten Funktionalität führt dazu, dass diese rascher und oft besser umgesetzt wird. Dies steigert die Zufriedenheit der Anforderer mehr als die Umsetzung noch nicht geforderter Funktionalitäten.
  • Die Umsetzung noch nicht geforderter Funktionalitäten kann dazu führen, dass weitere unangeforderte Funktionalitäten den Umsetzern als sinnvoll erscheinen und ebenfalls umgesetzt werden. Dies führt meist dazu, dass unerwünschte oder inkorrekte Funktionalitäten umgesetzt werden.
  • Die Umsetzung noch nicht geforderter Funktionalitäten begünstigt die Anti-Pattern Feature creep und Bloatware.
  • Noch nicht geforderte Funktionalitäten werden basierend auf nicht oder weniger gut analysierten Anforderungen umgesetzt. Die Umsetzung dieser Funktionalitäten ist somit nicht oder zumindest weniger gut testbar, enthält daher mehr Fehler und entspricht weniger den tatsächlichen Anforderungen als die Umsetzung derzeit gewünschter Funktionalitäten.
  • Noch nicht geforderte Funktionalitäten müssen debuggt, dokumentiert und supportet werden. Das wiederum bindet Ressourcen, die für die Entwicklung geforderter Funktionalitäten fehlen.

YAGNI ist eines der Prinzipien hinter der XP-Technik von „Implementiere die einfachst mögliche Lösung, die funktioniert“ (“do the simplest thing that could possibly work” [DTSTTCPW]).<ref name="Extreme Programming Examined" /><ref name="Object-oriented & classical software engineering">{{#invoke:Vorlage:Literatur|f}}</ref> Die Verwendung des YAGNI-Prinzips ist gedacht in der Kombination mit anderen XP-Prinzipien wie laufendes Refactoring, automatisierte Modultests und kontinuierliche Integration.

Abgrenzung

Wird YAGNI falsch umgesetzt – beispielsweise wenn dadurch die Erweiterbarkeit des Systems eingeschränkt wird – so kann es auch zu Mehraufwänden führen.<ref>{{#if:|{{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}| |}}}}{{#if:Dino Esposito|Dino Esposito: }}{{#if:|{{#if:Wenn einfach unnötig komplex ist (Teil 2)|[{{#invoke:Vorlage:Internetquelle|archivURL|1={{#invoke:URLutil|getNormalized|1={{{archiv-url}}}}}}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel=Wenn einfach unnötig komplex ist (Teil 2)}}]{{#if:| ({{{format}}})}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}|{{#if:https://entwickler.de/online/wenn-einfach-unnoetig-komplex-ist-teil-2-153919.html%7C{{#if:{{#invoke:TemplUtl%7Cfaculty%7C}}%7C{{#invoke:Vorlage:Internetquelle%7CTitelFormat%7Ctitel={{#invoke:WLink%7CgetEscapedTitle%7C1=Wenn einfach unnötig komplex ist (Teil 2)}}}}|[{{#invoke:URLutil|getNormalized|1=https://entwickler.de/online/wenn-einfach-unnoetig-komplex-ist-teil-2-153919.html}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{#invoke:WLink|getEscapedTitle|1=Wenn einfach unnötig komplex ist (Teil 2)}}}}]}}{{#if:| ({{{format}}}{{#if:2011-03-17{{#if: 2020-10-31 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}

          | )
          | {{#if:{{#ifeq:de|de||{{#if:de|1}}}}| ; 
              | )}}}}}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}}}{{#if:https://entwickler.de/online/wenn-einfach-unnoetig-komplex-ist-teil-2-153919.html%7C{{#if:{{#invoke:URLutil%7CisResourceURL%7C1=https://entwickler.de/online/wenn-einfach-unnoetig-komplex-ist-teil-2-153919.html}}%7C%7C}}}}{{#if:Wenn einfach unnötig komplex ist (Teil 2)|{{#if:{{#invoke:WLink|isValidLinktext|1=Wenn einfach unnötig komplex ist (Teil 2)|lines=0}}||}}}}{{#if: | In: {{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{{werk}}}}}}}{{#if: | {{{hrsg}}}{{#if: 2011-03-17|,|{{#if: 2020-10-31 | {{#if:{{#invoke:TemplUtl|faculty|}}|;|,}}}}}}}}{{#if: 2011-03-17| {{#if:{{#invoke:DateTime|format|2011-03-17|noerror=1}}
            |{{#invoke:DateTime|format|2011-03-17|T._Monat JJJJ}}
            |{{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, datum=2011-03-17|class=Zitationswartung}} }}{{#if: |,|{{#if: 2020-10-31 | {{#if:{{#invoke:TemplUtl|faculty|}}|;|,}}}}}}}}{{#if: | S. {{{seiten}}}{{#if: |,|{{#if: 2020-10-31 | {{#if:{{#invoke:TemplUtl|faculty|}}|;|,}}}}}}}}{{#if: {{#invoke:TemplUtl|faculty|}}| {{#if:2011-03-17|{{#if:|archiviert|ehemals}}|{{#if:|Archiviert|Ehemals}}}} {{#if:|vom|im}} Vorlage:Referrer{{#if:{{#invoke:TemplUtl|faculty|}}| (nicht mehr online verfügbar)}}{{#if: | am {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}|{{{archiv-datum}}}{{#if:211918||(?)}}}}}}{{#if: 2020-10-31|;}}}}{{#if: 2020-10-31| {{#if:2011-03-17{{#invoke:TemplUtl|faculty|}}|abgerufen|Abgerufen}} {{#switch: {{#invoke:Str|len| {{#invoke:DateTime|format| 2020-10-31 |ISO|noerror=1}} }}
       |4=im Jahr
       |7=im
       |10=am
       |#default={{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, abruf=2020-10-31|class=Zitationswartung}} }} {{#invoke:DateTime|format|2020-10-31|T._Monat JJJJ}}
    | {{#invoke:TemplUtl|failure|1=Vorlage:Internetquelle | abruf=2026-MM-TT ist Pflichtparameter}} }}{{#if:{{#ifeq:de|de||{{#if:de|1}}}}|{{#if:2011-03-17{{#if: 2020-10-31 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}
       |  (
       | {{#if: | |  (}}
       }}{{#ifeq:{{#if:de|de|de}}|de||
          {{#invoke:Multilingual|format|de|slang=!|split=[%s,]+|shift=m|separator=, }}}}{{#if: |{{#ifeq:{{#if:de|de|de}}|de||, }}{{{kommentar}}}}})}}{{#if: 2011-03-17{{#if: 2020-10-31 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}} }}de|{{#if: |: {{
 #if: 
 | {{
     #ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
     | Vorlage:Str trim
     | {{#invoke:Vorlage:lang|flat}}
     }}
 | {{#ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
     | „Vorlage:Str trim“
     | {{#invoke:Text|quote
         |1={{#if: 
              | {{#invoke:Vorlage:lang|flat}}
              | {{#invoke:Vorlage:lang|flat}} }}
         |2={{#if: {{#invoke:TemplUtl|faculty|}}|de-CH|de}}
         |3=1}} }}

}}{{#if:

   |  (<templatestyles src="Person/styles.css" />{{#if:  | :  }}{{#if:  | , deutsch: „“ }})
   | {{#if: 
       |  ({{#if:  | , deutsch: „“ }})
       | {{#if:  |  (deutsch: „“) }}
 }}

}}{{#if: {{{zitat}}}

   | {{#if: 
       | {{#if: {{{zitat}}}
           | Vorlage:": Text= und 1= gleichzeitig, bzw. Pipe zu viel }} }}
   | Vorlage:": Text= fehlt }}{{#if:  | {{#if: {{#invoke:Text|unstrip|{{{ref}}}}}
             | Vorlage:": Ungültiger Wert: ref=
             | {{{ref}}} }}

}}|.{{#if:{{#invoke:TemplUtl|faculty|}}|{{#if:||{{#ifeq: | JaKeinHinweis |{{#switch:

   |0|=Vorlage:Toter Link/Core{{#if: https://entwickler.de/online/wenn-einfach-unnoetig-komplex-ist-teil-2-153919.html
       | {{#if:  | [1] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: 
           | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }}
         }}
       |   (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.)
     }}{{#switch: 
         |no|0|=
         |#default={{#if:  ||  }}
    }}{{#invoke:TemplatePar|check
         |opt      = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked=
         |cat      = Wikipedia:Vorlagenfehler/Vorlage:Toter Link
         |errNS    = 0
         |template = Vorlage:Toter Link
         |format   = 
         |preview  = 1
    }}{{#if: https://entwickler.de/online/wenn-einfach-unnoetig-komplex-ist-teil-2-153919.html
      | {{#if:{{#invoke:URLutil|isWebURL|https://entwickler.de/online/wenn-einfach-unnoetig-komplex-ist-teil-2-153919.html}}
          || {{#if:  ||  }} 
        }}
      | {{#if: 
           | {{#if:  ||  }}
           | {{#if:  ||  }}
        }}
    }}{{#if: 
       | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}}
             || {{#if:  ||  }} 
         }}
    }}{{#switch: deadurl
         |checked|deadurl|= 
         |#default=  {{#if:  ||  }}
    }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=https://entwickler.de/online/wenn-einfach-unnoetig-komplex-ist-teil-2-153919.html Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. )  {{#if: 
            | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }}
         }}Vorlage:Toter Link/Core{{#switch: 
          |no|0|=
          |#default= {{#if:  ||  }}
        }}{{#invoke:TemplatePar|check
         |all      = inline= url=
         |opt      = datum= date= archivebot= bot= botlauf= fix-attempted= checked=
         |cat      = Wikipedia:Vorlagenfehler/Vorlage:Toter Link
         |errNS    = 0
         |template = Vorlage:Toter Link
         |format   = 
         |preview  = 1
       }}{{#if: https://entwickler.de/online/wenn-einfach-unnoetig-komplex-ist-teil-2-153919.html
       | {{#if:{{#invoke:URLutil|isWebURL|https://entwickler.de/online/wenn-einfach-unnoetig-komplex-ist-teil-2-153919.html}}
          || {{#if:  ||  }} 
        }}
    }}{{#if: 
         | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}}
             || {{#if:  ||  }} 
           }}
    }}{{#switch: deadurl
         |checked|deadurl|= 
         |#default=  {{#if:  ||  }}
    }}[https://entwickler.de/online/wenn-einfach-unnoetig-komplex-ist-teil-2-153919.html }}|{{#switch: 
   |0|=Vorlage:Toter Link/Core{{#if: https://entwickler.de/online/wenn-einfach-unnoetig-komplex-ist-teil-2-153919.html
       | {{#if:  | [2] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: 
           | {{#if:  | | Vorlage:Toter Link/archivebot }}
         }}
       |   (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.)
     }}{{#switch: 
         |no|0|=
         |#default={{#if:  ||  }}
    }}{{#invoke:TemplatePar|check
         |opt      = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked=
         |cat      = Wikipedia:Vorlagenfehler/Vorlage:Toter Link
         |errNS    = 0
         |template = Vorlage:Toter Link
         |format   = 
         |preview  = 1
    }}{{#if: https://entwickler.de/online/wenn-einfach-unnoetig-komplex-ist-teil-2-153919.html
      | {{#if:{{#invoke:URLutil|isWebURL|https://entwickler.de/online/wenn-einfach-unnoetig-komplex-ist-teil-2-153919.html}}
          || {{#if:  ||  }} 
        }}
      | {{#if: 
           | {{#if:  ||  }}
           | {{#if:  ||  }}
        }}
    }}{{#if: 
       | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}}
             || {{#if:  ||  }} 
         }}
    }}{{#switch: 
         |checked|deadurl|= 
         |#default=  {{#if:  ||  }}
    }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=https://entwickler.de/online/wenn-einfach-unnoetig-komplex-ist-teil-2-153919.html Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. )  {{#if: 
            | {{#if:  | | Vorlage:Toter Link/archivebot }}
         }}Vorlage:Toter Link/Core{{#switch: 
          |no|0|=
          |#default= {{#if:  ||  }}
        }}{{#invoke:TemplatePar|check
         |all      = inline= url=
         |opt      = datum= date= archivebot= bot= botlauf= fix-attempted= checked=
         |cat      = Wikipedia:Vorlagenfehler/Vorlage:Toter Link
         |errNS    = 0
         |template = Vorlage:Toter Link
         |format   = 
         |preview  = 1
       }}{{#if: https://entwickler.de/online/wenn-einfach-unnoetig-komplex-ist-teil-2-153919.html
       | {{#if:{{#invoke:URLutil|isWebURL|https://entwickler.de/online/wenn-einfach-unnoetig-komplex-ist-teil-2-153919.html}}
          || {{#if:  ||  }} 
        }}
    }}{{#if: 
         | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}}
             || {{#if:  ||  }} 
           }}
    }}{{#switch: 
         |checked|deadurl|= 
         |#default=  {{#if:  ||  }}
    }}[https://entwickler.de/online/wenn-einfach-unnoetig-komplex-ist-teil-2-153919.html }} }}}}}}}}}}{{#if:|
        {{#invoke:Vorlage:Internetquelle|archivBot|stamp={{{archiv-bot}}}|text={{#if:|Vorlage:Webarchiv/archiv-bot}}

}}}}{{#invoke:TemplatePar|check |all= url= titel= |opt= autor= hrsg= format= sprache= titelerg= werk= seiten= datum= abruf= zugriff= abruf-verborgen= archiv-url= archiv-datum= archiv-bot= kommentar= zitat= AT= CH= offline= |cat= {{#ifeq: 0 | 0 | Wikipedia:Vorlagenfehler/Vorlage:Internetquelle}} |template= Vorlage:Internetquelle |format=0 |preview=1 }}</ref>

Siehe auch

Literatur

  • {{#invoke:Vorlage:Literatur|f}}
  • {{#invoke:Vorlage:Literatur|f}}

Weblinks

Einzelnachweise

<references />