Wie mache ich eine aussagekräftige Code-Coverage-Analyse meiner Unit-Tests?

Ich verwalte die Tests für ein sehr großes Finanzpreissystem. Kürzlich hat unser Hauptquartier darauf bestanden, dass wir überprüfen, ob in jedem einzelnen Teil unseres Projekts ein aussagekräftiger Test vorhanden ist. Zumindest wollen sie ein System, das garantiert, dass wir unbeabsichtigte Änderungen an anderen Teilsystemen feststellen können, wenn wir etwas ändern. Am liebsten möchten sie etwas, das die Korrektheit jeder Komponente in unserem System bestätigt.

Das wird natürlich eine Menge Arbeit! Es könnte Jahre dauern, aber für solche Projekte lohnt es sich.

Ich muss herausfinden, welche Teile unseres Codes von keinem unserer Komponententests abgedeckt werden. Wenn ich wüsste, welche Teile meines Systems nicht getestet wurden, könnte ich damit beginnen, neue Tests zu entwickeln, die sich schließlich meinem Ziel einer vollständigen Testabdeckung nähern würden.

Wie kann ich diese Art von Analyse durchführen? Welche Tools stehen mir zur Verfügung?

Ich benutze Python 2.4 unter Windows 32bit XP

UPDATE0:

Zur Verdeutlichung: Wir haben eine sehr umfassende Unit-Test-Suite (plus eine separate und sehr umfassende REGTEST-Suite, die außerhalb des Rahmens dieser Übung liegt). Wir haben auch eine sehr stabile Continuous Integration-Plattform (mit Hudson erstellt), die entwickelt wurde, um standardmäßige Python-Unit-Tests in unserer Testanlage aufzuteilen und auszuführen: Ca. 20 PCs, die nach Unternehmensspezifikation gebaut wurden.

Das Ziel dieser Übung ist es, alle Lücken in unserer Python Unittest Suite (nur) zu schließen, damit jede Komponente einen gewissen Grad an Unittest Coverage aufweist. Andere Entwickler übernehmen die Verantwortung für Nicht-Python-Komponenten des Projekts (die ebenfalls außerhalb des Geltungsbereichs liegen).

"Komponente"ist absichtlich vage: Manchmal handelt es sich um eine Klasse, ein anderes Mal um ein gesamtes Modul oder eine Baugruppe von Modulen. Es kann sich sogar auf ein einzelnes Finanzkonzept beziehen (z. B. eine einzelne Art von Finanzoption oder ein Finanzmodell, das von vielen Arten von Optionen verwendet wird). Dieser Kuchen kann auf viele Arten geschnitten werden.

"Sinnvoll"Tests (für mich) sind solche, die bestätigen, dass die Funktion das tut, was der Entwickler ursprünglich beabsichtigt hatte. Wir wollen die Tests nicht einfach in reinem Python reproduzieren. Oft ist die Absicht des Entwicklers nicht sofort offensichtlich, daher besteht die Notwendigkeit, irgendetwas zu erforschen und zu klären das vage aussieht und dieses Wissen dann in einem Unit-Test festhält, der die ursprüngliche Absicht recht deutlich macht.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage