ZFX
ZFX Neu
Home
Community
Neueste Posts
Chat
FAQ
IOTW
Tutorials
Bücher
zfxCON
ZFXCE
Mathlib
ASSIMP
NES
Wir über uns
Impressum
Regeln
Suchen
Mitgliederliste
Membername:
Passwort:
Besucher:
4439687
Jetzt (Chat):
47 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-

ZFX
Sonstige Foren
Off-Topic
Empfehlungen für statische Codeanalyse
Normal
AutorThema
Krishty Offline
ZFX'ler


Registriert seit:
01.02.2004

Nordrhein-Westfalen
342173470
Empfehlungen für statische CodeanalyseNach oben.
Hi,

Ich suche ein Tool zur statischen Codeanalyse eines C++-Projekts (VS 2008, aber ohne Language-Extensions – eine .exe, eine .lib).

Könnt ihr mir da was gutes, kostenloses empfehlen? Ich habe schon cppcheck probiert, bin aber nicht so recht damit klargekommen.

Gruß, Ky
17.02.2009, 15:34:54 Uhr
Enrico_ Offline
ZFX'ler


Registriert seit:
08.04.2003

Baden-Württemberg
72778726
Re: Empfehlungen für statische CodeanalyseNach oben.
Wir in der Firma haben nach langer Zeit doch (viel) Geld in die Hand genommen und Coverity-Lizenzen gekauft. Der Rest taugt nicht wirklich... auch wenn du das jetzt eher nicht hören wolltest
18.02.2009, 10:27:14 Uhr
Krishty Offline
ZFX'ler


Registriert seit:
01.02.2004

Nordrhein-Westfalen
342173470
Re: Empfehlungen für statische CodeanalyseNach oben.
Habe ich schon befürchtet … :/

Habe gerade die Code-Analyse vom Visual Studio 2010 CTP angetestet, die ist auch mal ein Schuss in den Ofen …
18.02.2009, 10:46:38 Uhr
Jörg Offline
ZFX'ler


Registriert seit:
03.12.2005

Nordrhein-Westfalen
133916438
Re: Empfehlungen für statische CodeanalyseNach oben.
Ich hattet ein paar mal das Teil von Parasoft laufen (fuer Embedded-Projekte) und war ganz zufrieden, allerdings war es nur ein kleines Projekt (20000 Zeilen). Das gibts wohl auch fuer Windows, etc.
Vllt. mal eine Trial-Version probieren?
Was waren denn die Problemfaelle bis jetzt bei Dir?

PS: Ach das 'kostenlos' hab ich ueberlesen, sorry. Also ist das wohl keine Alternative.

1 Mal gendert, zuletzt am 18.02.2009, 11:50:39 Uhr von Jörg.
18.02.2009, 11:40:52 Uhr
Krishty Offline
ZFX'ler


Registriert seit:
01.02.2004

Nordrhein-Westfalen
342173470
Re: Empfehlungen für statische CodeanalyseNach oben.
Okay, werde mich heute nachmittag mal nach der Trial-Version umsehen Trial ist ja auch irgendwie kostenlos
… und besser als nichts, wenn die kostenlosen eh zu nichts taugen.


