Autor Beitrag
Mitmischer 1703
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: Mi 02.11.11 18:25 
Hallo DF!

Ich habe bei der Umsetzung von Algorithmen das Problem, dass der Algorithmus nach der Erstprogrammierung nie durchläuft, sondern immer abbricht (Access Violaion etc.) und ich daher immer nacharbeiten muss. Das hat mich mittlerweile soweit demoralisiert, dass ich nur noch sehr ungern programmiere, weil ich mir immer alles mehrfach angucken muss - und - ihr kennt das sicherlich - wenn man mit Entwurf und Programmierung eines Algorithmus fertig ist, will man doch, dass es einfach funktioniert und nicht rumzickt.

Habt ihr ähnliche Erfahrungen und wie stellt ihr sicher, dass euer Code später das tut, was er tun soll?

_________________
Die Lösung ist nicht siebzehn.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 02.11.11 18:44 
Was da am meisten hilft ist Erfahrung, das ist einfach so.

Aber davon abgesehen brauchst du nicht glauben, dass bei erfahreneren Entwicklern alles immer sofort funktioniert. Der Anteil daran ist sicherlich höher, aber alles klappt auch nicht sofort. Insbesondere wenn es sich um komplexere Algorithmen handelt.

Dazu kommt wie du einen Algorithmus entwirfst. Machst du dabei schon Fehler oder passiert es erst bei der Implementierung?

Ja, und dann gibt es auch noch die Möglichkeit eines formalen Beweises mit dem Hoare-Kalkül wie es im Informatik-Studium relativ ausführlich behandelt wird:
de.wikipedia.org/wiki/Hoare-Kalk%C3%BCl
Das ist aber sehr aufwendig und für deinen Fall wohl nicht so passend. Aber vielleicht hilft die Idee dahinter trotzdem.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 480

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 02.11.11 18:46 
Naja, das sind doch normale Probleme. Ich habe solche Fehler auch öfter (in letzter Zeit allerdings seltener). Da hat man mal in der For-Schleife vergssen, dass eine Liste nur bis Count-1 läuft, oder vergessen ein Object zu erzeugen, oder stolpert über Pointer-Leichen, ...

Sich deswegen entmutigen zu lassen, ist aber nicht angebracht. Ein Autor schmeißt seinen Job auch nicht, weil er einen Text nachbearbeiten muss. Und ein Autobastler auch nicht, wenn er am Ende nochmal ein paar Schrauben nachziehen muss, weil die Kiste noch klappert.

Zitat:
wie stellt ihr sicher, dass euer Code später das tut, was er tun soll
Gar nicht. :mrgreen:

_________________
We are, we were and will not be.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 02.11.11 19:22 
Ein Beispiel aus der Praxis ist ein spezieller generischer Ringpuffer, den ich vor kurzem implementiert habe. Dazu habe ich einen Iterator geschrieben. Nur leider hatte ich nicht berücksichtigt, ob ein Eintrag gerade aktuell ist oder bereits erledigt (was der Puffer selbst anhand der Abrufe und Aufrufe entscheidet). Dadurch waren die Elemente nicht immer korrekt sortiert. Das habe ich auch erst gemerkt, als ich den entsprechenden Unittest implementiert hatte und der schiefging.

Schlimmer sind aber Fehler wie sie mir in letzter Zeit ein paarmal passiert sind: Regressionen. :oops:
Das heißt ich habe Code eingebaut und dabei ein bereits funktionierendes Feature zerlegt. An der Stelle können dann zwar Unittests helfen, aber solange die nicht genug Teile des Codes abdecken fallen halt Sachen durch.

Aber das Problem hatte auch Embarcadero aktuell. :mrgreen:
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Mi 02.11.11 23:40 
user profile iconMitmischer 1703 hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe bei der Umsetzung von Algorithmen das Problem, dass der Algorithmus nach der Erstprogrammierung nie durchläuft, sondern immer abbricht (Access Violaion etc.) und ich daher immer nacharbeiten muss. Das hat mich mittlerweile soweit demoralisiert, dass ich nur noch sehr ungern programmiere, weil ich mir immer alles mehrfach angucken muss - und - ihr kennt das sicherlich - wenn man mit Entwurf und Programmierung eines Algorithmus fertig ist, will man doch, dass es einfach funktioniert und nicht rumzickt.


Computer sind einfach gnadenlos und entdecken jeden Fehler, der nicht ihrer Logik entspricht. Zudem begehen Sie praktisch keine Flüchtigkeitfehler.

Computer sind eben in mancherlei Hinsicht den Gehirnen überlegen, die sie entwarfen bzw. die sie benutzen.

Deshalb sind Computer als leblose Dinge noch lang nicht per se besser als Menschen (das wäre ja schlimm). Deshalb kann man genauso sportlich sehen wie daß Autos schneller als der schnellste Läufer sind. Entmutigung? Mitnichten!

user profile iconMitmischer 1703 hat folgendes geschrieben Zum zitierten Posting springen:
Habt ihr ähnliche Erfahrungen und wie stellt ihr sicher, dass euer Code später das tut, was er tun soll?


Ähnliche Erfahrungen? Sogar die gleichen, und zwar wie verrückt! Sicherstellen kann man hingegen leider kaum etwas, aber die Wahrscheinlichkeit der Korrektheit zu maximieren sich bemühen. Dazu immer fleißig testen und vor allem nicht enden wollendes Debuggen, Debuggen, Debuggen. Und der beste Korrektor der eigenen Arbeit sind immer andere, man selbst ist jedoch sein schlechtester Korrektor.