Software maintenance gobbles up 90% of the cost of software over its lifetime - and the reason typically goes back to its original development, according to three senior BCS members who have written a paper on the subject.
Good understanding of software is "vitally important", but achieving this is not easy, the authors said. This is because the maintainers are not usually the developers, and programs will often have been affected by previous maintenance.
Even a change involving the apparently simple removal of a variable from one program can demand examination of an entire system to ensure the variable is not used elsewhere.
"Studies have shown that most maintenance costs arise from gaining an understanding of the software," said Keith Bennett, professor of computer engineering at Durham University, Nicolas Gold, a lecturer at Manchester University, and Andrew Mohan, an IT specialist and student at Manchester University.
"These costs arise because most software is not maintained by those who developed it - and this should be taken into account when companies investigate outsourcing.
"Software understanding is affected by the environment in which the software resides, the maintainer's ability, the effect of previous maintenance on its structure and the time available."
There are no easy ways to reduce these costs, the authors said. "Part of the answer can be found in ISO quality standards. A good starting point might be to analyse existing development and maintenance processes and categorise their maturity level using the Capability Maturity Model [details at www.sei.cmu.edu].
"The important aspect is defining your processes to analyse their strengths and weaknesses and improve them.
"As well as defining the maintenance processes you need to give attention to the state of the software itself. The maintainer's ability to assess the impact of a change on software is influenced by the complexity of its structure and of the underlying code.
"The complexity of code is related to its style: for example the levels of nesting; how easy it is to read; how coherently algorithms are implemented; and the overall problem complexity.
"If maintenance is done over many versions, factors such as algorithm coherence and coding style can be in a considerably worse state than when the original software was written. Code readability can be improved, or at least maintained, if maintainers adhere to the original writing style," said the authors.
The BCS is supporting the Institute of Electrical and Electronics Engineers' annual European conference on software maintenance and re-engineering in Manchester from 21-23 March.
Further information www.rcost.unisannio.it/csmr2005
Four paths to better software
Perfective: improving the function of software by responding to user-defined changes
Adaptive: changing the software to adapt to environmental changes, such as the introduction of new hardware or data
Corrective: correcting failures in processing, performance or implementation, for example by fixing bugs
Preventive: updating software to forestall future problems.Source: IEEE Standard 619.12-1990