Archiv

Posts Tagged ‘VisualStudio’

Kopierten Code finden mit der Code Clone Analyse

14. November 2012 Kommentare aus

Code wird gerne kopiert. Was einem zuerst hilft schnell ähnliche Anforderungen zu erfüllen wird in kurzer Zeit zu einem Problem. Nun ist es nicht mehr damit getan eine Stelle im Code zu korrigieren und der Fehler ist behoben – man muss jetzt immer auch noch alle Kopien korrigieren.

Das Problem dabei ist das man nicht weiss was für Code kopiert wurde und wo der in Modul X aufgetretene Fehler noch alles drin ist. Als Folge davon bleiben die Fehler meist unentdeckt und die Kunden fragen sich wieso sie immer wieder die gleichen Probleme melden müssen.

Seit Visual Studio 2012 hat man beim Aufstöbern dieser Klone eine Hilfe. Die Analysefunktionen wurden um die Funktion Code Clone Detection erweitert. Wie der Name vermuten lässt wird damit kopierter Code aufgespürt.

Führt man diese Auswertung aus muss man sich erst einmal gedulden. Der ganze Code wird in Tokens unterteilt und dann analysiert. Der erstmalige Durchgang ist je nach Codebasis und Geschwindigkeit des Rechners eine gute Gelegenheit für eine ausgedehnte Kaffeepause.

 

Nicht nur 1:1 Kopien

Code der 1:1 kopiert wurde wird von Code Clone als „Exact Match“ gefunden. Damit gibt sich Code Clone aber nicht zufrieden. Kleinere Anpassungen wie umbenannte Variablen werden ebenfalls erkannt und als „Strong Match“ oder als „Medium Match“ klassifiziert.

Richtig interessant wird es bei grösseren Änderungen die als „Weak Match“ eingestuft werden. Hier ist die Chance auf falsch erkannte Klone entsprechend grösser. Dafür findet man hier aber auch die Stellen, die man auf den ersten Blick nicht als Klon erkennen würde:

public void MethodA(string input)
{
    Console.WriteLine("input => ", input);

    string a = input.Trim().ToLower();
    string b = input.Trim().ToLower();
    string c = input.Trim().ToLower();
    string d = input.Trim().ToLower();
    string e = input.Trim().ToLower();

    Write(a);
    Write(a);
    Write(a);
    Write(a);
}

public void MethodB(string input)
{
    string b = input.Trim().ToLower();
    Write(b);
    Write(b);
    Write(b);

    string a = input.Trim().ToLower();
        
    string c = input.Trim().ToLower();
    Console.WriteLine("input => ", input);

    string e = input.Trim().ToLower();
    string d = input.Trim().ToLower();
    Write(b);
}

In diesem Beispiel wurde der gleiche Code anders aufgebaut. Gerade bei solchen Klonen spielt Code Clone seine Stärken aus und erweist sich als äusserst hilfreich.

 

Nebeneffekte

Nutzt man Code Clone in einem realen Projekt kann man damit noch mehr Probleme aufdecken als nur kopierten Code. Sind Methoden inhaltlich identisch aber mit ganz anderen Namen versehen (wie beispielsweise GetOrder und GetPerson) gibt es wohl grössere Probleme beim Verstehen der Domäne.

Im besten Fall löst sich das Problem mit einer genaueren Erklärung der Domänenbegriffe. Es kann aber gerade so gut auch ein Warnzeichen für eine falsche Abstraktion oder gröbere Architekturfehler sein.

 

Einschränkungen

Code Clone hat 2 wichtige Einschränkungen:

  1. Diese Analyse benötigt die Premium und der Ultimate Version von Visual Studio 2012.
  2. Es werden nur Code-Teile berücksichtigt die aus 10 oder mehr Befehlen bestehen.

 

Fazit

Mit der Code Clone Analyse kann man ohne grossen Aufwand kopierte Codestücke auffinden. Dabei werden nicht nur 1:1 Kopien gefunden, sondern auch Teile die ähnlich sind. Die so gewonnenen Erkenntnisse sind eine gute Ausgangslage für ein Refactoring oder eine teamweite Code Review.

Schlagworte: ,

.Net Framework übergreifend entwickeln mit Portable Class Libraries

16. April 2012 Kommentare aus

Mittlerweile gibt es neben dem .Net Framework 4 auch Silverlight, Windows Phone 7 und Xbox 360. Obwohl man überall in C# entwickeln kann stösst man doch schnell einmal an eine Grenze: Eine Klassenbibliothek vom vollen .Net Framework kann nicht in einem Silverlight-Projekt verwendet werden. Gleiches gilt für Windows Phone 7. Und um es noch ein wenig mühsamer zu machen sind Silverlight und Windows Phone 7 auch nicht kompatibel.

Dies zeigt sich mit dieser Fehlermeldung wenn man versucht eine *.dll einzubinden:

 

Portable Library Tools als Lösung

Eine Entdeckung der Tech Conference war für mich die Portable Class Libraries. Dieser Projekt-Typ ist vergleichbar mit einer gewöhnlichen Class Library. Allerdings kann man mehrere Framework-Plattformen als Ziel wählen.

Die einzelnen Frameworks haben eine grosse Menge an Funktionen die überall zur Verfügung stehen. So lange man in diesem Bereich bleibt ist dieser Projekttyp eine sehr gute Lösung um den Code nur einmal zu schreiben. Was genau geht und wo die Grenzen liegen ist in der MSDN gut beschrieben.

Benötigt man die Framework-Spezifischen Teile kann man immer noch mehrere Projekte machen und die *.cs Dateien verlinken.

 

Installation

Wie immer mehr Bibliotheken und Erweiterungen kann man die Erweiterung Portable Library Tools über NuGet installieren. Sobald dies gemacht ist gibt es eine neue Projektvorlage:

Über die Projekteigenschaften kann man die Zielframeworks sehr einfach auswählen:

Der wiederverwendbare Code kann nun in diesem Projekt entwickelt werden und steht Anwendungen der aktivierten Frameworks zur Verfügung.

 

Ausblick

Windows 8 wird mit Metro noch ein weiteres Framework in die .Net Welt bringen. Gemäss den Informationen aus der Tech Conference von Mitte März in Baden gibt es aber eine gute Nachricht: Visual Studio 11 (oder wie man die Version am Ende nennt) wird diesen Projekttyp bereits integriert haben. Eine Nachinstallation wird so nicht nötig sein und damit auch den Anwendern der Express-Edition zur Verfügung stehen.

 

Schlagworte: , , ,

Kurz-Tipp: IIS Express in Visual Studio verwenden

30. September 2011 5 Kommentare

Wer mit Visual Studio eine Webanwendung entwickelt wird häufig den eingebauten Webserver Cassini nutzen. Dieser funktioniert für die meisten Anwendungen ohne Probleme. Will man aber schon zur Entwicklungszeit einige IIS-spezifische Funktionen verwenden, stösst man damit schnell an die Grenzen. IIS Express ist in solchen Fällen eine gute und einfach zu konfigurierende Alternative zum ausgewachsenen IIS.

 

IIS Express installieren

Der einfachste Weg zur Installation von IIS Express führt über den Web Platform Installer. Mit diesem Tool kann man über eine einfache Maske diverse Web-Pakete (von PHP bis WordPress) mit einem Klick installieren. Als Alternative kann man den direkten Link aufrufen der einem gleich den IIS Express auswählt.

 

In Visual Studio nutzen

Um IIS Express zu nutzen muss man den Einstellungsdialog des gewünschten Webprojektes öffnen. Im Reiter Web kann man unter Servers den IIS Express auswählen. Die Projekt-URL kann einen beliebigen Zusatz haben oder nur aus localhost und einem Port bestehen.

Wichtig: Nach dem man die gewünschte URL eingegeben hat muss man das virtuelle Verzeichnis anlegen.

