Appears in Proceedings of the International Conference on Software
Reuse, Orlando, FL, ACM, New York, April, 1995.
Accelerating the Successful Reuse of Problem Solving Knowledge
Through the Domain Lifecycle
Department of Computer Science
& Engineering
University of Nebraska-Lincoln
scotth@cse.unl.edu
Abstract
The inability of software reuse to reach its full potential lies partially
in the product-centric way in which we view software development. Methods
are needed that help us reason about product families and degrees of support
that can be offered for problem domains. This paper uses a "domain
lifecycle" to formalize a process in which increasing levels of formality
can be provided as a domain matures. The first step in this process is to
collect and disseminate project experiences that can accelerate the process
of identifying and refining application domains with significant impact
in a software development organization. This approach facilitates the reuse
of a broad spectrum of knowledge at multiple levels of formality. Based
on empirical investigations of a software development organization, a prototype
of a case-based organizational memory repository for software development
practices is presented and assessed for its impact on reusing software development
knowledge.
Keywords: domain analysis, organizational learning, reuse
repositories, broad-spectrum reuse
Table of Contents
Introduction
Supporting the Domain Lifecycle
An Organizational Memory Repository for
Software Development
Structure of the Case-Based Repository
Knowledge Dissemination
Constructing Domain Knowledge Through a
Community of Practice
Changes to Development Practice
Related Work
Conclusions and Future Directions
References
Introduction
Research in software reuse has observed that most successful reuse efforts
have been achieved using collections of components within well-defined and
well-understood domains. "Biggerstaff's Rules of Three" [34] states
that unless three real systems have been built in the domain, it is unlikely
that the details required for successful reuse can be derived. In many ways
this is unfortunate as tool builders are providing the largest degree of
support for those problems that require the least amount of support. If
the domain is mature, then people and artifacts exist that can supply the
necessary background for solving the problem, reducing the need for sophisticated
support models. A potentially larger return on investment lies in support
for problems that have not yet matured, but for which some isolated solutions
have been explored.
It has been suggested that "The defining characteristic of good reuse
is not the reuse of software per se, but the reuse of human problem solving"
[4][p. 13]. To accelerate the process of turning isolated problem solving
episodes into reusable assets, tools are needed that manage knowledge assets
and support their refinement into reusable software artifacts. Not only
must mature domains be supported with formal reusable artifacts and domain-specific
languages and tools, but initial information about emerging domains needs
to be captured and disseminated. Initial trail-blazing efforts begin by
documenting significant problems and their solution as part of the development
process. This information is initially structured as "we had this problem
and here's how we chose to solve it for our situation." This represents
critical knowledge that begins to explore problem domain and its potential
solution space. As subsequent development efforts further explore these
issues, domain knowledge begins to emerge that can be transformed into domain
models or other domain-specific assets. Initial problem solving episodes
lay the initial groundwork that can support subsequent development efforts
by showing examples of how similar problems have been solved.
Previous observations of a large development organization [21] have demonstrated
that knowledge of how CASE tools can be adapted to organization-specific
problems plays a significant rile in the development process. This "tool
mastery burden" [10] occupies a sizable part of developer's time, not
only because of the steep learning curves for CASE tools [22], but because
a great deal of effort goes into using these resources to solve the domain
specific development problems demanded by the organization's business needs.
Off-the-shelf CASE tools are not sufficient by themselves. Organizations
need to build "scaffolding" [9] around these tools that adapt
them to the specific kinds of problems encountered in the organization.
Reusing this scaffolding and other kinds of knowledge can provide the kinds
of productivity and quality improvements that software reuse techniques
strive to achieve.
We have been exploring these issues with an in-house software development
organization for a major railroad corporation in the U.S., Union Pacific
Railroad (UPRR). This organization employs about 300 developers and managers
to develop sophisticated information systems to help run their business.
Projects are typically small to medium-scale, with about 26 currently active
projects. This distribution of knowledge makes communication between projects
difficult, making the need for domain analysis and organization-wide reuse
efforts all the more important. The focus of our project has been to help
UPRR understand how CASE tools can be used more effectively by identifying
techniques used successfully in different domains. As opposed to conducting
a static domain analysis, our approach has been to develop the infrastructure
to help organizations create their own domain knowledge. To accomplish this,
we have used an "industry as laboratory" approach [30] where we
study the software development organization to understand the pragmatic
issues involved in developing software systems. From these observations
we have developed an organizational learning approach to software development
in which problem solving knowledge is refined from isolated problem solving
episodes to reuse-oriented design environments that formalize knowledge
in a domain that is important to the organization.
In what follows, we begin by introducing an organizational learning approach
to software development through a domain lifecycle that formalizes the maturation
process of domain knowledge. The domain lifecycle defines a multi-year research
effort we are conducting with UPRR and other development organizations.
This paper is a preliminary report that primarily describes the issues we
have encountered in developing a case-based repository defining an organizational
memory for software development knowledge. A third generation prototype,
named BORE , is used to instantiate and explore these issues. The examples
used focus on knowledge about using tools to solve problems. This is meant
to demonstrate the kinds of development infrastructure that needs to be
created, and not to argue that tool knowledge is the only or most important
form of knowledge needed by software developers. We have also been researching
project-specific knowledge [21] and interface guidelines [20] as other forms
of knowledge needed in our approach. The paper concludes with a brief overview
of related research and an assessment of our experiences thus far.
Supporting the Domain Lifecycle
Support for software development and reuse is needed for new and evolving
domains as well as mature domains. Our approach is to provide the means
to support a domain lifecycle [31] in which appropriate levels of
support is provided as a domain matures from a couple of isolated instances
to a well-understood domain with well-defined bounds. This process is supported
with case-based reasoning tools that capture problem solving experiences
within an organization to identify specific solutions to problems faced
by software developers throughout the development lifecycle. As experiences
accumulate, the organization collectively learns about the domains so people
can begin to build a culture based on success, avoid duplicate efforts,
and avoid repeating mistakes. This defines an organizational learning approach
to software development that naturally incorporates reuse into the product
and domain lifecycles.

