Forum: Compiler & IDEs Software Zertifizierung


von Armin (Gast)


Lesenswert?

Ist es möglich mit einem GCC eine Software Zertifizierung durchzuführen 
oder werden an den Compiler gewisse Anforderungen gestellt? Wenn ja, 
welche sind diese?

: Verschoben durch User
von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Wir mußten in der Firma meine Software zertifizieren lassen.
Der "Prüfer" hat nicht nach einem Compiler gefragt.

Es geht da eher um ein recht üppiges Honorar ...

von Pandur S. (jetztnicht)


Lesenswert?

Naja. Es gibt verschiedene Arten von Software Fehlern. Vorausgesetzt ist 
natuerlich dass der Compiler genau das macht, wie angewiesen. Was nicht 
dasselbe ist, was man denkt programmiert zu haben.

- Ohne, resp zuwenig Typenpruefung. zB Pointer = int
  Das kann ein Compiler moeglicherweise, wenn er es denn soll.
  Allenfalls eine andere Sprache waehlen.

- Falsche Abfragen : man laesst einen Index/Pointer zu wenig
  weit laufen. Das kann ein compiler natuerlich nicht
  herausfinden, es gibt auch keinen Runtime Fehler

- Datenblatt falsch gelesen. Eine Funktionalitaet geht nicht
  zuverlaessig. Das kann ein compiler natuerlich nicht
  herausfinden, es gibt auch keinen Runtime Fehler

- Konzept falsch. ..

Bevor die Idde aufkommt, ein Compiler koenne "etwas"

von Clemens L. (c_l)


Lesenswert?

Was für ein Zertifikat ist das denn?

Schlimmstenfalls verlangt das Zertifikat, dass der Compiler sich an eine 
bestimme Version der ANSI-C-Spezifikation hält; damit hätte gcc kein 
Problem.

von hart aber weise (Gast)


Lesenswert?

Armin schrieb:
> Ist es möglich mit einem GCC eine Software Zertifizierung
> durchzuführen
> oder werden an den Compiler gewisse Anforderungen gestellt?

Kommt auf die zertifizierung. Gehts um erhöhter Sicherheit wie bei der 
Fliegerei muss der Compiler darauf zertifiziert werden das er keine 
Scheisse baut.
Das kann man per Analyse des Compilers selbst oder durch Blick auf die 
einsatz-hisory machen, meint wenn der Compiler in der Vergangenheit 
brauchbare Ergebnisse geliefert hat dann wird er das auch weiter tun. 
Natürlich bezieht sich diese aussage auf eine eingefrorene version des 
Compilers. Und oft wird verlangt Compiler-Optimierungen auszuschalten.

Also prinzipiell kann man den Gcc zertifizieren, da seine Sourcen Offen 
liegen sollte das sogar einfach möglich sein.

Aber Vorsicht, es gibt gcc-Varianten die verhalten lt. Linus sich wie 
auf ein Kopf gefallenes Faultier: 
http://www.heise.de/developer/meldung/Linus-Torvalds-wettert-gegen-Compiler-Collection-GCC-4-9-2268920.html

Wer dir diese Version zertifiziert ist ein Scharlatan.

von hart aber weise (Gast)


Lesenswert?


von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Clemens L. schrieb:
> eine bestimme Version der ANSI-C-Spezifikation hält; damit hätte gcc
> kein Problem.

Klar.  Gibt ja nur eine davon. :-)

(Danach wurde die Standardisierung durch die ISO weitergeführt.)

von Patrick C. (pcrom)


Lesenswert?

Stichwoerter kann ich dich geben, weiter weisz ich nicht viel davon :

Misra-C
Splint

von Christian J. (Gast)


Lesenswert?

Armin schrieb:
> Ist es möglich mit einem GCC eine Software Zertifizierung
> durchzuführen
> oder werden an den Compiler gewisse Anforderungen gestellt? Wenn ja,
> welche sind diese?

Hallo,

da ich früher beim TÜV Rheinland sowas gemacht habe: Jein! Der GCC als 
Open Source ändert sich ständig, was heute zertifiziert wird ist morgen 
schon nicht mehr aktuell. Es gibt kein richtiges QM System, keine 
Ansprechpartner. Kundenfeedback meist auch nicht, wer meldet sich schon 
in den Bug Foren an?. In der FS gehört das aber nach 61508 alles dazu.

