zurück zum Artikel

Zehn Highlights in Visual Studio 2012: #8 Codeduplikate suchen

Dr. Holger Schwichtenberg

Die achte der zehn ausgewählten Funktionen von Visual Studio 2012 in den Bereichen Projektverwaltung und Code-Editoren ist das Suchen von Codeduplikaten (Code Clone Analysis).

Mehr Infos

Microsofts Entwicklungsumgebung Visual Studio bietet in der Version 2012 eine Reihe schöner neuer Funktionen für die .NET-Programmierer. Feature Nr. 8 ist das Suchen von Codeduplikaten (Code Clone Analysis).

Eine verbreitete Angewohnheit unter Softwareentwicklern ist das "Copy & Paste Development". Man kopiert vorhandene Programmcodepassagen, um sie an anderer Stelle (leicht modifiziert) wiederzuverwenden. Dabei könnte man doch sicherlich in vielen Fällen durch eine Parametrisierung, eine Unterroutine oder Vererbung die Codeduplizierung vermeiden. Visual Studio 2012 bietet ab der Premium-Variante jetzt eine Funktion, um Codeduplikate aufzuspüren. Dabei werden die Suchergebnisse als "schwache", "mittlere" und "schwere" Übereinstimmungen klassifiziert.

Die Codeduplikat-Suche wird über das Menü Analyze | Analyze Solution for Code Clone oder die Markierung eines Codeblocks und dann im Kontextmenü Find Matching Clones in Solution aufgerufen.

Die Code Clone Analysis hat eine "mittlere" Übereinstimmung zwischen "BuchungErstellen" und "BuchungLoeschen" gefunden. Es sind nur zwei Zeilen etwas anders.

So ganz ausgereift ist die Funktion noch nicht. Die folgenden frappierenden Übereinstimmungen werden nicht gefunden, wenn man Analyze | Analyze Solution for Code Clone wählt, sondern nur wenn man einen der Blöcke anwählt und dann Find Matching Clones in Solution aufruft. In C# werden Run2() und Run3() als "Strong Match" angezeigt. Run4() wird aber gar nicht moniert, obwohl hier nur die Laufvariable anders heißt. Bei dem gleichen Programmcode in Visual Basic wird Run4() als "Medium Match" gefunden.

publicvoid Run1()
{
int x = 5;
for (int a = 0; a < x; a++)
{
Console.WriteLine(a);
}
}

publicvoid Run2()
{
int x = 6;
for (int a = 0; a < x; a++)
{
Console.WriteLine(a);
}
}

publicvoid Run3()
{
int x = 7;
for (int a = 0; a < x; a++)
{
Console.WriteLine(a);
}
}

publicvoid Run4()
{
int x = 6;
for (int b = 0; b < x; b++)
{
Console.WriteLine(b);
}
} ( [11])

URL dieses Artikels:
https://www.heise.de/-1676734

Links in diesem Artikel:
[1] https://www.heise.de/blog/Zehn-Highlights-in-Visual-Studio-2012-1-Portable-Class-Libraries-1667481.html
[2] https://www.heise.de/blog/Zehn-Highlights-in-Visual-Studio-2012-2-Add-Reference-Dialog-1667650.html
[3] https://www.heise.de/blog/Zehn-Highlights-in-Visual-Studio-2012-3-NuGet-Library-Package-Manager-1669256.html
[4] https://www.heise.de/blog/Zehn-Highlights-in-Visual-Studio-2012-4-Verbesserter-Solution-Explorer-1670356.html
[5] https://www.heise.de/blog/Zehn-Highlights-in-Visual-Studio-2012-5-Registerkartenverwaltung-der-geoeffneten-Dateien-1671562.html
[6] https://www.heise.de/blog/Zehn-Highlights-in-Visual-Studio-2012-6-Verbesserter-Suchen-und-Ersetzendialog-1672191.html
[7] https://www.heise.de/blog/Zehn-Highlights-in-Visual-Studio-2012-7-Suche-ueber-Visual-Studio-Funktionen-Optionen-1676373.html
[8] https://www.heise.de/blog/Zehn-Highlights-in-Visual-Studio-2012-8-Codeduplikate-suchen-1676734.html
[9] https://www.heise.de/blog/Zehn-Highlights-in-Visual-Studio-2012-9-Verbesserungen-im-Webeditor-1676752.html
[10] https://www.heise.de/blog/Zehn-Highlights-in-Visual-Studio-2012-10-Page-Inspector-1676771.html
[11] mailto:hs@ix.de