Copy and Paste Detection
Copy and Paste ist meiner Meinung nach eines der schlimmsten verbrechen, die man einem objekt-orientierten Code antun kann. Natürlich gibt es fälle, bei denen es schwer oder sogar unmöglich ist duplizierten Code zu vermeiden, aber in 99,9% kann es durch geschickte Vererbung oder Delegation umgangen werden.
Ich möchte euch heute gar keine Techniken vorstellen, die ihr anwenden könnt um C&P auszulösen, sondern euch ein Werkzeug an die Hand geben, mit dem ihr den doppelten Code findet. Das Tool, das ich meine nennt sich phpcpd (PHP Copy Paste Detection) und stammt aus der Feder (bzw. Keyboard) von Sebastian Bergmann. Ich glaube früher konnte PHPUnit dies nativ selbst, sollte aber in einer der nächsten Versionen verschwinden. Was macht dieses Tool also? Ganz einfach, ich gebe ihm mein Projekt und er schaut nach, welche Zeilen Code er wiederholt findet (und das erstaunlich schnell). Dabei könnt ihr per Kommandozeilen-Parameter einstellen, ab welcher Zeilenanzahl ihr Alarm schlagen wollt. Ich denke hier ist so etwas wie 3-5 Zeilen sinnvoll.
Bei dem Begriff Kommandozeile sind bestimmt die ein oder anderen von euch hellhörig geworden. Das Tool ist natürlich in PHP geschrieben und kann so ohne Probleme in euern Bauprozess mit eingebaut werden. So könnt ihr ohne Probleme euern Continuous Prozess dazu nutzen doppelten Code zu finden und ihn für immer zu verbannen.
Noch eine kleine Information für unsere Stammleser. Da wir Samstag und Sonntag keine Artikel mehr haben und an Feiertagen ja auch nicht, wird es erst wieder am nächsten Dienstag etwas zum Lesen geben.
Puh, 4 Tage ohne phphatesme? Das wird hart! 🙂
Liebe Ostergrüße nach Hamburg!
@Timo: Kannst es ja ändern. Hast doch ’nen Admin Account 😛 Aber natürlich auch osterliche Grüße an dich und N*** Jungs
Hallo Nils,
danke für die interessanten Tipps und Ausführungen auf phphatesme.com.
Kleine Info zu einem Typo: „und stimmt aus der Feder“. Ob das wirklich stimmt? 😉
Viele Grüße, schöne Ostern.
Matthias
Ich finde der Artikel auch sehr interessant.Danke für die Tipp.
See http://www.semanticdesigns.com/Products/Clone/PHPCloneDR.html for a clone detector that works on huge systems of code, find copy/paste/*edited* clones, even if the code has been reformatted, variables renamed, and comments inserted/deleted.
Wie sieht es hier eigentlich aus?
Gibt es hier irgendwelche Richtwerte?
Ich habe hier zB einen Projektteil der aus 1.45% duplicated lines out of 57970 total lines of code besteht.