Visual Studio 2017 (Teil 1)

Beim Visual Studio und Azure Info Day dieses Jahr stellte Daniel Meixner die Neuerungen von Visual Studio 2017 vor. Mittelpunkt der Präsentation war das Thema „Shift-Left-Ansatz“, wobei Programmierung und Testing näher zusammengerückt werden und so die Produktivität durch Fehlervermeidung gesteigert werden kann.

Im ersten Teil werden die beiden Punkte InnerLoop und die Frage, wie dieser beschleunigt werden kann beantwortet sowie das Feature IntelliTrace vorgestellt.

Inner Loop

Der Inner Loop beschreibt den täglichen Ablauf in der Entwicklung. Hierbei werden die einzelnen Schritte vom Code Editing über Debugging und Unit Testing bis hin zu Continuous Integration und Deployment durchlaufen. Parallel hierzu verläuft die Zeitachse, was zu einer Entkopplung zwischen den Aktionen des Code Schreibens und Testings führt. Das heißt, dass Fehler, die beim Code Editing auftreten oftmals erst bei der Continuous Integration auffallen. Zu diesem Zeitpunkt ist die Fehlerbehebung sehr aufwendig, da nicht mehr präsent ist, was genau bei der entsprechenden Codezeile geschrieben wurde und welche Probleme hier auftreten können. Je mehr Zeit zwischen dem Schreiben von Code und dem Testen von Code liegt, desto schwieriger wird es, sich an das Geschriebene zu erinnern und hier schnell Korrekturen vornehmen zu können.

Traditioneller Ablauf Softwareentwicklung, Visual Studio 2017, generic.de AG

Traditioneller Ablauf Softwareentwicklung

In Visual Studio 2017 besteht nun die Möglichkeit, diese beiden Achsen näher zusammen zu bringen und damit den Shift-Left-Ansatz zu integrieren. Diese Verlagerung der Tests weiter nach links, näher an das Schreiben von Code, bringt die beiden Aktionen in einen zeitlichen Zusammenhang und steigert somit die Produktivität. Fehler und Probleme werden direkt beim Schreiben erkannt und können in diesem Zusammenhang auch unmittelbar behoben werden.

Der Inner Loop spiegelt den dauerhaften Kreislauf bei der Softwareentwicklung wider. Viele Male wird der Code täglich ausgeführt, um zu überprüfen wie er sich zur Laufzeit verhält. Genau daher stellt sich die Frage: Wie kann man diesen Inner Loop nun beschleunigen?

Inner Loop - Visual Studio 2017, generic.de AG

Inner Loop und Outer Loop

Visual Studio 2017 bietet hierfür verschiedene Features, welche über die Verlagerung der Tests nach links die Entwicklungsschritte beschleunigen. Eines der Features ist eine Browsererweiterung zum Erstellen von Bugreports. Diese Erweiterung loggt den Verlauf im Browser mit und bietet unter anderem die Möglichkeit, Screenshots direkt im Browser zu erstellen, zu beschriften und zu bearbeiten. Mit minimalem Aufwand kann man einen kompletten Bugreport erstellen. Dabei wird angezeigt, ob der Fehler bereits gemeldet wurde und vereinfacht die Nachvollziehbarkeit für die Entwicklung und Fehlerbehebung.

Beim Erstellen eines Bugs über das Plugin wird automatisch ein Bug in den Visual Studio Team Services angelegt, der bereits Titel und Beschreibung enthält und die Log-Files hinterlegt. Über die Reprosteps werden alle Klicks des Users und Informationen zum System (verwendeter Browser, Bildschirmauflösung usw.) mitgeloggt und liefern so eine sehr detaillierte Übersicht über die aufgetretene Problematik.

Aus dem Bug-Task heraus kann direkt ein neuer Branch zum Bearbeiten des Fehlers angelegt werden. Visual Studio Team Services stellt hierüber die Verknüpfung her, welcher Branch angelegt wurde um einen bestehend Task zu bearbeiten und darüber wiederum die Verknüpfung zum aufgetretenen Bug. Das Anlegen eines Branches direkt aus den Team Services liefert somit eine durchgängige Nachvollziehbarkeit und Traceability.

IntelliTrace

Nun stellt sich weiterhin die Frage, wie der reportete Bug im Code gefunden und behoben werden kann. Mit IntelliTrace in Visual Studio 2017 werden diese Bugs schnell auffindbar. IntelliTrace bietet die Möglichkeit, bereits durchlaufene Events nochmals zu durchlaufen und den Code an der entsprechenden Stelle „anzuhalten“. Normalerweise muss der Code Stück für Stück durchgegangen werden um Breakpoints setzen zu können. IntelliTrace hingegen liefert eine Liste mit Events, die durchlaufen wurden und loggt diese. Da die Liste mitunter sehr groß sein kann, kann innerhalb dieser gesucht werden und man kann sich anzeigen lassen, wann eine Zeile durchlaufen wurde und welche Bedingungen hierfür vorliegen.

Anhand eines Beispiels lässt sich dies folgendermaßen darstellen: Der Bug liegt innerhalb einer Suchfunktion. Hier wurde zunächst nach dem Begriff „Battery“ gesucht, im Anschluss nach dem Plural „Batteries“, beide Anfragen lieferten eindeutige Treffer, ebenso wie die Suche nach „Coil“. Die Suche nach dem Plural „Coils“ allerdings lieferte keine Ergebnisse. Mit der Browsererweiterung und IntelliTrace kann nun im Code historisch nachverfolgt werden, dass nach diesen vier Suchbegriffen gesucht wurde und man kann direkt in die Zeile im Code springen, in der dieses Event durchlaufen wird.