An experimental investigation of the impact of individual, program, and organizational characteristics on software maintenance effort: Ramanujan, S. and Scamell, R.W. and Shah, J.R.
Maintenance effort is expensive.
The Human Information Processing model is a model of how cognition works. Information travels back and forth from our extremely short-term sensory buffers, to short-term memory, to buffer memory, to long-term memory. Short-term memory has a small capacity. Information moves from short-term to long-term memory via rehearsal. Long-term memory is subdivided into episodic and non-episodic memory. Episodic memory includes time and place information (what we think of as “memories”). Non-episodic memory is what we would typically call “knowledge.” We subdivide non-episodic memory into semantic and syntactic knowledge. Semantic knowledge is abstract knowledge independent of context. Syntactic knowledge is specific, contextual, rote-memorization knowledge. The buffer is essentially the focus of our attention, including the active subset of long-term memory.
Maintenance tasks are subdivided into program comprehension, program modification and program composition.
Program comprehension -> Creation in the buffer of a semantic understanding of the program using syntactic and semantic knowledge from LTM.
Program modification -> Manipulations on the buffer structure. Correction of the buffer structure based on discrepancies from output.
Program composition -> Problem analyzed in buffer into ‘given state’ and ‘desired state.’ To achieve desired state, knowledge is transferred from LTM into buffer. Problem solution conceived as plan for program. Stepwise refinement on this plan.
43 predictions from HIP supported in Ramanujan and Cooper 1994.
There is little agreement in the literature about how to operationalize software maintenance effort.
Some options: Number of repair requests, number of repairs per production run. Assumption: All repairs of equal magnitude. Total cost of maintenance in terms of labor hours. Assumption: Constant quality of labor.
Proposal: Labor hours weighted by quality of labor. (Unclear how to operationalize quality of labor)
For this study: Time required to successfully implement changes.
The study tested seven hypotheses and found support for most. Conclusions include: Keep control-flow complexity low, name variables well, don’t use novices for maintenance on large software.
Constructs in the hypotheses include: Program control-flow complexity, program size, time to maintain, variable-name mnemonicity, programmer semantic knowledge, and time pressure.
For my purposes, control-flow complexity and variable-name mnemonicity may not be relevant for many DSLs.