Artigo Acesso aberto

Software Maintenance: Concepts and Practice Authored by Penny Grubb and Armstrong A. Takang World Scientific, New Jersey. Copyright © 2003; 349 pages ISBN 981‐238‐426‐X (paperback) US$40

2008; Wiley; Volume: 20; Issue: 6 Linguagem: Inglês

10.1002/smr.365

ISSN

1532-0618

Autores

Carolyn Seaman,

Tópico(s)

Software Engineering Research

Resumo

Penny Grubb and Armstrong Takang published a second edition of their text ‘Software Maintenance: Concepts and Practice’ in 2003. I reviewed the first edition, published in 1996, in this journal in 2001. This review, then, describes the new edition, in particular with respect to how it compares with the first edition. Since my first review, I have also had the opportunity to teach a semester of software maintenance at the university level, using the second edition, and so this review will reflect that experience as well. The new edition has much the same content as the previous one. Nothing has been deleted, but there are several notable additions. The most important, especially in terms of instructional aids, is the addition of many new case studies, including a series of vignettes taken from a single case study (at ‘ACME Health Clinic’). The inadequacy of the case studies in the first edition was a point raised in my 2001 review, and so I am particularly pleased to see that the volume and depth of the case studies in the new edition have significantly improved. These case studies, while not extensive in detail, are nicely chunked to illustrate particular concepts and provide a good basis for class discussions. Another addition is the grouping of the chapters into five ‘parts’. The grouping of the chapters is logical, but the real contribution is the introductions to each of these parts. These introductions provide a very nice summing up of the various topics presented and the relationships between them. Further, each part introduction includes very useful discussion points, which are well suited for use in the classroom. Other more minor, but still helpful, changes in the new edition include the extension of section numbers to lower-level sections (which is very helpful when trying to reference particular sections), more explicit definitions of terms, a more detailed table of contents, and the redrawing of many of the figures to make them more readable. Also, it should be noted that the cartoons used in the first edition have disappeared from the second edition. The material in the original first chapter (of the first edition) is expanded and split up into the first four chapters of the second edition. Much of the added material consists of new and expanded definitions of terms. There is also an added section, in Chapter 3, on Lehman's Laws. Several new case studies are used in these introductory chapters to raise issues around some of the basic concepts, e.g. the ‘maintain or scrap’ decision. The new edition also preserves a very thorough and important discussion of the context of maintenance, including human, organizational, and technical factors. Most of the remaining chapters in the second edition correspond to chapters in the first edition, but they are somewhat reorganized and, as mentioned previously, organized into ‘parts’. Many of the chapters are essentially unchanged, but there are some important additions to several of them. Chapter 5 deals with maintenance process models and retains detailed descriptions of such models as the ‘quick-fix model’, Boehm's model, Osborne's model, the iterative enhancement model, and the reuse-oriented model. The new edition, however, also includes a section on process maturity, including a discussion of the Capability Maturity Model and experience bases for maintenance. Chapters 6–10 make up Part II of the new edition, titled ‘What Takes Place During Maintenance’. These chapters address the nuts and bolts of maintenance, including program understanding, reverse engineering, reuse and reusability, testing, and management and organizational issues. The introduction to Part II is especially useful, with an overview of the various tasks involved in maintenance and the relationships between them, and some very nice discussion points about the complexities of these tasks. The chapters in this part are largely unchanged from the first edition, with a few notable exceptions. As mentioned earlier, there are several added case studies in these chapters, as well as an expansion of definitions. Also, in Chapter 6 (on program comprehension), a brief section on reading techniques has been added. Chapter 6 also retains a very thorough and well-constructed summary of the published research in this area from the first edition. Chapter 7, on reverse engineering, is unchanged from the first edition. It covers several related topics, including re-engineering, restructuring, and redocumentation. Motivations for reverse engineering, such as facilitating migration between platforms, improving documentation, extracting reusable components, and detecting side effects, are also discussed. Supporting techniques (e.g. restructuring, re-engineering) are described briefly, but no technical details or how-to explanations are given. The chapter on reuse and reusability (Chapter 8) borrows heavily from the first edition as well, including a broad concept of reuse of process and personnel, as well as reuse of all types of software products. Reuse is discussed in terms of its role in maintenance, as well as in the broader sense. Several topics are covered, including composition-based reuse, domain analysis, and components engineering. The harvesting of components from existing systems through reverse engineering is also discussed. There is also a discussion of technical (e.g. programming languages and how information is represented) and non-technical (e.g. expense, not-invented-here, and legal issues) factors that affect the degree of reuse that is possible in a given situation. New in this edition is an added case study, as well as a new section on component-based processes. Chapter 9 of the new edition is on testing, which is a topic mostly missing from the first edition. The chapter is completely new and starts with a somewhat philosophical, but very relevant, discussion of the purpose of software testing. Then there is a little bit about choosing test data, an overview of basic types of testing (e.g. black box vs white box), coverage of verification and validation, and test planning. The Therac 25 case study is presented in some detail. While the addition of a chapter on testing is a benefit in the new edition, this chapter really doesn't present anything particularly specific to maintenance. What might have been more useful would have been a more technically in-depth treatment of testing in general (e.g. more coverage of techniques, more detail on test plans), or a treatment of the subject that was more specific to maintenance (e.g. a discussion of regression testing and its role in maintenance). The chapter on ‘Management and Organizational Issues’ (Chapter 8 in the new edition) is preserved nearly intact from the first edition. Much of the chapter is related to human resources and the ‘image problem’ associated with maintenance. The chapter ends with a discussion of organizational ‘modes’, meaning how maintenance and development are combined in the larger organization, as well as possible structures for maintenance teams. Parts III and IV of the book encompass four chapters on various cross-cutting issues in software maintenance, such as configuration management, maintenance measures, maintainability, and tools. The introductions to these parts, as with the previous ones, are very nice and provide some good discussion points. The content of these four chapters is largely the same as in the first edition, but with a few notable additions. The chapter on configuration management includes some new case studies that were not in the first edition. CM itself is described in terms of the types of activities it encompasses, its objectives, and an example problem whose solution demonstrates the various aspects of configuration management. Topics such as version control, building, environment management, process control, change control (including the role of a Change Control Board), and documentation are all covered, but not in a lot of detail. Chapter 12 deals with maintenance measures and is slightly reorganized compared with the first edition. The chapter includes extensive descriptions of the most commonly used measures of size, complexity, quality, understandability, maintainability, and cost (including a brief description of COCOMO). The chapter on maintainability (Chapter 13) includes a new case study that was not in the first edition, as well as an added section on impact analysis. The lack of any coverage of impact analysis in the first edition of the book was a source of concern expressed in my review of that edition. So I was very pleased to see this new section. Unfortunately, it is only a small step towards an adequate treatment of this crucial topic in software maintenance. The section is very brief and cursory. It is also uncharacteristically disorganized, and riddled with typos and grammatical errors. Most importantly, it is not clear what the relationship is between impact analysis and maintainability, and why this section is in this chapter. On the other hand, the inclusion of impact analysis as a topic in the book is a definite step forward, and some useful references are provided for the reader to learn more. Apart from these added pieces, the chapter retains an extensive discussion of quality assurance as well as a presentation of two modern trends in software development, fourth generation languages and object orientation, and their effect on maintainability. The last chapter of the book, on tools for maintenance, presents the same content as in the first edition. A taxonomy of maintenance tools is discussed, with brief descriptions of the types of tools in each category of the taxonomy. The book ends with ‘Part V’, which has no additional chapters, but constitutes a conclusion for the book and presents some future research areas with very brief descriptions of each. The research areas discussed include those presented in the first edition (reuse, support tools, software measurement, and program comprehension), but also adds a few new ones (classification, software experience bases, and the software maintenance process). As an aide to classroom instruction on software maintenance, the second edition of Grubb and Takang remains the best option I am aware of and provides several advantages over the first edition. Improved instructional aids include many new case studies and a set of discussion points, both of which are extremely well suited for classroom use, as the basis for classroom discussions, exercises, or exam questions. In addition, in almost every chapter, the sets of definitions of basic terms have been expanded and clarified. There are a few added topics in the new edition, including testing, code reading, component-based processes, process maturity, Lehman's Laws, and impact analysis. These are all important topics to include and constitute nice additions. The new edition also retains all of the strengths of the first edition. There is a very extensive bibliography, even more so in the new edition, and a detailed index. The writing style throughout is clear and highly accessible. One of the most appealing aspects of the book (both editions), however, is its broad view of what is relevant to software maintenance, including human, organizational, and technical factors. There are a few weaknesses that remain in the second edition, however. The most troublesome is the lack of an adequate discussion of impact analysis. A new section has been added on this topic, but it is very brief and does not provide any guidance on how impact analysis is done or what its outputs would be. Another limitation of the book is its lack of technical depth. The reader is not given enough information to actually apply most of the concepts presented. An instructor wanting to assign a hands-on maintenance exercise, for example, would have a hard time basing one on the material in the book. While the discussion points and some of the exercises are useful in the classroom as the basis for discussions or essays, and some of them give good ideas for more technical assignments, they do not provide enough material to use directly in that way. In summary, Grubb and Takang (or Takang and Grubb if you're using the first edition) remains a very good text upon which to base a university-level software maintenance course. It would also be useful to practitioners, especially those in a position to oversee or manage maintenance activities, by giving them an overview of the tasks their employees will be engaging in. For researchers, it could serve as a useful reference as well.

Referência(s)