%%%%%% TEMPLATE.TEX for WISR'93, version 1.2.1, 10/3/93 %%%%%%
%%%%%% Updated by Jeffrey S. Poulin,  May 1993          %%%%%%
%%%%%% Updated by Larry J. Latour     and               %%%%%% 
%%%%%%            Steve L. Philbrick, October 1993      %%%%%%
%%%%%%
\markboth{Joos}{Joos}
\documentstyle[11pt]{article}
 
% Standard Spacing for WISR - do not change!!
%
% Page dimensions.
%
\oddsidemargin  0.26in % Leave enough for binding margin
\evensidemargin 0.26in %
\topmargin      -1.00in % (adjusted for printer bias)
\headheight      .00in  % (no headers)
\headsep         .75in  % (top margin + headers + skip)
\footheight     12.0pt  % ??? (seems to work ok)
\footskip       25.0pt  % ??? ( "   "  )
\textheight     9.425in % (instructions: 9 1/8" min, 9 7/16" max)
\textwidth      6.5in   %

\markboth{Joos}{Joos}
\pagestyle{myheadings}
%
% Paragraph changes.
%
\parindent=0pt
\parskip=10pt
%
% can make the title box even smaller
%
\def\@maketitle{\vbox to 2.6in{\hsize\textwidth
    \linewidth\hsize \vfil \centering
    {\large \@title \par}
    \vskip 2em
    {\normalsize
    \begin{tabular}[t]{c}\@author
    \end{tabular}\par}
    \vfil}
}
 
\begin{document}
 
\bibliographystyle{ieeetr}
 
\title{Tools to Facilitate the Reuse Process}

\author{Rebecca Joos\\
\\
Motorola\\
6501 William Cannon Drive\\
Austin, Texas 78735\\
MD: OE112\\
Tel: (512) 891-3617\\
Email: beckyj@pets.sps.mot.com\\
}
\date{}
\maketitle
\begin{abstract}

Once an organization has implemented a process that embodies software reuse 
similar to the process discussed in this position paper,
tools are necessary to 
facilitate software development. For several years Motorola (and specifically 
the author) has been involved with research that is the base for technology 
that will facilitate the development and use of reusable software components 
(RSCs) \cite{Joo89,Joo90}.  
%\vspace{0.2in} \noindent {\bf Keywords:} 
%\vspace{0.2in} \noindent {\bf Workshop Goals:} 
%\vspace{0.2in} \noindent {\bf Working Groups:} 
\end{abstract}
 
\newpage
%\section{Background}
\section{Position}

Software developers must design with and for reuse. Rather than trying to find 
a reusable component that matches a design module at the coding phase of the 
software life cycle, software developers should look for reusable components at
the specification phase and continue the process through the analysis, design, 
coding, and testing phases. Reusable components can and should be 
specifications, analysis procedures and data, designs, test programs, etc. All 
experiences from concepts to algorithms involved with the software development 
should be captured for future reference i.e., reuse.
 
The basic premise of the reuse technology is to assist software developers with
the more difficult activities of software reuse while automating the mundane 
and tedious tasks. In order to achieve this goal the reuse toolkit (RTk) will 
provide:
\begin{itemize}\itemsep -3pt
  \item intelligent assistance that helps the software developer choose the 
  appropriate RSCs to incorporate into the new product, 

  \item an interface that is easy and quick to use yet enables the developer to
  provide exact input necessary for the RTk to select appropriate RSCs,

  \item a simple method for adding new RSCs,

  \item automation to relieve the software developer of the burden of linking 
  RSCs into the new product, and 

  \item a mechanism for viewing the new product at several different levels of 
  detail.
\end{itemize}

\subsection{Designing for Reuse}

Building new products with RSCs assumes that there exists a wealth of 
components. This is a simple assumption but not a simple task \cite{GLR89}.

\subsubsection{Reclaiming}

