% !TEX encoding = UTF-8
% !TEX spellcheck = en_GB
% !TEX root = paper.tex
\documentclass[a4paper,twoside]{report}

\usepackage[spanish,catalan,english]{babel}
\usepackage[utf8]{inputenc}
\usepackage{listings}
\usepackage{algorithm}
\usepackage{algorithmic}
\renewcommand{\algorithmicrequire}{\textbf{Input:}}
\renewcommand{\algorithmicensure}{\textbf{Output:}}
\usepackage{amsthm}
\usepackage{amssymb}
\theoremstyle{definition}
\newtheorem{definition}{Definition}
\newtheorem{example}{Example}
\newtheorem{problem}{Problem}
\usepackage{hyperref}
\usepackage{graphics}
\usepackage{title/mitssTitle}

\newcommand{\ctrldep}{\rightarrow^{ctrl}}
\newcommand{\datadep}{\rightarrow^{data}}

\usepackage{todonotes}
\usepackage{marginnote}

\newif\ifpaperVersion
%\paperVersiontrue
\paperVersionfalse
\ifpaperVersion
	% Paper version
	\newcommand{\ignore}[1]{}
	\newcommand{\deleted}[1]{}
	\newcommand{\added}[1]{#1}
	\newcommand{\pending}[1]{}
	\newcommand{\done}[1]{}
	\newcommand{\doubt}[1]{}
	\newcommand{\josep}[1]{}
	\newcommand{\carlos}[1]{}
	\newcommand{\sergio}[1]{}
\else
	% Working
	\definecolor{ignoreColor}{rgb}{1,0.5,0}
	\definecolor{pendingColor}{rgb}{0.2,0.7,0.2}
	\definecolor{doneColor}{rgb}{0.7,0.2,0.7}
	\definecolor{doubtColor}{rgb}{0.6,0.6,0.4}
	\definecolor{josepColor}{rgb}{0.2,0.6,0.6}
	\definecolor{carlosColor}{rgb}{0.6,0.2,0.6}
	\definecolor{sergioColor}{rgb}{1.0,0.5,0.0}

	\newcommand{\ignore}[1]{\textcolor{ignoreColor}{\#Ignored: #1}}
	\newcommand{\deleted}[1]{\textcolor{red}{\#Deleted: #1}}
	\newcommand{\added}[1]{\textcolor{blue}{\#Added: #1}}
	\newcommand{\pending}[1]{\textcolor{pendingColor}{\#Pending: #1}}
	\newcommand{\done}[1]{\textcolor{doneColor}{\#Done: #1}}
	\newcommand{\doubt}[1]{\textcolor{doubtColor}{\#Doubt: #1}}
	\newcommand{\josep}[1]{\textcolor{josepColor}{\#JJJ: #1}}
	\newcommand{\carlos}[1]{\textcolor{carlosColor}{\#CCC: #1}}
	\newcommand{\sergio}[1]{\textcolor{sergioColor}{\#SSS: #1}}
\fi

\title{Fragmentación de programas con excepciones}
%\title{Program slicing with exceptions}
\author{Carlos S. Galindo Jiménez}
\date{diciembre de 2019}
\supervisor{Josep Francesc Silva Galiana}
\curso{2019-2020}

\begin{document}
\algsetup{linenodelimiter=.}
\include{listings-config}
\maketitle

\cleardoublepage

\begin{abstract}
	Program slicing is an analysis technique that can be applied to practically all programming languages. However, in the presence of exception handling, current program slicing software has a precision problem. This project tackles the problem of program slicing with exception handling, analysing the problem from a general perspective (for any kind of exception system), but focusing our efforts in the object-oriented paradigm, specifically the Java language. The solution is still general enough to be applicable to other paradigms and programming languages.
	
	In this thesis, we study the currently available solutions to the problem, and we propose a generalization that includes at least the \texttt{try-catch} and \texttt{throw} statements. We provide detailed descriptions, generalizations and solutions for two problems that increase the size of slices and one problem that greatly reduces the precision of slices.
	The solutions we propose produce slices that guarantee completeness and are as correct as possible, given the restrictions set by the exception handling system.
	
	The analysis performed and solutions proposed are specific for the Java programming language, but are general enough that they can be ported effortlessly to other programming languages with similar exception handling capabilities. They are also specific for static backward slicing, but are likewise compatible with other variants of program slicing.
\end{abstract}

\selectlanguage{spanish}
\begin{abstract}
	
\end{abstract}

\selectlanguage{catalan}
\begin{abstract}

\end{abstract}

\selectlanguage{english}

\tableofcontents

\include{Secciones/motivation}
\include{Secciones/background}
\include{Secciones/incremental_slicing}
\include{Secciones/problem_solution}
\include{Secciones/state_of_the_art}
\include{Secciones/conclusion}

% \chapter{TODO}

% \begin{itemize}
% 	\item \carlos{} Decide whether to use dependency or \textbf{dependence} (I suspect the plural form would also change: dependencies vs. dependences). DONE
% 	\item \carlos{} Ver si hay espacios antes/despues de los m-dash. Josep ha visto que no hay espacios. DONE
% 	\item \carlos{} Cambiar criterio de slicing de (line n, variable x) a $\langle n, x \rangle$. DONE
% 	\item \carlos{} Figure, Example, Definition always uppercase. DONE
% 	\item \carlos{} w.r.t. always without spaces. DONE
% 	\item \carlos{} Do not use the same number for different methods.
% 	\item \carlos{} Use et al. for multiple authors.
% 	\item \carlos{} All instructions are statements, even \texttt{catch}, \texttt{try} and \texttt{finally}.
% 	\item \carlos{} i.e. (es decir), e.g. (por ejemplo)
% \end{itemize}

\bibliographystyle{plain}
\bibliography{../../../../../../Biblio/biblio.bib}

\end{document}

% vim: set noexpandtab:ts=2:sw=2:wrap
