# Code aufräumen



## JanHH (11. Feb 2012)

Hallo,

kennt ihr ja sicher alle..

man hat ein komplexes Softwareprojekt, irgendwann wird dort eine komplexe Funktionalität intern umgebaut oder es findet sogar ein punktuelles Refactoring statt. Dabei kann es ja sehr leicht vorkommen, dass "Reste" der alten Implementierung übrig bleiben. Irgendwelche Funktionen, die man mal brauchte, die aber nun nicht mehr benutzt werden.

Ich finde es schwierg, das per Hand immer alles sauber aufzuräumen, zumal man häufig auch gar nicht mehr weiss, welche Funktionen wo überhaupt überall benötigt werden. Und nach einigen Jahren (weiter-)Entwicklungszeit hat man dann schön vollgemüllten Quellcode ;-).

Gibt es Tools oder Strategien, um da mal wieder klar Schiff zu machen? Programme die automatisch erkennen können, welche Funktionen nie jemals von irgendwo aufgerufen werden? Member-Variablen, die nie benötigt werden?

Gruß+Danke
Jan


----------



## pl4gu33 (11. Feb 2012)

Wenn du Eclipse benutzt:

in Eclipse kannst du mit STRG + ALT + H die history abrufen. Also auf die Methode klicken und dann STRG+ALT + H und dann siehst du wer diese Methode noch aufruft

und Membervariablen sind, wenn sie nicht mehr benötigt werden, durch Eclipse gekennzeichnet


----------



## André Uhres (11. Feb 2012)

JanHH hat gesagt.:


> Gibt es Tools oder Strategien, um da mal wieder klar Schiff zu machen? Programme die automatisch erkennen können, welche Funktionen nie jemals von irgendwo aufgerufen werden? Member-Variablen, die nie benötigt werden?



Eine gute IDE sollte Funktionen enthalten, mit denen man zumindest punktuell sicherstellen kann, ob eine Variable oder Methode noch irgendwo gebraucht wird, beziehungsweise mit denen man "sicher" löschen kann.

Gruß,
André


----------



## tfa (11. Feb 2012)

Schau dir den UCDetector an. Der ist etwas mächtiger als eine normale IDE:
UCDetector


----------



## Michael... (11. Feb 2012)

JanHH hat gesagt.:


> Programme die automatisch erkennen können, welche Funktionen nie jemals von irgendwo aufgerufen werden? Member-Variablen, die nie benötigt werden?


Achtung: Hier sollte man aber sicher ausschließen können, dass auf diese nicht via Reflection zugegriffen wird.


----------



## JanHH (12. Feb 2012)

Danke für die Antworten. Einige Funktionen werden aber z.B. auch von JSF-Seiten aufgerufen. Da hilft einem eine IDE auch nicht weiter.


----------



## maki (12. Feb 2012)

> Gibt es Tools oder Strategien, um da mal wieder klar Schiff zu machen?


Neben den bereits genannten Tools wie eine IDE die Refactoring unterstützt und UCDetector ist imho das wichtigste Tool deine autom. Tests, sowohl Unit- als auch Integrationstests, die sagen einem recht schnell ob man etwas kaputtgemacht hat.
Ohne autom. Tests wird es sehr schwierig und riskant IME... 
Solches (Micro-) Refactoring (also ohne die generelle Architektur zu ändern) sollte man ständig durchführen, sonst wird es schlicht nicht gemacht bzw. nicht oft genug und irgendwann nimmt das Chaos überhand. 

Wenn einige Methoden/Klassen aus JSF aufgerufen werden, sollte man sich diese getrennt vornehmen und schon mal im Backend die "einfacheren" Refactorings durchführen.

Softwareentwicklung hat m.E. viel Gärtnern zu tun, man muss ständig Wildwuchs zurückstutzen sonst wird es ein Dschungel, es reicht schlicht nicht dass es "nur" funktioniert.


----------



## Landei (12. Feb 2012)

Intellij IDEA zeigt recht zuverlässig an, wenn Methoden, Variablen oder Klassen nirgendwo verwendet werden.


----------



## JanHH (12. Feb 2012)

Automatische Tests gibts gar keine.. es handelt sich um einen relativ monolitischen Haufen Code, der sowohl ein Servlet als auch eine Swing-Anwendung als auch mittlerweile eine Android-App ist und im Laufe der letzten 10 Jahre ständig an allen möglichen Stellen umgebaut wurde ;-). Aber das mit UCDector sieht ja ganz vielversprechend aus, danke.

In der C++-Welt gibts ja komplexe und kostspielige Tools, die die Anwendung komplett analysieren und sowas dann rausfinden.. gibts doch bei java bestimmt auch?


----------



## tfa (12. Feb 2012)

> In der C++-Welt gibts ja komplexe und kostspielige Tools, die die Anwendung komplett analysieren und sowas dann rausfinden.. gibts doch bei java bestimmt auch?


Klar. Hier gibt's eine kleine Liste: List of tools for static code analysis - Wikipedia, the free encyclopedia
Findbugs finde ich z.B. sehr sinnvoll.


----------

