Diploma Thesis Framework for Automated Code Smell Correction in a Brownveld Context
Total Page:16
File Type:pdf, Size:1020Kb
Otto-von-Guericke-Universität Magdeburg Fakultät für Informatik Institut für Technische und Betriebliche Informationssysteme (ITI) Diploma Thesis Framework for Automated Code Smell Correction in a BrownVeld Context Author: Christian Baumann Supervisor: P.D.K T , Arbeitsgruppe Wirtschaftsinformatik, Otto-von- Guericke-Universität Magdeburg Tutors: D .I .S S , Arbeitsgruppe Datenbanken, Otto-von- Guericke-Universität Magdeburg D .W.I .M A , Eudemonia Solutions AG D.I .S H , Eudemonia Solutions AG Declaration of Originality in German Eigenständigkeitserklärung Baumann, Christian Matrikelnummer: 174443 Hiermit erkläre ich, dass ich die vorliegende Arbeit bzw. Leistung eigenständig, ohne fremde Hilfe und nur unter Verwendung der angegebenen Hilfsmittel angefertigt habe. Alle sinngemäß und wörtlich übernommenen Textstellen aus der Literatur bzw. dem Internet habe ich als solche kenntlich gemacht. Mir ist bekannt, dass im Falle einer Täuschung die Abschlussarbeit mit „nicht bestanden“ bewertet wird. Magdeburg, den 16. November 2012 Unterschrift III Zusammenfassung Das Entwickeln von Quellcode über einen langen Zeithorizont hinweg führt erfahrungsgemäß zu einem Verfall der Qualität von Quelltexten. Die Gründe hierfür sind vielfältig. Mangel- nde Abstraktion der Software behindern die Wiederverwendung von Komponenten in objekt- orientierten Sprachen, Heterogenität innerhalb des Erfahrungsniveaus der implementierenden Entwicklerinnen und Entwickler, und nicht zuletzt Zeitdruck behindern eine schnelle Umset- zung der geforderten SpeziVkation. Die Behebung dieser Schwachstellen in Quelltexten ist eine Aufgabe des Softwaredesigns, so alt wie die Softwareentwicklung selbst. Folglich wurden einige Ansätze präsentiert, wie En- twicklung derart durchgeführt werden kann, dass zum einen möglichst wenig Nachbearbeitung notwendig ist und zum anderen Schwachstellen früh erkannt und behoben werden. So wurden vielfältige Lösungsansätze präsentiert automatisch Probleme aufzuspüren und zu erkennen, die allerdings zumeist den logisch konsequenten Schritt der Verbesserung der problematischen Abschnitte nicht betrachten. Vielmehr entwickelten sich zwei separate Forschungsfelder, zum einen die Detektion und zum anderen die Korrektur von fehleranfälligen Quelltextfragmenten. In dieser Diplomarbeit möchten wir die beiden Felder zusammenbringen und eroieren, wie dies konkret in einer prototypischen Implementierung eines Tools umgesetzt werden kann. Durch die konsequente Wiedervewendung bereits existierender Ansätze der Detektion und Korrektur sogenannter Code Smells und deren Verschmelzung, soll ein holistisches Framework, S , präsentiert werden, das kontinuierliche Codeverbesserung unterstützen soll. Dazu präsentieren wir in einer Literaturrecherche zunächst den aktuellen Stand der Forschung auf den Gebieten der Detektion und Korrektur von Code Smells und leiten hieraus die Ar- gumentation für die Implementierung unseres Tools ab. Wir präsentieren Voraussetzungen und getroUene Entscheidungen bei der Umsetzung und geben Beispiele für Arbeitsabläufe als V schlecht betrachteten Code zu verbessern. Weiter vergleichen wir unseren Ansatz mit beste- henden Programmen, weisen auf Ähnlichkeiten und DiUerenzen hin und ziehen abschließend ein Fazit über die vorgelegte Arbeit. VI Abstract Developing code over a long period of time, in a heterogeneous team or under time pressure can lead to a lingering decay in readability, maintainability and thus reusability of software source code. In the past decades several approaches have been developed that tackle automatic detection of such code Waws, yet neglecting the automated correction as an essential and inte- grated step in the refactoring workWow. Developers rather had to refactor identiVed code Waws manually which is often a time-consuming and, consequently, cost-intensive task that doomed refactoring to be marginalized in production cycles. In this diploma thesis we argue that detection and correction of code Waws should be treated as inseparable tasks to annihilate parts of code that “do not feel right”. By reusing previ- ous research conclusions made by the detection community and amalgamating it with recent achievements in the Veld of automated correction, we are able to present a holistic framework— S —that supports the continuous improvement of code. The contribution of this diploma thesis is as follows: First, we give an overview about the current state of the art in detection and correction and argumentatively deduce and discuss the need for a framework that assists developers in both steps, as both research Velds are investigated as separate topics up till now. Based on our argumentation, we will describe how a holistic framework can be designed and will describe our choices in detail by elaborating on the concrete implementation and techniques used for identifying and correcting code Waws. By giving workWow examples of how to extend our framework to detect and correct poor code, we show the practical usability and extendability of our tool. We Vnally compare our framework to competing approaches, point out diUerences and similarities and draw an overall conclusion of the presented work. VII Acknowledgements This diploma thesis was developed during my time as a student employee in the Eudemonia Solutions AG. It is part of my studies at the Otto-von-Guericke Universität Magdeburg. I would like to thank the Eudemonia Solutions AG for giving me the chance to work on this topic and for supporting me throughout my studies. In person, I would like to thank Dipl.- Wirtsch.-Inf. Mario Amelung and Dipl.-Inf. Wolfram Fenske for pointing me to this research Veld and would also like to thank Dr.-Ing. Sebastian Herden for supporting me with additional ideas and assisting me in my research process. I would like to thank Prof. Dr. Klaus Turowski for further substantiating the Veld of study and acting as my supervisor. Special thanks go to Dipl.-Inform. Sandro Schulze who assisted and supported me through- out my study and provided me with additional insights on the research topic. I would also like to thank Prof. Yann-Gaël Guéhéneuc and Dr. Max Schäfer for answering my questions via e-mail correspondence. Finally, I would like to thank my family for supporting me throughout my time at the uni- versity and for believing in me. IX Contents Declaration of Originality in German III ZusammenfassungV Abstract VII Table of Contents XI Preface to the Presented Work XXI 1. Continous Software Improvement as a Key to Reliable Software1 1.1. Combining Two Research Fields as a Challenge.................3 1.1.1. Detecting Flawed Code Automatically..................4 1.1.2. Correcting Defective Pieces of Code...................4 1.2. Motivation to Investigate Code Smells......................5 1.3. Contribution to Current Research.........................6 1.4. Structure of the Presented Work..........................7 2. A Thorough Literature Review9 2.1. Arising Research Questions............................9 2.2. A Review Protocol for Repeatable Results.................... 10 2.3. Results of the Literature Review.......................... 11 2.4. Discussion..................................... 15 XI 3. Detecting Flawed Code 17 3.1. Introduction.................................... 17 3.2. Clean Code..................................... 18 3.3. Code Smells.................................... 19 3.3.1. Connection to Metrics.......................... 20 3.4. Refactoring..................................... 21 3.4.1. An Example Refactoring......................... 21 3.5. DECOR....................................... 25 3.5.1. Description Analysis........................... 26 3.5.2. SpeciVcation................................ 26 3.5.3. Processing................................. 27 3.5.4. Detection................................. 27 3.6. A Running Example................................ 29 3.7. Discussion..................................... 37 4. Correcting Flawed Code 39 4.1. Introduction.................................... 39 4.2. Reusing an Extensible Java Compiler for Refactoring.............. 40 4.3. The JastAdd System................................ 41 4.3.1. Compilers Are Evolving Programs.................... 42 4.3.2. JastAdd Refactoring Tools........................ 42 4.3.3. Microrefactorings............................. 44 4.4. A Running Example................................ 47 4.5. Discussion..................................... 51 5. Framework 53 5.1. Introduction.................................... 53 5.2. Technical Criteria................................. 54 5.2.1. Program Database............................. 54 5.2.2. Accuracy.................................. 56 5.2.3. Speed.................................... 56 XII 5.2.4. Integrated with Tools........................... 57 5.3. Layout of the Proposed Framework........................ 57 5.3.1. Initially Detecting Code Smells...................... 59 5.3.2. BeneVts of an Intermediate Smell Exchange Format.......... 60 5.3.3. Consequent Elimination of Smells.................... 63 5.4. Discussion..................................... 65 6. S in Action 67 6.1. Overview about S ............................. 67 6.2. Detecting Smells in Code............................. 68 6.3. Implicit Exchange Generation........................... 69 6.4. Correcting Smells by Refactoring......................... 70 7. Related Tools 73 7.1. Detecting Tools................................... 73 7.2. Correcting Tools.................................. 74 7.3. Combined Tools.................................