Intendierte Lernergebnisse
After completing this course students will be able to: Explain state-of-the-art techniques and tools in software re-engineering; Explain and apply best practices to analyze and understand existing software systems; Use heuristics and tools to detect shortcomings in the design and implementation of software systems; Apply tests and re-factoring techniques to systematically remove these shortcomings;
Lehrmethodik
Classes, lab work (two practical assignments to be solved in teams of two students), presentation and discussion of the lab work.
Inhalt/e
Software evolution refers to the process of developing software by repeatedly updating it. Software Reengineering is one of the key tasks to evolve software systems by restructuring a software system to fix real or perceived problems in preparation for further development and extension of the system. This course is on theories and best practices of re-engineering and the application of them in the re-engineering lab. The following topics will be addressed in this course:Reverse EngineeringSoftware visualizationCode smells and evolutionOO design principles and violationsCode smell detectionRefactoringSoftware testing for re-engineering
Literatur
Object-Oriented Reengineering Patterns, Serge Demeyer, Stephane Ducasse, and Oscar Nierstrasz, 2008 Object-Oriented Metrics in Practice, Michele Lanza and Radu Marinescu, Springer, 2006 Refactoring for Software Design Smells, Girish Suryanarayana, Ganesh Samarthyam, Tushar Shara, Morgan Kaufmann, 2015.Working Effectively with Legacy Code, Michael Feathers, Prentice Hall, 2004 Additional Literature: Code as a Crime Scene, Adam Tornhill, The Pragmatic Programmers, 2015.Refactoring: Improving the Design of Existing Code, Martin Fowler. Addison-Wesley Professional, 2nd edition, 2018. Refactoring to Patterns, Joshya Kerievsky, Addison-Wesley Professional, 2004. Agile Software Development, Principles, Patterns, and Practices, Robert C. Martin, Prentice Hall, 2002.