Frage

Hintergrund

Ich habe eine Anwendung in native C ++ geschrieben im Laufe von mehreren Jahren, die rund 60 KLOC ist. Es gibt viele, viele Funktionen und Klassen, die tot sind (wahrscheinlich 10-15% wie die ähnlichen Unix-basierten Fragen gestellt unten). Wir begannen vor kurzem Unit-Tests für alle neuen Code zu tun und es zu geänderten Code, wann immer möglich anzuwenden. Allerdings würde ich ein SWAG machen, dass wir weniger als 5% Testabdeckung im Augenblick haben.

Annahmen / Einschränkungen

Die Verfahren und / oder Werkzeuge müssen unterstützt:

  • Native (das heißt nicht verwaltet) C ++
  • Windows XP
  • Visual Studio 2005
  • Müssen nicht vom Benutzer gelieferten Testfälle für die Berichterstattung erfordern. (Zum Beispiel kann nicht auf Unit-Tests abhängig Codeabdeckung zu erzeugen)

Wenn die Methoden unterstützen mehr als diese Anforderungen, dann groß.

Hinweis: Wir verwenden derzeit die Professional Edition von Visual Studio 2005, nicht das Team System. Daher ist ein gültig Vorschlag (ich weiß nicht, ich habe es nie benutzt) könnte sein Team System verwendet aber ich hoffe, es ist nicht die nur Lösung.

Warum Unit-Tests unter Verwendung von für Codeabdeckung ist problematisch

Ich glaube, dass es für ein generisches Werkzeug unmöglich ist, alle Toten (z unerreichbaren Code) in jeder beliebigen Anwendung mit null falschen Positiven zu finden (ich denke, das an das Halteproblem entsprechen würde). Aber ich glaube, es ist auch möglich, dass ein generisches Werkzeug viele Arten von totem Code, die sehr wahrscheinlich sind in der Tat tot sein, wie Klassen oder Funktionen, die nie Referenz im Code durch irgendetwas anderes.

zu finden

Mit dem Unit-Tests mit dieser Abdeckung bieten, die Sie nicht mit mehr generischen Algorithmus und somit steigen sowohl der Anteil des toten Code können Sie erkennen, und die Wahrscheinlichkeit, dass alle Hits sind nicht falsch positive Ergebnisse. Im Gegensatz dazu, Tests Einheit mit in falsch-negative Ergebnisse zur Folge haben könnte, da die Unit-Tests könnte sich das einzige, was ein gegebenes Stück Code ausübt. Im Idealfall würde ich Regressionstests, die alle extern verfügbare Methoden, APIs ausüben, Benutzersteuerungen, usw., die als eine Basislinienmessung von Codeabdeckungsanalyse dienen würden von bestimmten Verfahren, um auszuschließen, falsche Positive sein. Leider aber ich nicht über diese automatisierten Tests in der heutigen Zeit habe.

Da ich aber eine so große Code-Basis mit einer so niedrigem Testfall Abdeckung Prozentsatz, ich bin auf der Suche nach etwas, das, ohne dass riesigen Mengen an Zeit schriftlich Testfälle investiert helfen könnte.

Frage

Wie gehen Sie über toten Code in einem automatisierten oder halbautomatisch in einer nativen C ++ Anwendung auf der Windows-Plattform mit der Visual Studio 2005 Entwicklungsumgebung Erkennung?

Siehe auch

tote Code-Erkennung in Legacy-C / C ++ Projekt ich sagen möchte, dass die VC ++ Compiler den gesamten Code zu kompilieren. Es kann getan werden?

War es hilfreich?

Lösung

Stellen Sie den Linker nicht referenzierte Objekte zu entfernen (/ OPT: REF). Wenn Sie die Funktionsebene Verknüpfung und ausführlichen Linker Ausgang verwenden, listet der Linker Ausgang jede Funktion kann es beweist ungenutzt ist. Diese Liste ist bei weitem nicht vollständig, aber Sie haben bereits die Werkzeuge benötigt werden.

Andere Tipps

Wir verwenden Bullseye , und ich kann es empfehlen. Es ist nicht von einer Unit-Test-Umgebung ausgeführt werden muß, aber das ist, was wir tun.

Verwenden Sie ein Code-Coverage-Tool gegen Ihre Unit-Test-Suite.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top