{{historisch}}[[Kategorie:Themenabend]][[Kategorie:2015]]
How to code _______ _______ _______ __ _ _______ _____ ______ _______ | | |______ |_____| | \ | | | | | \ |______ |_____ |_____ |______ | | | \_| |_____ |_____| |_____/ |______; name: Nico Krebs ; blog: [http://www.mensch-und-maschine.de www.mensch-und-maschine.de] ; work:[http://www.projektmotor.de www.projektmotor.de] ; mail: nkoding@gmail.com Alles, was im Folgenden beschrieben wird, ist eine Utopie, ein nie erreichbares Ideal und keine dogmatische Handungsanweisung. Doch ich versuche mich, so nah wie möglich da heran zu bringen - immer pragmatisch auf den Anwendungsfall bezogen. Jeder der folgenden Vorschläge kann für sich allein angewendet werden, man muss nicht das ''Komplettpaket'' einbauen, sondern man sollte sich heraussuchen, was praktikabel ist. == Warum sind wir hier? == Wir alle haben das schon erlebt und wollen es in Zukunft vermeiden: * Projekte werden mit der Zeit immer träger. * Neue Features implementieren dauert länger, je mehr Features es gibt. * Bugs fixt man nicht mehr in Minuten sondern in Wochen oder Monaten (z.b. wenn Architekturfehler erst spät sichtbar werden). * Evtl. wird ein paralleles Projekt gestartet, das alles besser machen soll - aber dann dieselben Methoden verwendet. * Beide Arbeitsgruppen konkurrieren, keine kommt wirklich voran. * User sind unzufrieden. * Das Projekt stirbt an seiner Größe und die Firma ggf. gleich mit. * Es gibt sehr viele Sicherheitslücken im Projekt. * Bekannteres Bsp.: flash. Vermutlich ist das Code mit ähnlichen Eigenschaften. Entsprechend anfällig ist das Ganze für Sicherheitslücken. == Wie kommt man aus diesem Teufelskreis? == === Analyse: Was ist schlechter Code und warum? === * große Funktionen und Klassen/Scriptfiles * eine Funktion erledigt viele Aufgaben * Abhängigkeiten sind hard coded * Verschachtelte Schleifen und Konstrukte wie Branches ("switch" und "if/then/else") werden häufig genutzt. * Logik befindet sich innerhalb von if-Blöcken. * Klassen-/Funktions-/Variablennamen sind nicht aussagekräftig. * Funktionen mit vielen Parametern * Um den Code nachzuvollziehen, muss ständig zwischen Dateien gewechselt und darin über mehrere hundert/tausend Zeilen gescrollt werden. * Funktionen sind schlecht oder gar nicht testbar, weil ein Testcase so komplex werden würden, dass sie selbst Tests bräuchten. * im worst case GOTO-Anweisungen * hohe Wahrscheinlichkeit von Sicherheitslücken