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 3 von 5     123 45   
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, 173x aufgerufen)
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
 
Benutzerbild von RavenIV
RavenIV

 
Delphi 2007 Enterprise
 
#21
  Alt 16. Jan 2008, 14:21
Zitat von Union:
Das geht auch, allerdings nur wenn über die Cursortasten gescrollt wird.
Wäre auch super, wenn das mit dem Mausrad sysnchon scrollen würde.
Klaus E.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

 
Delphi 7 Enterprise
 
#22
  Alt 16. Jan 2008, 14:36
Hallo alle,
es ist eine neue Version 1.3.3 verfügbar mit einigen neuen Optionen (hat leider nichts mit dem Scrollen zu tun ), siehe editiertes Originalposting.
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

 
Delphi 2007 Enterprise
 
#23
  Alt 16. Jan 2008, 14:40
Ein Menu mit den wichtigsten Funktionen wäre auch noch ne tolle Sache.

Und ein Hilfe-Fenster fehlt auch.
Klaus E.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

 
Delphi 7 Enterprise
 
#24
  Alt 16. Jan 2008, 14:58
Das ist eine gute Idee für die Zukunft. Bis dahin muss es das Readme tun. Und die Hauptoperationen bestehen im Drücken des Readbuttonns sowie einem Doppelclick auf einer ausgewählten Zeile...
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

 
Delphi 2007 Enterprise
 
#25
  Alt 16. Jan 2008, 15:00
Die verschiedenen Einstellungen in der ini könntest Du auch in ein Optionen-Fenster packen.
Klaus E.
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

 
Delphi XE2 Professional
 
#26
  Alt 2. Mär 2008, 14:02
Erst einmal - super Idee!! Ich bin vor einiger Zeit zufällig auf dieses Programm gestoßen weil ich genau so etwas gesucht habe, da ich ein Projekt übernommen hab dessen Code in einem katastrophalen Zustand ist und etliche Duplikate enthält.
Es gibt aus meiner Sicht jedoch auch ein paar Sachen zu bemängeln.

Positiv:
  • Sehr schnell bei der Duplikatsuche (nur die Visualisierung dauert ein bisschen lange)
Negativ:
  • Ich finde die Aufbereitung nicht unbedingt optimal
  • Wenn gleiche Codeschnipsel unterschiedliche Kommentare haben, werden sie als unterschiedlich bewertet
  • Unterschiede in der Formatierung werden ebenfalls nicht berücksichtigt
Ich hab deswegen angefangen ein ähnliches Programm zu schreiben das diese Punkte berücksichtigt. Vielleicht werd ich das in den nächsten Tagen auch mal hier präsentieren.

Gruß, Motzi

PS: unter Umständen könnten wir ja auch Ideen austauschen und zusammenarbeiten.
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

 
Delphi 7 Enterprise
 
#27
  Alt 3. Mär 2008, 07:49
Zitat von Motzi:
Positiv:
  • Sehr schnell bei der Duplikatsuche
