Institute for
HSR

C++ Refactoring

C++ Refactoring Support für Eclipse-CDT

Ausgangslage

Die Programmiersprache Java wird durch die Eclipse Java Development Tools unterstützt. Mit dem CDT (C/C++ Development Tooling) existiert auch eine Eclipse-Erweiterung für die Programmiersprachen C und C++. Während in den JDT verschiedene Refactorings angeboten werden, steht für C++ erst ein automatisiertes Refactoring zur Verfügung.
Unter Refactoring versteht man eine Vorgehensweise in der Softwareentwicklung bei der die Qualität von Quellcode gesteigert wird, ohne dabei dessen Funktionalität zu verändern. Refactoring reduziert mittelfristig der Aufwand für die Fehleranalyse und für funktionale Erweiterungen. Refactorings sind in klar definierte Schritte aufgeteilt. Wenn diese automatisch ausgeführt werden können, erleichtert dies die Arbeit der Entwickler und ist deshalb für Entwicklungsumgebungen ein starker Wettbewerbsvorteil.

Ziel

Es sollen verschiedene Refactorings implementiert werden um den Entwicklern ihre Alltagsarbeit zu erleichtern. Die Refactorings sollen möglichst viele Eigenschaften von C++ unterstützen, Kommentare und Makros sollen bei den Codetransformation behandelt werden und wieder richtig zurückgeschrieben werden. Die bestehende Infrastruktur von Eclipse im Allgemeinen und CDT im Speziellen soll verwendet werden und wo nötig erweitert werden.

Ergebnisse

Der bestehende Code des CDT wurde so erweitert, dass folgende Refactorings automatisiert möglich sind:

  • Declare Method
  • Extract Constant
  • Extract Method
  • Extract Subclass
  • Hide Method
  • Implement Method
  • Move Field / Method
  • Separate Class

Damit der Code aus dem Abstract-Syntax-Tree wieder in Quellcode umgewandelt werden kann, wurde ein Codegenerator implementiert. Um die Refactorings effizient zu testen, wurde das Testingframework JUnit so erweitert, dass die Testdefinitionen aus einem File gelesen werden können. Um die Testdefinitionen möglichst einfach zu bearbeiten, wurde ein einfacher Editor für Eclipse entwickelt.