Introduction

In almost any software development environment, the various work documents used (e.g. requirements documents, code and design plans) require continual review and modification throughout the lifecycle. This is due to the central role such documents play in many software engineering tasks (e.g. verification and validation, maintenance, evolution, and reuse). Software reading, i.e., the individual analysis of textual software work products aimed at achieving whatever degree of understanding is needed to accomplish a particular task, is thus a key technical activity for software development. We divide software reading activities into two distinct types: reading for analysis and reading for construction. Through our work in the Software Engineering Laboratory (SEL), we have evolved our understanding of reading for analysis, using a variety of experimental designs [Basili96a, Basili96b].

The reading techniques presented in this lab package are classified under Reading for Construction, which is aimed at answering the question: Given an existing artifact, how do I understand how to use it as part of my new system? Reading for construction is important for comprehending what a system does, what capabilities exist and do not exist; it helps us abstract the important information in the system. It is useful for maintenance as well as for building new systems from reusable components and architectures [Basili96b]. We chose to focus on the understanding of object-oriented frameworks as the artifact to be used in system development. An object-oriented framework is a class hierarchy augmented with a built-in model that defines how the objects derived from the hierarchy interact with one another to implement some functionality. A framework is tailored to solve a particular problem by customizing its abstract and concrete classes, allowing the framework architecture to be reused by all specific solutions within a problem domain. By providing both design and infrastructure for developing applications, the framework approach promises to develop applications faster [Lewis95]. The most popular frameworks are in the GUI application domain (e.g. MacApp, ET++, CommonPoint) and in the drawing domain (e.g. HotDraw, UniDraw) but frameworks have also been developed in other domains such as multimedia, manufacturing, financial trade, and data access.

The choice to focus on frameworks was motivated primarily by two reasons:

  1. Frameworks are a promising means of reuse. Although class libraries are often touted as an effective means of building new systems more cheaply or reliably, these libraries provide only functionality at a low level. This forces the developer to provide the interconnections both between classes from the library and between the library classes and the system being developed. Greater benefits are expected from reusable, domain specific frameworks that usefully encapsulate these interconnections themselves.
  2. Frameworks have associated learning problems that affect their usefulness. The effort required to learn enough about the framework to begin coding is very high, especially for novices [Taligent95, Pree95]. Developing an application by using a framework is closer to maintaining an existing application than to developing a new application from scratch: in framework-based development, the static and dynamic structures must first be understood and then adapted to the specific requirements of the application. As in maintenance, for a developer unfamiliar with the system to obtain this understanding is a non-trivial task. Little work has yet been done on minimizing this learning curve.

Web Accessibility