GCC ist ein Tool von Hobbyisten. In der Funktionalen Sicherheit wirst Du 
auf zertifizierte Tools zurückgreifen müssen, Werkzeuge wie Lint 
verwenden, MISRA anwenden usw.

Grosse Firmen verwenden daher immer Keil, IAR, Greenhills usw.

Gruss,
Christian

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Christian J. schrieb:

> da ich früher beim TÜV Rheinland sowas gemacht habe: Jein! Der GCC als
> Open Source ändert sich ständig, was heute zertifiziert wird ist morgen
> schon nicht mehr aktuell.

Ach, und das ist bei anderen Compilern anders?

Eine Zertifizierung wirst du wohl immer nur mit einer ganz konkreten
Version eines Werkzeugs vornehmen können – und diese ändert sich hernach
nicht mehr.

> Es gibt kein richtiges QM System

Was ist denn Bugzilla dann?

Der GCC hatte sowas schon, als es sonst so gut wie noch keine Software
gab, die mit solchen Mitteln gearbeitet hat.  Ich kann mich noch gut
dran erinnern, wie erstaunt ich war, als ich Anfang der 1990er Jahre
ca. 1 Jahr nach dem Berichten eines Bugs (dürfte um Motorola m88k
gegangen sein, mit denen wir damals gearbeitet haben) eine Mail bekam,
dass der Bug repariert worden war.  War meiner Erinnerung nach ein
internal compiler error, der ja ausdrücklich dazu aufforderte,
berichtet zu werden.

Ich verstehe deine Einwände, aber diese beiden da oben sind hanebüchen.

von Arc N. (arc)


Lesenswert?

Christian J. schrieb:
> da ich früher beim TÜV Rheinland sowas gemacht habe: Jein! Der GCC als
> Open Source ändert sich ständig, was heute zertifiziert wird ist morgen
> schon nicht mehr aktuell.

Wo ist das Problem?
Übliches Vorgehen: VM/Rechner einrichten, Tools, IDEs, Editoren, 
Compiler, Frameworks etc. pp installieren, Projekt bearbeiten, 
VM/Rechner archivieren. Ansonsten kann es immer zu Problemen kommen.

> Es gibt kein richtiges QM System, keine
> Ansprechpartner. Kundenfeedback meist auch nicht, wer meldet sich schon
> in den Bug Foren an?. In der FS gehört das aber nach 61508 alles dazu.
> GCC ist ein Tool von Hobbyisten.

http://www.adacore.com/gnatpro-safety-critical/avionics/
GNAT sprich gcc

> Grosse Firmen verwenden daher immer Keil, IAR, Greenhills usw.

Wie wärs denn mal mit Statistik?
Menge des Quelltextes, der durch diese Compiler gegangen ist, Anzahl der 
Plattformen und getesteten Betriebsbedingungen/Installationen vs. das, 
was demgegenüber durch den gcc gegangen und getestet wurde...

: Bearbeitet durch User
von Olaf (Gast)


Lesenswert?

> Ach, und das ist bei anderen Compilern anders?

Ja, ist es. Du bezahlst naemlich IAR extra dafuer das sie sich um den 
zertifizierten Compiler kuemmern. Das kostet $$$$$$.

Olaf

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Olaf schrieb:
>> Ach, und das ist bei anderen Compilern anders?
>
> Ja, ist es. Du bezahlst naemlich IAR extra dafuer das sie sich um den
> zertifizierten Compiler kuemmern.

Du hast das Zitat aus dem Kontext gerissen.

Es ging darum, dass der GCC sich ständig weiterentwickelt und angeblich
nur deshalb gar nicht zertifizierbar wäre.

