Beschreibung für VerifyDx ========================= Auf Basis der Trace-Ausgaben können Testfälle für eine Verifikation definiert, ausgeführt und bewertet werden. Allgemeines Prinzip: Ein Testfall führt eine Berechnung durch und vergleicht deren Ergebnis mit einem Sollwert. Realisierung in VerifyDx: VerifyDx schreibt alle Trace-Aufrufe während der Ausführung des Testfalls zusätzlich in die Verify-Datei mit Extension ".vdx". Der Sollwert-Vergleich wird dadurch zu einem Datei-Vergleich gegen eine als korrekt definierte Verify-Datei . Definition von Testfällen: Ein Testfall ist eine parameterlose Prozedur die beliebige Aktionen aufruft (in der Regel Funktionen des Client) und dadurch Trace-Ausgaben erzeugt. - VerifyDx.DefineProc () definiert einen einzelnen Testfall - VerifyDx.DefineGroup() definiert eine Gruppe von Testfällen - VerifyDx.DefineShortCut() ergänzt einen Testfall mit einem Tastatur-Shortcut Diese Aufrufe werden in das Trace-Menü eingefügt, siehe TraceDx.AddMenu(). Sie müssen vor der Erzeugung des Menüs durch TraceDx.AddMenu() erfolgen, z.B. im initialization-Abschnitt. Ein Menüeintrag der alle so definierten Testfälle nacheinander aufruft wird automatisch hinzugefügt. Ausführung: Ein Testfall startet bei Auswahl seines Menü-Eintrags. Der Trace-Output wird zusätzlich ins Client-Unterverzeichnis "VerifyDx" geschrieben. Das Ende des Testfalls ist erreicht, wenn der Testfall durchlaufen ist und Windows-seitig keine Events und Messages mehr vorliegen. Die Verifikation kann auch ohne definierte Testfälle direkt aus dem Client-Code heraus aufgerufen werden. Code: if VerifyDx.CompareStart( 'TestfallSubDir\TestfallName' ) then try finally VerifyDx.CompareEnd() end Die Verify-Datei enthält alle Trace-Ausgaben des Testfalls. Mit IncHide() und DecHide() können aber Bereiche ausgenommen werden, z.B. wenn dort variabler Output wie Zeiten oder Dateinamen erzeugt wird. Bewertung: Falls eine Soll-Datei ohne Extension bereits vorhanden ist, wird der Output damit verglichen. Bei Gleichheit wird die neue Datei wieder entfernt und die Soll-Datei erhält die aktuelle Zeit als letzten Zugriff. Andernfalls wird der (in der Server-ini angegebene) Comparer gestartet um die Unterschiede anzuzeigen. Im Comparer können im Idealfall die Source-Unterschiede anhand des Trace-Vergleichs nachvollzogen werden. Eine neue, als korrekt anerkannte Verify-Datei mit Extension "vdx" kann danach zur neuen Soll-Datei gemacht werden. Dies kann im folgenden Dialog automatisch oder später manuell erfolgen, ein entsprechender Batch (VerifyOkay.cmd) ist vorhanden. Falls unter dem Verify-Verzeichnis ein weiteres Unterverzeichnis "_Version.bak" existiert, werden alte Solldateien dorthin verschoben. Durch Setzen der Variablen "VerifyDx.Mode" kann die Meldungsintensität gesteuert werden. - vmAll alle Vergleichsergebnisse - vmNegative nur negative - vmErrors nur Fehler - vmSilent keine Bei Verify einer Gruppe oder aller Testfälle wird immer eine Sammelmeldung angezeigt. Umgebung: Testfälle benötigen definierte Zustände der Umgebung. Das Herstellen dieser Zustände kann in jeden einzelnen Testfall hineingeschrieben werden( ggf mit IncHide und DecHide umgeben) und/oder allgemein für alle Testfälle festgelegt werden und wird dann automatisch vorab ausgeführt. Es gibt zwei Varianten DefinePrePostAll() und DefinePrePostEach(): "All" wird vor/nach einem einzelnen Testfall oder einer Gruppe einmalig ausgeführt. "Each" wird vor/nach jedem einzelnen Testfall ausgeführt. Falls ein zweiter Prozedur-Parameter "PostVerify" mitgegeben wird kann zum Beispiel der vorherige Zustand anschliessend wieder hergestellt werden. In PreVerify() und PostVerify() können zum Beispiel automatisch erfasste Messages und Events für den Test passend eingestellt werden: In PreVerify (): TraceDx.Messages.SaveAndSet(); TraceDx.Events.SaveAndSet(); In PostVerify(): TraceDx.Messages.Restore; TraceDx.Events.Restore; Für die SaveAndSet()-Aufrufe sind als Vorschlag und Quasi-Standard folgende Konstanten definiert: - Messages .cStandard: Alle Message-Typen aus - Events.App.cStandard: Alle an ausser OnModalBegin/-End (kommen evtl in Verify-Dialogen) - Events.Scr.cStandard: Alle an - Events.Frm.cStandard: Alle an ausser OnPaint, OnMouseMove/-Enter/-Leave Statt per SaveAndSet() können die jeweiligen Event-Mengen auch einzeln gelesen und geschrieben werden: TraceDx.Messages .EnabledSet TraceDx.Events.App .EnabledSet TraceDx.Events.Scr .EnabledSet TraceDx.Events.Frm[frmName].EnabledSet Bei Messages gibt es die Besonderheit, dass die Werte der Parameter wParam und lParam nie in die Verify-Datei aufgenommen werden. Fehler: Tritt im Verify-Ablauf ein Fehler auf den der Client erkennt, kann die Variable "VerifyDx.Error" auf einen Wert > 0 gesetzt werden. Dies wird am Ende des Testfalls in die Trace-Daten geschrieben und wird damit Teil des Dateivergleichs. Exceptions: Exceptions ohne try-except-Block werden ebenso behandelt, der ErrorCode ist in diesem Fall immer -1. Eine Exception im PreVerify wird als -2 gemeldet, im PostVerify als -2. Spezial-Funktionen - Falls der Testfall eine vom Client zu erstellende Datei umfasst kann zusätzlich auch diese Datei gegen einen Soll-Zustand verglichen werden. Dazu im Test: VerifyDx.SetDataFile( ) - Um ggf auch private Prozeduren und Variablen ins Verify einzubeziehen können diese (statt sie ins interface zu verschieben) an zentraler Stelle verfügbar gemacht werden, siehe uDemoClientVerify.pas, VerifyExport(): Exported[0] := @MyPrivateProc Startup und Shutdown: Die besonders kritischen Phasen des Programmstarts und -endes können nicht als Testfall aus dem Client heraus aufgezeichnet werden. Ersatz sind die Aufrufe "Verify Startup" und "Verify Shutdown" in File-Menü des Servers. Dabei muss manuell dafür gesorgt werden, dass die Tracezeilen im Server exakt den gewünschten Zeitraum umfassen. Vergleichs-Ergebnis-Anzeige Der Zustand "Bestanden" des Testfalls wird im Menü durch einen Check-Haken angezeigt, im Verify-Formular durch grüne Schrift. Nur im Formular wird zusätzlich durch rote Schrift ein nicht bestandener Testfall markiert und ist dadurch von einem noch nicht ausgeführten unterscheidbar. Über ein Popum-Menü kann zwischen den Zuständen umgeschaltet werden. Beispiel für Installation im initialization-Abschnitt: VerifyDx.DefinePrePostAll ( PreVerify ); VerifyDx.DefineGroup ( 'Main', [ 'Ini' , @VerifyIni, 'Resize', @VerifyResize ] ); VerifyDx.DefineGroup ( 'Logic', [ 'Sum' , @VerifySum, 'Avg' , @VerifyAvg ] ); VerifyDx.DefineShortCut( VerifyResize, 'Ctrl+Shift+R' ); TraceDx.AddMenu( nil );