Page 262 -
P. 262

9.3   Software maintenance  245




                               Legacy systems

                        Legacy systems are old systems that are still useful and are sometimes critical to business operation. They may
                        be implemented using outdated languages and technology or may use other systems that are expensive to
                        maintain. Often their structure has been degraded by change and documentation is missing or out of date.
                        Nevertheless, it may not be cost effective to replace these systems. They may only be used at certain times
                        of the year or it may be too risky to replace them because the specification has been lost.
                                          http://www.SoftwareEngineering-9.com/Web/LegacySys/



                                       the lifetime of the system. This assumes that a percentage increase in development
                                       costs results in a comparable percentage decrease in overall system costs.
                                         These estimates are hypothetical but there is no doubt that developing software to
                                       make it more maintainable is cost effective, when the whole life costs of the software
                                       are taken into account. This is the rationale for refactoring in agile development.
                                       Without refactoring, the code becomes more and more difficult and expensive to
                                       change. However, in plan-based development, the reality is that additional invest-
                                       ment in code improvement is rarely made during development. This is mostly due to
                                       the ways most organizations run their budgets. Investing in maintainability leads to
                                       short-term cost increases, which are measurable. Unfortunately, the long-term gains
                                       can’t be measured at the same time so companies are reluctant to spend money for an
                                       unknown future return.
                                         It is usually more expensive to add functionality after a system is in operation than
                                       it is to implement the same functionality during development. The reasons for this are:


                                       1.  Team stability After a system has been delivered, it is normal for the develop-
                                          ment team to be broken up and for people to work on new projects. The new
                                          team or the individuals responsible for system maintenance do not understand
                                          the system or the background to system design decisions. They need to spend
                                          time understanding the existing system before implementing changes to it.
                                       2.  Poor development practice The contract to maintain a system is usually separate
                                          from the system development contract. The maintenance contract may be given
                                          to a different company rather than the original system developer. This factor,
                                          along with the lack of team stability, means that there is no incentive for a devel-
                                          opment team to write maintainable software. If a development team can cut cor-
                                          ners to save effort during development it is worthwhile for them to do so, even if
                                          this means that the software is more difficult to change in the future.
                                       3.  Staff skills Maintenance staff are often relatively inexperienced and unfamiliar with
                                          the application domain. Maintenance has a poor image among software engineers.
                                          It is seen as a less-skilled process than system development and is often allocated to
                                          the most junior staff. Furthermore, old systems may be written in obsolete program-
                                          ming languages. The maintenance staff may not have much experience of develop-
                                          ment in these languages and must learn these languages to maintain the system.
   257   258   259   260   261   262   263   264   265   266   267