Showing posts with label Program Understanding. Show all posts
Showing posts with label Program Understanding. Show all posts

Monday, April 19, 2010

Analysis of "An In-Vivo Study of the Cognitive Levels Employed by Programmers During Software Maintenance"

I thought I would just start jotting down some ideas around this paper that I read today. The Paper is "An In-Vivo Study of the Cognitive Levels Employed by Programmers During Software Maintenance" by Tara Kelly and Jim Buckley. It was in the 2009 ICPC conference proceedings.

In this paper they start by assuming that Bloom’s Taxonomy of mental processing is used by programmers during maintenance tasks.

I was interested in how they were doing the research. They had 6 programmers speak all of their thoughts during a programming assignment into a voice recorder. They followed this by having the researchers analyze the utterances of the developers. They then categorized the utterances into the different levels of the taxonomy. However they admit that it was very subjective how they were making the categorizations.

They did have a few statistics that I would be interested in looking at the prior sources. One of these stats that I’m interested in reading from the first source, is that 90% of the total system’s cost is in maintenance. They quote this from the article “Leveraging legacy system dollars for E-Business” by L. Erlikh from the IT Pro publication of May/June 2000.

Wednesday, March 10, 2010

Program Understanding

I’m starting research into Program Understanding and Program Comprehension. I am doing this research because software maintenance is the portion of the software development lifecycle that takes the most time and money. Some studies claim that software maintenance can consume 60 - 80% of the total cost of a software project.

I would like to create tools and techniques to enable people to get up to speed faster on legacy codebases. To me every code base is legacy, or will be legacy shortly.

The first idea that I want to look at to understand an arbitrary code base is finding how the classes are related. To get a feel the overall structure of the code base, is it a standard “n-tier” architecture, where all dependencies are downward? Is it a client server code base, where there are two distinct pieces that communicate with each other over a well defined boundary? Or is the code the classic “Big Ball of Mud” architecture that is common in tools that have grown organically since they were started.