Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Wann hat sich die Funktion SecondsBetween geändert (https://www.delphipraxis.net/181510-wann-hat-sich-die-funktion-secondsbetween-geaendert.html)

himitsu 21. Aug 2014 12:34

AW: Wann hat sich die Funktion SecondsBetween geändert
 
Nochmal nachgedacht:
Aufgrund der bekannten Rundungen, an jede Zeit 'ne 1/4 Millisekunde dranhängen und an die Endezeit nochmal 'ne 1/4 Sekunde ... dann sollten die Rundungsfehler weg sein.
Oder selber rechnen
Delphi-Quellcode:
Round(Abs(Zeit1 - Zeit2) * SecsPerDay)
.

Sir Rufo 21. Aug 2014 12:40

AW: Wann hat sich die Funktion SecondsBetween geändert
 
Gibt es da nicht so eine tolle Erfindung wie Unittests?

Damit prüft man die eigenen Gebilde (und auch implizit das, was man mitverwendet).
Im Zweifelsfall läuft es auf einen Compilerschalter hinaus, der bestimmt Unterschiede bei den Compilern eben berücksichtigt. Aber dieser Fehler rutscht dann nicht mehr durch.

mirage228 21. Aug 2014 12:52

AW: Wann hat sich die Funktion SecondsBetween geändert
 
Zur Referenz noch die Diskussion, wo das Problem vor einigen Jahren auch schon auffiel: http://www.delphipraxis.net/151504-s...ehlerhaft.html

Zumindest mit Delphi 2010 stieß ich hier ebenfalls auch Ungereimtheiten und habe mir eine eigene, modifizierte Variante schreiben müssen, die korrekt rechnet.

Dejan Vu 21. Aug 2014 13:09

AW: Wann hat sich die Funktion SecondsBetween geändert
 
Zitat:

Zitat von Sir Rufo (Beitrag 1269393)
Gibt es da nicht so eine tolle Erfindung wie Unittests?

Wenn man nicht weiß, das es fehlerhaft ist und man die Routine nicht kennt, bringt das blöderweise nicht viel. Außer, man rechnet das für alle Zeiten aus, was dann wieder etwas länger dauert.

Ergo: Bei derart kritischen Routinen sollte man sich en Detail die Implementierung anschauen (was normalerweise bei Unittests eben nicht passiert, da man nach Spec testet) und die Einzelschritte testen (i.e. alle Codepfade). Oder besser: Eine Berechnung/Implementierung nach formal korrekter Spezifikation vornehmen. Und dann kann man wieder nach dieser Spec Tests schreiben und sich beruhigt zurücklehnen.

Sir Rufo 21. Aug 2014 14:52

AW: Wann hat sich die Funktion SecondsBetween geändert
 
Zitat:

Zitat von Dejan Vu (Beitrag 1269401)
Zitat:

Zitat von Sir Rufo (Beitrag 1269393)
Gibt es da nicht so eine tolle Erfindung wie Unittests?

Wenn man nicht weiß, das es fehlerhaft ist und man die Routine nicht kennt, bringt das blöderweise nicht viel. Außer, man rechnet das für alle Zeiten aus, was dann wieder etwas länger dauert.

Aber ich weiß doch, was meine Funktionen herausbringen sollen und das überprüft man

himitsu 21. Aug 2014 15:20

AW: Wann hat sich die Funktion SecondsBetween geändert
 
siehe der andere Thread -> http://www.delphipraxis.net/151504-s...ehlerhaft.html

Es kommt jetzt darauf an, mit welchem der beiden Werte du zufällig deinen Unittest aufbaust.

Sir Rufo 21. Aug 2014 15:30

AW: Wann hat sich die Funktion SecondsBetween geändert
 
Zitat:

Zitat von himitsu (Beitrag 1269436)
siehe der andere Thread -> http://www.delphipraxis.net/151504-s...ehlerhaft.html

Es kommt jetzt darauf an, mit welchem der beiden Werte du zufällig deinen Unittest aufbaust.

Nochmal zum Mitschreiben:

Ich für meinen Teil baue keine Unittests für die Standard-Delphi-Funktionen. Aber ich erstelle Funktionen, Klassen mit Methoden und diese benutzen auch die Delphi-Standard-Funktionen.

Für diese meinen Funktionen, Klassen und Methoden erstelle ich Unittests. Wenn dort dann nicht die erwarteten Werte herauskommen, dann schlägt der Unittest für meine Methoden/Funktionen an.

Warum das dann fehlerhaft ist, dass muss ich dann selber herausfinden. Das passe ich dann so an, dass es passt. Wenn eine neuere Delphi-Version dann andere Werte liefert, dann schlägt der Unittest wieder für meine Methoden/Funktionen an, weil die ja mit falschen Werten arbeiten.

himitsu 21. Aug 2014 15:33

AW: Wann hat sich die Funktion SecondsBetween geändert
 
Ja, und nun kommt es darauf an, mit welchem Wert deine Funktion z.B. dieses SecondsBetween aufrufen würde.

Jenachdem kann der Test deiner Funktion erfolgreich sein, falls du zufällig einen der funktionierenden Fälle erwischts.

Sir Rufo 21. Aug 2014 15:39

AW: Wann hat sich die Funktion SecondsBetween geändert
 
Zitat:

Zitat von himitsu (Beitrag 1269442)
Ja, und nun kommt es darauf an, mit welchem Wert deine Funktion z.B. dieses SecondsBetween aufrufen würde.

Jenachdem kann der Test deiner Funktion erfolgreich sein, falls du zufällig einen der funktionierenden Fälle erwischts.

Ja und das Gras ist grün ... wir wissen doch alle, dass bei einem Unittest mehrere Situationen geprüft werden müssen. Und wenn ein Bug zurückgemeldet wird, dann wird das als weitere Situation in den Unittest aufgenommen und dann der Bug beseitigt.

Ich sehe so einen Unittest immer als ein lebendiges Gebilde an.

himitsu 21. Aug 2014 15:43

AW: Wann hat sich die Funktion SecondsBetween geändert
 
Und wenn du jetzt in allen geprüften Situationen zufällig auf funktionierende Fälle triffst? :tongue:


Frag mal den Murphy :angel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:58 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz