Software Understanding
We employ various kinds of algorithms from AI and machine learning to help understand the structure of large systems, in particular systems built in Java or Cobol. Our current focus is on clustering software units. One important aspect of our work is that we use the algorithms to integrate various sources of information about a system, including its documentation, module structure and call dependencies, and revision history. We look at both supervised (human in the loop) and non-supervised techniques.