Verwendung von AOP in Refactoring

With AspectJ, you can write code that will intercept calls in an existing application without modification. You can use it to log results. Then, when you refactor, you can run again and see if the new set of results differs from the old one. If it does, you’e modified behavior. It’s time to roll back and start over again.

Aus Working Effectively With Legacy Code von Michael Feathers.

No comment »

Seminar Program Analysis and Transformation

Soeben ging das Seminar zum Thema Program Analysis and Transformation mit der letzten Präsentation zu Ende. Das Seminar ist eines von zweien, welches man im MSE in der jeweiligen Fachhochschule zu absolvieren hat.

Das wichtigste zuerst, die besten Zitate des Tages, von Josef Joller: “Swiss German is an advanced version of German” (zu unseren Singapurianern). Und von Peter Sommerlad, zu einem Studenten: “Du scheinst aus einem Kontext zu kommen, wo du mir eigentlich leid tust.”

Ok, um was ging es in meinem Paper? Ich zitiere einfach mal mein Paper:

Slicing is an approach to divide a program into chunks that share a common property, like their contribution to the result of a calculation. Slicing can be used to leverage the power of refactoring tools by providing a deeper understanding of the code. For example, the Extract Method refactoring used to extract a series of statements can—with the aid of a slicing algorithm—be enhanced to allow the extraction of non-contiguous statements.

This paper summarizes Ran Ettinger’s thesis about “Refactoring via Program Slicing and Sliding”, where he introduces the notion of sliding, a visualization of the slicing procedure based on transparent overhead-projector slides. I also show how several well-known refactorings can benefit from a slicing algorithm.

Wer will darf das Paper natürlich auch selbst mal lesen, auch die Präsentation ist hier, aber steht nicht so viel drin.

No comment »

Ein Paar Interessante Paper

Ich war gerade am ausmisten meiner Blog-Drafts und bin über diesen unfertigen Beitrag hier gestossen. Anstatt ihn zu löschen, könnte ich ihn aber auch geradesogut einfach ohne viele Worte veröffentlichen, vielleicht interessierts ja jemanden.

Evaluating Static Analysis Defect Warnings On Production Software

Why Calculating Is Betten Than Scheming

A History of Haskell: Being Lazy With Class

Re-Approaching the Refactoring Rubicon

4 comments »

Code Analysis and Refactoring with CDT

Doug Schäfers Slides vom Eclipse Summit Europe sind nun online verfügbar. Für uns Insider natürlich nicht viel neues, aber es ist doch schön, wenn jemand unsere Arbeit präsentiert. Irgendwie cool :-) Ausserdem hats sogar Code von mir in der Präsentation:

Super, was? So, und nun “spread the word on what can be done and how”, wie Doug auf der letzten Folie aufruft.

3 comments »

Groovy-Eclipse Refactoring in den Medien

In der aktuellen Ausgabe des Eclipse Magazins befindet sich folgende kurze Mitteilung, welche ich natürlich niemandem vorenthalten will:

Soweit ich informiert bin, werden auch die restlichen Refactorings bald enthalten sein, momentan wartet man noch auf einen neueren Release von Groovy. Aber dazu kann ja vielleicht einer der zuständigen Studenten kommentieren. :-)

No comment »

Neues im Ganymede CDT

Gibts bei Emanuel.

No comment »

Neues in Eclipse 3.4 Ganymede

Es ist wieder mal so weit, Ende Juni wird die neuste und schönste Version von Eclipse im Zug des Ganymede Release-Trains veröffentlicht. Wie auch schon letztes Jahr möchte ich hier gerne einige der Neuerungen vorstellen.

Ich werde mich auf das JDT, also die Java Development Tools, PDE, sowie die Plattform beschränken; Emanuel wird dann hoffentlich über die Neuigkeiten im CDT berichten.

Extract Class Refactoring

Starten wir mit meinem Lieblingsthema: Refactoring. Und zwar gibt es ein neues Refactoring, welches einem einfach erlaubt, Teile einer bestehenden Klasse in eine Neue auszulagern:

Das Resultat ist eine Klasse mit den selektierten Feldern, sowie delegierenden Methoden aus der Ursprungsklasse.

Rearrange Content of Files Per Drag&Drop

Auch ganz nett ist, dass man Member innerhalb einer Klasse per Drag&Drop verschieben kann:

(Den Cursor muss man sich vorstellen, er zieht das selektierte Element an die Position der schwarzen Linie.)

Rename Field Renames Properties key

Auch eine sehr nützliche Erweiterung ist beim Rename Field Refactoring hinzugekommen: Beim Umbenennen eines Feldes, welches als Message-String verwendet wird, wird auch automatisch der entsprechende Key im messages.properties-File umbenannt. So kleine Dinge sind es nämlich, welche einem das Arbeiten mit Eclipse so angenehm machen.

New Quick Assist: MessageFormat

Mit + zusammengesetzte Strings sind zum einen häufig nicht sehr leserlich und zum anderen nur sehr mühsam zu internationalisieren. Abhilfe schafft ein neuer Quick-Fix:

Read and Write Occurrences

Mark Occurences ist schon mindestens seit der vorlezten Version dabei, aber natürlich kann man auch dieses Feature noch verbessern, und zwar durch eine farbliche Unterscheidung von Lese- und Schreibzugriffen (das doofe Beispiel sei mir vergeben).

JUnit View Shows Execution Time

Hm ja, der Titel sagts wohl schon:

Plug-in Spy

Endlich! Der Plug-in Spy ist Teil des PDE. Der Plug-in Spy ist sehr nützlich, wenn man sich beispielsweise fragt, welche Klasse die aktuelle View implementiert oder auch, wie der Identifier für die View lautet. Das hätte mir zu Beginn meiner Plug-in Entwickler-Karriere einiges an Zeit gespart.

Das waren wohl die für mich wichtigsten Neuerungen. Ich bin mir sicher, dass ich im Lauf des Jahres noch einige andere coole Dinge entdecken werde.

Ganymede is coming!

Viel Spass! Und wer immer noch nicht genug hat, findet in den New and Noteworthy Seiten noch ganz vieles mehr.

2 comments »

CDT C++ Refactorings in Ganymede!

Jawohl, es ist soweit, heute wurde unser letzter grosser Patch angenommen. Folgendes Menu wird also jedermann Ende Juni im neusten CDT-Release vorfinden:

Zudem haben die Committer-Abstimmungen für Emanuel Graf heute begonnen, 5 Stimmen hat er schon — ich denke man darf bereits gratulieren :-)

So, und wer jetzt glaubt reklamieren zu müssen, ja, Implement Method und Generate Getters and Setters sind keine Refactorings, aber es lohnt sich (noch) nicht, für zwei Einträge ein Top-Level Source-Menu einzuführen.

6 comments »

CDT C++ Refactoring Plug-In in Ganymede?

Am letzten Mittwoch haben wir einen grossen Schritt getan und die notwendigen Patches für den C++ Refactoring-Support für CDT fertiggestellt.

Der Gesamtumfang der Patches beträgt knapp 24000 Zeilen, wobei schlussendlich nur ein einziges Refactoring (Extract Constant) inbegriffen ist, der Rest dient als Basis für weitere Refactorings, welche in nächster Zeit folgen werden, und umfasst Dinge wie Source-Transformationen, Code re-writing, Kommentarbehandlung, und natürlich ganz viele Tests. Wir hoffen, damit (endlich) den Sprung zu schaffen und ein offizieller Teil des CDT zu werden. Langfristiges Ziel ist natürlich, selbst Committer zu werden, allerdings ist das nicht so einfach wie man meinen könnte (in dieser Hinsicht unterscheidet sich Eclipse von den meisten anderen Open-Source Projekten die ich kenne). Jetzt können wir nur noch hoffen, dass wir möglichst rasch durch das IP-Review kommen und unser Code schnell im CVS landet (das Arbeiten mit gepatchten Quellen auf die man nicht committen kann ist nicht besonders spassig :/ ).

Wer das ganze genauer mitverfolgen will, sollte sich bei den beiden relevanten Bug-Reports anhängen, oder gleich bei unserem Trac.

5 comments »

Noch mehr Refactoring-Projekte!

Ich möchte noch unseren Studien- und Diplomarbeitern gratulieren (etwas verspätet zwar.. Feiertagsstress), die ihre Arbeit am IFS abgeschlossen haben. Folgendes ist dabei entstanden:

Etwas verzögert wegen personellen Problemen ist das PHP-Refactoring Plug-in für PDT, erste Ergebnisse sind aber schon sehr vielversprechend.

Auch nicht zu vergessen ist das COAST Project, welches Peter Sommerlad’s C++-Applikationsframework wieder auf die Beine bringt.

Sehr erfreulich ist natürlich auch, dass die meisten Teams ihre Arbeit in Form einer Bachelorarbeit fortführen. Ich freue mich schon auf die Zusammenarbeit!

4 comments »