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.
La fragmentaci\'o de programes es una t\`ecnica que pot ser aplicada practicament a qualsevol llenguatge de programaci\'o. No obstant aix\`o, en pres\`encia de tractament d'excepcions, el sofware actual de fragmentaci\'o de programes presenta problemes de precisi\'o. Aquest projecte aborda el problema de fracmentaci\'o de programes amb tractament d'excepcions, analitzant el problem des d'una perspectiva general (per a qualsevol tipus de sistema d'excepcions), per\`o centrant els nostres esfor\_os en un paradigma orientat a objectes, specificament per al llenguatge de programaci\'o Java. Tot i aix\'i, la soluci\'o es encara suficientment general com per a aplicarla a altres paradigmes i llenguatges de programaci\'o.
En aquesta tesi, estudiem les actuals solucions disponibles per al problema, i proposem una generalitzaci\'o que inclueix al menys les instruccions \texttt{try-catch} i \texttt{throw}. Provei\sergio{esta i es con dieresis}m descripcions detallades, generalitzacions i solucions per a dos problemes que incrementen el tamany dels fragments de programa obtinguts i un problema que redueix enormement la precisi\'o dels fragments obtinguts.
Les solucions que proposem produeixen fragments de programa que garanteixen completitut i que con el mes correctes posibles, donat el conjunt de restriccions del sistema de tractament d'excepcions.
Els an\`alisi realitzat i les solucions proposades son espec\'ifiques per al llenguatge de programaci\'o Java, pero son suficientment generals per a ser exportades sense esfor\_ a altres llenguatges de programaci\'o ambs un sistema de tractament d'excepcions similar. Les solucions tamb\'e son espec\'ifiques per a fragmentaci\'o de programes est\`atica cap arrare, pero son igualment compatibles amb altres variantes de la fragmentaci\'o de programes.
% \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)