AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte DupeChecker - Duplikate im Source finden v1.3.5

DupeChecker - Duplikate im Source finden v1.3.5

Ein Thema von Union · begonnen am 28. Mär 2006 · letzter Beitrag vom 4. Dez 2021
Antwort Antwort
Seite 1 von 5  1 23     Letzte » 
Benutzerbild von Union
Union
Registriert seit: 18. Mär 2004
Hallo Alle,

vielleicht kennt Ihr die Situation: Man arbeitet längere Zeit an einem größeren Projekt. Dabei geht man leider nicht immer nach OOP vor und arbeitet in großen Teilen mit Copy & Paste.

Irgendwann kommt der Zeitpunkt, zu dem ein Projekt nicht mehr wartbar und ziemlich aufgeblasen ist. Man kann natürlich aus der Erinnerung und nach Gefühl vorgehen, um ein Refactoring vorzunehmen. Aber gerade die nachträgliche Suche nach Stellen, die man zu Funktionen zusammenfassen könnte, dauert dann beliebig lange.

Genau hier hilft der DupeChecker:
  • Verarbeitet beliebig grosse Projekte
  • Findet Blöcke von dupliziertem Sourcecode
  • Wertet *.pas Dateien aus, beginnt ab implementation (über INI konfigurierbar)
  • Mindestgröße der als Duplikate erkannten Textblöcke über INI konfigurierbar
  • Zeigt die Treffer nach Zeilenanzahl sortiert an
  • Blendet den Sourcecode zur Kontrolle ein
  • Umfangreiche Sortier- und Filterfunktionen
  • Export der Duplikatsliste
Und vor allem ist er schnell und einfach zu bedienen:
  • Eingabe des Pfades, einer Datei oder einer Dateiliste (letzter benutzter Pfad wird in INI gespeichert)
  • Start drücken, etwas warten (z.B. 50000 Zeilen in 2,5 Sekunden)
  • Ergebnisse auswerten
Ich würde mich sehr über Anregungen sowie konstruktive Kritik freuen.
DupeCheck v 1.3.5
  • Nochmalige Geschwindigkeitssteigerung
  • Views (Liste/Hierachie) können mittels Ctrl-Mouseclick synchronisiert werden oder über Kontextmenü
  • Listenexport nach Excel
  • Verschiedene UI-Styles über Ini-Datei
  • in der Sourceanzeige "nebeneinander" werden die Blöcke nicht mehr selektiert, sondern die identischen Bereiche werden farblich hinterlegt
  • Besseres Speichermanagement für sehr grosse Projekte (getestet mit 2,5 Millionen Zeilen)
  • Als Dateiname kann auch eine Dateiliste angegeben werden. In dieser kann in jeder Zeile ein Dateiname oder ein Directory stehen.
  • Kontextmenüs in den Views
  • Sortieren und Filtern der Ansichten
  • Vergleichszähler auf 64 Bit geändert
DupeCheck v 1.3.4.1
  • Geschwindigkeit bis zu 30% schneller
  • Verarbeiten von Unterverzeichnissen
  • Verarbeiten einzelner Dateien
  • Entfernung von doppelten Duplikaten (!) aus der hierarchischen Anzeige
  • Verbessertes UI
  • Anzeige der Dateianzahl in Statuszeile
  • Eurekalog
DupeCheck v 1.3.3
  • Englische Benutzeroberfläche auf PC's mit Englischer Locale
  • Font kann über Systemmenü oder ini eingestellt werden
  • Position des Formulars, Spaltenbreiten und Splitterposition werden in ini gespeichert und bei Programmstart wieder ausgelesen

DupeCheck v 1.3 "BigMac"
  • Neue zusätzliche Visualisierung als Treeview. Dabei werden die Duplikate als Knoten angezeigt, die einzelnen Vorkommen im Sourcode als Childnodes. Leider wird die EXE dadurch fast 2x so groß. Naja, wer schön sein will muß leiden

DupeCheck v 1.2.1
  • Durch die Geschwindigkeitssteigerung wurden teilweise Duplikate falsch erkannt. Aufgrund Hinweis von Martin W behoben.

DupeCheck v 1.2 - Turbo
  • Geschwindigkeit der Analyse wurde um das bis zu 20-Fache gesteigert.
  • Division by zero tritt während der Fortschrittsanzeige nicht mehr auf, wenn Sourcecode kürzer als 100 Zeilen.

DupeCheck v 1.1
  • Pfadeingabe mit Auswahldialog über Button oder F4
  • Fehlermeldung, wenn im angegebenen Pfad keine Dateien existieren
  • Flackern der Listenanzeige beim Update behoben
  • Duplikate können durch Doppelklick auf Listeneintrag nebeneinander angezeigt werden mit synchronem Scrollen. Klick auf Headerzeile synchronisiert wieder auf die Anfangszeilen.
