2011-01-03 6 views
3

Es scheint mir logisch, dass Sie, wenn Sie einen Abhängigkeitsgraphen Ihres Quellcodes haben (Baum, der Aufrufliste aller Funktionen in Ihrer Codebasis zeigt), nach jeder Veröffentlichung eine Menge Zeit bei Funktions- und Integrationstests sparen können .Warum beschleunigen Sie das Testen nicht mithilfe des Funktionsabhängigkeitsgraphen?

Im Wesentlichen können Sie den Testern genau sagen, welche Funktionalität getestet werden soll, da die übrigen Funktionen aus Sicht des Quellcodes unverändert bleiben.

Wenn Sie zum Beispiel einen Rechtschreibfehler in einem Teil des Codes ändern, gibt es keinen Grund, Ihr gesamtes Testskript erneut zu durchlaufen, "nur für den Fall" haben Sie einen kritischen Fehler eingeführt.

Meine Frage, warum werden Abhängigkeitsbäume nicht im Software-Engineering verwendet und wenn Sie sie verwenden, wie pflegen Sie sie? Welche Tools sind verfügbar, die diese Bäume für C# .NET, C++ und C-Quellcode generieren?

+1

Pex ist schräg verwandt - verwendet Code-Analyse, um Tests basierend auf möglichen Code-Pfaden und möglichen Parameterwerten zu generieren. http://research.microsoft.com/en-us/projects/pex/ – Jay

+0

Manuelles Testen? :-) Die meisten Dinge (sogar GUI) können - und sollten - alle grundlegenden Regressionstests haben, die ohne ein armes menschliches Klick-Tasten gespielt werden. (Und Computer-Zeit ist relativ billig.) –

Antwort

0

Idealerweise sollten Sie eine Art kontinuierliche Integration verwenden, insbesondere wenn Sie mehr als einen Entwickler haben, sodass alles, was in Ihrem Quell-Repository gespeichert wurde, mindestens einmal pro Tag getestet werden kann, wenn alles zusammen ist um sicherzustellen, dass keine neuen Bugs eingeführt wurden.

Selten habe ich Änderungen, bei denen ich einen Rechtschreibfehler korrigiere, genauso wie die Behebung von Fehlern oder das Hinzufügen neuer Funktionen.

Aber möglicherweise können Sie finden, was Sie in VS2010, in den Architekturwerkzeugen (http://blogs.msdn.com/b/somasegar/archive/2009/08/29/architecture-tools-in-vsts-2010.aspx), oder in VS2008 möchten, kann dies hilfreich sein: http://www.codeproject.com/KB/cs/depgraph.aspx.

Mein Problem mit dem VS2010-Diagramm ist, dass es zu kompliziert wird, um es zu verwenden.

Im Idealfall, wenn es eine Möglichkeit gäbe, eine Funktion oder eine Gruppe von Funktionen/Klassen auszuwählen und alles hervorzuheben, was davon betroffen wäre, könnte das nützlich sein, aber nur um bei einigen Funktionstests zu helfen. Ihre Tester sollten immer noch alles durchgehen, falls etwas anderes passiert ist, das ein Problem verursacht.

0

Ich stimme Ihren Annahmen nicht zu. Ihr Code verfügt zusätzlich zu den Abhängigkeiten des Ausführungspfads über Datenabhängigkeiten. Angenommen, Sie haben die Threads A und B ausgeführt. a()A Anrufe, die tut:

shared_memory.x.inc_by(2); 

Thema B ruft b():

assert(shared_memory.x.value % 2 == 0); 
... 

Und alles funktioniert (sagen wir mal;)). Dann eines Tages, ändern Sie die erste Funktion und tun Sie stattdessen aus irgendeinem Grund

shared_memory.x.inc_by(3); 

. Wenn Sie nur die Funktionen in Abhängigkeit von a() überprüfen, werden Sie nie die Möglichkeit haben, b() zu testen, weil es an irgendeiner Stelle verzweigt ist - es könnte sogar ein dynamischer Rückruf sein.

Dies ist nicht wirklich auf Multithreading beschränkt - wählen Sie es einfach als Beispiel. Jeder Ort, der die Daten teilt oder mit der Außenwelt kommuniziert, muss überprüft werden - was "das ganze Programm" wirklich in den Sprachen bedeutet, die Sie aufgelistet haben.

Es könnte in gewissem Umfang möglich sein, eine solche Analyse in einigen Sprachen durchzuführen - entweder aufgrund fehlender Nebenwirkungen oder aufgrund einer statischen Analyse des verwalteten Codes - aber in einigen Fällen (C/C++) In vielen Fällen werden Sie keine brauchbaren Daten mehr erhalten.

0

Abgesehen von Visual Studio gibt es viele unabhängige Source-Code-Abhängigkeitsanalysatoren, die dafür verwendet werden können; Source insight ist ein solches Werkzeug, das einen Abhängigkeitsgraph und einen visuellen Aufrufstapel bereitstellt.