warum wird man eigentlich nie eine fehlerfreie komplexe software haben ?



  • Online schrieb:

    Übrigens, zu behaupten das der Computer niemals Gefühle haben wird, ist genau so schlüssig wie: es gibt keine anderen Lebewesen im Universum.

    ok, ich behaupte es nicht. ich schrieb nur, daß es wirtschaftlich nicht sinnvoll ist. wenn man dem computer gefühle einbaut, dann wird der mensch andere mensch-eigenschaften finden, ihn ihn über den computer erheben. notfalls mit sprüchen wie "intelligenz kommt aus der seele" und dazu wird behauptet, rechner könnten niemals eine seele haben und menschen hätten alle eine.

    HumeSikkins schrieb:

    Schon mal John Castis "Das Cambridge Quintett" gelesen? Falls, nein. Solltest du imo mal tun und dich dabei direkt mit an den virtuellen Tisch setzen.

    kenne ich nicht. werde es natürlich lesen, wenn es mir geschenkt wird.

    HumeSikkins schrieb:

    Da frage ich mich doch, ob du zuviel oder zuwenig Stanislaw Lem gelesen hast

    zu wenig.

    HumeSikkins schrieb:

    Sehe ich anders. Zum einen habe ich gelernt, dass der Nachweis der Korrektheit für nicht triviale Programme entweder nicht möglich oder aber nicht in vernünftiger Zeit durchzuführen ist.

    nebenkriegsschauplatz. nur weil es nicht einfach ist, die korrektheit zu beweisen, kannste doch nicht deshalb die korrektheit leugnen.

    HumeSikkins schrieb:

    Da ich kein Mittel habe die Fehlerfreiheit zu garantieren und da es keinen perfekten SE-Prozess gibt, muss ich also Fehler annehmen.

    und weil ich nicht nachweisen kann, daß du jünger als 80 jahre bist, muss ich annehmen, daß du älter bist. das ist doch schmarrn. ich kann übrigens mangels verläßlicher weiterer informationben in der tat nicht nachweisen, daß du jünger als 80 jahre bist.

    HumeSikkins schrieb:

    Da ich diese Spezifikation aber nicht geschenkt bekomme [...] Dieser Punkt der dafür verantwortlich ist, dass auch in vielen Jahren noch Programmierer gebraucht werden (statt einfach den Rechner programmieren zu lassen)

    och, ich sehe den bedarf bereits darin, daß man einfach guten code braucht, um zu raffen, was geschieht. gute coder vereinfachen (nicht unbedingt durch beschneiden, sondern auch durch umstrukturieren, schaffen von begriffen, abstrahieren-begreifen-konkretisieren und so). und zwar auf allen ebenen. von der kinderkram wie der systemanalyse bis hoch zu wichtigen funktionen namens areAllTrue().



  • nehmen wir mal an ich kann alle möglichkeiten simulieren und somit nachweisen das alle möglichen Möglichkeiten zu keinen Fehler führen und schon wäre dieses "niemals" aufgehoben

    das kannst du aber nicht. das würde eine universelle turingmaschine verlangen, die aber aus gründen des halteproblems nie möglich sein würde.



  • volkard schrieb:

    HumeSikkins schrieb:

    Da ich kein Mittel habe die Fehlerfreiheit zu garantieren und da es keinen perfekten SE-Prozess gibt, muss ich also Fehler annehmen.

    und weil ich nicht nachweisen kann, daß du jünger als 80 jahre bist, muss ich annehmen, daß du älter bist. das ist doch schmarrn.

    Jup. Allerdings ist es imo auch nicht vergleichbar. Ich habe den Schluss ja nicht gezogen, weil es nur schwarz-und-weiß bzw. true-false auf der Welt gibt sondern weil es statisch gesehen wahrscheinlich ist, dass wenn n Leute m Vorstellungen von einem Problem p haben und dieses mittels eines Prozesses q, den sie aus einem Buch b haben und auf i verschiedene Weisen interpretieren, in eine Lösung l transformieren, dass dabei dann Fehler auftreten (wie viele Fehler enthält bereits dieser einfache Satz?).
    Es ist ja nicht nur der Quellcode der fehlerfrei sein muss. Jeder Schritt bis dahin muss ebenfalls fehlerfrei sein.
    Auf der anderen Seite kannst du hingegen mich einfach hernehmen, aufschneiden, C14-Methode draufwerfen und schwupps kannst du verlässlich sagen, ob ich über oder unter 80-Jahre alt bin/war.



  • HumeSikkins schrieb:

    weil es statisch gesehen wahrscheinlich ist, dass wenn n Leute m Vorstellungen von einem Problem p haben und dieses mittels eines Prozesses q, den sie aus einem Buch b haben und auf i verschiedene Weisen interpretieren, in eine Lösung l transformieren,

    ahso, sobald die wahrscheinlichkeit für einen fehler über 98% liegt, postulierst du die existenz dessen.



  • [OT] Mit der C-14 Methode kannst Du nicht das Alter eines Lebewesens bestimmen, sondern nur, wie lange der Tod her ist - Wollts nur anmerken, aber bei Deinem Beispiel gehts ja auch eigentlich nur ums Prinzip[/OT]



  • IMHO: theoretisch ist komplexe, fehlerfreie Software möglich, praktisch nicht.

    Ich denke schon, dass es in der Theorie möglich ist, auch komplexe, fehlerfreie Software zu schreiben. Wenn ich für jedes winzige Detail 986349786 Unit-Tests erstelle (die hoffentlich fehlerfrei sind 😉 ), an jedem Codestück drei Tage rumüberlege, ein absolut gutes Design (z.B. OO) 2 Jahre lang ausarbeite und außerordentlich gewissenhaft umsetze, wobei jeweils 5 Coder an einem PC hocken und und einem sechsten ganz genau auf die Finger schauen, kann man das Risiko von Fehlern, die selbst bis zum Release nicht entdeckt werden, so massiv minimieren, dass man davon ausgehen können müsste, dass das Programm fehlerfrei ist.

    Das kleine Problem dabei ist nur: es ist nicht umsetzbar/vertretbar.
    Und ein weiteres Problem, was bereits erwähnt wurde: Man kann die Fehlerfreiheit einer komplexen Software einfach nicht beweisen. Aber reicht es nicht vielleicht schon, dass die Wahrscheinlichkeit für verbleibende Fehler kleiner ist als die, den Jackpot im Lotto beim ersten mal zu knacken?

    Was ich sagen will ist, dass wir die Mittel dazu schon haben, aber in der Praxis ist dieser Aufwand einfach nicht möglich. Ich zweifle aber keine Sekunde daran, dass es theoretisch möglich ist, absolut fehlerfreie Software zu schreiben.

    Das Problem ist nur, ich hab noch nie eine gesehen. 😃



  • Online schrieb:

    ich finde dieses Wort niemals sollte verboten werden! Wie willst du beweisen, das etwas niemals gehen wird?

    vollständige induktion ?
    2^n ist immer untermenge von n^2 ( musste ich schon 2 semenster in meinem studium beweisen )

    IMHO:
    menschen machen fehler, deswegen haben wir uns so weit entwikelt. würden menschen keine fehler machen wären wir noch in der steinzeit, weil man nur aus fehlern lern.

    damit compis sich so entwickeln wie menschen, müssten sie fehler machen. aber wenn du einprogrammierst das das proggy fehler macht, sind es keine fehler mehr, weil man sie erwartet. dann es ist eine definition des programms, dass es fehler macht. somit sind das keine fehler mehr.



  • Man müsste sie nur zufällige Fehler machen lassen und das ist durchaus nicht unmöglich. Gab sogar irgendein Computerspiel, dass darauf basiert hat.



  • ist bewiesen, daß, wenn man oft genuf würfelt, eine 6 dabei ist?

    ja, für praktische belange ist es sinnvoll, anzunehmen, daß jedes größere programm fehler hat.



  • welches pc spiel mit einer ki basiert nicht darauf ?
    aber tatsache ist auch das man mit einem programm keinen 100% zufall erzeugen kann

    @volkard: da die wahrscheinlichkeit für eine 6 nicht gleich 0% ist, ist es bewiesen ( laut definition )



  • DEvent schrieb:

    welches pc spiel mit einer ki basiert nicht darauf ?
    aber tatsache ist auch das man mit einem programm keinen 100% zufall erzeugen kann

    häh? Ich kenne nicht viele Spiele, bei denen die KI durch Versuch und Irrtum lernt.



  • DEvent schrieb:

    @volkard: da die wahrscheinlichkeit für eine 6 nicht gleich 0% ist, ist es bewiesen ( laut definition )

    Du schaust dir deine Stochastiksachen am besten nochmal ganz genau an. Die Wahrscheinlichkeit, dass man nach N Versuchen mindestens einmal eine 6 gewürfelt hat ist nicht 1. Auch wenn N noch so groß ist.

    And now for something completely different ...
    Was ist überhaupt ein Fehler? Wenn das Programm nicht das tut was es soll, also eine Abweichung des Verhaltens von der Spezifikation vorliegt. Aber für welches Programm liegt schon eine 100%ig wasserdichte Spec vor? Ohne sowas ist schon der Begriff der Fehlerfreiheit so schwammig, dass man darüber kaum noch sinnvolle Aussagen machen kann.
    Der Weg kann aber natürlich auch nicht dahin führen, jetzt auf Deibel komm raus exakte formale Spezifikationen zu schreiben, bevor man codet. Specs wachsen ja leider nicht auf Bäumen. Irgendwer muss eine Spezifikation auf höherer Abstraktionsebene haben, und diese in eine detailliertere überführen. IMHO ist das auch schon programmieren. Dieser Prozess ist offensichtlich rekursiv. Wo brechen wir das ganze ab? Gibt es eine passende, noch abstraktere Über-Spezifikation, deren Korrektheit offensichtlich ist (also ein Axiom)?



  • Was ist überhaupt ein Fehler?

    was ist richtig, und was ist falsch?

    //edit jaja ich weis, en bissl trollig das ganze, aber was ich damit sagen will: ein Fehler kann nur dort auftreten, wo richtig von falsch getrennt ist, dafür muss man aber erstmal wissen, was die beiden sachen bedeuten.



  • otze schrieb:

    Was ist überhaupt ein Fehler?

    //edit jaja ich weis, en bissl trollig das ganze, aber was ich damit sagen will:

    Eher philosophisch. Oder ist das etwa das gleiche? Uiuiui....



  • DEvent schrieb:

    Online schrieb:

    ich finde dieses Wort niemals sollte verboten werden! Wie willst du beweisen, das etwas niemals gehen wird?

    vollständige induktion ?
    2^n ist immer untermenge von n^2 ( musste ich schon 2 semenster in meinem studium beweisen )

    ...

    Ok, na dann stopf mal den Zufall in eine Gleichung und versuch zu beweisen das ein komplexes Program niemals fehlerfrei sein kann.
    Für Berechnungen in der Natur kannst du nur ne annährung machen aber du wirst nie wirklich ne exakte Lösung bekommen weil du die ganze Natur verstehen müsstest, alles aber wenn du irgendwann mal die ganz Natur genau verstehst dann kannst du natürlich auch den alles berechnen weli du jede Streung kennst.

    Fazit: ich kann (noch) nicht beweisen das es fehlerfrei geht und du kannst nicht beweisen das es die möglichkeit nicht geben wird etwas fehlerfrei darzustellen.
    ich kann mich auf die Zukunft berufen und du kannst nur von der Vergangenheit sprechen. 🤡



  • Bashar schrieb:

    Was ist überhaupt ein Fehler? Wenn das Programm nicht das tut was es soll, also eine Abweichung des Verhaltens von der Spezifikation vorliegt. Aber für welches Programm liegt schon eine 100%ig wasserdichte Spec vor? Ohne sowas ist schon der Begriff der Fehlerfreiheit so schwammig, dass man darüber kaum noch sinnvolle Aussagen machen kann.

    Danke. Alle diskutieren fröhlich rum und du machst mit einem einzigen Hammerschlag alles kaputt. 😃



  • volkard schrieb:

    HumeSikkins schrieb:

    weil es statisch gesehen wahrscheinlich ist, dass wenn n Leute m Vorstellungen von einem Problem p haben und dieses mittels eines Prozesses q, den sie aus einem Buch b haben und auf i verschiedene Weisen interpretieren, in eine Lösung l transformieren,

    ahso, sobald die wahrscheinlichkeit für einen fehler über 98% liegt, postulierst du die existenz dessen.

    Wo ist das Problem? In vielen Bereichen der Computerei ist alles unwahr, was nicht explizit aus der Wissensbank als wahr hergeleitet werden kann (das Busfahrplan-Beispiel).
    Solange du nicht beweisen kannst, dass deine Software fehlerfrei ist, kannst du nur annehmen, dass sie das ist. Da es in der Vergangenheit aber bisher keine Beispiele für komplexe und gleichzeitig fehlerfreie Software gegeben hat, erscheint mir eine solche Annahme blauäugig zu sein.

    Ansonsten passt auf diese Thematik imo Fred Brooks' "No Silver Bullet" bzw. "No Silver Bullet ReFired" wie die Faust auf's Auge.



  • @ volkard - nein mein Lieber , das ist mir zu pauschal und undurchdacht.

    Du kannts mir nicht erzählen, das Du eine Software von mehreren hunderttausend Programmzeilen schreiben kannst, die felerfrei ist.
    Das geht IMHO nicht, weil Du die Anforderungen, welche die Software erfüllen soll ja garnicht in allen Anwendungsbereichen durchdenken kannst. Das ist doch schier unmöglich alle möglichen Möglichkeiten durchzudenken und diese logisch fehlerfrei umzusetzen, weil dein Erfahrungshintergrund garnicht ausreichen kann bei dieser Menge an Komplexität.

    ( P.S. deine rechtschreibung lässt schon viel vermuten 😉 )

    Ich glaube das alle Formalem Methoden nichts taugen. sie stellen nur immer eine Anäherung an eine gewisse Wahrscheinlichkeit dar.

    IMHO sind wir durch unser begrenztes Denken nicht imstande diese Aufgabe zu lösen.
    und ich meine Fehler, also logische Fehler in der Programmierung sind eine Art
    mutatio die eine gewisse Nützlichkeit hat, sozusagen im evolutionären Prozess, also notwendig ist, weil Neuerungen , Anpassungen nur so möglich sind .

    danke an @otimizer und @ bashar -- die meinung teile ich voll...



  • vost schrieb:

    @ volkard - nein mein Lieber , das ist mir zu pauschal und undurchdacht.

    ...besser unduchdacht,

    Du kannts mir nicht erzählen, das Du eine Software von mehreren hunderttausend Programmzeilen schreiben kannst, die felerfrei ist.

    ...als nichtmal das thema kapiert haben.

    ich sage nicht, daß jedes hunderttausend-zeilen-programm korrekt sei. nichtmal, daß es ein korrektes zur zeit gibt. ich sage nur, daß keiner beweisen kann, daß es unmöglich sei. und zwar, weil es (wenn auch mit einer für praktische belange viel zu geringen wahrscheilnichkeit) möglich ist.

    würde deine dumme these richtig sein, daß jedes hunderttausen-zeilen-programm mindestens einen fehler hat, dann hätte doch auch jedes um diesen fehler bereinigte hunderttausenzeilenprogramm mindestens einen fehler. ad infinitum. also hätte jedes hunderttausenzeilenprogramm entweder unendlich viele fehler. ad absurdum. mit dem ausweg, daß es beweisbar unfindbare fehler gibt. das ist aber harter tobak. willste diese these wirklich haben?



  • Bashar schrieb:

    Was ist überhaupt ein Fehler? Wenn das Programm nicht das tut was es soll, also eine Abweichung des Verhaltens von der Spezifikation vorliegt.

    echt? ok, das nehme ich mal an.

    Aber für welches Programm liegt schon eine 100%ig wasserdichte Spec vor? Ohne sowas ist schon der Begriff der Fehlerfreiheit so schwammig, dass man darüber kaum noch sinnvolle Aussagen machen kann.

    falsch. man kann nicht durch aufzeigen von zusätzlichen fehlerquellen gleich alle fehler wegdiskutieren.
    es gibt auch harte fehler, speicherschutzverletzungen, divisionen durch 0, wurzeln aus negativen zahlen, speicherlöcher, endlosschleifen und dergleichen mehr. es gibt auch echte abweicheungen von der spec, die selbst bei freundlichster betrachtung einfach als abweichung zu sehen sind. wenn das auto 5 rückwärtsgänge hat, ist da ein fehler. nicht wegdiskutierbar mit dem hinweis, daß die spec über den innenverstellbaren ausßenspiegel schwammig ist, weil nicht spezifiziert wurde, was innen und was außen ist.
    man kann also nicht nur "kaum noch" sinnvolle aussagen machen. ich beschränke mich gerne auf harte fehler.

    denk doch mal zurück. anno win31 hätten viele leute min inbrunst (und dem hilfssatz der sicheren 6) bewiesen, daß jede in c geschriebene anwendung ab einer gewissen größe ein speicherloch haben muss.

    Der Weg kann aber natürlich auch nicht dahin führen, jetzt auf Deibel komm raus exakte formale Spezifikationen zu schreiben, bevor man codet. Specs wachsen ja leider nicht auf Bäumen. Irgendwer muss eine Spezifikation auf höherer Abstraktionsebene haben, und diese in eine detailliertere überführen. IMHO ist das auch schon programmieren. Dieser Prozess ist offensichtlich rekursiv. Wo brechen wir das ganze ab? Gibt es eine passende, noch abstraktere Über-Spezifikation, deren Korrektheit offensichtlich ist (also ein Axiom)?

    naja, der airbus darf nicht runterfallen. die sonde soll auf dem mars landen. der erkundungsroboter soll auf dem mars rumlaufen und zurückkommen. die ariane soll bis ins orbit kommen. die challenger soll nicht explodieren. der astra soll nicht brennen.
    alles verflixt einfache spezifikationen, wo man prüfen kann, ob sie eingehalten wurden.


Anmelden zum Antworten