Thesis topic "Co-evolution for a development stack"

(C) 2015, Software Languages Team, University of Koblenz, Ralf Lämmel


Co-evolution in software development describes the situation in which one software artifact or component in a system needs to co-change in response to changes applied to another artifact or component. Here are examples of the two (or more) artifacts or components that may engage in co-evolution:

  • Client versus server in a distributed system (e.g., a web application)
  • Object model versus database (e.g., in a system with object-relational mapping)
  • Model versus view (in a system with a loosely coupled binding between model and view)
  • IOC configuration versus underlying POJOs (e.g., when using frameworks such as Spring IOC)
  • Scripts versus components referenced by scripts (e.g., when using batch processing)


  • Find evidence of co-evolution challenges in existing projects
  • Classify and characterize these challenges more precisely
  • Suggest transformations for automated co-evolution
  • Possibly (selectively) formalize and/or implement such transformations


One option is to carry out this research as a case study by analyzing either:

  • one or more open-source projects, or
  • a closed source project, subject to some limited non-disclosure, where necessary.

The actual methodology would (optionally) include elements such as:

  • Code analysis in the realm of "mining software repositories" (analysis of commit history)
  • Dependency analysis (traceability recovery) between software artifacts
  • Interviews with developers to identify some scenarios of co-evolution
  • Systematic study of technology documentation and samples

Further reading

Research conferences such as MSR, ICSM, SLE, CSMR, WCRE, ICPC, SANER on DBLP.