cppcheck machte einfach garnichts (rannte in zehn Sekunden durch die Dateien und meldete Null Fehler). Es hat zwar irgendwas damit gemacht (habe ich daran gesehen, dass es die verschiedenen #defines durchgegangen ist), aber mit Analyse hatte das wohl nichts zu tun.


VS 2010 stürzt nach jeder Analyse ab, wenn man auf mehr als einen Fehler doppelklickt und führt nach jeder Änderung einen kompletten Rebuild aus, was zusammen mit der virtuellen Maschine rund fünf Minuten pro erkanntem Fehler bedeutet … es findet keinen Fehler in solchem Code:
Code:
template <const size_t t_iDimension> class Vector {
private:
    float m_Array[t_iDimension];
public:
    float & operator [] (const size_t p_iIndex) {
        return this->m_Array[p_iIndex];
    }
};

Vector<4> l_VectorOfFour;
l_VectorOfFour[123] = 12345.67890f;
Wenn die Konstruktion aber komplizierter wird, spuckt es da Array-out-of-bounds aus, wo keine vorkommen können …

… außerdem findet es massenhaft uninitialisierte Variablen und mögliche Nullzeiger, wo keine sein können.

1 Mal gendert, zuletzt am 18.02.2009, 11:58:05 Uhr von Krishty.
18.02.2009, 11:57:02 Uhr
knivil Offline
ZFX'ler


Registriert seit:
03.04.2008

Baden-Württemberg
Re: Empfehlungen für statische CodeanalyseNach oben.
Meinst du sowas wie PC-lint? Aber auch teuer.
18.02.2009, 14:49:40 Uhr
Krishty Offline
ZFX'ler


Registriert seit:
01.02.2004

Nordrhein-Westfalen
342173470
Re: Empfehlungen für statische CodeanalyseNach oben.
Ja, genau sowas … schade, ist unerschwinglich. Aber die Bugs des Monats sind ganz interessant zu lesen
19.02.2009, 19:27:11 Uhr
jbr Offline
ZFX'ler


Registriert seit:
13.05.2005

Schleswig-Holstein
Re: Empfehlungen für statische CodeanalyseNach oben.
@Krishty:

Was genau sind denn deine Anforderungen an das Tool? Gibt einige Projekte in dem Bereich, allerdings ist es schwer etwas Brauchbares zu finden, was kein Geld kostet. Das meiste was ich kenne kommt eher aus der Forschung, also eher Prototypen. Hier eine kurze Liste:


  • MetaComp: frueher Projekt von Dawson Engler in Stanford
  • Saturn: Auch Stanford, von Alex Aiken
  • Klocwerk (gab frueher zumindest mal eine Trial fuer die Java Version, k.A. wie es mit C++ aussieht)
  • myGCC: freie Erweiterung fuer den GCC, recht eingeschraenkte Moeglichkeiten durch die Grammatik, Hauptentwickler ist Nic Volanchi
  • Goanna: entwickelt am NICTA, irgendwo zwischen Forschung und kommerziell anzusiedeln
  • CodeSurfer, CodeSonar von GrammaTech: kommerziell, gegruendet von Thomas Reps
  • Astree: Forschungsprojekt von Cousot & Cousot
  • PolySpace: Sehr teuer, gegruendet von Alain Deutsch, einem Studenten von Cousot
  • Prefix: Tool von Microsoft, extern eingekauft, macht interprozedurale Analyse
  • Prefast: Abgespeckte Version von Fix, Eigenentwicklung
  • Lint: Egal welches davon, imho alles crap
  • Calysto: recht neues Tool von Domagoj Babic
  • Uno: Gibt zwei Static Analyzer namens Uno, nicht verwechseln mit dem Java Analyzer, der an der University of Maryland entwickelt wird
  • Orion
  • AbsInt: Entwickelt in Saarbruecken von Reinhard Wilhelm, inzwischen kommerziell, viel in Richtung WCET Analyse, gibt aber auch Trials; haben auch eine Sprache zur Generierung eigener Datenflussanalysen
  • SLAM
  • Blast
  • uvm.


Das sind so die Tools, die mir spontan eingefallen sind. Ich habe selbst mal 1,5 Jahre an statischer Analyse fuer C/C++ gearbeitet und in dem Bereich auch meine Diplomarbeit geschrieben. Bin inzwischen eher Richtung Assembler-Code Analyse gegangen fuer die Diss. Wenn du also noch Fragen hast oder die Problemstellung ein wenig eingrenzen kannst, kann ich evtl. weiterhelfen.

Nachtrag:

Hab grad erst dein Beispiel gesehen, wundert mich eigentlich, dass solche einfachen Fehler nicht gefunden werden, eigentlich ist Array-Bounds-Checking so schrecklich kompliziert, liegt aber vermutlich in dem Fall an grundsaetzlichen Problemen mit Analyse von C/C++ Code. Teilweise war ich auch echt schockiert, wie schlecht einige Tools waren. Habe mal Klocwerk fuer Java ausprobiert und damit ein wenig rumgespielt.

Code:
public int add(Integer x) {
  return this->x + x;
}

...
add(null);


wurde z.B. noch gefunden, sobald man aber vorher eine Variable mit null initialisiert hat und diese uebergeben hat, gab es keine Warnungen mehr. Mit den Null-Zeigern etc. ist aber ein grundsaetzliches Problem der statischen Analysen, damit hatte auch Coverity so seine liebe Not, kann aber nicht sagen ob das inzwischen besser funktioniert.

2 Mal gendert, zuletzt am 20.02.2009, 00:01:27 Uhr von jbr.
19.02.2009, 23:48:47 Uhr
Krishty Offline
ZFX'ler


Registriert seit:
01.02.2004

Nordrhein-Westfalen
342173470
Re: Empfehlungen für statische CodeanalyseNach oben.
Wow, erstmal danke für die umfangreiche Antwort!

Es ist nichts kritisches (darum möchte ich auch kein Geld dafür ausgeben), ich habe nur eben die Entwicklung eines kleinen Frameworks für meine Engines weitestgehend abgeschlossen und möchte sicher sein, dass der Code ein solides Fundament bildet, bevor ich in den nächsten Monaten darauf aufbaue und Veränderungen immer größere Rattenschwänze nach sich ziehen.

Nullzeiger und uninitialisierte Variablen waren bisher kein Problem (durch RAII und weitestgehenden Verzicht auf Zeiger) … aber Wertebereiche und mathematischer Nonsens sollten geprüft werden, wegen Zeit- und Planetenbahnberechnungen, da blicke ich teils selbst nicht mehr durch die Formeln und Parameter durch -.-

Ich benutze viele – auch recht komplizierte – Templates, was zwar einerseits den Code kurz hält und bisher für eine niedrige Bug-Rate gesorgt hat, dafür hatten die verbliebenen Bugs aber ordentliche Durchschlagskraft. Besondere Prüfung der Template-Parameter wäre also von Vorteil (aber ich befürchte, dass das zu hohe Ansprüche sind) …

… denn das mit der Qualität habe ich ja auch schon selbst gemerkt … das Verhalten der VC-Code-Analyse konnte ich beim besten Willen nicht mehr logisch nachvollziehen, dabei ist das Programm mit Sicherheit nicht bloß ein Experiment :/

Deine Liste muss ich morgen mal abklappern … selbst wenn immer nur Teilbereiche abgedeckt werden, ist ja besser als nichts – und ich tüftle gerne an sowas

1 Mal gendert, zuletzt am 20.02.2009, 01:09:31 Uhr von Krishty.
20.02.2009, 01:07:24 Uhr
Krishty Offline
ZFX'ler


Registriert seit:
01.02.2004

Nordrhein-Westfalen
342173470
Re: Empfehlungen für statische CodeanalyseNach oben.
So, mal das was ich bis jetzt abgearbeitet habe:
  • MetaComp: Keine brauchbaren Ergebnisse gefunden, scheinbar ist das Projekt einfach verschwunden. Die Domain metacomp.stanford.edu existiert nicht mehr.
  • Saturn: Kann, nach der Website und den Papern, leider ausschließlich C.
  • Klocwork: Die Trial-Version gibt es nur für Java, alles nur auf kommerzielle Kunden ausgerichtet.
  • Goanna: Komplett kommerziell, denke ich.
  • CodeSurfer: Ein Paket, das Tool für statische Analyse ist CodeSonar, es gibt kostenlose Testversionen gegen Angabe der anvisierten Projekte – ausschließlich Kommerziell.
  • ASTRÉE: Kann leider ausschließlich C.
  • PolySpace: Ausschließlich kommerziell, sehr teuer …
  • Prefix/Prefast: Außer einer kurzen Erwähnung bei Microsoft nichts gefunden – (absichtlich?) in der Versenkung verschwunden?
  • Lint: Außer der von knivil genannten Version habe ich das immer nur für C gefunden.
  • Calysto: Domagoj Babic sagt auf seiner Website, er wolle es nicht öffentlich zugänglich machen. Zudem scheint es ausschließlich C zu unterstützen.
Den Rest arbeite ich momentan ab und ergänze dann.

Ich habe die Verbreitung solcher Tools wohl erheblich überschätzt … damit, dass solche Tools rar und teuer sind, hätte ich rechnen müssen, zumal sie in ihrer Komplexität ungefähr in der Liga von guten C++-Compilern rangieren müssen … :/
25.02.2009, 23:10:01 Uhr
Godhand Offline
ZFX'ler


Registriert seit:
15.10.2002

Deutschland
Re: Empfehlungen für statische CodeanalyseNach oben.
Hi,

Bezüglich Prefast:
http://buildingsecurecode.blogspot.com/2007/08/security-code-scanning-with-microsoft.html

Ich habs nicht getestet, aber anscheinend musst du bei MSDN-Connect dabei sein. Das ist aber auch nicht weiter tragisch ...

Mit freundlichen Grüßen,
Godhand.
26.02.2009, 13:23:34 Uhr
Krishty Offline
ZFX'ler


Registriert seit:
01.02.2004

Nordrhein-Westfalen
342173470
Re: Empfehlungen für statische CodeanalyseNach oben.
Habe es gemäß der Anleitung geladen und installiert, aber jeder Versuch es zu starten wird mit einem Absturz quittiert („Microsoft (R) Console Based Script Host funktioniert nicht mehr“) … egal ob mit Parametern, Admin-Rechten oder ohne

Hier haben drei Leute das gleiche Problem, aber wohl keine Lösung -.-

In dem Zusammenhang wäre es auch mal interessant zu wissen, welcher Analyzer in VS 2010 zum Einsatz kommt – ist es ebenfalls Prefast, kann ich mir das gleich sparen, so wie VS 2010 bei meinem Code versagt hat …

Edit: Ich sehe gerade dass Prefast nicht nur dem DDK beiliegt, sondern auch dem Windows SDK. Auch wenn es dann wohl dasselbe wie in VS 2010 ist – da ich die Compiler eh auf der Platte habe, teste ich das Feature einfach mal.

4 Mal gendert, zuletzt am 26.02.2009, 22:41:20 Uhr von Krishty.
26.02.2009, 22:19:53 Uhr
jbr Offline
ZFX'ler


Registriert seit:
13.05.2005

Schleswig-Holstein
Re: Empfehlungen für statische CodeanalyseNach oben.
Hi,

so etwas in die Richtung habe ich erwartet. Die einzigen, bei denen ich mir einen sinnvollen Einsatz für C++ Code vorstellen könnte, sind die Tools von GrammaTech und Coverity, aber beide eben kommerziell und alles andere als günstig.

Komplexität ist wie du schon sagtest ein echtes Problem bei der Entwicklung der Teile. Für C ist es schon eine echte Herausforderung, aber da gibt es einige Tools die sinnvolles Zeug produzieren, aber für C++ ist es der reinste Krampf, so etwas wie sinnvolle Ergebnisse zu generieren. Bei fast jedem Tool wirst du das Problem haben, dass entweder Unmengen von überflüssigen Warnungen generiert werden, oder aber gar nichts erkannt wird. Habe am NICTA länger an Goanna gearbeitet, und das war schon eine echte Herausforderung.

Habe mich mal mit einem der Gründer von Coverity unterhalten und der meinte 3/4 der Zeit wären die damit beschäftigt, irgendwie den Sprachsupport für die verschiedenen Compiler und Dialekte sicherzustellen, der kleine Rest ginge dann in das eigentliche Tool.

Inzwischen mache ich übrigens statische Analyse von Assembler für Mikrocontroller-Hardware (also ATMEL ATmega16, Intel C51, Renesas R8C, etc), da sind die Probleme wieder ganz andere. Das geht schon damit los, dass man statt 2 Mio Zeilen C Code auf einmal 2.000 Zeilen Assembler vor sich hat, aber es ist super angenehm, eine fixe Plattform, einen Sprachdialekt und für jede Instruktion eine Semantik zu haben, auf der man arbeiten kann. Das hat mir bei C/C++ echt den Schlaf geraubt.

Wenn du doch noch ein sinnvolles Tool findest, dann sag auf jeden Fall Bescheid, das würde mich mal interessieren.
04.03.2009, 20:28:22 Uhr
Krishty Offline
ZFX'ler


Registriert seit:
01.02.2004

Nordrhein-Westfalen
342173470
Re: Empfehlungen für statische CodeanalyseNach oben.
Also, der Vollständigkeit halber: Der dem Windows SDK beiliegende Anaylzer hat einfach garnichts gemacht -.- Und hätte er was gemacht, hätte ich meinen Code wahrscheinlich wochenlang mit SAL versehen müssen.

Ich habe hier bereits eine Bibliothek rumliegen, die Prüfungen auf Wertebereiche durchführt, sie ist nur zu komplex, um sie einzusetzen. Ich warte C++09 ab und nutze sie dann ... dann übernimmt der Compiler die Arbeit des Analyzers. Wird zwar nur einen Teil der möglichen Bugs abfangen, aber besser als die bisher kennengelernten Tools ...

Falls ich in dem Bereich noch was entdecke, halte ich euch auf dem Laufenden. Es ist ja noch ein bisschen hin bis VS 2010, und vielleicht schafft Microsoft bis dahin, den Analyzer mehr oder weniger einsatzfähig für diese Welt zu machen ...

Zitat von jbr:
Inzwischen mache ich übrigens statische Analyse von Assembler für Mikrocontroller-Hardware
Das gute, einfache Leben Mir bleibt es vergönnt -.-
08.03.2009, 16:54:33 Uhr
Normal


ZFX Community Software, Version 0.9.1
Copyright 2002-2003 by Steffen Engel