- Code-Duplizierung
-
Als Code-Duplizierung (code duplication) wird in der Informatik das Auftreten der gleichen Codestruktur an mehreren Stellen im Programmcode bezeichnet. Duplizierter Code entsteht gewöhnlich durch Kopieren vorhandener Programmteile und gilt als das am häufigsten auftretende Merkmal für schlechten Code. Die Code-Duplizierung wird als Anti-Pattern angesehen und widerspricht dem Prinzip „Don’t repeat yourself“ (DRY).
Sie führt die Liste der so genannten Code Smells[1] an, da sie gewöhnlich zu inkonsistentem, schlecht wartbarem und unübersichtlichem Programmcode führt.
Durch Refactoring[2] kann Code-Duplizierung relativ einfach aufgelöst werden. Es existieren verschiedene Algorithmen, um Code-Duplizierung aufzudecken. Zwei Beispiele hierfür sind Baker’s algorithm[3] und Visual clone detection.[4]
Es gibt verschiedene Werkzeuge zur statischen Analyse von Programmcode, die auch Code-Duplizierungen finden können. Eines der ältesten und bekanntesten dieser Werkzeuge ist Lint. Daneben existieren neben zahlreichen freien Werkzeugen wie dem PMD-Plugin CPD (Copy/Paste Detector) und Clone Digger (für Python und Java) auch proprietäre Werkzeuge wie CCFinder (Code Clone Finder) oder Simian (Similarity Analyser)
Beispiel
Der folgende Code dient zur Berechnung des Durchschnitts eines Arrays von Integern
extern int array1[]; extern int array2[]; int sum1 = 0; int sum2 = 0; int average1 = 0; int average2 = 0; for (int i = 0; i < 4; i++) { sum1 += array1[i]; } average1 = sum1/4; for (int i = 0; i < 4; i++) { sum2 += array2[i]; } average2 = sum2/4;
Die beiden Schleifen können als einzelne Funktion umgeschrieben werden:int calcAverage (int* Array_of_4) { int sum = 0; for (int i = 0; i < 4; i++) { sum += Array_of_4[i]; } return sum/4; }
Literatur
- Martin Fowler: Refactoring. Wie Sie das Design vorhandener Software verbessern. Addison-Wesley, München 2000 (Originaltitel: Refactoring. Improving The Design Of Existing Code, übersetzt von Bernd Kahlbrandt), ISBN 3-8273-1630-8, S. 67–82.
Einzelnachweise
- ↑ http://www.empros.ch/vielfach/faustregeln/502149936a0f4bb0f/codesmell.php
- ↑ http://wwwcs.uni-paderborn.de/cs/ag-engels/ag_dt/Courses/Lehrveranstaltungen/Siemens-Seminar/Ausarbeitungen/Heidenreich-Adrian.pdf
- ↑ Brenda S. Baker. A Program for Identifying Duplicated Code. Computing Science and Statistics, 24:49–57, 1992.
- ↑ Visual Detection of Duplicated Code by Matthias Rieger, Stephane Ducasse.
Wikimedia Foundation.