Deep Program Understanding

Established: June 1, 2015

Overview

The Deep Program Understanding project aims to teach machines to understand complex algorithms, combining methods from the programming languages, software engineering and the machine learning communities.

Learning to Understand Programs

Building “smart” software engineering tools requires learning to analyse and understand existing code and related artefacts such as documentation and online resources (e.g. StackOverflow). One of our primary concerns is the integration of standard static analysis methods with machine learning methods to create learning-based program analyses that can be used within software engineering tools. Such tools can then be used to find bugs, automatically retrieve or produce relevant documentation, or verify programs.

Learning to Generate Programs

A core problem of machine learning is to learn algorithms that explain observed behaviour. This can take several forms, such as program synthesis from examples, in which an interpretable program matching given input/output pairs has to be produced; or alternatively programming by demonstration, in which a system has to learn to mimic sequences of actions.

Advancing the Machine Learning Frontier

Structured data such as programs represent a challenge for machine learning methods. The combination of domain constraints, known semantics and complex structure requires new machine learning methods and techniques. Our focus in this area is the analysis and generation of graphs, for which we have developed novel neural network architectures and generative procedures.

Publications

Below are some of the relevant publications of our group.

Learning Algorithms

Learning Software Engineering

Learning to Analyse Programs

Relevant Software

We have open-sourced many of our work and implementations.

Libraries

  • dpu-utils: useful Python utilities for projects on deep program understanding.
  • gated-graph-neural-networks: A set of efficient TensorFlow implementations of graph neural networks that can handle large and sparse graphs.

Project-Specific Utilities

People