2010-11-18 4 views
5

Ich muss eine große Änderung an einer Codebasis, die aus einer Handvoll verschiedener Arten von Änderungen, die an Hunderte von verschiedenen Standorten verteilt werden müssen, verteilt über Hunderttausende von Linien.Code-Review-Tool für Prep für große Änderung zu Codebasis

Ich habe eine Idee für ein Tool, das mir dabei helfen kann, aber da ich mir sicher nicht der Einzige mit dieser Idee bin, frage ich mich, ob es schon geschrieben wurde.

Lassen Sie mich erläutern, wie es funktionieren würde:

  • Zuerst ein bisschen wie grep mit Kontext, wäre es eine Reihe von „interessanten“ Teile des Codes basierend auf einem regulären Ausdruck sammeln; Es kann Tausende dieser Standorte geben.
  • Dann lassen Sie mich durch Stücke durchlaufen, jede der Reihe nach als interessant oder uninteressant markiert. Dies ist im Grunde so viel wie möglich der manuellen Arbeit zu automatisieren, um mögliche Wechselorte zu tatsächlichen Wechselorten zu reduzieren.
  • Lassen Sie mich schließlich eine Transformation (z. B. Sed-Stil-Substitution) auf alle ausgewählten interessanten Standorten anwenden.

Ist dieses Tool bereits vorhanden?

Ich denke darüber nach, dieses Tool selbst zu schreiben, wenn ich ein bereits vorhandenes nicht finden kann.

+2

Wenn Sie kein passendes Werkzeug finden und eines selbst bauen müssen. Es wäre wunderbar, wenn Sie es öffnen würden. Es gab eine Menge, wo ich gerne ein ähnliches Werkzeug wie das, was Sie vorschlagen, haben würde. – sdolan

Antwort

1

Das klingt ähnlich wie Coccinelle geschrieben wurde, zu tun, auch wenn es mit C. funktioniert nur

+0

Das ist interessant, aber ich denke, dass Coccinelles Ansatz zu strukturiert ist, um praktisch zu sein; mit anderen Worten, es versucht zu viel zu automatisieren, aber die Komplexität taucht auf der anderen Seite auf, wenn man die semantischen Patches schreibt. Da der Change-Set nicht wiederverwendbar sein muss, ist es besser, wenn man pragmatische, einmalige manuelle Entscheidungen trifft, wo es sinnvoll ist. –

1

Ich bin nicht bekannt, dass Werkzeuge wie die. Es scheint sich um eine ziemlich spezialisierte Aufgabe zu handeln, die nur einmal innerhalb kurzer Zeit durchgeführt wurde. Daher ist es schwierig, mit der Entwicklung und Verbreitung eines solchen Tools Geld zu verdienen.

In der Vergangenheit, wenn ich eine Aufgabe wie diese hätte, würde ich ein Skript in Emacs 'Version von Lisp schreiben. Der Vorteil ist, dass Lisp eine mächtige Sprache ist und der Emacs-Editor viele praktische eingebaute Funktionen (z. B. Abfrage-ersetzen-regulären Ausdruck) und Konzepte hat. Wenn Sie jedoch nicht bereits mit Emacs und Lisp vertraut sind, würde ich es nicht empfehlen. Die Lernkurve ist zu steil.

+0

Das Werkzeug, das ich im Auge habe, wäre ein 200-Zeilen-Hack-Job, um die Gesamtarbeitszeit von (Tool-Erstellung + Refactoring) zu minimieren, anstatt irgendein poliertes Produkt. query-replace-regular-expression ist nicht viel mehr als der Befehl von sed; Als ersten Durchlauf wird mein Werkzeug wahrscheinlich zu modifizierende Stücke in eine große Textdatei extrahieren, von Hand gekürzt, dann mit sed, awk usw. modifiziert und dann wieder mit den Originalen zusammengefügt. –

1

Klingt interessant. Ich habe auch mit einer solchen Idee herumgespielt, bin aber nicht weit vom Kommandozeilenskript gegangen. Mein Ansatz für Refactoring Vorbereitung ist:

  1. einen chunc Code zu finden sein Refactoring
  2. generieren reg-exp/script für die Suche nach ähnlichen Code/Muster und erstellen eine Liste der Standort für diesen Typ Muster

Die Ausgabe-Datei enthält Zeilen in GNU oder MS Ausgabeformat (zB: file: LINE MESSAGE) So kann es in jedem IDE (Vim -q) und der Code-Chunks geladen werden können, gefunden werden einfach durch Doppelklick auf "Fehlermeldung s ".

Übrigens ist es einfacher zu grep, wenn der Code vorher durch Einrückung vereinheitlicht wurde.

1

Es klingt, als ob Sie planen, dies zu tun, indem Sie huisistics ("grep") verwenden, um Ihren Code zu finden, und heuristics ("sed"), um Ihren Code zu ändern. Wenn diese den Trick machen, und Sie können es wirklich in 200 Zeilen tun, wie Sie sagen, ich bin überrascht, dass Sie sogar hier auf SO gefragt haben.

In der Regel ist es ziemlich gefährlich, Hunderte von Änderungen mithilfe von Heuristiken vorzunehmen. Wenn eine Person in jeden von ihnen involviert ist, kann er die Fehler in dem Maße beheben, in dem er sie bemerkt und das kann gut genug sein; In diesem Fall erstellen Sie nur einen lustig aussehenden Texteditor. Wenn Sie diese Route gehen, ist EMACS möglicherweise eine sehr gute Wahl, da alle von Ihnen gewünschten Aktionen (String-Suche, Extrahieren-zu-Puffer-für-Anzeige, String-Ersetzung, Erstellen von Marker-Datenstrukturen auf der Seite) in Elisp vollständig skriptfähig sind und es hat bereits eine nette Benutzeroberfläche.

Wenn Sie dies auf einer zuverlässigeren Basis automatisieren möchten, müssen Sie genau suchen und ersetzen. Unser DMS Software Reengineering Toolkit ist ein Programm Transformation Tool, das dies für viele weit verbreitete Sprachen tun kann (Sie haben nicht gesagt, welche Sie getan haben) einschließlich Java, C++, C, C#, COBOL, ... DMS kann ebenfalls vollständig für Skripte geschrieben werden benutzerdefinierte Sätze von Aktionen.

+0

Nun, ich kann es in weniger als 200 Zeilen tun, aber es wird zunehmend schwieriger, prägnant zu schreiben, und beinhaltet mehr manuelle Schritte :) - Überprüfung der Ausgabe von Grep -n-10 in eine Textdatei umgeleitet, dann nachbearbeitet in ein Diff und schließlich mit Patch angewendet. Aber eine visuelle Oberfläche, die um diese Art von Workflow herum entwickelt wurde - und es ist ein Workflow-Problem von Natur aus - würde das Leben viel einfacher machen. Es zu automatisieren ist nicht der Punkt; das ganze Problem damit ist die Wiederholung der Untersuchung jedes einzelnen Falles. –