Im Umkehrschluss würde das ja unterstellen, dass IAR seinen Code nicht
mehr weiterentwickelt.  Tun sie es doch (ganz gewiss tun sie's), dann
ist das aber kein Unterschied mehr zum GCC.

(Dass eine zertifizierte Version eines Compilers gewiss eine gute Sache
ist, stelle ich keineswegs in Frage.)

von Christian J. (Gast)


Lesenswert?

Jörg W. schrieb:
> (Dass eine zertifizierte Version eines Compilers gewiss eine gute Sache
> ist, stelle ich keineswegs in Frage.)

Diese Firmen informieren ihre Kunden ständig über Neuerungen, du hast 
eine Hotline wo Du sofort einen dran hast, Du hast geprüfte neue Libs 
und wirst nicht zum Beta Tester missbraucht. Und das kostet nur mal 
Asche. Peanuts gegenüber einem fehlerhaften Produkt.

Ich verweigerte jedenfalls den GCC immer für SIL Produkte und tue das 
auch heute noch.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Christian J. schrieb:
> Diese Firmen informieren ihre Kunden ständig über Neuerungen

Man könnte auch sagen: sie gehen einem damit auf den Keks.

Ist ja nicht so, dass ich nicht auch schon einen IAR in der Hand
gehabt hätte.

> Und das kostet nur mal Asche.

Wieviel kostet denn die zertifizierte Version so?  Selbst die kleinste
Normalversion eines IAR kostet ja schon ein halbes Vermögen.

von Pandur S. (jetztnicht)


Lesenswert?

Sonst gaebe es noch Ada. Da kommt nur Zertifiziertes auf den Markt. Alle 
paar Jahrzehnte kommt eine ueberarbeitete Sprachversion, mit neuen 
Features.
Abgeshen davon braucht ein Compiler eigentlich nur eine Ueberarbeitung 
wenn man einen neuen Controller unterstuetzen will, dann wird der 
Codegenerator ausgewechselt, der Parser, der die Sprache ausmacht bleibt 
derselbe.

Ein Ada Compiler ist sehr teuer, dafuer weiss man was man hat.

von Michael B. (laberkopp)


Lesenswert?

Armin schrieb:
> Ist es möglich mit einem GCC eine Software Zertifizierung
> durchzuführen
> oder werden an den Compiler gewisse Anforderungen gestellt? Wenn ja,
> welche sind diese?

Die Frage ist: Welche Art von Zertifizierung ?
Luftfahrt ? Nein, GCC reicht nicht.

von Christian J. (Gast)


Lesenswert?

Jörg W. schrieb:
> Wieviel kostet denn die zertifizierte Version so?  Selbst die kleinste
> Normalversion eines IAR kostet ja schon ein halbes Vermögen

Häh? Der normale IAR für C für Arm mit Misra und einigem Schnickschnack 
mehr kostet immer noch ca 5000 Euro als Einzelplatzzversion.

von Georg A. (georga)


Lesenswert?

> Grosse Firmen verwenden daher immer Keil, IAR, Greenhills usw.

Keil in dem Zusammenhang zu erwähnen finde ich schon mutig. Der 
8051-Compiler von denen um 2012 rum (Version 9irgendwas) hatte Bugs, die 
eher nach sdcc 0.001 klangen. Hab mich mit dem Dreck tagelang abgemüht, 
um dann (natürlich in einer kaum debugbaren Interrupt-Routine) ein 
Problem beim langweiligen Schieben eines 32Bit-Werts zu finden. Die 
anderen erschreckend trivialen Errata bzw. Fixed-Listen in den 
Release-Note deuten auch darauf hin, dass Keil eher eine Frickelbude 
ist. Solange mir kein Kunde Keil vorschreibt, werde ich auch für ARM den 
Mist nicht mehr anfasse, egal wieviele bunte Zertifizierunglogos es hat.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Christian J. schrieb:
> Der normale IAR für C für Arm mit Misra und einigem Schnickschnack mehr
> kostet immer noch ca 5000 Euro als Einzelplatzzversion.

Ja, für eine node-locked-Variante als Einzelplatz finde ich das schon
heftig teuer(*).  Selbst Altium zockt ja da noch weniger ab.

Deshalb frage ich mich dann, wieviel die zertifizierte Variante wohl
kostet.

(*) Nicht nur ich.  Ich habe mal eine Bitte eines Atmel-FAE um
Unterstützung erhalten, weil er einem größeren Kunden dabei helfen
musste, von IAR auf GCC umzusteigen.  Für einen Pool von nightly builds
war denen dann der IAR wohl doch zu teuer geworden.  Ist jetzt schon
einige Jahre her, aber an der Preispolitik von IAR hat sich ja nichts
grundlegend geändert seitdem.

von squierrel (Gast)


Lesenswert?

Totaler Blödsinn!
Ich kenne mehrere Beispile wo der gcc für SIL2 und 3 Projekte 
erfolgreich akzeptiert wurde.

Ich behaupte jetzt mal, da war auch der TÜV Rheinland unter den 
abnickern.

Die Frage ist doch eher wie groß der Aufwand zum Nachweiß der 
Korrektheit des Compilers ist für den jeweils generierten Code. Das ist 
keine einfache Sache und auch nicht in 1-2 Wochen getan. Hier lohnt es 
sich schnell auf ein zertifiziertes Produkt zu setzen.

Bin selbst unter anderem für Compiler Validierung zuständig!

von Heiko J. (heiko_j)


Lesenswert?

squierrel schrieb:

> Die Frage ist doch eher wie groß der Aufwand zum Nachweiß der
> Korrektheit des Compilers ist für den jeweils generierten Code. Das ist
> keine einfache Sache und auch nicht in 1-2 Wochen getan. Hier lohnt es
> sich schnell auf ein zertifiziertes Produkt zu setzen.
>
> Bin selbst unter anderem für Compiler Validierung zuständig!

Das ist der eigentlich ausschlaggebende Punkt. Ein Compiler mit den 
notwendigen Zertifikaten vermindert den Papierkrieg, sagt aber nix über 
die Qualität des Compilers im jeweiligen Anwendungsfall selbst aus.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

GCC wird auch im Bereich Automotive eingesetzt (z.B. TriCore, PowerPC 
VLE), und zwar an zentraler Stelle wie z.B Steuergeräten.  Die 
Hersteller, die entsprechende Steuergeräte in ihren Karren verbauen, 
setzen dementsprechend auch GCC sein.

Und nein, der Grund ist nicht, weil GCC "nix kostet".  Entsprechend 
gepflegte Versionen mit Longtime-Support und den gewünschten — ich nenn 
es jetzt mal Features — sind nämlich alles andere als billig.

: Bearbeitet durch User
von Fitzebutze (Gast)


Lesenswert?

Christian J. schrieb:
> GCC ist ein Tool von Hobbyisten. In der Funktionalen Sicherheit wirst Du
> auf zertifizierte Tools zurückgreifen müssen, Werkzeuge wie Lint
> verwenden, MISRA anwenden usw.

Da muss ich nun aber arg schmunzeln. Ada/GNAT wurde ja schon erwähnt, 
spätestens seit egcs dürfte die Zeit der "Hobbyisten" vorbei sein.
Für so einige Architekturen, dazu gehören v.a. ARM, Intel und MIPS, 
dürften die gcc tools (dazu zähle ich auch div. Anverwandte OS-Tools wie 
gcov, valgrind, usw) nicht mehr in der Robustheit zu schlagen sein - man 
muss sich nur die richtigen Versionen besorgen. Die Frage ist, ob man 
einer Bude Vertrauen schenkt, die eine Menge heisse Luft für ein 
Zertifikat fabriziert, oder einem Tool, das man selbst mit dem OS 
zusammen Regress-testen kann (und das kann man bei GCC).
Bei Keil habe ich da so meine Zweifel, deren 8051-Compiler flog auch bei 
mir in die Ecke und die Cortex-M0-Sachen liefen eher so naja. Und die 
IAR-Tools (ok, 10 Jahre her) waren im Vergleich mit dem msp430-gcc eine 
Zumutung. Da ist das Vertrauen auch erst mal weg.
Eine Zertifizierung macht auch nur für die entsprechend verifizierte und 
Regress-getestete Architektur Sinn.
Da nützt die beste Compiler-Norm nix, wenn unter gewissen Bedingungen 
bei Interrupt soundso und Befehl X der Cache nen Schluckauf bekommt.

Mir ist ehrlich gesagt ein Werkzeug lieber, über das 1000 Augenpaare als 
nur die von einer Handvoll gelangeweilter Prüfer drübergehen. Frei nach 
dem Motto: Trau, schau wem. Schlussendlich muss sich eine Firma 
überlegen, was billiger kommt: das Risiko, einer third party zu 
vertrauen, oder selber den Aufwand zu treiben um beweisen zu können, 
dass das System allen möglichen Fehlerszenarien standhält. 
Schlussendlich ist man da schnell mal hinter dem Compiler und 
zertifiziert nur noch die korrekte Funktion des generierten 
Assemblercode für genau ein spezielles Programm - oder man spart sich 
Zertifizierungsstress, indem man es in Hardware (HDL) umsetzt, da wird 
die Model in the Loop-Verifizierung schon simpler.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Fitzebutze schrieb:
> Und die IAR-Tools (ok, 10 Jahre her) waren im Vergleich mit dem
> msp430-gcc eine Zumutung.

Die Erfahrung habe ich allerdings nicht gemacht.  Als ich den GCC
für den MSP430 das letzte Mal in den Fingern hatte, war er vor allem
mit Devices mit mehr als 56 KiB Flash (wie sie unser Kunde natürlich
benutzt hat …) ein ziemlicher Bastelsatz.  Das lag aber wohl vor allem
daran, dass die Version von TI damals noch offline gepflegt worden ist,
weil sie dem Hörensagen nach ihre Copyright-Abtretung an die FSF noch
nicht machen wollten oder konnten.  Auf diese Weise ständig den
GCC-Entwicklungen hinterherrzulaufen ist ein ziemliches Schießen auf
ein bewegliches Ziel …  Mittlerweile sollte er wohl im offiziellen
GCC integriert sein, aber mittlerweile habe ich nichts mehr mit MSP430
zu tun.

Dafür lief dann das tolle TI-FET nicht in der VMware.  IAR gab TI
die Schuld, TI hat sich nie wieder gemeldet (trotz eines ausgiebigen
USB-Traces).  Ist das einzige USB-Gerät, was ich bislang in VMware
nicht zum Laufen bekommen hatte.  Zum Glück ging dann ein billiges
Launchpad als Debugger (das wiederum ging aber auch problemlos auf
dem Linux-Host).

von Uli (Gast)


Lesenswert?

Stand 2003:
Da war es in der Medizintechnik (Infusionstechnik) noch so das der 
Compiler eher unwichtig war.
Für den Prozessor gab es damals aber auch nur Keil und IAR, der wurde 
bei start der Entwicklung eingefroren und noch für weitere 
Produktversionen beibehalten. Klar wurde der irgendwann auch mal 
aktualisiert, meistens wenn es grössere Produktänderungen gab.

Der Code musste durch die gängigen Tools laufen wie LINT.
MISRA war da noch nicht so verbreitet, auch wenn ich privat das schon 
kannte.

Zum Abschluss gab es hunderte Seiten Testpunkte abzuarbeiten um mögliche 
Fehler zu finden. Klar was das nicht ein 100% Test aber den Tests würde 
ich noch heute mehr vertrauen wie jedem Zertifikat.

von Rolf M. (rmagnus)


Lesenswert?

Jörg W. schrieb:
> Clemens L. schrieb:
>> eine bestimme Version der ANSI-C-Spezifikation hält; damit hätte gcc
>> kein Problem.
>
> Klar.  Gibt ja nur eine davon. :-)
>
> (Danach wurde die Standardisierung durch die ISO weitergeführt.)

Und die alten Versionen gibt es eigentlich offiziell nicht mehr. Wenn 
eine neue Version der ISO-Norm rauskommt, werden dabei alle 
vorhergehenden Versionen (auch die ANSI) für ungültig erklärt. Somit 
gibt es (im Sinne einer gültigen Norm) sowieso immer nur eine.

von Nase (Gast)


Lesenswert?

Zertifizierung ist Schlangenöl.
Der Compiler war meistens noch das sicherste und am besten getestete ?

von Klaus W. (mfgkw)


Lesenswert?

Georg A. schrieb:
> Keil in dem Zusammenhang zu erwähnen finde ich schon mutig. Der
> 8051-Compiler von denen um 2012 rum (Version 9irgendwas) hatte Bugs, die
> eher nach sdcc 0.001 klangen. Hab mich mit dem Dreck tagelang abgemüht,
> um dann (natürlich in einer kaum debugbaren Interrupt-Routine) ein
> Problem beim langweiligen Schieben eines 32Bit-Werts zu finden. Die
> anderen erschreckend trivialen Errata bzw. Fixed-Listen in den
> Release-Note deuten auch darauf hin, dass Keil eher eine Frickelbude
> ist. Solange mir kein Kunde Keil vorschreibt, werde ich auch für ARM den
> Mist nicht mehr anfasse, egal wieviele bunte Zertifizierunglogos es hat.

Zertifizierte Bugs sind gut, kostenlose sind schlecht.
Deshalb lieber viele zertifizierte!

von Rolf M. (rmagnus)


Lesenswert?

Wie läuft denn die Zertifizierung eines Compilers ab? Da wird ja wohl 
kaum einer "mal kurz" den gesamten Code anschauen und dann bescheinigen, 
dass kein Bug drin ist. Geht es bei einer Zertifizierung überhaupt in 
irgendeiner Weise um die Häufigkeit von Bugs oder eher um die Prozesse 
außenrum. Also dass auch die Einrückung überall im Code gleich ist und 
das man schön nach MISRA programmiert, und dass Bugreports irgendwo 
abgelegt werden?

von Nase (Gast)


Lesenswert?

Rolf M. schrieb:
> Wie läuft denn die Zertifizierung eines Compilers ab? Da wird ja wohl
> kaum einer "mal kurz" den gesamten Code anschauen und dann bescheinigen,
> dass kein Bug drin ist.
Du suchst dir eine Zertifizierungsstelle und erhöhst das Honorar 
solange, bis du einen Stempel bekommst.

Glaubst du ernsthaft, mann kann an einem Compiler irgendwas 
zertifizieren?

Natürlich, den Prozess drumherum kann man zertifizieren. Ein halber 
Regalmeter DIN/ISO/EN im Dunstkreis der 61508 dreht sich nur darum, und 
zwar meilenweit abstrakt und anhand von Beispielen und Empfehlungen von 
vor 40 Jahren.