Figure 1: Organizational Learning Support for the Domain Lifecycle.
Figure 1 depicts how an organizational learning approach to software
development supports the domain lifecycle. As frequently encountered problem
domains mature from novel problems to repeated problems to a fully mature
domain, support is provided in increasing levels of automation. CASE tools
supporting the three main steps in the domain lifecycle are identified:
- A case-based repository collects experiences from individual
projects, tool experiences, and other artifacts generated to support the
development infrastructure of the organization. Project experiences and
design artifacts are collected through a process of issue management and
design rationale that describes the problems that are addressed while creating
an application. Tool experiences are how-to advice and descriptions of problems
encountered while developers are using a tool to develop software. This
provides solutions to organization-specific problems that are not found
in manuals. Reusable artifacts can be in the form of procedures for approaching
a problem (process models), software modules, specifications, requirement
documents, algorithms, designs, test suites, and other items generated in
the course of a project.
- Domain abstractions are domain-specific
models of design problems, including domain models, design guidelines, value-added
reusable artifacts, domain-specific handbooks, process models, design checklists,
analyzing similarities and differences between systems, and other forms
of knowledge. Domain-specific knowledge is created by a domain analyst refining
knowledge contained in the case-based repository into forms that are more
generally applicable to problems frequently encountered in the organization.
- Domain-specific design environments
automate or provide knowledge-based support for the development of systems
within well-established domains. The environments are created by tool designers
using accumulated knowledge from the domain models, specific cases, and
reusable artifacts from the case-based repository.
These steps define increasing levels of automation and support mirroring
domain maturity. Problems that have yet to be analyzed are supported by
searching for similar problems in a case-based repository of project and
tool experiences. The cases will contain information that is specific to
the original project and may need work to apply to the current context,
but at least there are some prior experiences to help guide design decisions.
As activities are repeated, case-based technology is employed to identify
recurring development issues and support the process of generalizing from
individual cases to domain-specific abstractions such as design guidelines,
domain models and other formal structures. Using handbooks, guidelines,
and domain models provides a generalized level of support as the knowledge
has been processed by domain analysts into a form that is applicable to
general problems in the domain. As the domain matures, tool designers can
use the synthesized knowledge and components to construct design environments
that automate development tasks and provide intelligent support for mature
domains repeatedly encountered in the organization.
This paper will primarily focus on the infrastructure needed to create a
case-based repository of problem solving experiences. We are currently in
the process of developing domain abstractions in the domain of security
issues for client/server application that includes not only network security
issues, but controlling access to application components for users with
specific access rights. We are also investigating component-based software
development frameworks [12, 25, 29] as an infrastructure to construct design
environments that create customized frameworks for significant portions
of an application. We introduce the domain lifecycle here to underscore
our conviction that collecting and disseminating informal, and at times
anecdotal, information is a first and necessary step to accelerating the
process of domain analysis.
An Organizational Memory Repository for Software
Development
Creating an organization memory repository for problem solving experiences
is a first and necessary step in supporting the domain lifecycle. Case-based
technology [24] is one approach to creating such a repository. A case-based
repository for decision support helps users reason "from old cases
or experiences in an effort to solve problems, critique solutions, explain
anomalous situations, or interpret situations." [23][p. 53]. Similar
to design patterns [15], cases bundle together a description of the problem,
its solution and the context for the problem and solution. This has the
advantage of putting all the information a person needs to adopt a solution
in one place. Users of a case-based organizational memory repository begin
the problem solving process by describing a problem to the case-based system.
The system retrieves cases with similar features. Using these cases as a
basis for decision making, the user adapts case solutions appropriately
to meet their specific problem solving needs.
A case-based approach to problem solving goes against the traditional focus
of abstraction in software reuse approaches [26]. There is a trade-off between
generally applicable knowledge and specific knowledge. Specific knowledge,
when it applies, provides more powerful support because it can be easily
adapted to the current situation. The problem is that it is only applicable
to a narrowly defined problem situation, creating the desire to generalize
the knowledge for wider applicability. General knowledge will need to be
instantiated in some manner before it can be used. Of course, automatic
specialization of components eliminates this problem, but these second-order
library techniques are most applicable to mature domains [8], and our concern
is to provide some support for emerging domains and lay the foundation for
creating generative and transformation-based approaches. As cases accumulate,
the applicability problem of specific cases diminishes while providing some
examples of how a problem can be approached.
Therefore, the case-based repository provides a valuable level of support
by itself. In fact, studies of usability guidelines has uncovered problems
with using generalized information that needs to be converted into design
rules that are immediately applicable. Designers had trouble interpreting
the guidelines and understanding their applicability to the problem at hand
[33]. Specific examples were found to be most useful. Even when the examples
did not match the design problem, designers found them useful for understanding
guidelines and how they could be applied. Augmenting generalized knowledge
with concrete cases (examples) help designers interpret the information,
making it easier to comprehend and apply to the current design problem [20].

Figure 2: The Case Window.
Structure of the Case-Based Repository
The central element of a case-based repository is the case. Figure 2 shows
the user interface for a case in BORE. The case is titled "Data Window
Retrievals Functions Available" and consists of nine fields describing
the case. The 'Description' field provides a description of the problem
and 'Solution' describes the solution to the problem. The 'Characteristics'
field displays key terms used to index the case. The 'Resources For This
Case' shows a number of resources that are used in this case or otherwise
serve to describe the context in which this case works. 'Source Code' is
the type of resource currently selected which shows the names of reusable
functions. Other types of resources include tools, project issues, people,
and development methods. 'Resource Categories' shows the links in the repository
to which this case is attached. For example, the case shown in Figure 2
is linked to the 'Reusable Objects' attribute of the 'PowerBuilder' tool
descriptor in the 'Tools' resource (see Figure 3). Using the 'Link Resource
Category' to add a new link to the case is demonstrated in a later section.
The 'Related Cases' field shows links between this case and related cases.
Finally, the bottom of the window shows some general accounting information
about the owner(s), the current status of the case resolved, unresolved,
or active) and the date of case creation.

Figure 3: Viewing the Resource Descriptor for PowerBuilder.
Links in the repository are used to organize the cases by specific development
resources, such as CASE tools, development methods, projects, or people.
Resource descriptor windows, such as the one shown for the PowerBuilder
tool in Figure 3, are one-stop locations to get information on a specific
resource. The attributes displayed in the resource descriptor interface
are instantiated by cases. Note, for example, that the "Data Window
Retrievals Functions Available" case is displayed in the 'Reusable
Attributes' field for PowerBuilder. Double-clicking on one of these case
titles will display the full case window as shown in Figure 2.
The attributes shown in the resource descriptor field are dependent on the
type of resource. The fields we have chosen for the 'Tools' resource were
derived from a number of Lotus Notes databases used to exchange information
at UPRR. The Description field gives a brief description the tool. The How-To
field contains tips and techniques that have been used to solve problems
with the tool. The entries in this and the rest of the fields point to cases
in the repository that can be displayed by clicking on the entry. Notice
that the How-To entries contains organization-specific knowledge about how
the tool is used in the development context at UPRR which includes an eclectic
mix of other off-the-shelf CASE tools, in-house systems, projects, and other
issues. For example, 'TCS' refers to the "Train Control System",
a mainframe application used to collect large amounts of data about the
railroad, while 'Watchdog' refers to an existing project.
The Caveats field is intended to collect information about idiosyncratic
issues users may need to be aware of when using the tool. For example, some
UPRR projects have discovered that PowerBuilder's control of the system
can interfere with communications software. The Projects field collects
all the UPRR projects that have used this tool. Open Questions is a forum
for unresolved questions. Once an open question is answered, it should migrate
to the How-To or Known Bugs and Fixes field. The Known Bugs and Fixes field
holds information about bugs with the tool or using the tool in certain
environments. Fixes and work-arounds are displayed in indented text. Reusable
Objects points to information about reusable objects associated with the
tool along with pointers to the source. Standards holds corporate standards
for using the tool, naming standards, etc. General Info. helps users find
people with expertise about the tool. It includes local experts (TPM's are
Technology Product Managers that are assigned to tools to help developers
use the tool to its fullest potential). It also has contact information
for the CASE tool vendor.
Knowledge Dissemination
With over 90 different development tools in use at UPRR, choosing an appropriate
set of tools for a project is becoming a significant problem. The sheer
number of tools is a formidable barrier, but the complexity and overlapping
nature of these tools, ranging from operating systems, databases, and languages
to CASE tools, development methodologies and word processors creates an
information overload situation. Our approach to disseminating case-based
knowledge has been to provide CASE tools to support exploring the repository
[21]. Two methods are provided for retrieving and browsing information in
the repository. The first is to find a specific tool and search its categories
for needed information. The second is to search across all cases, receiving
matching cases that cross tool boundaries. These methods are described in
the following paragraphs.

Figure 4: Searching for Cases.
Finding Tool Information. Figure 3 demonstrates
how information about resources are viewed. The "Open a Resource"
window on the left-hand side of Figure 3 is used to choose a type of resource,
which includes tools, development methods, project issues, source code,
and projects. Once the type is chosen the user can choose a specific resource
from the scrollable window. Double-clicking on the resource name displays
the window on the right-hand side of figure, in this case the PowerBuilder
CASE tool. Recent feedback has indicated that with over 90 different tools,
another level of categorization may be necessary to make the process of
finding the tool easier. For example, the tools could be categorized by
CASE tool, operating system, word processor, etc. Users would then have
to choose the type of tool to get to the "View a Resource" window
shown in the figure.
Querying for Similar Problems. Developers
may not always need information that is tied to a specific tool. In these
cases we have provided users with a search mechanism that finds cases across
different tools and projects. Figure 4 shows the query interface and the
result of a query about combo boxes for access to TCS (Train Control System)
databases. The matching cases shown in the window on the right-hand side
of Figure 4 display the titles of cases and the description field of the
selected case. Double-clicking on the title of selecting and choosing "View
Case" displays the case's window. In this instance the user has chosen
to search the entire repository of cases. By choosing the "Restrict
By" box, the user can restrict the search to a particular type of resource
and (optionally) a specific resource (such as PowerBuilder or IEF).
Searching can be performed through either an exact or partial match retrieval
algorithm, depending on which button the user chooses (see upper right-hand
side of the 'Case Search' window in Figure 4). Cases are indexed by key
terms and phrases called "characteristics", as shown in Figure
2. Characteristics define a controlled vocabulary that fits many organizations
where standard terminology and acronyms are often used to communicate common
issues [21]. Choosing the exact match button retrieves all cases that are
indexed by any the characteristics specified in the query (i.e. a Boolean
OR of all query terms). This method uses a simple inverted index to find
cases. Simple matching techniques have been shown to inadequately support
the process of satisfying an information need, especially when the query
is ill-defined [7, 18]. Methods are needed that can retrieve noisy and inexact
patterns with a soft matching retrieval algorithm. This is accomplished
by choosing the 'Partial Match' button, which uses a spreading activation
algorithm that retrieves cases either matching or associatively related
to query terms (a technical description of this search method can be found
in Henninger (1995) [19]). Each time a search is requested a new 'Matching
Cases' window appears, allowing users to modify the query and compare results.
This query method is invaluable not only for answering specific queries,
but for finding out what kinds of type of problems a given tool can be used
for. By querying the repository for a given problem, cases are returned
that match that kind of problem. By perusing the tools that have been used,
one can begin to understand which tool should be used for a particular problem.
For example, it could be found that the CASE tool IEF (Information Engineering
Facility) has been used for a number of systems in which access to windows
and buttons need to be secured for certain users. Using this tool for a
development project with similar requirements ensures that some of the issues
have already been documented, and increases the likelihood that reusable
objects exist.
Constructing Domain Knowledge Through a Community
of Practice
Developing a large-scale, real-world, knowledge base to support the development
process is not a simple matter of engaging in an up-front knowledge acquisition
effort. A process of continuous incremental refinement [32] must be in place
so the repository can evolve as new problems and solutions are discovered
[14]. Generally there are two approaches to knowledge acquisition in software
design environments. The first is to take the naïve position that designers
will readily perceive the future benefits of engaging in the often difficult,
and always extra, task of putting knowledge into the system. A second approach
is to appoint a "knowledge librarian" to maintain a knowledge
base. While this shifts the workload away from developers and ensures that
the knowledge base is continually updated, it does not ensure that relevant
and accurate information is acquired.
This brings us to a third approach that utilizes the collective knowledge
of the people in an organization to truly create an organizational memory.
The method is to provide knowledge acquisition tools that help developers
document their work and coordinate with other project members. Our studies
have shown that there are currently many information collection activities
in development practices at UPRR [21]. Managers and developers were observed
devoting 30 - 40% of their time to knowledge collection activities such
as entering tips and techniques into Lotus Notes databases, writing up meeting
notes, and coordinating development activities. Scribes are often appointed
at meetings to take notes and keep track of action items.
The primary knowledge collection tool for our repository is the case window
(see Figure 2). When documenting a problem, a developer can either begin
by modifying an existing case and saving it with a new name or creating
an empty case. To allow the creation of unresolved cases, all of the fields
are optional. Developers can therefore create place holders for issues that
have been identified but not yet resolved. The repository can be analyzed
for unresolved cases to find common issues that are currently being worked
on. As developers work on the problem, they can modify the case to show
progress or enter the final solution to the problem. We are working on tools
that can be used to document and manage projects through the maintenance
of cases in the repository, modifying current documentation practices to
take advantage of BORE's capabilities. The advantage of project documentation
with BORE is that a single repository contains information on all projects.
Reuse is enhanced, and documentation effort can be reduced by simply pointing
to cases that are re-used.

