tfm-report/paper.tex

137 lines
8.1 KiB
TeX

% !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.
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}
La fragmentación de programas es una técnica de análisis de programas que puede ser aplicada prácticamente a todos los lenguajes de programación. Sin embargo, en presencia de excepciones, los fragmentadores de programas tienen un problema de precisión. Este proyecto aborda el problema de la fragmentación de programas en presencia de excepciones, analizando el problema desde una perspectiva general (para cualquier tipo de sistema de excepciones), pero concentrando nuestros esfuerzos en el paradigma de la orientación a objetos, más específicamente en el lenguaje Java.
En esta tesis, estudiamos las soluciones existentes al problema planteado, y proponemos una generalización que incluye por lo menos las instrucciones \texttt{try-catch} y \texttt{throw}. Damos descripciones detalladas, generalizaciones y soluciones a dos problemas que aumentan innecesariamente el tamaño de los fragmentos de programa y un problema que reduce bastante la precisión.
Las soluciones que proponemos producen fragmentos que garantizan la completitud y son tan correctos como es posible, dadas las restricciones marcadas por el sistema de manejo de excepciones.
El análisis realizado y las soluciones propuestas son específicas para el lenguaje de programación Java y su sistema de manejo de excepciones, pero también son lo suficientemente generales como para poder ser empleadas en otros lenguajes de programación que posean un sistema de excepciones. También son específicas para la fragmentación estática hacia atrás, pero, del mismo modo, son compatibles con otras variantes en la fragmentación de programas.
\end{abstract}
\selectlanguage{catalan}
\begin{abstract}
La fragmentació de programes és una tècnica que pot ser aplicada pràcticament a qualsevol llenguatge de programació. No obstant això, en presència de tractament d'excepcions, el software actual de fragmentació de programes presenta problemes de precisió. Aquest projecte aborda el problema de fragmentació de programes amb tractament d'excepcions, analitzant el problema des d'una perspectiva general (per a qualsevol mena de sistema d'excepcions), però centrant els nostres esforços en un paradigma orientat a objectes, específicament per al llenguatge de programació Java. Tot i això, la solució és suficientment general com per a aplicar-la a altres paradigmes i llenguatges de programació.
En aquesta tesi, estudiem les actuals solucions disponibles per al problema, i proposem una generalització que inclou almenys les instruccions \texttt{try-catch} i \texttt{throw}. Proveïm descripcions detallades, generalitzacions i solucions per a dos problemes que incrementen la grandària dels fragments de programa obtinguts i un problema que redueix enormement la precisió dels fragments calculats.
Les solucions que proposem produeixen fragments de programa que garanteixen completesa i que són els més correctes possibles, donat el conjunt de restriccions del sistema de tractament d'excepcions.
Les anàlisis realitzades i les solucions proposades són específiques per al llenguatge de programació Java, però són prou generals per ser exportades sense esforç a altres llenguatges de programació amb un sistema de tractament d'excepcions similar. Les solucions també són específiques per a fragmentació de programes estàtica cap arrere, però són igualment compatibles amb altres variants de la fragmentació de programes.
\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.bib}
\end{document}
% vim: set noexpandtab:ts=2:sw=2:wrap