Guck doch mal, wie lange das Audit von TrueCrypt gedauert hat und was 
dabei herauskam. Und vergleiche dann mal, wie viel umfangreicher ein 
durchschnittlicher Compiler ist.

Wenn man bedenkt, dass manche Zertifizierungsstellen mit Umlaut im Namen 
sogar Software zertifizieren, ohne Quelltext zu sehen, naja. 
Software-Zertifizierung ist Handel mit Schlangenöl.

von A. Horn (Gast)


Lesenswert?

Hat zwar nur was bedingt mit Zertifizierung zu tun:
Gibt es denn vielleicht irgendeinen Satz Dateien,
welcher verschiedenste Berechnungen und Konstrukte ausführt
und das Ergebnis auf Gültigkeit prüft?
Ich stell mir gerade z.B. ein paar mathematische Berechnungen vor
mit allen möglichen Datentypen. Oder z.B. sin/cos/tan mit
ein paar Beispielwerten.
So dass man diese dann durch den Compiler (mit aktuellen Einstellungen
an Options) werfen kann und sieht, ob grob was falsch ist.
Ok, der Teufel steckt im Detail, alles wird er dadurch auf jeden
Fall nicht finden. Vielleicht muss der Test auch immer wieder
aktualisiert werden, wenn neue Compiler-Fehler
(verschiedenster Compiler) gefunden werden.
Und es muss die "Test-Suite" natürlich auch immer wieder neu ausgeführt
werden, wenn man eine neue Compiler-Version oder gar einen anderen
Compiler einsetzt.

von Clemens L. (c_l)


Lesenswert?

A. Horn schrieb:
> Gibt es denn vielleicht irgendeinen Satz Dateien,
> welcher verschiedenste Berechnungen und Konstrukte ausführt
> und das Ergebnis auf Gültigkeit prüft?

https://gcc.gnu.org/testing/
http://llvm.org/docs/TestingGuide.html

von Nase (Gast)


Lesenswert?

A. Horn schrieb:
> Oder z.B. sin/cos/tan mit
> ein paar Beispielwerten.
Ein klassischer Test für Gleitkomma ist

Da sollte ohne Rundungsfehler 20 rauskommen.

von A. Horn (Gast)


Lesenswert?

Vielen Dank euch beiden!

@Clement

Zweiter Link geht bei mir gerade nicht (Firefox timed aus),
probiere ich später nochmal.