Startet man das Webprojekt nun mit F5 wird IIS Express verwendet. Will man doch wieder Cassini nutzen wählt man einfach auf der gleichen Maske den Development Server aus.

 

Fazit

IIS Express ist sehr schnell konfiguriert und man kann problemlos jederzeit wieder zurück zu Cassini. Wer mit Cassini Probleme hat (zum Beispiel wenn die Webanwendung immer wieder abstürzt) kann so in kurzer Zeit auf IIS Express wechseln und überprüfen ob das Problem vom Webserver abhängt oder doch selber verursacht wurde.

Schlagworte: , ,

Abhängigkeiten auflösen mit NuGet

Wer kennt es nicht: Um mal schnell etwas in Visual Studio zu testen benötigt man erst die eine Library und dann noch eine und noch eine. Am Ende hat man die erste Stunde lang nur versucht die Abhängigkeiten so aufzulösen, das auch noch alle Versionen miteinander arbeiten. Wie schön wäre es doch wenn man einfach sagen könnte ich will Library XY und alle Abhängigkeiten werden einem automatisch aufgelöst?

Genau dies ist die Aufgabe von NuGet. Mit nicht einmal 500kb ist diese Visual Studio Erweiterung sehr klein und schnell heruntergeladen. Nach der Installation gibt es unter Tools einen Eintrag „Library Package Manager“, über den man NuGet verwalten oder die PowerShell-Konsole aufrufen kann. Falls weder der Eintrag unter Tools noch das Kontextmenü erscheint hilft ein Neustart von Visual Studio.

Ich persönlich bevorzuge für solche Tätigkeiten eine grafische Oberfläche. Um die aufzurufen genügt ein Rechtsklick auf den References-Ordner. Das dazugehörige Kontextmenü wurde durch NuGet um den Punkt „Add Library Package Reference…“ erweitert.

Die grafische Oberfläche bietet einem einen praktischen Suchdialog an. Hat man das gewünschte gefunden, kann man mit einem Klick auf den „Install“ Knopf die Library für das ausgewählte Projekt installieren. Allfällige Abhängigkeiten werden dabei im gleichen Durchgang aufgelöst und ebenfalls installiert.

Wer mehr zu NuGet erfahren will findet alles nötige auf http://nuget.codeplex.com/.

Schlagworte: , ,

Code formatieren in Eclipse und Visual Studio

27. September 2009 Kommentare aus

Beim editieren von Source Code kommt die Formatierung schnell durcheinander. Man hat natürlich die Möglichkeit die von Hand wieder herzustellen. Allerdings ist das mühsam und man verschiebt es auf später. Nach weiteren Änderungen und noch mehr Vorsätzen für später hat man dann etwas, was man erst recht nicht mehr anpassen will.

Dies alles kann man sich ersparen, wenn man die in der IDE eingebauten Funktionen nutzt.

 
Eclipse
In Eclipse kann man den Code mit [Ctrl]-[Shift]-[F] sauber formatieren oder mit [Ctrl]-[I] nur die Einrückung korrigieren. Als Grundlage für die Formatierung dient die in den Einstellungen gewählte Formatierungsvorlage. IBM hat dazu eine ausführliche Erklärung.

 
Visual Studio
In Visual Studio gibt es eine vergleichbare Funktion. Mit [Ctrl]-[K] [Ctrl]-[D] wird der Code neu formatiert. Die Formatierung kann auch hier eingestellt werden. Auf MSDN gibt es dazu einen passenden Abschnitt.

 
Eine kleine Funktion die einem viel Ärger ersparen kann. Wenn man die Einstellungen verändert, sollte man diese Exportieren und ebenfalls in die Versionsverwaltung aufnehmen. Bei der Arbeit im Team sollte man nur an einem Ort die Einstellungen verändern. Ansonsten läuft das sehr schnell auseinander. Und wenn nur einer die Änderungen für alle macht spart man erst noch Zeit.

Folgen

Erhalte jeden neuen Beitrag in deinen Posteingang.

Schließe dich 278 Followern an