More on Software Analysis and Transformation

The group contributes to the following topics:

Software Analysis

With software analysis, we propose and evaluate methods for observing software both quantitatively and qualitatively.  We automatically extract models of software systems, which can then be simulated, measured, checked and visualized. On the one hand, such analyses may provide insight into specific software systems, which is valuable in itself.  On the other hand, by collecting information about sets of software systems, we may also use software analysis to come to general insights. We work on a variety of increasingly rich models of software systems that would allow increasingly meaningful analyses to be performed.

Relevant keywords in this area are:

  • Static Analysis
  • Software Analytics
  • Software Metrics
  • Software Visualization
  • Software Evolution
  • Architecture Conformance
  • Software Quality
  • Software Complexity
  • Code smells
  • Reverse Engineering
  • Re-engineering
  • Type checkers and type inference
  • Relational Calculus
  • Pattern Matching
  • Model Checking
  • Rascal

Software Transformation

With software transformation, we propose and evaluate automated methods of construction and maintenance of software systems. Using large-scale automated software renovation we improve software quality by transforming existing systems to better systems. Software transformation and analysis go hand in hand. Automated software analysis is used for checking preconditions of automated software transformations such as refactoring.

Relevant keywords in this area are:

  • Refactoring
  • Re-engineering
  • Source-to-source transformation
  • Compilers
  • Code-to-model

Software Generation

With software generation, the goal is to simplify software by automation and abstraction.  Using the construction of domain-specific languages we improve the quality of newly designed systems by carefully constructing  automated but reconfigurable transformations from high-level domain concepts to high-quality source code. The questions are which domain specific languages should be defined, and how to implement them effectively.

Relevant keywords in this area are:

  • Model Driven Engineering
  • Model Based Testing
  • Domain Specific Languages
  • Software Simulation
  • Software Verification
  • Software Synthesis

Meta programming and Software Language Engineering

Below the previous topic lies an infra-structure topic of meta-programming. Meta programs are programs which take programs (source code) as input or output. To efficiently 

Relevant keywords in this area are:

  • General context-free parsing algorithms and data-dependent parsing algorithms
  • Modular Language Specification and Implementation Mechanisms
  • (Data-dependent) Context-free Grammars
  • Object Algebras
  • Algebraic Specification
  • Term Rewriting
  • Generic Tree Traversal
  • Pattern Matching (Modulo Theories)
  • Relational Calculus
  • Persistent data-structures
  • Immutable data-structures

Teaching

SWAT is heavily involved in the Master Software Engineering. This successful research master covers a big part of the SWEBOK. It is a collaboration between Universiteit van Amsterdam, Vrije Universiteit, CWI and Hogeschool van Amsterdam. 

In particular we teach courses and assist at courses at different universities at the master level, such as:

  • Software Construction (UvA)
  • Software Evolution (UvA, TUE)
  • Software Testing (UvA)
  • Software Quality and Testing (RUG)

Software

SWAT has a strong tradition in building and contributing to open source software.