Gibt es so etwas auch nur für C (statt C++)
bzw. weißt du, ob in den C++ Tests auch welche enthalten sind
(vielleicht ein Subset), welche für C geeignet sind.
Bei Boost denke ich, wird auf jeden Fall C++ benötigt?

von Rolf M. (rmagnus)


Lesenswert?

A. Horn schrieb:
> Hat zwar nur was bedingt mit Zertifizierung zu tun:
> Gibt es denn vielleicht irgendeinen Satz Dateien,
> welcher verschiedenste Berechnungen und Konstrukte ausführt
> und das Ergebnis auf Gültigkeit prüft?
> Ich stell mir gerade z.B. ein paar mathematische Berechnungen vor
> mit allen möglichen Datentypen. Oder z.B. sin/cos/tan mit
> ein paar Beispielwerten.

Da muss man dann aber auch schon sehr aufpassen. Wenn man die Werte als 
Konstanten übergibt, wird ein halbwegs optimierender Compiler die 
Berechnung selber durchführen. Wenn das nicht geht, werden sie zur 
Laufzeit auf dem Zielrechner ausgeführt. Schon hier kann es gerade bei 
Cross-Compilern unerwartete Unterschiede geben.
Bessere Compiler versuchen dabei soweit ich weiß, das Verhalten des 
Zielsystems zu emulieren, um sicherzustellen, dass das Ergebnis gleich 
ist. Aber auch da können Fehler drin sein.
Die nächste Frage ist, ob es überhaupt ausreicht, die Software ohne die 
Berücksichtigung der Hardware zu testen. Auf dem Pentium I mit seinem 
berühmten FDIV-Bug kann ja z.B. auch wieder was anderes rauskommen, wenn 
das nicht im Compiler berücksichtigt wird.

> So dass man diese dann durch den Compiler (mit aktuellen Einstellungen
> an Options) werfen kann und sieht, ob grob was falsch ist.

Ich schätze mal, dass die Fehler tendenziell eher weniger in so 
Funktionen wie sin() stecken, sondern eher darin, dass in ganz 
bestimmten Situationen z.B. eine if-Abfrage nicht korrekt funktioniert, 
weil irgendwelche Vergleiche falsch umgesetzt werden.

> Und es muss die "Test-Suite" natürlich auch immer wieder neu ausgeführt
> werden, wenn man eine neue Compiler-Version oder gar einen anderen
> Compiler einsetzt.

Oder wenn man irgendwelche Compiler-Optionen ändert.

von A. Horn (Gast)


Lesenswert?

Ok, LLVM-Link ging mittlerweile. Darin gibt es eine test suite
(in meinem Fall Version 3.7.1). Wieder darin SingleSource\Regression\C.
Dies geht schon in die Richtung, was man für einen groben Test
eines (Embedded-/Cross-) Compilers benutzen könnte.
Aber darin gibt es malloc, stdargs, printf, ...
Alles, was man meist nur Bare-Metal Embedded System nicht hat.
Und gar viele Testcases sind es auch nicht.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

A. Horn schrieb:
> Aber darin gibt es malloc, stdargs, printf, ...
> Alles, was man meist nur Bare-Metal Embedded System nicht hat.

Mit Bare-Metal (kein OS) hat das nix zu tun.  malloc, stdargs, printf, 
... sind Teil des Standards.  Auch wenn solche Features in Anwendungen 
eher unüblich sind, tut ein Toolhersteller gut daran, diese zu 
unterstützten.  avr-gcc zum Beispiel unterstützt all diese Features und 
durchläuft die "normalen" GCC-Testsuites.

> Und gar viele Testcases sind es auch nicht.

von Philipp Klaus K. (pkk)


Lesenswert?

Nun, tests gehören eigentlich zu jedem guten Compiler (Beispiel aus 
SDCC, sdcc/support/regression):

> make test-stm8
[…]
Summary for 'stm8': 0 failures, 9433 tests, 1765 test cases, 2050582 
bytes, 7775005 ticks

Bei SDCC entstehen die Tests haupstächlich auf folgendem Weg: 1) Bei 
Implementierung neuer Features 2) Beim Beheben von Bugs 3) Von GCC 
übernommen.

Solche Tests sind meiner Meinung nach sehr wichtig, aber mit 
Zertifizierung haben sie erstmal nichts zu tun.

Philipp

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.