DISS 725 – System
Development: Research Paper 3
Software Maintenance
by
Ronald G. Wolak
wolakron@nova.edu
A paper submitted in fulfillment of the requirements
for DISS 725 Spring 2001 – System Development: Research Paper 3
School of Computer and Information Sciences
Nova Southeastern University
June 2001
An Abstract of a Paper Submitted to Nova Southeastern University in Fulfillment of the Requirements for DISS 725 Spring 2001 – System Development: Research Paper 3
DISS 725 – System
Development: Research Paper 3
Software Maintenance
by
Ronald G. Wolak
June 2001
The paper that follows was
submitted to satisfy the requirements of DISS 725 Spring 2001 – System
Development: Research Paper 3. Software maintenance is recognized as an
important part of the software development life cycle. Maintenance systems are
integral in achieving control of the total software process and when properly
applied lead to higher quality. Software maintenance activities currently
account for more than half of the typical software budget. In addition, more
than 50 percent of global software developers are engaged in modifying existing
applications. In the following pages, the paper began with an introduction to
the software maintenance process. In this discussion, the four major types of
software maintenance were explored: corrective, adaptive, perfective, and
preventive. In addition, the use of software maintenance tools was explored.
This was followed by a discussion of the problems encountered during the
software maintenance process and a look into positive developments in the
maintenance industry. The paper concluded with a summary and recommendations.
Chapter 1
Introduction
Software
maintenance is recognized as an important part of the software development life
cycle (SDLC). Maintenance systems are integral in achieving control of the
total software process and when properly applied lead to higher quality.
Software maintenance activities currently account for more than half of the
typical software budget (Glass, 1989). In addition, more than 50 percent of
global software developers are engaged in modifying existing applications
(Jones, 2000). The following introductory sections describe the problem to be
investigated and the goal to be achieved. In addition, the introduction
provides an analysis of the relevance of the research and discusses the paper’s
five-chapter format.
Problem
Statement and Goal
Maintaining software is expensive (Smith, 1999). The maintenance phase of the software development life cycle is often the longest and the most expensive. Software applications that take months or years to develop are sometimes in service for decades, and maintenance often accounts for 65 to 75 percent of total SDLC costs. In response to this problem, the software industry is exhibiting an increased interest in the benefits yielded by improved software maintenance processes. The professional community now recognizes the importance of timely and accurate software maintenance.
The goal of this paper is to provide an overview of the four major types of software maintenance, to discuss the common problems encountered during the software maintenance process, and to investigate positive developments in the field.
Relevance
This
research paper is relevant to the topic of software maintenance and support.
The paper begins with an introduction to the software maintenance process. In
this discussion the four major types of software maintenance are explored:
corrective, adaptive, perfective, and preventive.
This is followed by a discussion of the problems encountered during software
maintenance.
Format
This research paper is a descriptive study formatted in five chapters. The first chapter covers the paper’s problem statement and goal, relevance, and format. This is followed in the second chapter by a review of the literature relevant to the problem. In the third chapter, the research methods and online tools and resources employed during the completion of the paper are described. The fourth chapter presents the results of the research and provides an analysis of current software maintenance problems and positive industry developments. The fifth chapter concludes the paper with a summary and recommendations.
Summary
Software maintenance is an integral part of the software
development life cycle. Many problems are encountered during software
maintenance (Dart, Christie, & Brown, 1993). These include the need
for more effective software maintenance tools, a lack of software
documentation, the low status of maintainers, and the lack of a
design-for-maintenance viewpoint in the software development phase. In the following pages, this paper provides a review of
literature relevant to software maintenance, a description of research methods
employed, results of the research, recommendations, and an overall summary.
Chapter 2
Review of
Literature
The literature review that follows is organized by subject heading. Those subjects include the four major types of software maintenance: corrective, adaptive, perfective, and preventive. Also included is a section on maintenance tools.
The software maintenance phase of the software development life cycle begins after delivery of the software product (Pigoski, 1996). Maintenance covers the life a software system from the time of installation until the software is no longer used. In addition, the ISO 11207 standard places emphasis on predelivery aspects of software maintenance (Pigoski, 2001). These aspects include planning for postdelivery operations, supportability, and logistics determination. Postdelivery activities include software training, modification, and help desk operations.
Maintenance Types
E.B. Swanson was one of the first to categorize software maintenance (Pigoski, 1996). He defined three different categories of software maintenance: corrective, adaptive, and perfective. The 1993 IEEE Standard on Software Maintenance further defined the categories and added a fourth preventive maintenance category.
Corrective
Corrective maintenance involves changing a software application to remove errors (Chapin, 2000b). The three main causes of corrective maintenance are design errors, logic errors, and coding errors. Examples include the correction of problems such as misspelled words in a user interface or incorrect algorithms that damage, corrupt, or destroy data. However, new faults are often introduced during the maintenance process (Kammer, 2000). For example, the more difficult it is to maintain a software application, the more likely it is that software updates will not be correctly installed by users. This often leads to system faults that further impact operation, functionality, and security. Corrective maintenance accounts for approximately 20 percent of all software maintenance.
A study conducted by Mockus and Votta (2000) used keyword classification rules to identify the corrective maintenance activities of large-scale software systems. Keywords included fix, bug, error, fixup, and fail. Results showed that when compared to the other types, corrective changes tended to be the most difficult. In addition, the interval for corrective changes was the smallest. The study also showed a strong relationship between the type and size of a change and the time required to carry it out.
A related article by Mayrhauser and Vans (1997) reported on a field study conducted to understand the corrective maintenance of large-scale software by professional software maintenance engineers. The study found that corrective maintenance was not a popular activity. Maintenance engineers were required to have knowledge about the specific application in addition to language and domain skills. In many cases, the task was assigned to novices with some language skills or to an expert programmer that lacked experience in the new language. In both cases, corrective maintenance activities involved “learning on the job.”
Mattsson (1998) proposed a conceptual model of the basic concepts utilized within corrective software maintenance. The model was a synthesis of six different models: a framework suggested by the Software Engineering Institute, the IEEE standards definitions, and the industrial maintenance systems utilized by Ericsson, Ellemtel, AAB Automation Products, and ABB Robotics. The model clarified the most fundamental concepts required for the management of software problems and defects. In addition, it provided a common forum for communication during corrective software maintenance activities.
Adaptive
Adaptive software maintenance is any effort that is the result of changes in a software application’s operating environment (Burrows, 1984). These environmental modifications consist mainly of changes to the following:
· Rules, laws, and regulations that affect the application
· Hardware configurations (e.g. new printers)
· File structures and data formats
· System software (e.g. operating system or utilities)
Adaptive maintenance accounts for approximately 20 percent of software maintenance activities. The end user does not see a change in the operation of the software, but the software maintainer must expend resources to make the necessary changes.
Fioravanti, Nesi, and Stortoni (1999) presented a model for the estimation and prediction of the adaptive maintenance required for object oriented software systems. Object oriented modeling has been adopted by the industry recently and older systems are in need of adaptive maintenance to better meet current user requirements. The paper validated that certain effort estimation/prediction metrics are also useful for the estimation/prediction of software maintenance effort. In addition, the paper concluded that during adaptive maintenance considerable attention should be paid to methods definition and the methods interface. The complexity of these interfaces for locally defined methods is the most important factor when estimating adaptive software maintenance effort.
In a related paper, Rayside, Kerr, and Kontogiannis (1998) discussed techniques to automatically detect and adapt to changes in a Java application’s library. The rapid evolution of Java libraries, together with Java’s run-time linking, may produce incompatibilities between an application and the library it relies on. In the paper, the authors developed and tested a prototype tool that was useful in detecting adaptive maintenance in Java applications developed on new versions of the Java Development Kit (JDK) but deployed on older versions.
Self-adaptive software takes this concept one step further by modifying its behavior in response to changes in its operating environment (Oreizy, Gorlick, Taylor, Heimbigner, Johnson, Medvidovic, Quilici, Rosenblum, & Wolf, 1999). Operating environment includes anything observable by the software system (e.g. end-user input, external hardware devices and sensors, and program instrumentation). Self-adaptive software systems would be particularly effective when applied to military systems in which battlefield conditions (i.e. operating environment) are subject to change without warning. One civilian application might be the use of unmanned air vehicles (UAV) deployed for land-use management, freeway-traffic management, and airborne cellular-telephone relay stations.
Perfective
Perfective maintenance is software maintenance implemented to improve the maintainability, performance, or other attributes of a computer application (Burrows, 1984). Furthermore, perfective maintenance includes all changes, insertions, deletions, modifications, extensions, and enhancements made to a system to meet evolving and/or expanding user needs (Pigoski, 1996). For example, the addition of features that were not in the original specification that a user wishes added is perfective maintenance. Perfective maintenance comprises approximately 60 percent of all software maintenance.
In a related paper, Domsch and Schach (1999) reported on a case study of the maintenance of an object-oriented application in which a text-based user interface was replaced with a graphical user interface (GUI). The study found that 94.8 percent of the maintenance effort was perfective (i.e. GUI development). The paper concluded that adding a GUI to an existing software application was difficult and time-consuming unless the maintainer had extensive GUI design experience. The quality of the existing software product and its current user interface had little impact on this conclusion.
Preventive
In 1993, the IEEE added a fourth category of software maintenance – preventive maintenance (Pigoski, 1996). Some software maintainers classify preventive maintenance under the corrective category. Preventive maintenance is defined as maintenance performed for the purpose of preventing problems before they happen. This category is particularily important in safety-critical systems such as in aircraft and the space shuttle. Another definition offered by Vehvilainen (2000) is that preventive maintenance refers to all software maintenance activities that are prepared and decided upon regularly. These activities are based upon the analyses of present conditions and the forecasted needs of the software.
In a related article, Chapin (2000) provided a review of the history of software maintenance and the role of preventive maintenance. The link between scheduled and preventive maintenance was also discussed. Preventive maintenance was interpreted to mean improving a software application’s future maintainability. Forecasting what would improve maintainability was shown to be difficult to accomplish. The author also pointed out that most successful forecasting was done when software maintenance was performed on a scheduled basis (i.e. preventive maintenance should be incorporated into scheduled maintenance).
The effectiveness of preventive maintenance in enhancing the software dependability of operational software was explored in another article (Garg, Puliafito, Telek, & Trivedi, 1998). The paper presented a model for a transaction based software application that employed preventive maintenance to increase availability, decrease response time, and minimize the probability of loss. Numerical examples were presented to illustrate the applicability of the model. The main strength of the model was its ability to capture the dependence of crash/hang failures and performance degradation on time and instantaneous load.
Maintenance Tools
Software maintenance tools can be defined as anything functional that can assist the software maintainer to address maintenance problems (Lethbridge & Singer, 1997). Software maintenance tools are designed to satisfy requirements in the following five areas:
· Analysis and design
· Testing
· Software configuration management
· Reverse engineering
· Documentation management
Computer-Aided Software Engineering (CASE) tools currently exist to aid software engineers perform a variety of tasks that include requirements analysis, software design, code production, testing, document generation, and project management. While CASE tools have focused on other areas of SDLC, the use of CASE tools for software maintenance has the potential to significantly improve productivity and reduce cost.
A study by CASE Associates showed that between 50 to 70 percent of a developer’s time was spent making changes to software (Sharon, 1996). Therefore, the tool with the greatest potential impact on software development is not the development tool. It is the software maintenance tool.
A related paper by Dumke and Winkler (1997) discussed the use of Computer Assisted Software Measurement and Evaluation (CAME) tools. CAME tools are designed for code analysis and measurement. They are applied during the implementation and maintenance development phases. The CAME tool classification includes tools for model-based software component analysis, metrics application, measurement result presentation, and statistical analysis and evaluation.
Glass (1989) identified software maintenance documentation as a key factor in the software maintenance process. Understanding a software application consumes more time than any other maintenance task. Reducing this time with up-to-date documentation is the goal of software maintenance tools. In a related paper, Cioch and Palazzolo (1996) discussed a documentation approach and tool developed to accelerate the efficiency of software maintainers. The approach identified the four learning stages of a software maintainer: newcomer, student, intern, and expert. The information and form of the documentation presented by the documentation tool differed according to the ability of the maintainer. The approach was successfully used by the U.S. Army TARDEC to maintain the ground vehicle simulation software used by the Vetronics Simulation Facility.
Examples of maintenance tools include VIFOR 2, xVue, and RETIRE. VIFOR 2 focuses on the deterioration in structure and documentation that typically occurs during the maintenance of legacy systems (Rajlich & Adnapally, 1996). The tool employs browsing and hypertext documentation technologies to provide rapid code navigation along with the incremental recording and retrieval of documentation.
xVue, a software maintenance tool by Telcordia Technologies, allows maintainers to quickly locate code associated with a particular system feature by highlighting the source code related to that feature (Telcordia, 2001). xVue also facilitates the mapping of system features to program components. Another maintenance tool, RETIRE, was developed by the Source Recovery Company (SRC, 1999). RETIRE automatically converts outdated 4GL (fourth-generation language) code to COBOL. The tool replaces the manual rewrite process for 25 to 5 percent of the cost and completes tasks in 10 to 20 percent of the time.
Summary
The literature review presented above was organized by subject heading. The subjects included the four major types of software maintenance: corrective, adaptive, perfective, and preventive. Also included was a section on software maintenance tools.
Chapter 3
Methodology
Research Type
This paper was a research-based
descriptive study. The key outcome of the investigation was the exploration of
the four major types of software maintenance along with an in-depth look at
problems encountered during the maintenance process.
Research Methods Employed
The primary research method employed throughout the course of writing this paper was browser-based Internet searches. The literature reviewed included textbooks, journal articles, and magazine articles referenced by a select set of online resources. Relevant texts were located, ordered, and delivered using the Fatbrain.com Internet site. The full text articles from journals and magazines were located and subsequently downloaded.
Online Tools and Resources
A variety of online resources were used to locate and download literature relevant to the goal of the paper. These resources included ACM Search (www.acm.org/dl/search.html), IEEE Digital Library (http://computer.org/search.htm), and ProQuest Direct (http://proquest.umi.com/). Perhaps the most powerful search tools to be employed were the intelligent search agents Copernic 2001 and LexiBot.
Copernic 2001 is a well-documented freeware search agent (Copernic, 2001). It uses predefined channel sets, which allows researchers to target inquiries to all major Web search engines and also search for relevant text in newsgroups. Copernic conducts fast, multithreaded, full Boolean searches with progress displays and customizable search depth. Once results are compiled, Copernic displays returns (including name, location, and introductory text) in a right-click-enhanced list box sorted by relevance.
Another search technology utilized to gather literature was LexiBot from BrightPlanet (LexiBot, 2001). The LexiBot desktop search client acts as a universal translator for all dialects of search engines and searchable databases. LexiBot is able to search 150 services at one time using a standard query format. In addition, LexiBot’s search technology is capable of identifying, retrieving, qualifying, and organizing "deep" and "surface" content from the Internet.
Summary
In summary, this paper was a research-based descriptive study. Browser-based Internet searches were the primary research method employed. These searches queried databases that included the ACM, IEEE, and ProQuest Direct. Specialized client-based search technologies (i.e. Copernic 2001 and LexiBot) also aided in locating relevant literature.
Chapter 4
Results
Despite years of progress in managing the development life cycle of software applications, software maintenance organizations continue to experience difficulty in performing the four types of maintenance discussed in previous chapters (Sawyer, Sommerville, & Viller, 1999). The following sections begin with an investigation of the problems encountered. This is followed by a discussion of positive developments in the field of software maintenance.
Software Maintenance Problems
A study by the Software Engineering Institute (SEI) revealed problems believed to be typical of many software maintenance organizations regardless of the type of maintenance performed (Dart, Christie, & Brown, 1993). Software maintenance practices are frequently associated with high cost and low productivity. Problems contributing to these factors include the need for more effective software maintenance tools, a lack of software documentation, the low status of maintainers, and the lack of a design-for-maintenance viewpoint in software development processes.
Effective Software
Maintenance Tools
More effective software tools are needed to facilitate maintenance activities such as coding and testing in addition to related management activities (e.g. budgeting and resource allocation) (Dart, Christie, & Brown, 1993). Maintenance tool-related issues typically center on the following:
· Availability, quality, and integration of CASE tools
· Adequate documentation tools
· Configuration management support tools
· Lack of reverse engineering tools
· Different tooling for lifecycle maintenance versus new software development
· Better testing tools and procedures
Effective tools improve maintenance productivity by helping the maintainer understand the current system and make changes and repairs more efficiently (Sharon, 1996).
Documentation
Documentation is another area in which problems exist (Glass, 1989). There are typically two extremes in software documentation. The first is a total lack of documentation because of schedule and budget factors during product development. The second is too much documentation. As a software application evolves this bulky documentation becomes out of date and essentially useless. The result in both cases is a lack of quality documentation for the maintainer to use.
Maintainer Status
Maintaining software applications is not highly regarded in the industry (Smith, 1999). Maintainers often have little esteem and are viewed to be at bottom of the programming hierarchy. In the past, this viewpoint was reinforced by the practice of relegating maintenance tasks to the less capable while talented developers were given the task of developing new systems (Sharon, 1996).
Design-for-Maintenance
Software applications designed without considering maintainability is a major maintenance issue (Dart, Christie, & Brown, 1993). Tight schedules often result in software applications that are moved into the maintenance phase before all deliverables have been finished. Consequently, significant maintenance time is devoted to problems related to the support of poorly designed, coded, tested, and documented software.
Designing maintainable software is more than writing understandable code. It involves looking at programs from the viewpoint of a person required to change or repair the code (Smith, 1999). For example, programming languages with large and varied instruction sets allow developers to code an algorithm in a variety of ways. However, they are also more difficult for a maintainer to understand. The best choice is sometimes a language that allows a process to be written in a limited number of ways.
Positive Developments
In response to the problems discussed above, the software industry has made changes in several areas of software maintenance. These include developments in the areas of cost, standards, tools, process improvement, and outsourcing (Schneidewind, Chapin, Keller, Pigoski, & Zvegintzov, 1996).
Cost
Although there is no agreement on the actual cost of software maintenance, data exists to support the fact that maintenance costs account for a large portion of overall software development life cycle costs (Pigoski, 1996). For example, the U.S. Department of Defense (DOD) spends approximately $30 billion per year on software applications and estimates two thirds of that amount is for maintenance (Wolfinger, Taub, Stark, Holtzblatt, Dhama, & Cho, 1996). In the early 1980s, the software industry did not understand the costs involved in software maintenance. Today, the journal articles regularly appear that detail maintenance cost factors and how to reduce them.
Standards
While standards for software development have existed for many years, it was not until 1993 that the IEEE Standard on Software Maintenance (IEEE 1219) was published (Wolfinger et al., 1996). This standard provided maintainers with a common framework and process for software maintenance. IEEE 1219 was followed in 1995 by the publication of ISO/IEC 12207 and its maintenance process. Maintenance standards are now an active area, and proposed changes to enhance these standard maintenance methodologies are frequent (Polo, Piattini, Ruiz, & Calero, 1999).
Tools
Industry leaders heralded the use of CASE tools to facilitate software maintenance and reduce increasing maintenance costs (Schneidewind et al., 1996). However, in many cases organizations failed to adopt the technology and the tools have not lived up to expectations. The development and use of integrated CASE (ICASE) tools is another attempt by the industry to address the problem of increasing costs (Pigoski, 1996). ICASE tools are a combination of two or more CASE tools to form an integrated whole.
Process improvement
Process improvement efforts are beginning to impact the field of software maintenance (Schneidewind et al., 1996). New software development approaches are tailored for use in maintenance, and maintainers are familiar with process improvement efforts. For example, reduced maintenance effort that is the result of development processes utilizing structured programming, report generators, and packaged software. In contrast, development processes using software code generators yield increased maintenance effort (Slaughter & Banker, 1996).
Outsourcing
In the past, software developers performed their own maintenance (Pigoski, 1996). However, outsourcing the maintenance function (primarily corrective and adaptive) has yielded cost savings for organizations. A current industry best practice is the utilization of full-time, trained maintenance specialists instead of untrained generalists (Jones, 2000). The positive impact of this practice is one of the reasons why maintenance outsourcing is growing rapidly.
Summary
The results chapter presented above began with an investigation into the problems encountered during software maintenance. These included the need for more effective software maintenance tools, a lack of up-to-date software documentation, the low status of maintainers, and the lack of a design-for-maintenance viewpoint in the software development phase. This was followed by a discussion of positive developments in the areas of cost, standards, tools, process improvement, and outsourcing.
Chapter 5
Conclusion
The maintenance of software applications is one of the major problems in the software development life cycle. The maintenance process is costly, conflictive, and extremely resource intensive (Polo et al., 1999). The practice of software maintenance has improved significantly in past 15 years (Bennett, Griffiths, Brereton, Munro, & Layzell, 1996). However, software applications are becoming larger and more complex. In addition, user requirements dictate the flexibility to meet changing business needs. As more and more of these systems go online, the pressure to continuously improve and adapt them in response to user requests will continue to burden software maintenance organizations.
In previous chapters, the four maintenance categories were discussed; the use of maintenance tools to reduce cost and improve efficiency was explored; software maintenance problems were investigated; and positive industry developments were explained. In the future, the software industry must continue to focus on improving software maintenance processes. This can be accomplished through the implementation of industry best practices.
Recommended best practices include software that is designed with maintainability in mind. This requires looking at programs and programming from the perspective of a programmer about to alter the code. In addition, as systems become more complex and the technology they use becomes more obscure, software organizations must elevate the position of software maintainer and encourage the best programmers to become maintainers. Finally, as the best programmers become dedicated to software maintenance it is only reasonable to equip them with the best maintenance tools and procedures available.
Summary
The research paper presented above
was a descriptive study formatted in five chapters. The first chapter covered
the paper’s problem statement and goal, relevance, and format. This was
followed in the second chapter by a review of the literature relevant to the
problem. In the third chapter, the research methods and online tools and
resources employed during the completion of the paper were described. The
fourth chapter presented the results of the research and provided an analysis
of software maintenance problems and positive developments in the field.
Finally, the last chapter provided a summary of software maintenance along with
recommendations for improvement.
References
Bennett, K., Griffiths, D., Brereton,
P., Munro, M., & Layzell, P. (1996). Software
maintenance for 2005. Paper presented at the 1996 International Conference
on Software, Monterey, CA.
Burrows, J. (1984). Guideline on
Software Maintenance. U.S. Department of
Commerce. Retrieved May 28, 2001,
from the World Wide Web: http://www.jcte.jcs.mil/htdocs/teinfo/directives/pub/pub92f.html.
Chapin, N. (2000a). Do we know what preventative maintenance is?
Paper presented at the International Conference on Software Maintenance
(ICSM'00), San Jose, California.
Chapin, N. (2000b). Software Maintenance Types - A Fresh View.
Paper presented at the International Conference on Software Maintenance
(ICSM'00), San Jose, California.
Cioch, F., & Palazzolo. (1997). A documentation suite for maintenance
programmers. Paper presented at the 1996 International Conference on
Software, Monterey, California.
Copernic (2001). Copernic 2001. Retrieved June 6, 2001, from the World Wide
Web: http://www.copernic.com.
Dart, S., Christie, A., & Brown,
A. (1993). A Study in Software Maintenance. Carnegie
Mellon Software Engineering Institute.
Retrieved May 28, 2001, from the World Wide Web: http://www.sei.cmu.edu/publications/documents/93.reports/93.tr.008.html.
Domsch, M., & Schach, S. (1999). A case study in object-oriented maintenance.
Paper presented at the IEEE International Conference on Software Maintenance,
Oxford, England.
Dumke, R., & Winkler, A. (1997). CAME tools for an efficient software
maintenance. Paper presented at the 1st Euromicro Working Conference on
Software Maintenance and Reengineering, Berlin, Germany.
Fioravanti, F., Nesi, P., &
Stortoni, F. (1999). Metrics for
controlling effort during adaptive maintenance of object oriented systems.
Paper presented at the IEEE International Conference on Software Maintenance,
Oxford, England.
Garg, S., Puliafito, A., Telek, M.,
& Trivedi, K. (1998). Analysis of preventive maintenance in transactions
based software systems. IEEE Transactions
on Computers, 47(1), 96-107.
Glass, R. (1989). Software maintenance documentation. Paper
presented at the Annual ACM Conference on Systems Documentation, Pittsburgh,
PA.
Jones, C. (2000). The Economics of
Software Maintenance in Twenty First Century. Object-Z Systems. Retrieved
May 28, 2001, from the World Wide Web: http://www.objectz.com/columnists/capers/.
Kammer, R. (2000). Software maintenance in the new millennium:
Issues and challenges. Paper presented at the International Conference on
Software Maintenance (ICSM'00), San Jose, California.
Lethbridge, T., & Singer, J.
(1997). Understanding software
maintenance tools: Some empirical research. Paper presented at the IEEE
Workshop on Empirical Studies of Software Maintenance (WESS'97), Bari, Italy.
LexiBot (2001). Our Technology -
Results: The LexiBot Expression. BrightPlanet. Retrieved June 6, 2001, from the World Wide
Web: http://www.brightplanet.com/technology/results2.asp.
Mattsson, M. (1998). A conceptual model of software maintenance.
Paper presented at the 1998 International Conference on Software Engineering,
Kyoto Japan.
Mayrhauser, A., & Vans, A.
(1997). Program understanding needs
during corrective maintenance of large scale software. Paper presented at
the 21st International Computer Software and Applications, Washington, DC.
Mockus, A., & Votta, L. (2000). Identifying reasons for software changes
using historic databases. Paper presented at the International Conference
on Software Maintenance (ICSM'00), San Jose, California.
Oreizy, P., Gorlick, M., Taylor, R.,
Heimbigner, D., Johnson, G., Medvidovic, N., Quilici, A., Rosenblum, D., &
Wolf, A. (1999). An architecture-based approach to self-adaptive software. IEEE Intelligent Systems, 14(3), 54-62.
Pigoski, T. (1996). Practical software maintenance: Best
practices for managing your software investment. New York: Wiley Computer
Publishing.
Pigoski, T. (2001). Software
Maintenance. In A. Abran & J. Moore (Eds.), Guide to the Software Engineering Body of Knowledge. New York:
IEEE.
Polo, M., Piattini, M., Ruiz, F.,
& Calero, C. (1999). MANTEMA: A
software maintenance methodology based on the ISO/IEC 12207 standard. Paper
presented at the Fourth IEEE International Symposium and Forum on Software
Engineering Standards, Curitiba, Brazil.
Rajlich, V., & Adnapally, S.
(1996). VIFOR 2: a tool for browsing and
documentation. Paper presented at the 1996 International Conference on
Software, Monterey, CA.
Rayside, D., Kerr, S., &
Kontogiannis, K. (1998). Change and
adaptive maintenance detection in Java software. Paper presented at the
Fifth Working Conference on Reverse Engineering, Honolulu, Hawaii.
Sawyer, P., Sommerville, I., &
Viller, S. (1999). Capturing the benefits of requirements engineering. IEEE Software, 16(2), 78-85.
Schneidewind, N., Chapin, N., Keller,
T., Pigoski, T., & Zvegintzov, N. (1996). How much has software maintenance changed since 1983? Paper
presented at the 1996 International Conference on Software, Monterey, CA.
Sharon, D. (1996). Meeting the
challenge of software maintenance. IEEE
Software, 13(1), 122-126.
Slaughter, S., & Banker, R.
(1996). A study of the effects of
software development practices on software maintenance effort. Paper
presented at the 1996 International Conference on Software Maintenance
(ICSM'96), Monterey, California.
Smith, D. (1999). Designing maintainable software. New
York: Springer.
SRC. (1999). RETIRE: Automatically Converts Old 4GL Code to COBOL. Retrieved May 28, 2001, from the World Wide
Web: http://www.source-recovery.com/news/1999-pressrel-retire1.htm.
Telcordia. (2001). xVue: A Tool for Effective Software
Maintenance. Retrieved May 28,
2001, from the World Wide Web: http://xsuds.argreenhouse.com/flyer/xvuefly.html.
Vehvilainen, R. (2000). What is preventative maintenance? Paper
presented at the International Conference on Software Maintenance (ICSM'00),
San Jose, California.
Wolfinger, B., Taub, A., Stark, G.,
Holtzblatt, L., Dhama, H., & Cho, C. (1996). Controlling the
Post-Deployment Cost of Software. Mitre. Retrieved May 28, 2001, from the World Wide
Web: http://www.mitre.org/resources/centers/costs/.