Reuse-Based Software Engineering : Techniques, Organization, and controls

H. Mili, A. Mili, S. Yacoub, and E. Addy

John Wiley & Sons, N. Y., 2002, ISBN 0-471-39819-5

In this book, we study reuse-based software engineering from a technical, organizational, and managerial point of view. This book combines state of the practice techniques and guidelines with state of the art—but eminently applicable—research results in both, object-based development techniques (frameworks, component models, separation of concerns methods), and reuse organizations and economics (reuse metrics, ROI models). The material is organized in seven parts (23 chapters, 600 pages), described below. A detailed outline is available through this link

In part I (chapters 1 – 3), we introduce the field of software reuse by discussing in turn the state of the art, the state of the practice, and the future prospects of this field in three different areas, which are:  reuse products, reuse processes and reuse paradigms (chapter 2).  Then we introduce and discuss a distinction that pervades the organization of the book, which divides issues into technical aspects, organizational aspects, and economic aspects (chapter 3).  We also discuss in this part some of the recent software reuse initiatives; we believe that the history of these initiatives holds several useful lessons about the current status and the future evolution of this discipline.

In Part II (chapters 4 – 6), we discuss the organizational aspects of software reuse, including team organizations (chapter 4), support services (chapter 5), and the institutional measures that must be taken to introduce reuse (chapter 6).  As far as team structures are concerned, we catalog a list of criteria that characterize team structures, which we then use to assess several alternative structures.  Support services include configuration management, quality assurance, testing, V&V, risk management, and certification; while these activities are well understood in the general context of software engineering, they require special consideration in the case of software reuse.

Part III (chapters 7 – 9) deals with domain engineering in general, paradigm-independent terms. Chapter 7 provides an overview of domain engineering issues, and defines reusability as a combination of two fairly independent characteristics, usefulness and usability. Usefulness relates to how general a component is, regardless of packaging. Usability relates to the packaging of the component, in terms of ease of use and integration, regardless of how often it is needed. Chapter 8 discusses domain analysis, where the emphasis is on usefulness. Chapter 9 attempts a comparison of the declarative, functional, and object-oriented paradigms from a usability perspective. We advocate multi-paradigm development as a way to achieve the best usability across the application domain.

Part IV (chapters 10 – 14) deals with object-oriented domain engineering, and represents the heart of the technical contents of the book. We introduce object orientation in chapter 10. Chapter 11 discusses abstraction techniques at all levels of development, including inheritance, specialization, metamodeling, metaprogramming, anda number of structural and behavioral abstraction design patterns. Chapter 12 discusses composition techniques. We study, in turn, language-based composition (constraint and rule-based extensions to OO languages), new modularization techniques (subject-oriented programming, aspect-oriented programming, and a number of lesser known “separation of concerns” methods), and compositional design patterns. Chapter 13 discusses application frameworks, as an example of a wide-scale, systematic application of abstraction and composition techniques. We illustrate some of the concepts with examples from Java’s GUI framework. Chapter 14 discusses the role of architecture in reuse. After an overview of software architectures, we introduce architectural frameworks as domain-independent frameworks whose purpose is to support an architectural style. The CORBA, COM, and EJB component models are used to illustrate such frameworks.

Part V (chapters 15 – 17) deals with application engineering in the context of reuse, or put more simply, developing with reusable components. Chapter 15 discusses variants of application engineering lifecycles, depending on the maturity of the reuse domain. The subsequent chapters discuss more thoroughly two key activities in developing with reusable components; a) component retrieval (chapter 16), where the emphasis is on library methods, and b) reusable component integration (chapter 17), where the emphasis is on process and quality issues. 

In Part VI (chapters 18-20), we discuss the managerial aspects of software reuse, by discussing software engineering metrics, software reuse metrics, software engineering economics, and software reuse economics.  The book discusses software reuse economics by identifying four distinct partners in the software reuse process, and quantifying the return on investment that each partner is trying to optimize.  The proposed ROI-based model illustrates how we can make reuse happen, not by preaching or lecturing, but rather by fine-tuning the mechanisms of incentive and reward in such a way the organizational goals are achieved while each partner is trying to achieve his/her own goals.  Our discussion of software reuse metrics presents metrics of interest and discusses what measures must be taken to monitor and control these metrics to standard levels.

Practicing software reuse involves implementing a set of changes to the development of software at the organizational, managerial, and technical dimensions. Implementing a reuse program means making choices and trade-offs along each of these dimensions. Part VII discusses trends, which correspond to specific combinations of these different aspects, that are representative of industry practice. These are component-based software development (CBSD, chapter 21), product-line engineering (PLE, chapter 22), and COTS-based development (COTS, chapter 23).

An appendix provides a list of software reuse resources (bibliography, web sites, conferences), as well as definitions of term projects appropriate for an introductory graduate course on software reuse.