Bugs in der STL
-
Gut, d.h. "fehlerfreiheit" bedeutet für dich also z.B., dass alle Unit Tests fehlerfrei durchlaufen!? In dem Fall hast du natürlich recht, imo ist das aber kein ausreichender Nachweis, auf dessen Basis man behaupten könnte, eine Software sei frei von Bugs. Die Unit Tests selbst, ja sogar die Definitionen der Anforderungen, für die du deine Software entwickelst, können bereits fehlerbehaftet sein...
knivil schrieb:
dot schrieb:
Du behauptest, "fehlerfreie" Software produzieren zu können. Fehlerfreiheit ist, wie otze bereits erwähnt hat, empirisch rein prinzipiell nicht beweisbar
1.) Existenz und Beweisbarkeit sind zwei Paar Schuhe. Nichbeweisbarkeit macht keine Aussage ueber Existenz.
Richtig, wie aber willst du in dem Fall Existenz beweisen, ohne zumindest ein existierendes Beispiel zu geben?
-
Selbst rock solide Software wie zB die bash haben riesige Bugfix Listen.
Fehlerfreie Software ist eine Utopie. Ich habe noch keine einzige gesehen.
-
dot schrieb:
Gut, d.h. "fehlerfreiheit" bedeutet für dich also z.B., dass alle Unit Tests fehlerfrei durchlaufen!? In dem Fall hast du natürlich recht, imo ist das aber kein ausreichender Nachweis, auf dessen Basis man behaupten könnte, eine Software sei frei von Bugs. Die Unit Tests selbst, ja sogar die Definitionen der Anforderungen, für die du deine Software entwickelst, können selbst bereits fehlerbehaftet sein...
UnitTests sind notwendig, muessen nicht hinreichend sein. Hoer auf mir Worte in den Mund zu legen. Desweiteren weiss ich was alles fehlerbehaftet sein kann. Genausogut koennen sie fehlerfrei sein. Sie koennen widerspruechlich sein, genausogut koennen sie sich nicht widersprechen.
Fehlerfreie Software ist eine Utopie. Ich habe noch keine einzige gesehen.
Und deswegen ist es unmoeglich?
Ich widerhole meine Frage: Was fehlt euch, um fehlerfrei Software zu produzieren? Vielleicht leichtere Frage: Was fehlt euch, um bessere Software (in Bezug auf Fehlern) zu produzieren?
-
knivil schrieb:
Ich widerhole meine Frage: Was fehlt euch, um fehlerfrei Software zu produzieren?
Die Möglichkeit, Fehlerfreiheit formal zu beweisen?
[url]http://en.wikipedia.org/wiki/Russell's_teapot[/url] ...
-
Die Möglichkeit, Fehlerfreiheit formal zu beweisen?
Ist nicht Teil des Entwicklungsprozesses, steht maximal ganz am Ende. Ueberprueft nur das Produkt, erzeugt es nicht.
-
-
Existenz und Nichtexistenz sind unterschiedliche Seiten einer Medallie. Softwareentwicklung ist gluecklicherweise verschieden von von reiner Mathematik. Auch fuer dich als Erinnerung: Diese Diskussion entstand aufgrund der Aussage:
Kein Programm ist fehlerfrei (wenn man vielleicht einmal von einem Hello World absieht)
Diese Aussage stammt nicht vom mir.
-
Von dir stammen folgende Aussagen:
knivil schrieb:
1.) Module koennen fehlerfrei geplant werden
2.) Module koennen fehlerfrei implementiert werden.
3.) Module koennen entkoppelt werden.
4.) Module koennen fehlerfrei verknuepft werden.Das mag an sich nicht unbedingt direkt falsch sein, aber nur weil all diese Dinge möglich sind, heißt das noch lange nicht, dass es auch praktisch möglich ist und fehlerfreie Software tatsächlich existiert. Anyway, ich klink mich mal aus. Ich halt diese Diskussion nichtmehr wirklich für sinnvoll...
-
knivil schrieb:
Fehlerfreie Software ist eine Utopie. Ich habe noch keine einzige gesehen.
Und deswegen ist es unmoeglich?
Nichts ist unmöglich. Aber wie wahrscheinlich ist es?
Vielleicht erfindet ja noch irgendjemand irgendwann mal eine Möglichkeit. Aber das scheitert ja schon an so simplen Sachen wie das dynamische Ändern der Anforderungen. Dann gibt es unterschiedliche Hardware, da muss man Treiber verwenden die man nicht verifizieren kann weil es zuviel Zeit kosten würde. Etc.Das alles macht es halt enorm unwahrscheinlich dass man wirklich Fehlerfreie Software erstellen kann. Selbst die bash ist es nicht und das ist eine ewig alte rock solide Software die unmengen an Usern täglich hat.
Ich widerhole meine Frage: Was fehlt euch, um fehlerfrei Software zu produzieren? Vielleicht leichtere Frage: Was fehlt euch, um bessere Software (in Bezug auf Fehlern) zu produzieren?
- die Beweisbarkeit
- Zeit
Mit unendlich Zeit ist es easy - ich investiere einfach unendlich lange ich Bugsuche - bis ich alle gefunden habe. Da ich nie weiss wann ich den letzten gefunden habe, brauche ich halt unendlich lange. Das ist aber etwas unpraktikabel - deshalb bestimmt man idR einfach einen gewissen Zeitraum in dem man nach Bugs sucht und wenn man dann keine mehr findet, dann sagt man die software ist "Fehlerfrei". Was sie natürlich dennoch nicht ist.
-
@Knivil: Keine einzige Software von Autos, Flugzeugen, Raumfähren und Stationen besitzt 100% fehlerfreie Software. Wie lange bist du in der Branche, eine Femtosekunde?
-
knivil schrieb:
Die Fehlerfreiheit einer Software zu zeigen erfordert doch Argumentation.
Ich moechte nicht die fehlerfreiheit beweisen. Aber fuer dich wiederhole ich mich nochmals: Es gibt viel Literatur ueber Entwicklungsprozesse. Diese sind in den einzelnen Industriezweigen verschieden. Bei mir reichen Disziplin und Unittests gekoppelt and Memoryleak und code coverage tools aus. Letztere sind hilfreich, dienen aber hauptsaechlich dazu, andere zu ueberzeugen.
Und du glaubst, das alle anderen hier, die den Gegenstandpunkt vertreten dümmer sind als du? Ich behaupte nicht das man die Qualität einer Software gar nicht steuern kann, behaupte aber das es schlicht unmöglich ist (eine Ausnahme mögen mathematisch exakt belegbare Algorithmen sein) eine Software fehlerfrei zu bekommen. Ja, man kann sie Fehlerarm und Robust designen, aber Fehlerfrei ist etwas anderes.
Und wenn du meine Anspielung darauf das ihr dann auch keine QS braucht, oder diese zumindest nicht einen Fehler finden darf als Trollen ansiehst, kann ich dich nicht ernst nehmen. Fakt ist, das wenn irgendein anderer einen Fehler findet, man davon ausgehen kann, das keine 100%ige Fehlersicherheit gewährleistet werden kann. Man kann in gewissen Spezifikationsgrenzen vielleicht relativ fehlerfrei sein, aber weder UnitTests noch Memoryleaks und Code Coverage Tools können eine Fehlerfreiheit garantieren.
Das erinnert mich an meine Kindheit, als ein Arzt Probleme mit einem Messgerät bekam, weil meine Schwester ein höheres Fieber hatte als dieses vorsah (Ich weiß nicht wo die Grenze liegt, aber rein von den Geräten her hätte sie von der Temperatur nach dem Instrument her tot sein müssen).
Ich kenne durchaus auch am Rande das ein oder andere aus der Automobilbranche, auch wenn ich selbst niemals in dem Bereich tätig war (wohl aber Bekannte). Man kann noch so viel spezifizieren, es gibt immer mal Zustände, die so nicht vorgesehen waren.
Jedes Programm ist (von mathematischen Algorithmen vielleicht zum Teil einmal abgesehen) nur eine Vereinfachung der Realität. Ein Gerät und ein Programm kann im besten Fall nur mit dem sauber umgeben, wofür es Spezifiziert wurde. Eine komplette Abdeckung aller noch so unwahrscheinlichen Fälle ist in der Regel nicht spezifizierbar. Und auf jeder Ebene, sei es Spezifikation/Entwurf, Entwicklung und Test und selbst im Einsatz kann immer etwas passieren.
Man kann die Fehlerwahrscheinlichkeit senken, dies geht je Komplexität eines Gesamtsystems, nach Mittelaufwand, nach Zeitrahmen auch sehr gut, aber fehlerfrei arbeitet keiner.
Und was Aussagen wie "Ich bin ein sehr guter Programmierer" angeht... Ich bin inzwischen bei solchen Angaben mehr als nur sehr vorsichtig. Gerade wer sich für nahezu perfekt hält, kann leicht mit Scheuklappen durchs Leben rennen.
Ich selbst saß leider nie in einem Projekt das dem Ideal sehr dicht kam, aber die Kunden waren auch nicht Krösus und konnten sich auch schlicht nicht alles leisten (Man steht immer im Konflikt zwischen Zeit, Kosten und Funktionalität). Von Termindruck mal ganz abgesehen. Ich kenne aber durchaus Techniken um Fehler schon möglichst frühzeitig zu reduzieren, aber kein Buch in der Literatur die ich gelesen habe hat je behauptet das ein Mittel jemals Fehler ganz ausschließen kann. Ins Besondere Bücher zu Unittests schreiben gerne mal herein, das man niemals alle Fälle finden und spezifizieren kann, man kann aber je nach Aufwand näherungsweise an eine Komplettabdeckung kommen.
-
Ich habe hier ein nicht-triviales Programm zu Beleuchtungssteuerung. Das ist zustandsbehaftet. Laeuft auf auf einem Mikrokontroller, kommuniziert ueber RS232 nach aussen. Ein formaler Beweis der Korrektheit ist vielleicht moeglich, aber nicht praktikabel oder gar notwendig. Es wurde mit spezifischen Anforderung in endlicher Zeit erstellt. Es kann mit mehr als den spezifizierten Ausnahmesituationen umgehen. Es kann leider nicht damit umgehen, wenn das Geraet hart mit einem Hammer getroffen wird. Ist es deswegen fehlerhaft?
Damit widerlege ich folgende Aussage:
Kein Programm ist fehlerfrei (wenn man vielleicht einmal von einem Hello World absieht)
Kann ich das auch anderen beweisen? Nein! Brauche ich auch nicht, die Software wird dadurch nicht besser. War dazu ein Theorembeweiser noetig. Nein!
-
knivil schrieb:
Damit widerlege ich folgende Aussage:
Kein Programm ist fehlerfrei (wenn man vielleicht einmal von einem Hello World absieht)
Ähm...nein tust du nicht, denn um diese Aussage zu widerlegen, müsstest du beweisen, dass deine Software fehlerfrei ist!?
-
Und wie soll ich hier den Beweis erbringen? Anforderungen, System, Hardware, Software und Use cases offenlegen? Darf ich nicht, kann ich nicht!
-
knivil schrieb:
Und wie soll ich hier den Beweis erbringen?
Gar nicht, der Beweis ist rein prinzipiell nicht möglich, genau das ist ja eben das Problem hier!?
Falls du tatsächlich einen Weg findest oder gar kennst, die Fehlerfreiheit von Software zu beweisen, dann solltest du diesen unbedingt publizieren, Turing Award und Fields Medal sind dir sicher...
-
@knivil: Bist du so arrogant, dass du nicht zugeben kannst wenn du absoluten Müll erzählt hast, oder einfach nur dumm? Ich hoffe nur, dass niemand einen Software-Entwickler bezahlt, der behauptet 100% fehlerfreie Software abliefern zu können. So einen Honk haben wir mal in einem C64-Forum gehabt, war ein Informatik-Student und ich hoffe dass den niemand einstellt.
-
Fall du tatsächlich einen Weg findest oder gar kennst, die Fehlerfreiheit von Software zu beweisen, dann solltest du diesen unbedingt publizieren, Turing Award und Fields Medal sind dir sicher...
Es geht nicht um den Allgemeinen Fall.
-
Mal als Anmerkung: Fehlerfreiheit beliebiger Software zu beweisen ist a priori etwas anderes und vor allem schwerer als fehlerfreie Software zu konstruieren.
-
Bashar schrieb:
Mal als Anmerkung: Fehlerfreiheit beliebiger Software zu beweisen ist a priori etwas anderes und vor allem schwerer als fehlerfreie Software zu konstruieren.
Das mag sein, aber auch für das konkrete Beispiel sollte das bereits unmöglich sein!? In keinem Fall ist allerdings wäre "Anforderungen, System, Hardware, Software und Use cases offenlegen" ein Beweis...
-
Das mag sein, aber auch für das konkrete Beispiel sollte das bereits unmöglich sein!?
Ich frage mich, warum viele auf "Unmoeglichkeit" bestehen. Unter welchen Voraussetzungen ist es denn nicht unmoeglich? Es wirkt auch leicht widerspruechlich, eine Art formalen Beweis zu fordern, aber auf der anderen Seiten so unkonkret zu sein.
In keinem Fall ist allerdings wäre "Anforderungen, System, Hardware, Software und Use cases offenlegen" ein Beweis...
Nein, es versetzt dich aber in die Lage, dich selbst zu ueberzeugen. Es ist die Grundvoraussetzung der Ueberpruefbarkeit. Da das nicht gegeben ist, kannst du mir glauben oder eben nicht. Ich kann erahnen, fuer was du dich entscheidest.