![]() |
Erfahrungen mit DelphiCodeCoverage und "Delphi Code Coverage Wizards" #1
Hallo,
damit es nicht so ein durcheinander ![]() Ich gehe mal wieder ran und versuche nun ein Coverage. Ich mache das jetzt mal etwas ausführlicher. Was genau hilfreich ist weis sich nicht. Ich schreib einfach mal meine Gedanken dazu. HTH. Konkreter Anlass: ich habe in einer unit eine Methode ergänzt und möchte wissen ob für diese (und ggf. auch alle anderen Methoden) der unit test vollständig ist. In meinen vorigen Versuchen hatte ich eine separate Workingcopy. Nun bin ich in meiner aktuellen. Dazu ziehe ich dort DelphiCodeCoverageWizard.dproj in meine Projektgruppe. Noch ein pull, bin auf Revision: b8b4f992 Date: 20.11.2022 16:05:02 Dazu hole ich mir auch das Projekt von DelphiCodeCoverage und compiliere das. Zurück in Wizard, F9, es startet. :thumb: 1. Keine Icons mehr, ist mir gerade nicht wichtig. :arrow: 2. Map file kommt nicht von alleine, also selber eintragen ... ach ne ist ja noch nicht da -> featurerequest: bei der Angabe der Dateien eine Angabe ob die aktull ausgewählte auch vorhanden ist. :!: 3. Command line parameter: das -ife lasse ich mal weg, das macht ja nun der Wizard nehm ich an. :arrow: 4. Source, ich habe hunderte Dateien, etwas mühsam da auszuwählen. Aktuell egal, mich interessiert nur eine unit. Sonst habe ich auch schon mal die dccp editiert. 5. HTML und "Save log ..." an 6. Ah "Save project & ..." ist enabled :thumb: 7. "Save project as ..."" :arrow:
Code:
Wäre schön er würde auch sagen was für ein directory ;-) (ich weiss was es ist und korriere das)
---------------------------
Error --------------------------- Failed to create path: Reason: Unable to create directory [] --------------------------- OK --------------------------- 8. Neuer Versuch. Coverage startet - es gibt ein Ergebnis. Nur eine Datei. Covered 3, Not Covered 1660 :gruebel: 9. Ah falsche Datei, Parameter "-ife" fehlt doch noch, ich füge ihn manuell hinzu, neuer Versuch ... 10. Wieso habe ich nach einem Lauf nur "Home" und zwei weitere disabled Buttons? Muss jedesmal das Projekt wieder laden 11. Nun die richtige Datei. Allerdings ist das Ergebnis schlecht. :oops: Mein Fehler es waren zu wenige Tests ausgewählt - neuer Versuch 12. Ergebnis sieht nun viel besser aus. Suche im Ergebnis meine neue Methode - alles grün. Auch sonst ist die unit mit 97.3% recht gut. Woran es noch fehlt sieht man sehr gut im Report. :thumb::-D8-):dancer2: Als nächstes wären weiter units dran und vielleicht auch mal gleich ganze Module. Ausserdem bei uns eine Diskussionen wo man die Scripte speichert und ob die map immer an sein sollten. Ggf. melde ich mich dann wieder. |
AW: Erfahrungen mit DelphiCodeCoverage und "Delphi Code Coverage Wizards" #1
Doch schon gleich der nächste Versuch. Dieser hat jedoch keinen Erfolg. :pale:
Es geht um das Modul wo ich den meisten Code gemacht habe. Im Gegensatz zum vorigen Versuch enthält dieser auch Klassen und Generics. Der Wizard scheint seine Sache noch richtig zu machen. CodeCoverage.exe startet. Nach Prozess-Explorer wird auch das Testprojekt gestartet. Dann hängt CodeCoverage.exe lange Zeit mit ca. 8% CPU. Das Testprojekt zeigt sich jedoch überhaupt nicht. Nach langer Zeit ist die Sache zu Ende. Der Report ist da, jedoch ist die Coverage bei 0. Bin nun im Debugger und bin nun hier.
Delphi-Quellcode:
Ich meine danach sollte das Testprojekt sichtbar sein. Was könnte da schief gehen?
function TDebugger.StartProcessToDebug: Boolean;
var StartInfo: TStartupInfo; ProcInfo: TProcessInformation; Parameters: string; WorkingDir: PChar; begin Parameters := FCoverageConfiguration.ApplicationParameters; FLogManager.Log( 'Trying to start ' + FCoverageConfiguration.ExeFileName + ' with the Parameters :' + Parameters); FillChar(StartInfo, SizeOf(TStartupInfo), #0); FillChar(ProcInfo, SizeOf(TProcessInformation), #0); StartInfo.cb := SizeOf(TStartupInfo); StartInfo.dwFlags := STARTF_USESTDHANDLES; StartInfo.hStdInput := GetStdHandle(STD_INPUT_HANDLE); StartInfo.hStdOutput := GetStdHandle(STD_OUTPUT_HANDLE); StartInfo.hStdError := GetStdHandle(STD_ERROR_HANDLE); WorkingDir := nil; if FCoverageConfiguration.UseTestExePathAsWorkingDir then begin WorkingDir := PChar(ExtractFilePath(FCoverageConfiguration.ExeFileName)); end; Parameters := '"' + FCoverageConfiguration.ExeFileName + '" ' + Parameters; Result := CreateProcess( nil, PChar(Parameters), nil, nil, True, CREATE_NEW_PROCESS_GROUP + NORMAL_PRIORITY_CLASS + DEBUG_PROCESS, nil, WorkingDir, StartInfo, ProcInfo ); FProcessID := ProcInfo.dwProcessId; end; Einige Werte:
Code:
WorkingDir zu setzen hat nichts gebracht.
Watch Name Value
Parameters '"J:\Bla\sysWin32\TestDomainBlub.exe" ' WorkingDir nil {#0} StartInfo (68, nil {#0}, nil {#0}, nil {#0}, 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, nil, 156, 160, 164) ProcInfo (508, 504, 15152, 11800) Nachtrag: Habe in TDebugger.ProcessDebugEvents den Timeout erhöht. Er kommt nun nicht mehr bei "FLogManager.Log('Wait For Debug Event timed-out');" vorbei, hilft aber insgesamt auch nicht. |
AW: Erfahrungen mit DelphiCodeCoverage und "Delphi Code Coverage Wizards" #1
CodeCoverage ist leider noch enorm instabil und bei nur dem kleinsten Fehler in der map Datei (da werden manchmal Code Addressen als ausführbarer Code gelistet, die gar nicht stimmen, bzw in die auf gar keinen Fall ein Breakpoint darf) klatscht es gegen die Wand.
Besonders bei Generics (muss ich wohl wissen, hab bereits einige Stunden reingesteckt um einen vollständigen Report für die Spring Tests zu bekommen, der auch korrekt ist) fliegt es sehr oft auseinander. Aber da ja jüngst irgendwie so ein kleiner Hype um das Projekt ausgebrochen ist, lehn ich mich zurück und warte, bis es jemand fixed. 8-) |
AW: Erfahrungen mit DelphiCodeCoverage und "Delphi Code Coverage Wizards" #1
Und ich dachte, da ist ein Hype ausgebrochen, das muss ich ausnutzen :twisted:
Da ich nun auch nicht weiter komme bleibt mir wohl auch nichts weiter übrig als mich diesbezüglich zurückzulehnen. Das das jemand fixed habe ich gerade jedoch wenig Hoffnung. Wieder ein Grund wieso man mit Delphi nicht professionell Software entwickeln kann. :pale: |
AW: Erfahrungen mit DelphiCodeCoverage und "Delphi Code Coverage Wizards" #1
Zitat:
Was das CodeCoverage betrifft, sehe ich auch keinen Grund, das im Build-Prozess immer wieder durchlaufen zu lassen. Es genügt doch, dies bei Erstellen oder Anpassen eines Tests zu machen, bzw. bei einer Codeänderung um festzustellen, was danach noch ungetestet ist. Dafür reicht mir eigentlich das hier: ![]() |
AW: Erfahrungen mit DelphiCodeCoverage und "Delphi Code Coverage Wizards" #1
Zitat:
Und übrigens reicht es nicht, wenn an jeder Codezeile nen "wurde ausgeführt" Bömpel dran ist - einfach mal googeln: ![]() |
AW: Erfahrungen mit DelphiCodeCoverage und "Delphi Code Coverage Wizards" #1
Zitat:
|
AW: Erfahrungen mit DelphiCodeCoverage und "Delphi Code Coverage Wizards" #1
Zitat:
|
AW: Erfahrungen mit DelphiCodeCoverage und "Delphi Code Coverage Wizards" #1
Es zählt auch die Hits, wie im unteren Screenshot auf der GitHub-Seite in den eckigen Klammern zu sehen ist. In dem Beispiel wird halt nur ein Test gemacht, deswegen immer nur eine 1. Die roten Pfeile zeigen dabei die Code-Zeilen mit HitCount = 0.
|
AW: Erfahrungen mit DelphiCodeCoverage und "Delphi Code Coverage Wizards" #1
Hallo zusammen,
ich gehe euch allen recht. Wegen "professionell": würde mein Aussage gerne zurückziehen. Habe wikipedia gelesen und der Begriff ist zu wenig eindeutig. Build-Prozess: a) wir hatten das mal mit Jenkins, Sonar-Cube und AQTime. Hat leider nicht funktioniert. b) ich bin weit davon weg davon zu träumen dass das mal geht. Ich wäre schon froh, dass wenn das lokal bei mir geht für das was ich mache. Im aktuellen Fall habe ich gut 700 Zeilen Code-Änderungen in vielen Klassen und etlichen unit. Vieles ist nicht neu sondern umgebaut. Bin mir nicht sicher wo es dazu unit-tests gibt. Eine händische Kontrolle ergab, dass die Abdeckung extrem schlecht ist. Uwe, Dein DelphiCodeCoveragePlugin habe ich wieder mal angeschaut und ausprobiert. Es funktioniert in dem beigefügten Testprojekt, nicht jedoch in dem Code den ich machte. Ich vermute mal es liegt daran, dass der Test-Code in einem anderen Modul ist wie der Produktivcode. Leider kann ich das nicht ohne weiteres ändern. (Bei Methoden im selben Projekt gehts. Es gab einige false negatives beim "end" von anonymen Methoden.) "Codebase von Millionen von Zeilen und abertausenden von Unit- und Integrationstests" - das haben wir definitiv; dazu kommen noch automatisch UI-Tests. Und Ja, ich weiss, dass Zeilenweise Code Coverage ist nicht ausreichend ist. Aber ich wäre froh wenigstens das mal zu haben. |
AW: Erfahrungen mit DelphiCodeCoverage und "Delphi Code Coverage Wizards" #1
In der Regel habe ich das Hauptprojekt und dazu ein separates Testprojekt. Das Plugin erwartet, dass das Testprojekt aktiv ist. Ich habe noch nicht probiert, ob die zu testende Unit auch zwingend im Testprojekt enthalten sein muss.
|
AW: Erfahrungen mit DelphiCodeCoverage und "Delphi Code Coverage Wizards" #1
Zitat:
|
AW: Erfahrungen mit DelphiCodeCoverage und "Delphi Code Coverage Wizards" #1
Zitat:
Also ist deine schon wieder veraltet ;-) |
AW: Erfahrungen mit DelphiCodeCoverage und "Delphi Code Coverage Wizards" #1
Zitat:
Naja, ihm geht's wohl darum, dass ein C2 oder wie auch immer das genannt wird (lt. Wikipedia gibt's da ja Unterschiedliche Bezeichnungen weil unterschiedliche Leute das unterschiedlich nennen :( ) auch erkennen würde ob alle Varianten eines if Aufrufs der and und or etc. enthält auch getestet wurden. |
AW: Erfahrungen mit DelphiCodeCoverage und "Delphi Code Coverage Wizards" #1
Zitat:
Ich weiß auch gerade nicht, was dort derzeit als Issues alles gemeldet ist, d.h. ob diese Probleme die du gesehen hast dort bekannt sind. Das bisschen Nutzung welches ich bisher hatte (im Rahmen der DEC) schien ok zu sein. Aber zugegeben: DEC enthält auch kaum Generics und wenige annonyme methoden. Grüße TurboMagic |
AW: Erfahrungen mit DelphiCodeCoverage und "Delphi Code Coverage Wizards" #1
Zitat:
zu den Original PNG Dateien ergeben. Zitat:
Zitat:
Zitat:
Immerhin hab' ich anders als das Programm, das ich damit ersetzen will ja schon "Select all", "Deselect all" und "Refresh" umgesetzt. Zitat:
werden konnte. Hinter dem : der ersten Textzeile sollte der Pfad stehen. Der scheint aber leer zu sein... Zitat:
zurück Buttons des Browsers und es sind auch immer nur die davon enabled die gerade auch funktionieren würden. Ohne HTML Anzeige darunter ist das also nutzlos. Da will ich evtl. noch einen Hinweistext platzieren wenn HTML als Format ausgewählt ist aber kein Edge2SDK installiert und das deshalb hier nicht angezeigt werden kann. Grüße TurboMagic |
AW: Erfahrungen mit DelphiCodeCoverage und "Delphi Code Coverage Wizards" #1
Hallo TurboMagicMagic,
Danke für Deine Mühe. Zu 1. Ich möchte ein anderes aktuelles Projekt prüfen. Dazu pulle ich und ziehe DelphiCodeCoverageWizard.dproj rein. Dabei sehe ich, das in der Delphi-IDE noch Symbole da sind. Zur Laufzeit aber nicht mehr. Kann es daran liegen, dass die Symbole zu kleine sind für meine Auflösung? Die kleinen Symbole links sind da. Zu 2. Ja genau - oder so ähnlich Zu 3. :thumb: Zu 4. Das mit dem wenig Mühe weiss ich nicht. Bei Tortoise git kann man mehre Dateien selektieren und wenn man dann links klickt übernehmen alle diesen Zustand. Aber nimms nicht so wichtig, solange das mit vielen Dateien nur selten funktioniert ist es eh egal. Zu 5-7. Es war der Script-Pfad. Und ja genau, der war leer. Zu 8-10. Nun gut. Ist halt etwas umständlich wenn man das HTML sieht und feststellt dass z.B. zwei Dateien fehlen und man wieder zurück will um diese noch anzuklicken. Grüsse freimatz |
AW: Erfahrungen mit DelphiCodeCoverage und "Delphi Code Coverage Wizards" #1
Zitat:
ehrlicherweise noch nicht richtig getestet. Die Images sind aber in verschiedenen Auflösungen enthalten. => ich kann mir das noch nicht erklären. Welche Bildschirmauflösung und welchen Zoomfaktor nutzt du?# Ich gehe auch mal davon aus, dass du nicht mehrere Monitore mit unterschiedlicher Auflösung/Skalierung nutzt und du die Anwendung zwischen den Bildschirmen hin und her schiebst? Zitat:
Zitat:
Zitat:
Das sollte machbar sein. Wenn mir jetzt noch einer die passende Lösung liefert um den Copy Befehl im BuildEvent des Projekts nur dann auszuführen, wenn es die zu kopierende Datei auch gibt, dann steht einer V2.00 kaum noch was im Weg. Oder? Die bisherige Lösung mit if exists schien so nicht zu funktionieren. Grüße TurboMagic |
AW: Erfahrungen mit DelphiCodeCoverage und "Delphi Code Coverage Wizards" #1
Hallo,
es gibt einen neuen Commit 7d74498 im Development Branch mit diesen Ergänzungen: 1. Neuer Button "zurück zum Projekt" 2. Neuer Button "Projekt erneut ausführen" Bis auf die Sache mit dem Kopieren der DLL für den Edge würde ich jetzt sagen, dass V2.0 soweit fertig wäre. Grüße TurboMagic |
AW: Erfahrungen mit DelphiCodeCoverage und "Delphi Code Coverage Wizards" #1
Hallo,
es gibt einen neuen Commit 0c832a5 im Development Branch. Dieser korrigiert ein paar fehler: 1. Save stürzt jetzt nicht mehr ab, wenn noch kein Dateiname im Projekt vorhanden war (z. B. weil es eben erst angelegt wurde) oder weil die Datei nicht mehr da ist. Es wird dann einfach Save as aufgerufen. 2. Der Next Button unter dem Output Bildschirm wird jetzt aktiviert, wenn alle erforderlichen Einstellungen getätigt wurden. 3. Wirft das Ausführen der Batch Datei eine Fehlermeldung, so wird die Warteanimation im Hintergrund jetzt deaktiviert/verborgen und nach der Fehlermeldung landet man im Assistenten auf der Save and Run Seite. Grüße TurboMagic |
AW: Erfahrungen mit DelphiCodeCoverage und "Delphi Code Coverage Wizards" #1
Grr!!! Vorhin ging CodeCoverage noch, jetzt bleibt es hier hängen:
"Creating class info for DECRandom" und ich muss es durch Abbrechen der Batch Datei killen. Das passiert sowohl mit absoluten als auch mit relativen Pfaden, wobei ich im Wizard eben noch einen Bug bei der Generierung der relativen Pfade beseitigt habe. Es wurde 1x ..\ zuwenig vor den CodeCoverage.exe Aufruf gestellt. Nur: aus dem Wizard heraus kann eine Batch mit relativen Pfade noch nicht ausgeführt werden. Code 1 kommt als Fehlermeldung und ich weiß noch nicht warum. Rufe ich die Batch mittels Kommandozeile aus dem Verzeichnis heraus, in dem diese liegt auf, läuft CodeCoverage.exe zumindest an, bleibt aber wie oben beschrieben hängen. Wer kann mir helfen? v.a. erstmal mit dem Aufruf aus dem Wizard heraus bei Benutzung relativer Pfade? |
AW: Erfahrungen mit DelphiCodeCoverage und "Delphi Code Coverage Wizards" #1
Ok, diese Fehlercode 1 Sache konnte ich jetzt durch einen SetCurrentDir Aufruf beseitigen.
Hatte auch eine Alternative versucht bei der ich die Pfade zu den .lst Dateien relativ zur CodeCoderage.exe in die Batch Datei schreibe, hatte aber nicht geklappt. Keine AHnung warum. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz