Course "Software Language Engineering" WS 2015/16

Target group

This course can be taken by BSc and MSc students in Computer Science, Computer Vision, Education, and Web Science. Please check examination regulations for your particular study program. Please ask the lecturer, if you want to make sure that this course can be counted towards your curriculum.

The course is targeted at MSc students.
The level may be doable for sufficiently advanced and committed BSc students.
Much of the student work is about project work; there is no written or oral exam.

The course assumes some background along these areas of computer science:

  • Programming: You must fluent in 1+ programming language.
  • Software engineering: You should be aware of basics of software design and testing.
  • Theoretical computer science: It would be of great help, if you had an introduction to this area.
  • Programming language theory: It would be of great help, if you had an introduction to this area.

Times and places

  • Tuesdays, 6:00pm - 7:30pm, K 208
  • Thursdays, 10:15am - 11:45am, E 428
  • Note! We do not use a strict "lectures versus lab" scheme.
  • Note! We may cancel some slots to make time for projects and consultations.

Team

  • Lecture & Lab: Prof. Ralf Lämmel

Links

Summary

Software Language Engineering (SLE) is a particular view on Software Engineering (SE), which pays specific attention to the many software languages that are used in software development. These are not just programming languages, but also modeling languages, query and transformation languages, schema languages, and domain-specific languages. Thus, SLE is concerned with design, definition, implementation, testing, deployment, and evolution of software languages as well as language-based software components.

Course material

  • Software Language Engineering - an introduction: [.pdf] (slides)
  • Software Language Engineering - an annotated bibliography [.pdf] (notes)
  • Domain-specific languages - a primer: [.pdf] (notes)
  • Grammars and parsing: [.pdf] (slides)
  • Attribute grammars: [.pdf] (slides)
  • Term rewriting: [.pdf] (slides)
  • Assignment 3 discussion: [.pdf] (slides)
  • An ontology for SLE and SE: [.pdf] (slides)
  • Coupled and bidirectional transformation: [.pdf] (slides)
  • SLE meets Software Re-engineering: [.pdf] (slides by R. Koschke)
  • Syntax-directed editing

See previous editions for further inspiration:

Note: The current edition is significantly different from recent editions.

Assignments

Assignment 1: Survey

Each student surveys some fragment of the SLE literature (SLE conference) to extract classifiers of software transformation and software analysis. A software transformation is an executable mapping from one software language (e.g., Java) to another software language (e.g., Java bytecode or UML component diagrams) or even the same language. A software analysis is an executable mapping from one software language to some domain of properties, e.g., numbers for metrics or Booleans with file locations for code smells. We don't have a well-defined list of existing classifiers; you need to suggest classifiers. This is going to be the key insight for this assignment. Here are some examples, though. "Refactoring" or "Optimization" are classifiers for transformation. "Metrics computation" or "Smell detection" are classifiers for analysis. (Try to find somewhat specific classifiers. For instance, "Compiler optimization" or "DSL optimization" would be preferred over just "Optimization".) We agree on the student-to-fragment mapping in class. (One or more students will cover one year of the SLE conference.) The result of the per-student survey should be a slide deck (PDF) of this form:

  • Title slide (name of student, university, course, link to course site)
  • 1-2 slides per paper:
    • Paper title
    • 1-2 sentence summary of paper
    • 1 illustration
    • Lists transformation and analysis classifier candidates
  • Be ready to explain what you mean by the classifiers.
  • Try to link to Wikipedia or other resources to explain existing understanding of the classifiers.

Date published: 27 Oct 2015
Date for student presentations: 5 Nov 2015
The slide deck will be submitted to svn past the presentations (svn repo to be disclosed).

Assignment 2: Foundations and engineering

Sketch: On the grounds of the previously identified body of papers and classifiers (see assignment 1), each students identifies one well-defined aspect of foundations or engineering of software transformation and analysis for further study. The objective is to understand the aspect and present it to fellow students, thereby preparing for actual development (see assignment 3).

Assignment 3: Development project

Sketch: On the grounds of the previously identified aspect (see assignment 2), each student designs and implements a show-case transformation or analysis that uses state of the art foundations and engineering. The student must identify a scenario that is minimalistic in terms of the language for which analysis or transformation is considered, also in terms of the actual analysis or transformation itself. The result should serve as a "perfect showcase" of the previously identified aspect.

Exam rules

Neither a written nor an oral exam is exercised. Instead, the exam is directly based on a project including its presentations spread out over multiple assignments (in German: "Hausarbeit mit Vortrag"). Subject to meeting all milestone in terms of deadlines and deliverables and presentations, the grade is determined on the grounds of the final project report and presentation. Feedback is provided during milestone representations. Consultation is offered so that students understand how they score and how they can improve their final score.