Angehängte Dateien
Dateityp: zip dupecheck_127.zip (932,6 KB, 98x aufgerufen)
Dateityp: zip dupecheck1330_394.zip (698,2 KB, 84x aufgerufen)
Dateityp: zip dupecheck1341_866.zip (810,5 KB, 52x aufgerufen)
Dateityp: zip dupecheck1350_363.zip (1,10 MB, 174x aufgerufen)
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
 
Benutzerbild von Ralf Kaiser
Ralf Kaiser

 
Delphi 10.3 Rio
 
#2
  Alt 29. Mär 2006, 07:23
Zitat von Union:
Ich würde mich sehr über Anregungen sowie konstruktive Kritik freuen.
Halli Hallo,

erst einmal: sehr gute Idee!

Bei der Pfadeingabe wäre ein Auswahldialog ganz nützlich übder den man den Pfad auswählen kann.

Zu den Ergebnissen:

Ich habe mal einige Projekte gescannt und es werden solche Stellen als Duplikate gefunden:


Delphi-Quellcode:
  
  end;
end;
(Gut, das sind Duplikate, da sie überall im Programm vorkommen aber Sinn des Programmes ist es ja wohl doppelten Code zu finden. Gleiche Kontrollstrukturen (oder Teile davon) dürften da wohl keinen Sinn machen, oder?

Eventuell sollten solche Stellen, die nur aus Schlüsselworten bestehen nicht mit verglichen werden.

Ciao,
Ralf
Ralf Kaiser
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms

 
Delphi XE Professional
 
#3
  Alt 29. Mär 2006, 07:32
Hallo!

Die Idee finde ich auch gut! Jedoch funktioniert's bei mir nicht.
Ich gebe einen gueltigen Pfad an und klicke auf Start.
Es sagt dann immer "0 Zeilen gelsesen und 0 Duplikate in 0.01 s gefunden. 0 Zeilen verglichen"

Vorschlaege:

1) Button zum Auswaehlen einer Datei
2) Wenn die eingegebene Datei nicht existiert, Fehler anzeigen.
3) Drag & Drop einer Datei ins Edit (so dass es den Pfad uebernimmt)
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

 
Delphi 7 Enterprise
 
#4
  Alt 29. Mär 2006, 07:38
Zitat von Alfi001:
Bei der Pfadeingabe wäre ein Auswahldialog ganz nützlich übder den man den Pfad auswählen kann.
Kommt ins TODO.
Zitat von Alfi001:
Eventuell sollten solche Stellen, die nur aus Schlüsselworten bestehen nicht mit verglichen werden.
Das stimmt natürlich. Zum einen kannst Du in der INI-Datei über den Eintrag MinLines= verhindern, dass so kurze Blöcke als doppelt erkannt werden. Die Ergebnisse sind ja auch absteigend nach Zeilananzahl sortiert - dann kann man die letzten (kürzesten) Ergebnisse ignorieren.

Und Kontrollstrukturen müssen mit in den Vergleich einfließen, denn jede Source-Datei besteht hauptsächlich aus solchen. Oder meinst Du man solle Blöcke ausfiltern, die ausschließlich aus Schlüsselworten bestehen?

Zitat von toms:
Die Idee finde ich auch gut! Jedoch funktioniert's bei mir nicht. Ich gebe einen gueltigen Pfad an und klicke auf Start.
In das Feld kommt kein Dateiname. Dort wird ein Verzeichnis eingegeben - aus diesem werden alle *.pas Dateien eingelesen.
Zitat von Toms:
[2) Wenn die eingegebene Datei nicht existiert, Fehler anzeigen.
Wenn in dem Verzeichnis keine .pas Dateien existieren, kann ich eine Meldung ausgeben.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms

 
Delphi XE Professional
 
#5
  Alt 29. Mär 2006, 08:08
Zitat von Union:
In das Feld kommt kein Dateiname. Dort wird ein Verzeichnis eingegeben - aus diesem werden alle *.pas Dateien eingelesen.
Ach so. Und wenn ich nur eine einzige Datei angeben moechte? Muss ich dann die Datei in ein neues Verzeichnis kopieren, damit es nur jene nimmt?

Der Tree wird sichtbar langsam geloescht. Verwende mal BeginUpdate.. EndUpdate..


Zitat:
Blendet den Sourcecode zur Kontrolle ein
Nuezlich waere es, wenn er gleich im Source Code zu jener Stelle springen wurde. Dann muss man im eigentlichen
nicht fuer jedes Duplikat im Quelltext mit Goto zur angezeigten Stelle springen.
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

 
Delphi 7 Enterprise
 
#6
  Alt 29. Mär 2006, 08:22
Zitat von toms:
Der Tree wird sichtbar langsam geloescht. Verwende mal BeginUpdate.. EndUpdate..
Da hast Du Recht. BeginUpdate und EndUpdate habe ich nur beim Aufbau und bei der Sortierung eingesetzt
Zitat von toms:
Muss ich dann die Datei in ein neues Verzeichnis kopieren, damit es nur jene nimmt?
Momentan leider ja. Ich wollte es eben schnell auf ganze Projekte anwendbar machen. Und dazu ist es (besonders beim Testen) ziemlich lästig, wenn man erst eine Datei auswählen oder mehrere markieren muss.
Zitat von toms:
Nuezlich waere es, wenn er gleich im Source Code zu jener Stelle springen wurde
Das kann ich machen. Aber an welche Stelle soll er springen? Quelle oder Ziel... oder beide? Und was soll zum Editieren verwendet werden: Delphi, Notepad, Shell? Und dann gibt es da noch das klitzekleine Problem, wenn Quelle und Ziel in der selben Datei liegen
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms

 
Delphi XE Professional
 
#7
  Alt 29. Mär 2006, 08:28
Zitat:
Das kann ich machen. Aber an welche Stelle soll er springen? Quelle oder Ziel... oder beide? Und was soll zum Editieren verwendet werden: Delphi, Notepad, Shell? Und dann gibt es da noch das klitzekleine Problem, wenn Quelle und Ziel in der selben Datei liegen

Es wuerde vorerst genuegen, denn Quelltext in einem SynEdit anzuzeigen.
Er soll, wahlweise zum Ziel od. Quelle springen koennen.
Thomas
  Mit Zitat antworten Zitat
kalmi01
 
#8
  Alt 29. Mär 2006, 09:40
hi,

dies
Delphi-Quellcode:
              FileImportHTML: TMenuItem;
              FileImportXML: TMenuItem;
              ImportMenuSep1: TMenuItem;
              FileImportHEX: TMenuItem;
            FileExport: TMenuItem;
              FileExportRTF: TMenuItem;
              FileExportHTML: TMenuItem;
            FileMenuSep4: TMenuItem;
            PrintFile: TMenuItem;
            PrintAllFiles: TMenuItem;
            PrintBlock: TMenuItem;
            FileMenuSep5: TMenuItem;
            ExitProg: TMenuItem;
soll gleich das
Delphi-Quellcode:
            InsertMenuSep1: TMenuItem;
            InsertDateTime: TMenuItem;
            InsertMenuSep3: TMenuItem;
            InsertASCII: TMenuItem;
            InsertMenuSep4: TMenuItem;
            InsertColor: TMenuItem;

          MacroMenu: TMenuItem;
            MacroRecord: TMenuItem;
            MacroMenuSep1: TMenuItem;
            MacroLoad: TMenuItem;
            MacroSave: TMenuItem;
            MacroMenuSep2: TMenuItem;
            MacroPlay: TMenuItem;
sein.
Was ich aber bezweifeln möchte
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

 
Delphi 7 Enterprise
 
#9
  Alt 29. Mär 2006, 09:51
@kalmi01
Ich habe die von Dir angegebenen Source-Blöcke in eine .pas Datei kopiert und den DupeCheck drüber laufen lassen. Die Stellen wurden nicht als Duplikate erkannt. Vielleicht kannst Du mir helfen, indem Du mir
  • Entweder den Sourcecode, in dem sich die vermeintlichen Duplikate befinden, komplett gibst
  • Oder mir das reproduzierbar machst (z.b. alles andere aus den Files rausschmeisst).
Danke
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

 
Delphi 10.3 Rio
 
#10
  Alt 29. Mär 2006, 17:00
Zitat von Union:
Und Kontrollstrukturen müssen mit in den Vergleich einfließen, denn jede Source-Datei besteht hauptsächlich aus solchen. Oder meinst Du man solle Blöcke ausfiltern, die ausschließlich aus Schlüsselworten bestehen?
Hallo,

ich meine, daß wenn im Ergebnis nur Schlüsselworte zu finden sind dann soltte dies nicht als Ergebnis gewertet werden:

Irgendwo im Source befinden sich beispielsweise immer wieder stark geschachtelte Schleifen oder if-Abfragen, dann kommt es unter Umständen dazu, daß das Ende dieser Schelien/if-Abfragen als Duplikat erkannt wird:

Delphi-Quellcode:
         (ab hier wird das folgende als Duplikat erkannt:)
                end;
              end;
            end;
          end;
        end;
      end;
    end;
  end;
So etwas sollte man dann rauslassen. Ansonsten, wie gesagt, die Idee is super, so kann man herausfinden wo man am besten mit den Refactoring anfängt.

Ciao,
Ralf
Ralf Kaiser
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf