Reengineering of old systems to an object-oriented architecture
OOPSLA '91 Conference proceedings on Object-oriented programming systems, languages, and applications
Creating object-oriented designs from legacy FORTRAN code
Journal of Systems and Software
Object-oriented software construction (2nd ed.)
Object-oriented software construction (2nd ed.)
Refactoring: improving the design of existing code
Refactoring: improving the design of existing code
Dynamically Discovering Likely Program Invariants to Support Program Evolution
IEEE Transactions on Software Engineering - Special issue on 1999 international conference on software engineering
Reverse Engineering and Design Recovery: A Taxonomy
IEEE Software
Planning the Reengineering of Legacy Systems
IEEE Software
COMPSAC '02 Proceedings of the 26th International Computer Software and Applications Conference on Prolonging Software Life: Development and Redevelopment
CIL: Intermediate Language and Tools for Analysis and Transformation of C Programs
CC '02 Proceedings of the 11th International Conference on Compiler Construction
Strategies for Migration from C to Java
CSMR '01 Proceedings of the Fifth European Conference on Software Maintenance and Reengineering
Evidence Driven Object Identification in Procedural Code
STEP '99 Proceedings of the Software Technology and Engineering Practice
Reengineering procedural into object-oriented systems
WCRE '95 Proceedings of the Second Working Conference on Reverse Engineering
Recovering abstract data types and object instances from a conventional procedural language
WCRE '95 Proceedings of the Second Working Conference on Reverse Engineering
Finding objects in procedural programs: an alternative approach
WCRE '95 Proceedings of the Second Working Conference on Reverse Engineering
Reengineering Object-Oriented Code
ICSM '98 Proceedings of the International Conference on Software Maintenance
Automated Cobol to Java Recycling
CSMR '03 Proceedings of the Seventh European Conference on Software Maintenance and Reengineering
ICSR '08 Proceedings of the 10th international conference on Software Reuse: High Confidence Software Reuse in Large Systems
Finding Loop Invariants for Programs over Arrays Using a Theorem Prover
FASE '09 Proceedings of the 12th International Conference on Fundamental Approaches to Software Engineering: Held as Part of the Joint European Conferences on Theory and Practice of Software, ETAPS 2009
Mining API mapping for language migration
Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering - Volume 1
ICSM '10 Proceedings of the 2010 IEEE International Conference on Software Maintenance
CSMR '11 Proceedings of the 2011 15th European Conference on Software Maintenance and Reengineering
Proceedings of the 33rd International Conference on Software Engineering
An executable formal semantics of C with applications
POPL '12 Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Experimental assessment of software metrics using automated refactoring
Proceedings of the ACM-IEEE international symposium on Empirical software engineering and measurement
C to O-O Translation: Beyond the Easy Stuff
WCRE '12 Proceedings of the 2012 19th Working Conference on Reverse Engineering
Hi-index | 0.00 |
Even when implemented in a purely procedural programming language, properly designed programs possess elements of good design that are expressible through object-oriented constructs and concepts. For example, placing structured types and the procedures operating on them together in the same module achieves a weak form of encapsulation that reduces inter-module coupling. This paper presents a novel technique, and a supporting tool AutoOO, that extracts such implicit design elements from C applications and uses them to build reengineered object-oriented programs. The technique is completely automatic: users only provide a source C program, and the tool produces an object-oriented application written in Eiffel with the same input/output behavior as the source. An extensive evaluation on 10 open-source programs (including the editor vim and the math library libgsl) demonstrates that our technique works on applications of significant size and builds reengineered programs exhibiting elements of good object-oriented design, such as low coupling and high cohesion of classes, and proper encapsulation. The reengineered programs also leverage advanced features such as inheritance, contracts, and exceptions to achieve a better usability and a clearer design. The tool AutoOO is freely available for download.