Many companies have their valuable product knowledge encoded in software 
systems that are undecipherable. This knowledge represents the company's 
competitive advantage and expertise in their product area. If this knowledge 
was easily gleaned from the software, new products could be developed quickly 
and profitably. The activity of finding and developing these RSCs is tedious 
and time consuming.
 
In response to this realization reverse engineering tools are appearing on the 
commercial market. Reverse engineering is the process of taking source code and
constructing a graphical representation from that code. It is often referred to
as design capture since the end product i.e., the graphical representation 
should resemble the original design.

One of the most difficult problems of reverse engineering is determining 
``what'' the end product is once it is produced. In many cases the end product 
is pages of arrows and names. Deciphering this overwhelming amount of 
information is not easy \cite{BL91,Big91,Web89}.  

Reverse engineering tools have evolved towards analyzing programs for porting 
or cloning these programs. But design recovery tools are aimed at helping the 
software developer to understand the specific applications and general concepts
and designs that comprise classes of applications \cite{BHW89}. 
It is these general items 
that become RSCs.  

The objective of the design recovery aspect of the RTk is to aid the software 
developer form a mental model of the software, to record that model for future 
use, and to make the recovered knowledge easily and readily available for use. 
This involves taking very detailed information and creating abstract forms of
the information that can be applied generically i.e., reused in many products.

Domain analysis (DA) is the first step in creating reusable components
\cite{Lub90,Pri87,VG}. DA 
captures product expertise that is used to identify common problems and 
solutions of software systems.  The system recognizes domain concepts in code 
or textual information. Recognition is achieved by pattern matching of names, 
composition, development, subordinates, and user relationships to other 
components. Recognized concepts are displayed to the engineer who validates or 
rejects the accuracy of the recognition which the system automatically 
incorporates to improves its performance. The system provides the user with 
methodological guidance primarily for understanding the software and secondly 
(perhaps more importantly) for re-engineering the software.

\subsubsection{Construction}

When developing new software components that are potential RSCs the RTk assists
the developer in formatting the components for readability, documenting the 
components for understandability and traceability. Once the component is 
completed the RTk provides testing mechanisms to assure the accuracy and 
quality of the component. The component is also categorized for storage in the
repository.

\subsection{Designing with Reuse}

Several questions arise when searching for RSCs to use in the new product:
\begin{itemize}\itemsep -3pt
  \item Where are the best RSCs?
  \item What RSCs will be profitable?
  \item Which RSCs should be developed first?
\end{itemize}

The reusable component is actually a node with a set of links to the software 
component's requirements, transformation rule set, analysis, design, interfaces,
and test suite nodes. This hypernet of nodes and links comprises all
the RSCs and their related items (e.g., tests) plus the information required to
use the RSCs. Since different components can share (i.e., reuse) different 
nodes, the repository becomes a large hypernet of component subnets.

There will be two repositories. One is the master repository where all the 
proven reusable components are stored. The second repository will be an 
intermediate holding place for components that are being tested for their 
correctness, usability, and profitability. Until validated these components 
must be used with the same precautions as any newly developed software. Once 
they have qualified as viable reusable components they will be entered into the
master repository. 

Eventually introducing this technology into a reuse program will automate the 
development cycle to:
\begin{enumerate}\itemsep -3pt
  \item The user enters a set of requirements for which the RTk finds a 
  matching RSCs.

  \item Based on user input the RSCs will be customized (i.e., transformations 
  will fire) to satisfy the software requirements. 

  \item RSCs are interfaced to new components.
  \item The new product is tested by the automated testing tool.
  \item The new components are re-engineered into RSCs for future product 
  development.
\end{enumerate}

\subsection{Conclusion}

The RTk encompasses design capture, re-engineering, reuse engineering and 
forward engineering. Although the toolkit is designed to facilitate software 
reuse, its real purpose is to provide a software design environment that 
incorporates the best methods and techniques to quickly develope high-quality 
software.                                                                   


%\section{Comparison}
\bibliography{joos}
%\section{Biography}
 
\end{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
