2010-11-23 11 views
10

Welche Werkzeuge wären am nützlichsten für die Analyse einer C++ - Codebasis? Was kosten sie?
Können wir mit kostenloser und Testsoftware fertig werden, oder gibt es kommerzielle Software, die gut ist und für die wir wirklich bezahlen sollten?Werkzeuge zum Analysieren der C++ - Codebasis

Das Hauptziel wäre es, ein Verständnis für Qualität zu bekommen - Speicherprobleme usw., auch um den Code zu verstehen (zum Beispiel um Architekturprobleme zu entdecken), vielleicht Kodierungsstandards.

In erster Linie statische Analyse, aber wir hoffen, den Code ausführen zu können. . Denken Sie es in dem Sinne, „robust muss, dass es mit dem Code für obskuren Compiler arbeiten sollte

+0

Was ist mit guten alten Boundschecker und Purify? Sind sie immer noch die führenden Apps? – Olav

+0

Es ist seltsam, dass Sie nach statischen Analysen fragen und dann dynamische Analyse-Tools als Beispiele anbieten. –

+0

Boundschecker haben auch statische Fähigkeiten, denke ich. Jedenfalls denke ich, dass es am besten ist, es dynamisch zu machen, aber ich weiß nicht, ob wir so weit kommen werden. – Olav

Antwort

5

Das beste kostenlose Tool ist Ihr c ompiler's warning errors, ich benutze sie immer auf maximaler Ebene. Das erste Ziel sollte ein sauberer Build ohne Betrug sein (z. B. das Deaktivieren oder Verwerfen nicht verstandener Warnungen).

Visual C++ ist in Code Analysis eingebaut, was gut für einige Fehler und Win32 API-Missbrauch ist, aber es ist nicht in der kostenlosen Version enthalten und (offensichtlich) Windows-spezifisch. Dies war früher ein internes Microsoft-Tool namens Prefast - analog zu FxCop in .Net.

PC-Lint ist gut, aber ausführlich und nicht frei. Wenn Sie eine Konfigurationsdatei erhalten können, um "nützliche Dinge" zu finden und das Rauschen zu ignorieren, wäre das ein großes Plus. Auch dies ist für Windows, aber ich weiß, dass es Versionen für andere Plattformen gibt.

+0

Es ist nur in der super-teuren Team-Version, oder? –

+0

@Noah - für VS2010 ist es in Premium und Ultimate. Für VS2008, Team System und Team Suite. Für 2005, Team Edition für Softwareentwickler. Grob gesagt: Ja, es ist nur in den teureren Versionen, mit VS2010 ist ein wenig weniger exorbitant, wenn Sie das wollen. –

+0

Das stimmt, die Versionen haben sich alle mit der neuen Version geändert. Ich verliere den Überblick. +1 für Compilerwarnungen, aber ich würde die Regel "Make it compile with any," hinzufügen. Es kann schwierig sein, besonders wenn Sie Boost verwenden, aber es ist viel offensichtlicher, dass es ein Problem gibt, wenn Sie nicht schon 5000 Warnungen haben, die Sie anschreien. –

0

Theres CCCC: http://cccc.sourceforge.net/ - Ergebnis eines Forschungsprojekts zu Metriken.

Um die Wahrheit zu sagen, habe ich in solchen Dingen nicht viel Nutzen gefunden. Was erhoffst du dir?

2

Ich habe sehr gute Dinge über Valgrind gehört. "automatisch viele Speichermanagement- und Threading-Fehler erkennen und Ihre Programme im Detail profilieren"

+2

Ein guter Vorschlag, aber Valgrind macht keine statische Analyse: Sie müssen den Code ausführen (und idealerweise mit entsprechender Abdeckung ausführen), um Valgrind zu nutzen. –

1

Die Nummer eins in Programmen ist code duplication. Sie können Klondetektoren verwenden, um Duplikate zu finden. Viele Klondetektoren vergleichen nur Textzeilen für exakte Übereinstimmungen; andere vergleichen Token-Streams und finden fast exakte Übereinstimmungen, bei denen die Unterschiede nur Bezeichner geändert werden. Sie können unsere CloneDR verwenden, um eine Duplizierung zu finden, in der beliebige Sprachstrukturen eingefügt oder entfernt werden. Verwenden Sie dazu die Grammatik der Sprache als Leitfaden. CloneDR funktioniert sowohl für große C++ - Systeme als auch für viele andere Sprachen. Unter dem Link finden Sie typische Klon-Erkennungsberichte.

Ein beliebtes Breitband-Statik-Checker ist PCLint. Dies überprüft eine Vielzahl von üblichen Codierungsfehlern, die durch das Werkzeug vordefiniert sind. Ich weiß nicht, wie gut es "arkane" (Compiler) Dialekte von C++ handhabt.

Wenn Sie benutzerdefinierte Prüfungen definieren möchten, benötigen Sie eine full C++ front end parser und die Möglichkeit, Ihre Schecks beliebig zu konfigurieren. Unser DMS Software Reengineering Toolkit ist ein Motor, der dafür konfiguriert werden kann.Das C++ - Frontend von DMS kann für "arkane" C++ - Dialekte konfiguriert werden, umfasst aber bereits ANSI, GCC3 und GCC4, MS Visual Studio 7 und 2005. Da DMS eine Programmtransformations-Engine ist, kann es sogar dazu verwendet werden, den Code zu "verbessern" Qualität, indem schlechte Konstrukte durch bessere ersetzt werden.

Während keine statische Analyse, test coverage Tools zum Messen, wie gut Sie Ihren Code getestet haben, sind sehr hilfreich bei der Beurteilung Ihrer Codequalität. Nur weil all deine Tests bestanden haben, bedeutet das nicht, dass du gut getestet hast; nicht ausgeübter Code kann wohl irgendeine/alle möglichen Probleme haben.

0

Sie könnten Vigilant Sentry ausprobieren, die C und C++ analysiert und nach erweiterten Fehlern in Ihrer Software sucht. Dies umfasst unter anderem Speicher- oder Ressourcenlecks und Abstürze, die Speicherkorruption verursachen.

Die kleine Business-Edition ist derzeit nur $ 795 (bei weitem die billigste auf dem Markt für den Wert) und das Unternehmen ist 4995 $. Viel Glück beim Finden, was Sie brauchen.

Verwandte Themen