Ich habe eine spezielle "Memory-Dataset" Klasse verwendet, die auf den Anwendungsfall hin optimiert und indiziert ist. Das könnte sogar noch doppelt so schnell werden, denn die meiste Zeit wird für den Progressevent verbraten (hab's allerdings nicht gemessen).
Zitat von Motzi:
Negativ:
  • Ich finde die Aufbereitung nicht unbedingt optimal
  • Wenn gleiche Codeschnipsel unterschiedliche Kommentare haben, werden sie als unterschiedlich bewertet
  • Unterschiede in der Formatierung werden ebenfalls nicht berücksichtigt
Das Programm sollte ja auch hoffentlich nicht ständig eingesetzt werden. Man sollte damit einen Einstiegspunkt zum Refactoring finden. Die Kommentare ganz zu ignorieren birgt ja auch Gefahren in sich, z.b. wenn man doppelten Sourcecode absichtlich zur Performancesteigerung eingesetzt hat (inlining).
Die einzigen Anpassungen die stattfinden, sind Entfernen aller Leerzeichen und die Umwandlung in Uppercase jeder Zeile. Diese Strings werden gehashed und nur die Hashs werden dann bei der Analyse verglichen, deshalb auch der Speed. Das kann man natürlich anpassen (z.b. Entfernung von Tabs).
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

 
Delphi XE2 Professional
 
#28
  Alt 5. Mär 2008, 00:15
Hallo,

wie angekündigt hab ich mein Programm jetzt ebenfalls vorgestellt: DoubleSource

Bei meinem Programm werden Kommentare während des Preprocessings komplett rausgelöscht und unterschiedliche Formatierungen durch Leerzeichen oder Tabs normalisiert. Ich verwende zur Anzeige den VirtualTreeview wodurch die Visualisierung sehr schnell geht - kann ich dir nur empfehlen!

Ich hab meine Routine zur Duplikatssuche selbst geschrieben, anfangs sehr naiv (brauchte in etwa so lang wie deine erste Version) und hab sie dann Stück für Stück immer weiter verbessert bis ich sie jetzt soweit optimiert habe, dass sie sogar schneller ist als deine. *stolzbin* Allerdings hab ich (noch) keine Progressbar drinnen, also ist der Vergleich nicht ganz fair.

Würd mich freuen wenn du es dir mal anschaust und einen Kommentar abgibst!

Gruß, Motzi
Manuel Pöter
  Mit Zitat antworten Zitat
angos

 
Delphi 10.4 Sydney
 
#29
  Alt 5. Mär 2008, 07:45
Hallo Union,

erstmal schließ ich mich dem allgmeinen Thread-Hype an: sehr gute Idee das ganze

Super wären jetzt folgende Funktionen:
- Standardansicht einstellbar oder fest auf Hierarchisch
- So wie bei Motzis Tool wäre es super wenn die Minimum-Lines zur Laufzeit geändert werden können
- Eine Option, durch welche nur eine Datei gescannt werden kann (das Scannen eines gesamten Projektes sollte aber beibehalten
werden)

Super wären dann noch die "Königsfunktionen" (ziemlich aufwändig):
- Erzeugen von Funktionen/Prozeduren der Codeteile auf Klick unter berücksichtigung der Übergabe von lokalen variablen
- Auto-Codeupdate nach dem Erzeugen der Funktionen. Also: Es werden die Funktionen implementiert, und der Restsource angepasst.


Nicht wichtig aber nice-to-have:
- Eine schönere gui mit zB einstellungsmöglichkeiten, welche sonst über die ini geschaltet werden müssten.

Gruß
Ansgar
Ansgar
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

 
Delphi 7 Enterprise
 
#30
  Alt 5. Mär 2008, 08:06
Hallo Angos,
Zitat:
Standardansicht einstellbar oder fest auf Hierarchisch
meinst Du damit, dass die GUI-Tab-Seite gespeichert und wiederhergestellt werden soll?
Zitat:
So wie bei Motzis Tool wäre es super wenn die Minimum-Lines zur Laufzeit geändert werden können
Das ist natürlich möglich, aber durch das Klassen-Design etwas unangenehm zu realisieren. Denn bei mir ist MinLines eine Eigenschaft der Analyseklasse und nicht der GUI. Soll heissen, man könnte zwar den Filter in der GUI nach oben setzen, aber nicht unter den beim Analysieren gesetzten Wert. Duplikate kleiner als der Grenzwert werden nämlich erst gar nicht in die Struktur aufgenommen (Hauptspeicher).
Zitat:
Eine Option, durch welche nur eine Datei gescannt werden kann (das Scannen eines gesamten Projektes sollte aber beibehalten
Das ist am einfachsten zu realisieren und eine gute Idee.
Für die "Königsfunktionen" sollte man lieber D2007 verwenden, da hat sich CG schon ein paar Mannjahre daran versucht und es funktioniert ganz gut.
Zitat:
Eine schönere gui
Da bin ich wirklich nicht gut drin, ich setze immer auf einfachste Standards. Mach doch mal konkrete Vorschläge. Und welche Einstellungsmöglichkeiten meinst Du? Momentan gibt es ja nur:
Code:
[Config]
Path=c:\temp\test
StartLine=IMPLEMENTATION
MinLines=4
Indexed=1
Der Rest wird ja automatisch erzeugt durch Größenänderungen und das Systemmenü:
Code:
frmAnalyse.Font.Name=MS Sans Serif
frmAnalyse.Font.Size=8
frmAnalyse.Width=650
frmAnalyse.Height=531
frmAnalyse.pnlMemo.Left=1
frmAnalyse.pnlMemo.Top=259
frmAnalyse.pnlMemo.Width=640
frmAnalyse.pnlMemo.Height=204
frmAnalyse.lvDupe.Columns[0].Width=242
frmAnalyse.lvDupe.Columns[1].Width=184
frmAnalyse.lvDupe.Columns[2].Width=50
frmAnalyse.lvDupe.Columns[3].Width=50
frmAnalyse.lvDupe.Columns[4].Width=50
frmAnalyse.lvDupe.Columns[5].Width=50
frmAnalyse.lvDupe.Columns[6].Width=50
frmAnalyse.tvDupe.Columns[0].Width=400
frmAnalyse.tvDupe.Columns[1].Width=100
frmAnalyse.tvDupe.Columns[2].Width=100
frmAnalyse.Left=360
frmAnalyse.Top=236
frmEdit.Left=328
frmEdit.Top=291
frmEdit.Width=714
frmEdit.Height=420
frmEdit.pnlSource.Left=0
frmEdit.pnlSource.Top=0
frmEdit.pnlSource.Width=334
frmEdit.pnlSource.Height=386
  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 20:19 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