Project members Results Downloads Collaboration
Refactoring Erlang Programs
Introduction
Refactoring is about improving the design of existing program code, that is, making changes to the source code which preserve the meaning of the program in order to improve non-functional characteristics of the code like readability or maintainability. Refactoring can be applied easily in projects built on the object-oriented paradigm, and software tools already exist to support safe refactoring. Functional languages, however, still lack proper tool support, only prototypes are available for pure functional languages like HaRe for Haskell.
The goal of this project is to develop a refactoring tool for the Erlang functional programming language. We are investigating implementation possibilities of refactoring using our experiences from previous research, and building a refactoring framework that can be integrated with any development environment.
The project is run by the Department of Programming Languages and Compilers at the Faculty of Informatics, Eötvös Loránd University in Budapest, Hungary.
The project is supported by:
- Ericsson Hungary
- National Technology Program TECH_08_A2-SZOMIN08
- KMOP-1.1.2-08/1-2008-0002
Project members
| Horváth, Zoltán |
| Professor, supervisor |
| Kozsik, Tamás |
| Associate professor |
| Tejfel, Máté |
| Assistant professor |
| Király, Roland |
| Assistant lecturer |
| Kitlei, Róbert |
| Assistant lecturer |
| Lövei, László |
| Assistant researcher |
| Bozó, István |
| PhD student |
| Horpácsi, Dániel |
| PhD student |
| Kőszegi, Judit |
| PhD student |
| Tóth, Melinda |
| PhD student |
MSc students
Czini, Gábor; Erdődi, Atilla; Hajós, Lilla; Láng, László Károly; Horváth, Gábor; Nagy, Tamás; Oláh, Gábor; Somhegyi, Benjámin
BSc students
Karácsonyi, Mátyás; Zempléni, Csaba Imre
Project results
Software
Prototype refactoring software is available for download under the conditions of Erlang Public License. The latest release of the refactoring tool supports 24 refactoring steps:
- Eliminate function call
- Eliminate import
- Eliminate macro substitution
- Eliminate variable
- Expand fun expression
- Generalize function definition
- Introduce function
- Introduce import
- Introduce record
- Introduce variable
- Move function
- Move macro
- Move record
- Rename function
- Rename header
- Rename macro
- Rename module
- Rename record
- Rename record field
- Rename variable
- Reorder function parameters
- Transform list comprehension
- Tuple function parameters
- Upgrade regexp interface
Publications
- 2010
- bibTóth, M., Bozó, I., Horváth, Z., Lövei, L., Tejfel, M., and Kozsik, T.: Impact analysis of Erlang programs using behaviour dependency graphs
In Central European Functional Programming Summer School, Lecture Notes in Computer Science, 2010 - bibTóth, M. and Bozó, I.: Building dependency graph for slicing Erlang programs
In 7th Conference of PhD Students in Computer Science, CSCS 2010, 2010 - bibTóth, M., Bozó, I., and Horváth, Z.: Applying the Query Language to support program comprehension
In International Scientific Conference on Computer Science and Engineering, CSE 2010, 2010 - bibTóth, M., Bozó, I., Horváth, Z., and Tejfel, M.: nth order flow analysis for Erlang
In 8th Joint Conference on Mathematics and Computer Science, MACS 2010, 2010 - bibBozó, I., Tóth, M., and Horváth, Z.: Slicing Erlang programs
8th International Conference on Applied Informatics, ICAI 2010, 2010 - bibLövei, L., Hajós, L., and Tóth, M.: Erlang Semantic Query Language
8th International Conference on Applied Informatics, ICAI 2010, 2010 - bibKirály, R. and Kitlei, R.: Implementing structural complexity metrics in Erlang
8th International Conference on Applied Informatics, ICAI 2010, 2010 - bibKirály, R. and Kitlei, R.: Implementing structural complexity metrics for Erlang
Poster on the 8th International Conference on Applied Informatics, ICAI 2010, 2010 - bibHorpácsi, D.: Testing refactoring tools by generating random Erlang modules
Master's thesis, ELTE, Budapest, Hungary, 2010 - bibKõszegi, J.: Tracing Erlang Processes
Master's thesis, ELTE, Budapest, Hungary, 2010 - bibDeckers, E.: Verifying properties of RefactorErl-transformations using QuickCheck
Master's thesis, Radboud University Nijmegen, The Netherlands and ELTE, Budapest, Hungary, 2010, in progress - bibJumpertz, E.: Using QuickCheck and Semantic Analysis to Verify Correctness of Erlang Refactoring Transformations
Master's thesis, Radboud University Nijmegen, The Netherlands and ELTE, Budapest, Hungary, 2010, in progress - bibDrienyovszky, D.: Quickchecking RefactorErl
ELTE, Budapest, Hungary, 2010 - bibCzini, G.: Esettanulmány alapú tesztelõ a RefactorErl refaktoráló eszközhöz
ELTE, Budapest, Hungary, 2010 - bibHorpácsi, D. and Leskó, D.: Véletlenszerû programok nyelvtan alapú generálása QuickCheck használatával
Scientific Students' Associations Conference, ELTE, Budapest, Hungary, 2010 - bibHorváth, Z.: Software engineering education in cooperation with industrial partners
Model Based System Development Seminar, Nijmegen, The Netherlands, 2010 - 2009
- bibLövei, L., Horváth, Z., Kozsik, T., Tóth, M., and Bozó, I.: Erlang programok refaktorálása
Poster for the Faculty of Informatics' Open Day, 2009 - bibHoch, C.: Testing and verifying Erlang programs: testing two refactoring tools with property based differential testing
Master's thesis, ELTE, Budapest, Hungary, 2009 - bibKitlei, R.: Reconstructing syntax in RefactorErl
PhD workshop, Central Europen Functional Programming Summer School, May 2009 - bibLövei, L., Tóth, M., and Horváth, Z.: Refactoring and Analysis with RefactorErl
Property-based Testing Tutorial Workshop 2009, Stockholm, 2009 - bibBozó, I. and Tóth, M.: Restructuring Erlang programs using function related refactorings
In Proceedings of 11th Symposium on Programming Languages and Software Tools and 7th Nordic Workshop on Model Driven Software Engineering, pages 162-176, Tampere, Finland, August 2009 - bibKitlei, R., Lövei, L., Nagy, T., Horváth, Z., and Kozsik, T.: Layout Preserving Parser for Refactoring in Erlang
Acta Electrotechnica et Informatica, volume 9, no. 3, pages 54–63, July 2009 - bibHorváth, Z., Lövei, L., Kozsik, T., Kitlei, R., Víg, A., Nagy, T., Tóth, M., and Király, R.: Modeling semantic knowledge in Erlang for refactoring
In Knowledge Engineering: Principles and Techniques, Proceedings of the International Conference on Knowledge Engineering, Principles and Techniques, KEPT 2009, volume 54(2009) Sp. Issue, Studia Universitatis Babeş-Bolyai, Series Informatica, pages 7–16, Cluj-Napoca, Romania, Jul 2009 - bibLövei, L.: Automated Module Interface Upgrade
In Proceedings of the 2009 ACM SIGPLAN Erlang Workshop, pages 11–21, Edinburgh, Scotland, Sep 2009 - bibBozó, I. and Tóth, M.: Function related refactorings in a functional programming language: Extract function, Inline function and Generalize function definition
National Scientific Students' Associations Conference, Debrecen, Hungary, received first prize, Apr 2009 - bibLövei, L., Tóth, M., Horváth, Z., Kozsik, T., Király, R., Kitlei, R., Bozó, I., Hoch, C., and Horpácsi, D.: Reengineering legacy Erlang code by refactoring
PhD workshop, Central Europen Functional Programming Summer School, May 2009 - bibLövei, L.: Refactoring and Analysis with RefactorErl
Talk at Erlang Factory London, June 2009 - bibHorváth, Z., Kozsik, T., and Lövei, L.: Software Engineering Education in Cooperation with Industrial Partners
Submitted to Teaching Mathematics and Computer Science, Debrecen, Hungary, ISSN 1589-7389, 2009 - bibHorváth, Z., Kozsik, T., and Lövei, L.: Mobility Supported Software Engineering Education in Cooperation with Industrial Partners
In 1st Computer Science Mobility Workshop, Klagenfurt, Austria, Apr 2009 - bibHorváth, Z., Kozsik, T., and Lövei, L.: Szoftverrendszerek fejlesztésének oktatása projektfeladat keretén belül (Hungarian)
In INFODIDACT 2009 Informatika Szakmódszertani Konferencia, Szombathely, Hungary, Apr 2009 - bibLövei, L., Horváth, Z., Kozsik, T., Tóth, M., and Bozó, I.: Refactoring in Erlang, a Dynamic Functional Language
Poster on ELTE Innovation Day, Feb 2009 - bibHoch, C.: Testing and verifying Erlang programs: testing two refactoring tools with property based differential testing
Master's thesis, ELTE, Budapest, Hungary, 2009 - bibHorváth, K.: Refactoring – Kód újratervezés; Szoftverelemek csoportosítása funkcionális nyelvek esetében
Master's thesis, ELTE, Budapest, Hungary, June 2009 - bibNagy, T.: Transformations related to changing the module structure of Erlang programs
Bachelor thesis, ELTE, Budapest, Hungary, June 2009 - bibKrizsai, P.: Function clustering
Bachelor thesis, ELTE, Budapest, Hungary, June 2009 - 2008
- bibKozsik, T., Csörnyei, Z., Horváth, Z., Király, R., Kitlei, R., Lövei, L., Nagy, T., Tóth, M., and Víg, A.: Use cases for refactoring in Erlang
In Central European Functional Programming School, volume 5161/2008, Lecture Notes in Computer Science, pages 250–285, 2008
abstract - bibLövei, L., Hoch, C., Köllő, H., Nagy, T., Nagyné-Víg, A., Horpácsi, D., Kitlei, R., and Király, R.: Refactoring Module Structure
In Proceedings of the 7th ACM SIGPLAN workshop on Erlang, pages 83–89, Victoria, British Columbia, Canada, Sep 2008
abstract - bibKitlei, R., Lövei, L., Tóth, M., Horváth, Z., Kozsik, T., Király, R., Bozó, I., Hoch, C., and Horpácsi, D.: Automated syntax manipulation in RefactorErl
In 14th International Erlang/OTP User Conference, Stockholm, Sweden, Nov 2008 - bibNagy, T., Horváth, Z., Lövei, L., and Víg, A.: Call graph and data flow analysis of a dynamic functional language
In Proceedings of the 6th Conference of PhD Students in Computer Science, CSCS 2008, pages 42–43, Szeged, Hungary, July 2008
abstract - bibHorváth, Z., Lövei, L., Kozsik, T., Kitlei, R., Víg, A., Nagy, T., Tóth, M., and Király, R.: Building a refactoring tool for Erlang
In Workshop on Advanced Software Development Tools and Techniques, WASDETT 2008, Paphos, Cyprus, Jul 2008
abstract - bibKitlei, R., Lövei, L., Nagy, T., and Horváth, Z.: Layout preserving, automatically generated parser for Erlang refactoring
In Proceedings of the International Scientific Conference on Computer Science and Engineering, CSE 2008 (to appear), Stará Lesná, Slovakia, Sep 2008
abstract - bibBozó, I.: Erlang Refactoring: Inline Function
Bachelor thesis, ELTE, Budapest, Hungary, 2008
thesis - bibHorpácsi, D.: Erlang module refactoring – moving functions between modules
Bachelor thesis (in Hungarian), ELTE, Budapest, Hungary, 2008
thesis - bibTóth, M.: Erlang Refactoring: Extract Function
Bachelor thesis, ELTE, Budapest, Hungary, 2008
thesis - bibHoch, C.: Using QuickCheck to test software
National Scientific Students' Associations Conference, ELTE, Budapest, Hungary, 2008
thesis - 2007
- bibLövei, L., Horváth, Z., Kozsik, T., and Király, R.: Introducing Records by Refactoring
In Proceedings of the 6th ACM SIGPLAN Erlang Workshop, pages 18–28, Freiburg, Germany, October 2007
abstract - bibKitlei, R., Lövei, L., Nagy, T., Víg, A., Horváth, Z., and Csörnyei, Z.: Generic syntactic analyser: ParsErl
In Proceedings of the 13th International Erlang/OTP User Conference, EUC 2007, Stockholm, Sweden, November 2007
paper - bibLövei, L., Horváth, Z., Kozsik, T., Víg, A., and Nagy, T.: Refactoring Erlang Programs
Periodica Polytechnica – Electrical Engineering, volume 51, no. 3, pages 75–84, 2007
abstract, slides - bibLövei, L., Horváth, Z., Kozsik, T., Király, R., Víg, A., and Nagy, T.: Refactoring in Erlang, a Dynamic Functional Language
In Proceedings of the 1st Workshop on Refactoring Tools, pages 45–46, Berlin, Germany, July 2007
extended abstract, poster - bibLövei, L., Horváth, Z., Kozsik, T., and Király, R.: Static rules for variable scoping in Erlang
In Proceedings of the 7th International Conference on Applied Informatics, ICAI 2007, pages 137–146, Eger, Hungary, January 2007
abstract, slides - bibKitlei, R., Dévai, G., Balogh, Á., and Csörnyei, Z.: Comparative analysis of refactoring and code optimization
In Proceedings of the 7th International Conference on Applied Informatics, ICAI 2007, pages 257–264, Eger, Hungary, January 2007
abstract - bibLövei, L., Horváth, Z., Kozsik, T., and Király, R.: Introducing Records by Refactoring in Erlang Programs
In Proceedings of the 10th Symposium on Programming Languages and Software Tools, SPLST 2007 (to appear), Dobogókő, Hungary, June 2007
paper - bibHorváth, Z., Lövei, L., Csörnyei, Z., Kozsik, T., Víg, A., Nagy, T., Király, R., Tóth, M., and Kitlei, R.: Refactoring Erlang Programs
In 2nd Central European Functional Programming School, CEFP 2007, Cluj-Napoca, Romania, June 2007
lecture slides - bibNagy, T. and Víg, A.: Erlang refactor tool
Master's thesis, ELTE, Budapest, Hungary, 2007
thesis - bibLövei, L.: Introducing records by refactoring in Erlang programs
Poster at High Speed Networking Workshop, 2007
poster - bibNagy, T. and Víg, A.: Erlang refactoring with relational database
Presentation for the Erlang community in the office of Erlang Training and Consulting Ltd., London, UK, February 2007
slides - 2006
- bibLi, H., Thompson, S., Lövei, L., Horváth, Z., Kozsik, T., Víg, A., and Nagy, T.: Refactoring Erlang Programs
In Proceedings of the 12th International Erlang/OTP User Conference, EUC 2006, November 2006
paper - bibNagy, T. and Víg, A.: Storing Erlang source code in database
Bachelor's thesis, ELTE, Budapest, Hungary, 2006
thesis - bibNagy, T. and Víg, A.: An Erlang refactor step: tuple function arguments
Scientific Students' Associations Conference, ELTE, Budapest, Hungary, December 2006
thesis, slides - bibLövei, L., Horváth, Z., Kozsik, T., Víg, A., and Nagy, T.: Refactoring Erlang Programs
Conference poster at High Speed Networking Workshop, May 2006
poster - bibLövei, L., Horváth, Z., Kozsik, T., Víg, A., and Nagy, T.: Erlang programok refaktorálása
Presentation at IKKK conference, November 2006
slides - bibNagy, T. and Víg, A.: Erlang refactoring with relational database
Presentation in University of Kent Functional Program Group Meeting, Canterbury, UK, December 2006
slides
Collaboration
We have a collaboration on this topic with the University of Kent, where the refactoring group is led by Simon Thompson. More information on their work can be found on the FORSE refactoring page.