initial version of introduction
This commit is contained in:
parent
498ee5b61c
commit
c6efee6be6
1 changed files with 126 additions and 0 deletions
126
motivation.tex
Normal file
126
motivation.tex
Normal file
|
@ -0,0 +1,126 @@
|
|||
% !TEX encoding = UTF-8
|
||||
% !TEX spellcheck = en_US
|
||||
% !TEX root = paper.tex
|
||||
|
||||
\chapter{Introduction}
|
||||
\label{cha:introduction}
|
||||
\section{Motivation}
|
||||
\label{sec:motivation}
|
||||
|
||||
Program slicing~\cite{Wei81} is a debugging technique which, given a line of
|
||||
code and a variable of a program, simplifies such program so that the only parts
|
||||
left of it are those that affect the value of the selected variable.
|
||||
|
||||
\begin{example}[Program slicing in a simple method]
|
||||
If the following program is sliced on line 5 (variable \texttt{x}), the
|
||||
result would be the program of the right, with the \texttt{if} block
|
||||
skipped, as it doesn't affect the value of \texttt{x}.
|
||||
\label{exa:program-slicing}
|
||||
\begin{center}
|
||||
\begin{minipage}{0.49\linewidth}
|
||||
\begin{lstlisting}[stepnumber=1]
|
||||
void f(int x) {
|
||||
if (x < 0)
|
||||
System.err.println(x);
|
||||
x++;
|
||||
System.out.println(x);
|
||||
}
|
||||
\end{lstlisting}
|
||||
\end{minipage}
|
||||
\begin{minipage}{0.49\linewidth}
|
||||
\begin{lstlisting}[stepnumber=1]
|
||||
void f(int x) {
|
||||
|
||||
|
||||
x++;
|
||||
System.out.println(x);
|
||||
}
|
||||
\end{lstlisting}
|
||||
\end{minipage}
|
||||
\end{center}
|
||||
\end{example}
|
||||
|
||||
Slices are an executable program whose execution will produce the same values
|
||||
for the specified line and variable as the original program, and are used to
|
||||
facilitate debugging of large and complex programs, where the data flow may not
|
||||
be easily understandable.
|
||||
|
||||
Though it may seem a really powerful technique, the whole Java language is not
|
||||
completely covered by it, and that makes it difficult to apply in practical
|
||||
settings. An area that has been investigated, yet doesn't have a definitive
|
||||
solution yet is exception handling. Example~\ref{exa:program-slicing2}
|
||||
demonstrates how, even using the latest developments in program
|
||||
slicing~\cite{allen03}, the sliced version doesn't include the catch block, and
|
||||
therefore doesn't produce a correct slice.
|
||||
|
||||
\begin{example}[Program slicing with examples]
|
||||
If the following program is sliced in line 17, variable \texttt{x}, the
|
||||
slice is incomplete, as it lacks the \texttt{catch} block from lines 4-6.
|
||||
\label{exa:program-slicing2}
|
||||
\begin{center}
|
||||
\begin{minipage}{0.49\linewidth}
|
||||
\begin{lstlisting}[stepnumber=1]
|
||||
void f(int x) {
|
||||
try {
|
||||
g(x);
|
||||
} catch (RuntimeException e) {
|
||||
System.err.println("Error");
|
||||
}
|
||||
|
||||
System.out.println("g() was ok");
|
||||
|
||||
g(x);
|
||||
}
|
||||
|
||||
void g(int x) {
|
||||
if (x < 0) {
|
||||
throw new RuntimeException();
|
||||
}
|
||||
System.out.println(x);
|
||||
}
|
||||
\end{lstlisting}
|
||||
\end{minipage}
|
||||
\begin{minipage}{0.49\linewidth}
|
||||
\begin{lstlisting}[stepnumber=1]
|
||||
void f(int x) {
|
||||
try {
|
||||
g(x);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
g(x);
|
||||
}
|
||||
|
||||
void g(int x) {
|
||||
if (x < 0) {
|
||||
throw new RuntimeException();
|
||||
}
|
||||
System.out.println(x);
|
||||
}
|
||||
\end{lstlisting}
|
||||
\end{minipage}
|
||||
\end{center}
|
||||
\end{example}
|
||||
|
||||
\carlos{completar}
|
||||
|
||||
\section{Contributions}
|
||||
|
||||
The main contribution of this paper is a complete solution for program slicing
|
||||
in the presence of exception handling constructs for Java; but in the process we
|
||||
will present a history of program slicing, specifically those changes that
|
||||
have affected exception handling. Furthermore, we provide a summary of the
|
||||
different contributions each author has made to the field.
|
||||
|
||||
The rest of the paper is structured as follows: chapter~\ref{cha:background}
|
||||
summarizes the theoretical background required, chapter~\ref{cha:state-art}
|
||||
provides a bird's eye view of the current state of the art,
|
||||
chapter~\ref{cha:solution} provides a step by step description of the problems
|
||||
found with the state of the art and the solutions proposed, and
|
||||
chapter~\ref{cha:conclusion} summarizes the paper and provides avenues of future
|
||||
work.
|
||||
|
||||
% vim: set noexpandtab:tabstop=2:shiftwidth=2:softtabstop=2:wrap
|
Loading…
Reference in a new issue