Figure 5: Linking Cases to a Resource Category.
The case shown in Figure 2 directs users toward some reusable source
code that has been developed for the PowerBuilder platform. Associating
this case with the "Reusable Objects" category of the PowerBuilder
tool will help other PowerBuilder users find this resource. Clicking on
the "Link Resource Category" button in the case window of Figure
2 brings up the window shown in Figure 5. We used a different case for this
image that has to do with asynchronous processing with the IEF tool. After
clicking on the "Done" field the case will become associated with
the "How-To" category of the IEF tool. The case will appear on
the "Resource Categories" combo box in the case's window and can
be chosen from the "How-To" field in the tool window (shown for
the PowerBuilder tool in Figure 2). Cases can be associated with any number
of attributes in any of the resource descriptors.
Changes to Development Practice
Making an organizational learning approach to software development work
involves more than technology and supporting CASE tools. Changes to development
practices are needed to integrate tool usage into the development process.
In the very least, development becomes a process of basing decisions on
previous experiences, thus advocating reuse throughout the development process.
Institutionalizing reusability procedures in organizations is currently
a hot topic, and few cases of true organizational change have been reported
[17]. The domain lifecycle itself advocates viewing software development
as producing product lines [16, 31] with implications across the organization.
This is a sizable departure from the current software development culture,
which focuses exclusively on development projects.
The strength of the domain lifecycle is that proper levels of formalization
can be applied as a domain matures. When the domain is new or the issues
will not necessarily recur, keeping a semi-formal case-based repository
will suffice. This kind of process is in alignment with many development
organizations that are using informal e-mail and discussion database software,
such as Lotus Notes, to disseminate and archive information. It is, in many
ways, an extension of the traditional office memorandum and filing cabinet
method. It is not until a domain has recurring problems or is part of the
development network that more formal methods need to be applied. This allows
a level of discrimination in terms of what kind of documentation and rigor
is needed for a given problem. As opposed to applying rigorous methods universally,
developers can place their time and effort where it is needed the most.
The other strength of the organizational learning approach is that it embraces
diversity. Instead of trying to fit CASE tools into problems or domains
they are not well-designed for, this approach seeks to learn which tools
is best for a given type of problem. This flexibility allows people to work
with familiar tools and process models, but comes with the potential expense
of having to train developers in a wide range of CASE tools. Our observations
at UPRR indicate this happens anyway, but we are investigating ways in which
the expertise of project members can provide an input to the process of
choosing and using CASE tools.
Related Work
Our work applies techniques from artificial intelligence and human-computer
interaction to software engineering problems. In many respects our approach
operationalizes the domain analysis prescription to identify reusable information
in the problem domain, capture relevant information, and evolve the information
to meet current needs [2]. Efforts to create wide-spectrum [27], or comprehensive
[6] reuse methods are quite similar in focus to our approach. Lubars focused
mainly on code-related knowledge such as algorithms, data types, and abstract
designs. Basili and Rombach are much closer to our approach by defining
a reuse candidate as any type of experience accumulated in the context of
software projects. They write in particular about practices, methods, tools
and the development process. The difference between their approach and our
is their focus on abstract models of reusable artifacts and the schemes,
meta-schemes and reference architectures used to organize this information
[5, 6]. Our approach is unique in that we start with concrete instances
and move toward more widely applicable models. We have also presented some
specific tools that can be used to support our approach.
There are also a number of similar efforts that focus on domain analysis
at the component and algorithm level. The experience factory [5] defines
an organizational framework that separates component design from application
development, but largely focuses on "experience" at the level
of source code components. Technology books formalize knowledge about algorithms
and formal models for classes of problems[3]. While this research has focused
on the end products, tools, methods, and handbooks, Simos' notion of an
Organon views domain analysis as a continuous, incremental, process that
leads to the domain lifecycle that follows the maturation of a domain [31].
Our approach combines some of these ideas and provides CASE tools that can
help an organization accumulate and use expertise to streamline the entire
development process.
Design rationale techniques, which advocate a process of deliberation in
which design decisions are reached by consulting the design issues an alternatives
stored in a repository [13], have also had a significant impact on our approach.
Our goal will be not only to capture the rationale of why a system was designed
a certain way, but also what occurred as a result of the decision, and how
future efforts of a similar nature can be improved.
Our approach is also very close in spirit to the patterns movement in the
object-oriented community [15]. A pattern, which has the elements of a name,
a problem description, a solution, and the consequences of applying the
patterns, has the essential attributes of a case. The perspective of the
pattern community, which is attempting to write down some of the folklore
of the object-oriented community is also shared by our approach. The major
deviation is that patterns are restricted to object-oriented designs and,
while useful, only define one kind of knowledge that we wish to capture
in our repository.
The closest efforts to ours have focused on creating corporate repositories,
often referred to as organizational memory. Answer Garden [1] was built
to capture recurring questions in a central database using a branching network
of multiple-choice questions and answers. The Designer Assistant integrated
a repository with existing practices in a development organization at AT&T
[32]. An interesting aspect of this project is that modification of the
repository was included as part of the design review process, ensuring that
the Designer Assistant evolved with changing organization needs. We are
currently in the process of creating similar procedures in UPRR's design
process. The primary difference between our approach and the Designer Assistant
and Answer Garden is that our approach uses a repository of cases, whereas
the others are structured as an advice-giving systems. Part of the output
of a domain analysis could be a structured set of questions leading to a
piece of advice, but putting the knowledge in that form is labor-intensive,
and it has been noted that some users prefer a more open-ended mode of interaction,
especially when users want to find information on a subject area [32].
Much of the current research in software engineering and domain analysis
is at least tacitly based on the dubious premise that principles and models
are necessary to build artifacts. But scientific and engineering knowledge
begins with observation and can only create models after testing a number
of hypotheses. Bridge design and construction did not begin with a priori
knowledge of statics and dynamics. Instead, theories of statics and dynamics
were derived from experiences with real bridges. This approach brings the
scientific method to software development. It can empirically help developers
discover the intricacies of reuse in practice by collecting experience cases
and providing tools to detect common patterns of problem solving activities
that can lead to improved domain abstractions and software development tools.
Conclusions and Future Directions
To effectively support the knowledge-intensive activity of software development,
a continuum of problem solving knowledge from informal how-to information
to formal reusable frameworks needs to be collected and disseminated. Many
kinds of knowledge, including how to make CASE tools work in the specific
environment of an organization is necessary to make this work. To accelerate
the process of turning this knowledge into formalized reusable assets, tools
are needed that can support a domain lifecycle that takes an explicitly
cross-project view of the issues and development problems that recur in
an organization. Tools that collect and disseminate knowledge about specific
problem solving episodes are a first and necessary step in this process.
Centering the information around a single repository through an ongoing
process of capturing project experiences can prevent the duplication of
efforts, avoid repeating common mistakes, and help streamline the development
process. Similar projects have shown that such a system will be used by
development personnel, provided it contains relevant, useful and up-to-date
information [32].
Ongoing and future work is focusing on integrating the case-based repository
into work practices and developing tools to support the domain lifecycle.
We are working with a pilot project to refine our prototype and achieve
a better understanding of the kinds of problems and issues that have organization-wide
implications. We have also been investigating techniques that help domain
analysts detect recurring patterns of development problems across an organization
with the case-based repository [21]. Spreading activation [19] and analogy-based
matching [11, 28] can be used to identify cases with potentially similar
characteristics, but tools to support the creation of models and other domain-specific
tools are needed. The process of synthesizing similar cases into knowledge
that is applicable to a class of problems naturally supports the maturation
of domain knowledge. The repository provides a comprehensive and convenient
mechanism for performing the analysis. It is precisely this kind of support
for domain analysis that is necessary to help accelerate the process of
identifying and refining key domain knowledge.
A key question that exists for our work as well as work in the areas of
domain analysis, design rationale, and organizational memory, is how the
process of generating and using repositories of design information can be
embedded in the everyday practice of software development so that the repository
evolves with the ever-changing goals and accomplishments of the organization
[32]. Our approach advocates using the repository to both track project
progress and as an information resources to support design and decision
making. Much more work is needed to accomplish this goal. We are approaching
this problem in a user-centered or participatory design method in which
we deploy prototypes to collect feedback and refine our model to fit the
organization's needs. Successful deployment of this system will not only
help the software development process at UPRR, but will provide a crucial
first step toward better understanding the software development process
and how it can be improved.
Acknowledgments. I gratefully acknowledge the efforts of
Lynden Tennison and Jim Montequin at Union Pacific Railroad. I am also indebted
to a number of graduate students, particularly Kurt Baumgarten, Shawn Clymer,
and Kyle Haynes. This research is funded by the National Science Foundation
(CCR-9502461), Union Pacific Railroad, and the Applied Information Management
Institute in Omaha, NE.
References
[1] M.S. Ackerman, T.W. Malone, "Answer Garden: A tool for growing
organizational memory," Proceedings of the Conference
on Office Information Systems, 1990, pp. 31-39.
[2] G. Arango, "Domain Analysis: From Art Form to Engineering Discipline,"
Proceedings Fifth International Workshop on
Software Specification and Design, Pittsburgh, PA,
1989, pp. 152-159.
[3] G. Arango, E. Schoen, R. Pettengill, "A Process for Consolidating
and Reusing Design Knowledge," 15th International
Conference on Software Engineering (ICSE '93),
Baltimore, MD, 1993, pp. 231-242.
[4] B.H. Barnes, T.B. Bollinger, "Making Reuse Cost-Effective,"
IEEE Software, 8(1), 1991, pp. 13-24.
[5] V.R. Basili, G. Caldiera, G. Cantone, "A Reference Architecture
for the Component Factory," ACM Transactions on
Software Engineering and Methodology, 1(1), 1992,
pp. 53-80.
[6] V.R. Basili, H.D. Rombach, "Support for Comprehensive Reuse,"
Software Engineering Journal, 1991, pp.
303-316.
[7] N.J. Belkin, W.B. Croft, "Retrieval Techniques," in Annual
Review of Information Science and Technology
(ARIST), vol. 22, M. E. Williams, Ed., 1987, pp. 109-145.
[8] T.J. Biggerstaff, "The Library Scaling problem and the Limits of
Concrete Component Reuse," Third International
Conference on Software Reuse, 1994,.
[9] F.P. Brooks, The Mythical Man-Month, Essays on Software Engineering.
Reading, MA: Addison-Wesley, 1979.
[10] F.P. Brooks, "No Silver Bullet: Essence and Accidents of Software
Engineering," Computer, 20(4), 1987, pp. 10-19.
[11] P. Chaiyasu, G. Shanks, P. Swatman, "A Computational Architecture
to Support Conceptual Data Model Reuse by Analogy," IEEE Seventh
International Workshop on Computer-Aided Software Engineering
- CASE '95, 1995, pp. 10-19.
[12] G. Fischer, A. Girgensohn, K. Nakakoji, D. Redmiles, "Supporting
Software Designers with Integrated, Domain-Oriented Design Environments,"
IEEE Transactions on Software Engineering,
Special Issue on Knowledge Representation and Reasoning
in Software Engineering, 18(6), 1992, pp. 511-522.
[13] G. Fischer, A.C. Lemke, R. McCall, A. Morch, "Making Argumentation
Serve Design," Human-Computer Interaction,
6(3-4), 1991, pp. 393-419.
[14] B. Gaines, "Social and Cognitive Processes in Knowledge Acquisition,"
Knowledge Acquisition, 1(1), 1989, pp. 38-58.
[15] E. Gamma, R. Helm, R. Johnson, J. Vlissides, Design Patterns:
Elements of Reusable Object-Oriented Software. Reading,
MA: Addison-Wesley, 1995.
[16] H. Gomaa, L. Kerschberg, "Domain Modeling for Software Reuse and
Evolution," IEEE Seventh International Workshop on
Computer-Aided Software Engineering - CASE '95,
1995, pp. 162-171.
[17] M.L. Griss, "Software Reuse: From Library to Factory," IBM
Systems Journal, 32(4), 1993, pp. 548-565.
[18] S. Henninger, "Using Iterative Refinement to Find Reusable Software,"
IEEE Software, 11(5), 1994.
[19] S. Henninger, "Information Access Tools for Software Reuse,"
Journal of Systems and Software,
30(3), 1995, pp. 231-247.
[20] S. Henninger, K. Haynes, M.W. Reith, "A Framework for Developing
Experience-Based Usability Guidelines," Proceeding of
the Symposium on Designing Interactive Systems (DIS
'95), Ann Arbor MI, 1995, pp. 43-53.
[21] S. Henninger, K. Lappala, A. Raghavendran, "An Organizational
Learning Approach to Domain Analysis," Seventeenth International
Conference on Software Engineering, Seattle, WA, 1995,
pp. 95-104.
[22] C.F. Kemerer, "How the Learning Curve Affects CASE Tool Adoption,"
IEEE Software, 9(3), 1992, pp. 23-28.
[23] J.L. Kolodner, "Improving Human Decision Making through Case-Based
Decision Aiding," AI Magazine, 12(1), 1991,
pp. 52-68.
[24] J.L. Kolodner, Case-Based Reasoning. Morgan-Kaufman,
San Mateo, CA, 1993.
[25] W. Kozaczynski, E. Liongosari, J. Ning, A. Ólafsson, "Architecture
Specification Support for Component Integration," IEEE Seventh
International Workshop on Computer-Aided Software Engineering
- CASE '95, 1995, pp. 30-39.
[26] C.W. Kruger, "Software Reuse," Computing Surveys,
24(2), 1992, pp. 131-183.
[27] M.D. Lubars, "Wide-Spectrum Support for Software Reusability,"
in Software Reuse: Emerging Technology,
W. Tracz, Ed.: IEEE Computer Society, Los Alamos, CA, 1988, pp. 275-28.
[28] N.A. Maiden, A.G. Sutcliffe, "Exploiting Reusable Specifications
Through Analogy," Communications of the ACM,
35(4), 1992, pp. 55-64.
[29] W. Myers, "Taligent's CommonPoint: The Promise of Objects,"
IEEE Computer, 28(3), 1995, pp. 78-83.
[30] C. Potts, "Software-Engineering Research Revisited," IEEE
Software, 10(5), 1993, pp. 19-28.
[31] M.A. Simos, "The Growing of an Organon: A Hybrid Knowledge-Based
Technology for Software Reuse," in Domain Analysis
and Software Systems Modeling, R. Prieto-Díaz
and G. Arango, Eds.: IEEE Computer Society Press, 1991, pp. 204-221.
[32] L.G. Terveen, P.G. Selfridge, M.D. Long, "'Living Design Memory'
- Framework, Implementation, Lessons Learned," Human-Computer
Interaction, 10(1), 1995, pp. 1-37.
[33] L. Tetzlaff, D.R. Schwartz, "The Use of Guidelines in Interface
Design," Proceeding of the Conference on
Human Factors in Computing Systems (CHI '91),
1991, pp. 329-333.
[34] W. Tracz, Confessions of a Used Program
Salesman: Institutionalizing Software Reuse. Reading, MA:
Addison Wesley, 1995.