Delving source code with formal concept analysis

Authors
Kim Mens, Tom Tourwé
Tags
,
Title
Delving source code with formal concept analysis
Authors
Kim Mens, Tom Tourwé
 Supporting-software-development-through-declaratively-codified-programming-patterns_2002_Expert-Systems-with-Applications.pdf Δ   130Kb   19 Oct 2011
Type
Article
Journal
Elsevier Journal on Computer Languages, Systems & Structures
Volume
31
Number
3-4
Pages
183-197
Publisher
Elsevier
Year
2005

Abstract

Getting an initial understanding of the structure of a software system, whether it is for software maintenance, evolution or reengineering purposes, is a nontrivial task. We propose a lightweight approach to delve a system's source code automatically and efficiently for relevant concepts of interest: what concerns are addressed in the code, what patterns, coding idioms and conventions have been adopted, and where and how are they implemented. We use formal concept analysis to do the actual source-code mining, and then filter, classify and combine the results to present them in a format that is more convenient to a software engineer. We applied a prototype tool that implements this approach to several small to medium-sized Smalltalk applications. For each of these, the tool uncovered several design pattern instances, coding and naming conventions, refactoring opportunities and important domain concepts. Although the tool and approach can still be improved in many ways, the tool does already provides useful results when trying to get an initial understanding of a system. The obtained results also illustrate the relevance and feasibility of using formal concept analysis as an efficient technique for source-code mining.

Tags Tags: ,


BibTeX Record
  @article{RELEASeD-2005-192721,
    title = {Delving source code with formal concept analysis},
    author = {Kim Mens and Tom Tourwé},
    year = {2005},
    journal = {Elsevier Journal on Computer Languages, Systems & Structures},
    volume = {31},
    number = {3-4},
    pages =  {183-197},
    publisher = {Elsevier},
  }