What should a course on SoftwareEvolution cover? ---- The CCSE initiative has recognized software evolution as a separate _knowledge area_. The second draft of this initiative recommends the following required topics for undergraduate software engineering students. All topics are marked as _essential_ except the ones categorized as just _desirable_ below: *Evolution Processes* * relationships between evolving entities * models of software evolution * cost models (Desirable) * planning (Desirable) *Evolution Activities* * Working with LegacySystems * ProgramComprehension and ReverseEngineering * System and Process ReEngineering * Impact Analysis * ProgramMigration (technical and business) * [[ProgramRefactoring][Refactoring]] * ProgramTransformation (Desirable) * Data Reverse Engineering (Desirable) CCSE also maintains a list of undergraduate software engineering courses -- you may find it interesting to see how software evolution fits in these programs. See http://sites.computer.org/ccse/SEprograms.html ---- *Existing courses of software evolution* * Serge Demeyer teaches a course on _[[http://www.lore.ua.ac.be/Teaching/SRe2LIC/][Software Reengineering]]_ at the University of Antwerp, Belgium. The course is based on the ook Object-oriented Reengineering Patterns and is driven by labs (where students experiment with tools on large code) and a project (where students have to prepare some open source project for future extension). * [[TomMens][Tom Mens]] teaches a course on _[[http://www.umh.ac.be/~genlog/cours/evolution.html][Software Evolution]]_ at the University of Mons-Hainaut, Belgium * Harald Gall teaches a course on _[[http://www.ifi.unizh.ch/swe/teaching/courses/evolution/][Software Maintenance and Evolution]]_ at the University of Zurich, Switzerland * [[JensJahnke][Jens Janhke]] is teaching a software evolution course covering * SoftwareProcess, configuration management, quality assessment, SoftwareArchitecture, ReEngineering (clustering, ReFactoring, migration to Corba). * http://www.csr.uvic.ca/~jens * Norman Schneidewind teaches * SW4581 Software Reliability and Metrics; http://web.nps.navy.mil/~nschneid/sw4581homepage.htm * IS3020 Software Design; http://web.nps.navy.mil/~nschneid/is3020/ * Both courses have some maintenance in them. * See http://web.nps.navy.mil/~nschneid/ * Carolyn Seaman is teaching a class on system maintenance: * http://research.umbc.edu/~cseaman/ifsm698/ifsm698.html * Topics: maintenance process, impact analysis, SoftwareTesting, configuration management, COTS, ProgramComprehension, ReverseEngineering, SoftwareReuse, ... * http://www.research.umbc.edu/~cseaman/ * [[RainerKoschke][Rainer Koschke]] is teaching a course on _[[http://www.informatik.uni-stuttgart.de/ifi/ps/Lehre/reengineering/index.html][Reengineering]]_: * Topics: process models, project management, intermediate representations, slicing, clone detection, remodularization, ObjectIdentification, ProgramTransformation, ReFactoring, etc. * [[PanosLinos][Panos Linos]] has set up CSSE 473 at Butler University on _Software Maintenance and Evolution_. * Includes maintenance on the Emacs source code. * Software Maintenance practices and process models (ISO/IEC 12207, IEEE 1219) * Software maintenance methodologies, tools and environments * Software evolution strategies * Software maintenance management, planning and economics * Migration of legacy systems to the object-oriented paradigm * Re-engineering, reverse engineering, restructirng, re-factoring practices * Program comprehension * Component-based software maintenance practices * PROJECT: Students undertake a realistic project that is usually "in-trouble". They assess its current quality and business value and based on that they propose a specific evolution strategy and then they create and follow a modernization plan. * During the course, we also try to use various maintenance tools, commercial and/or academic. * Norman Wilde offers a graduate software engineering project in which students have to modify the existing [[http://www.cs.uwf.edu/~recon/][RECON3]] system aimed at _software reconnaissance_. * Emphasis on using a _defined process_, in particular [[http://www.cs.uwf.edu/~wilde/gump/][GUMP++]]. * http://www.cs.uwf.edu/~wilde/CEN6015/ * Harry Sneed is teaching a 25 hour instruction course on software maintenance and reengineering, covering * Processes, change management, impact analysis, post documentation / reverse engineering, C/C++/Java component reengineering, Cobol, PL/I wrapping. * Emphasis on business systems * Exercises in program change, analysis, reengineering, and post documentation * University of Regensburg -- no on line info yet. * Mira Kajko-Mattsson at the IT University in Sweden is teaching a course on _[[http://www.dsv.su.se/~mira/Education/Software_Evolution_and_Mainten/software_evolution_and_mainten.html][Software Evolution and Maintenance]]_: * Topics: maintenance categories, support processes, problem management, predelivery maintenance, Y2K, maintainers' education and training, preventive maintenance, maintenance organisations, documentation, and maintenance testing. * More info: http://www.dsv.su.se/~mira/ * Scott Tilley / UCR teaches CS 245, "Software Evolution", covering * principles, tools, and techniques for disciplined software evolution; migration strategies; change patterns; SoftwareMaintenance; legacy system ReEngineering; ReverseEngineering for ProgramUnderstanding; middleware and wrapping; static and dynamic source code analysis; SoftwareVisualization; ProgramTransformation tools. * VaclavRajlich teaches software evolution in two courses: * In a regular software engineering course, the topic is included and covered by the last phase of a three-part project. * The dedicated software evolution course [[http://www.cs.wayne.edu/~csc711a/csc711/][csc711]] incluces a project and a range of advanced papers, covering such topics as reengineering to object oriented systems, the staged life cycle model, hidden assumptions, ripple effects, and feature location. * LeonMoonen and ArieVanDeursen are teaching a master's course on _Software Architecture Reconstruction and Modelling_ at Delft University of Technology, The Netherlands. (Feel free to add your own course -- see OneMinuteWiki) ---- *See also* * The working session _Experiences in Teaching Software Evolution and Program Comprehension_ taking place at IWPC 2003, Portland, organized by Jean-Marie Favre, Juergen Rilling, Rainer Koschke, and ArieVanDeursen. * The panel _[[http://www.cwi.nl/~arie/papers/teaching-panel.pdf][How should software evolution and maintenance be taught]]_ at ICSM 2002 * _[[http://csdl.computer.org/comp/proceedings/cseet/1997/7886/00/78860053abs.htm][Teaching software engineering principles using maintenance-based projects]]_ by K.R. Pierce, Proceedings 10th Conference on Software Engineering Education and Training ([[CSEET]] '97) * _[[http://csdl.computer.org/comp/proceedings/cseet/2001/1059/00/10590127abs.htm][Including Practical Software Evolution in Software Engineering Education]]_ by Margot Postema, Jan Miller, Martin Dick. Proceedings 14th Conference on Software Engineering Education and Training ([[CSEET]] '01) * M. Gehrke, H. Giese, U. Nickel, J. Niere, M. Tichy, J. Wadsack and A. Zuendorf: _[[http://www.uni-paderborn.de/cs/ag-schaefer/Personen/Ehemalige/Zuendorf/Edu_ICSE2002.pdf][Reporting about Industrial Strength Software Engineering Courses for Undergraduates]]_, ICSE 2002. ---- CategoryTeaching | CategorySoftwareEvolution