2019-12-14 15:27:01 +01:00
% !TEX encoding = UTF-8
% !TEX spellcheck = en_GB
\documentclass [aspectratio=169,compress] { beamer}
2019-12-19 13:03:04 +01:00
% TODO: Titles Must Be Titlecase.
2019-12-15 15:32:54 +01:00
% Basic packages
2019-12-14 15:27:01 +01:00
\usepackage { pgfpages}
\usepackage { listings}
\usepackage [utf8] { inputenc}
\usepackage [spanish,english] { babel}
\usepackage { graphicx}
2019-12-15 15:32:54 +01:00
\usepackage { xcolor}
\usepackage { soul}
2019-12-14 15:27:01 +01:00
2019-12-19 13:03:04 +01:00
% Color definitions
\definecolor { criterion} { rgb} { 1,0,0}
\definecolor { light-gray} { gray} { 0.8}
\definecolor { color1} { rgb} { 1,0.5,0}
\definecolor { color2} { rgb} { 0.9,0.2,0}
\definecolor { hasExcClr} { rgb} { 0,0.5,0}
\definecolor { lightgreen} { RGB} { 144,238,144}
2019-12-15 15:32:54 +01:00
% Bibliography settings
\usepackage [backend=bibtex,style=alphabetic,citestyle=alphabetic-verb] { biblatex}
\bibliography { biblio.bib}
2019-12-14 15:27:01 +01:00
2019-12-15 15:32:54 +01:00
% Graphics to create step-by-step graphs
2019-12-14 15:27:01 +01:00
\usepackage { tikz}
\usetikzlibrary { shapes,arrows}
2019-12-15 15:32:54 +01:00
% Beamer theme
2019-12-14 15:27:01 +01:00
% \usetheme{beamertheme-bjeldbak/bjeldbak}
\setbeamertemplate { note page} [plain]
% \setbeameroption{show notes on second screen=right}
\usetheme { -bjeldbak/beamerthemebjeldbak}
% \usetheme{Madrid}
% \usecolortheme{whale}
2019-12-15 15:32:54 +01:00
% Document metadata
2019-12-14 15:27:01 +01:00
% \title[Program slicing with exceptions]{Fragmentación de programas con excepciones}
\title { Program slicing with exception handling}
\date { Dec 18th, 2019}
\author [C. Galindo] { Carlos S. Galindo Jiménez}
\institute [UPV] {
Universidad Politécnica de Valencia
}
2019-12-15 15:32:54 +01:00
% Escapable listing environment
2019-12-19 13:03:04 +01:00
\lstnewenvironment { java} [1][]{
\lstset { language=[LaTeX]TeX} \lstset { escapeinside={ (*@} { @*)} ,
2019-12-15 15:32:54 +01:00
numbers=left,
numberstyle=\tiny ,
stepnumber=1,
numbersep=5pt,
breaklines=true,
%firstnumber=last,
%frame=tblr,
tabsize=2,
framesep=5pt,
basicstyle=\small \ttfamily ,
showstringspaces=false,
%identifierstyle=\ttfamily,
stringstyle=\color { maroon} ,
commentstyle=\color { black} ,
rulecolor=\color { black} ,
xleftmargin=0pt,
xrightmargin=0pt,
aboveskip=\medskipamount ,
belowskip=\medskipamount ,
backgroundcolor=\color { white} , #1
} } { }
2019-12-14 15:27:01 +01:00
\begin { document}
\input { listings-config}
\maketitle
2019-12-19 13:03:04 +01:00
\begin { frame} { Table of Contents}
2019-12-14 15:27:01 +01:00
\tableofcontents
\end { frame}
\section { Introduction}
\subsection { Program slicing}
2019-12-15 15:32:54 +01:00
\begin { frame} [fragile]{ Program slicing}
\begin { columns}
\column { 0.5\textwidth }
2019-12-19 13:03:04 +01:00
\begin { java} [gobble=16]
void f(int x) {
int sum = 0;
int prod = 0;
while (x > 0) {
sum += x;
prod *= x;
x--;
}
log("sum: " + sum);
log("prod: " + (*@\textcolor <2->{ criterion} { prod} @*));
}
2019-12-15 15:32:54 +01:00
\end { java}
\column <3->{ 0.5\textwidth }
2019-12-19 13:03:04 +01:00
\begin { java} [gobble=16]
void f(int x) {
(*@\textcolor <4->{ light-gray} { int sum = 0;} @*)
int prod = 0;
while (x > 0) {
(*@\textcolor <4->{ light-gray} { sum += x;} @*)
prod *= x;
x--;
}
(*@\textcolor <4->{ light-gray} { log("sum: " + sum);} @*)
log("prod: " + prod);
}
2019-12-15 15:32:54 +01:00
\end { java}
\end { columns}
{ \hfill Example adapted from \cite { Tip95} .}
2019-12-14 15:27:01 +01:00
\end { frame}
2019-12-19 13:03:04 +01:00
\begin { frame} [containsverbatim]{ Program slicing} { Applications}
\begin { columns}
\column { 0.5\linewidth }
\begin { itemize}
\item Debugging
\item Program specialization
\item Software maintenance
\item Code obfuscation
\item Dead code removal
\item Program parallelization
\end { itemize}
\column { 0.5\linewidth }
\begin { java} [gobble=12]
void f(int x) {
(*@\textcolor { light-gray} { int sum = 0;} @*)
int prod = 0;
while (x > 0) {
(*@\textcolor { light-gray} { sum += x;} @*)
prod *= x;
x--;
}
(*@\textcolor { light-gray} { log("sum: " + sum);} @*)
log("prod: " + prod);
}
\end { java}
\end { columns}
% Clone detection (examenes, copyright)
2019-12-14 15:27:01 +01:00
\end { frame}
\begin { frame} { Program slicing} { Metrics}
2019-12-15 15:32:54 +01:00
\begin { description}
\item [\textbf{Completeness.}] The slice includes all instructions that are necessary.
2019-12-19 13:03:04 +01:00
\item [\textbf{Correctness.}] The statements included affect the slicing criterion.
2019-12-15 15:32:54 +01:00
\end { description}
\vfill
\definecolor { minimalcolor} { rgb} { 0.8588235294117647,0.3803921568627451,0.0784313725490196}
\definecolor { programcolor} { rgb} { 0.08235294117647059,0.396078431372549,0.7529411764705882}
\definecolor { slicecolor} { rgb} { 0,0,0}
\pause
\begin { columns}
\column { 0.25\textwidth }
Correct and complete: \\
\begin { tikzpicture} [line cap=round,line join=round,>=triangle 45]
\draw [line width=2pt,color=programcolor,fill=programcolor,fill opacity=0.25] (0,0) circle (4em);
\draw [line width=2pt,color=minimalcolor,fill=minimalcolor,fill opacity=0.4] (0,0) circle (2em);
\visible <3->{ \draw [line width=1pt,dotted,color=slicecolor,fill=slicecolor,fill opacity=0.2] (0, 0) circle (2em);}
\end { tikzpicture}
\column { 0.25\textwidth }
Correct and incomplete: \\
\begin { tikzpicture} [line cap=round,line join=round,>=triangle 45]
\draw [line width=2pt,color=programcolor,fill=programcolor,fill opacity=0.25] (0,0) circle (4em);
\draw [line width=2pt,color=minimalcolor,fill=minimalcolor,fill opacity=0.4] (0,0) circle (2em);
\visible <4->{ \draw [line width=1pt,dotted,color=slicecolor,fill=slicecolor,fill opacity=0.2] (0, 0) circle (1.5em);}
\end { tikzpicture}
% \includegraphics[width=\textwidth]{}
\column { 0.25\textwidth }
Incorrect and complete: \\
\begin { tikzpicture} [line cap=round,line join=round,>=triangle 45]
\draw [line width=2pt,color=programcolor,fill=programcolor,fill opacity=0.25] (0,0) circle (4em);
\draw [line width=2pt,color=minimalcolor,fill=minimalcolor,fill opacity=0.4] (0,0) circle (2em);
\visible <5->{ \draw [line width=1pt,dotted,color=slicecolor,fill=slicecolor,fill opacity=0.2] (0, 0) circle (2.5em);}
\end { tikzpicture}
% \includegraphics[width=\textwidth]{}
\column { 0.25\textwidth }
Incorrect and incomplete: \\
\begin { tikzpicture} [line cap=round,line join=round,>=triangle 45]
\draw [line width=2pt,color=programcolor,fill=programcolor,fill opacity=0.25] (0,0) circle (4em);
\draw [line width=2pt,color=minimalcolor,fill=minimalcolor,fill opacity=0.4] (0,0) circle (2em);
\visible <6->{ \draw [line width=1pt,dotted,color=slicecolor,fill=slicecolor,fill opacity=0.2] (1em, 1em) circle (2em);}
\end { tikzpicture}
% \includegraphics[width=\textwidth]{}
\end { columns}
2019-12-14 15:27:01 +01:00
\end { frame}
2019-12-15 15:32:54 +01:00
\subsection { The System Dependence Graph}
\begin { frame} [fragile]{ The System Dependence Graph} { Creation}
% \item Código a un lado
% \item Aparecen nodos que corresponden a statements
% \item Aparecen arcos (control y data o por pasos).
% \item Añadir in-out
% \item No añadir la llamada
\begin { columns}
\column { 0.20\textwidth }
\begin { java} [basicstyle=\scriptsize \ttfamily ,numberstyle=\tiny ]
void f(int x) {
int sum = 0;
int prod = 0;
while (x>0) {
sum += sum;
prod*=prod;
x--;
}
log(sum);
log(prod);
}
\end { java}
2019-12-19 13:03:04 +01:00
\column { 0.8\textwidth } <+->
2019-12-14 15:27:01 +01:00
\centering
2019-12-19 13:03:04 +01:00
% TODO: leyenda de data dependence
\includegraphics <+>[width=1.1\linewidth ]{ figs/example-sdg-1}
\includegraphics <+>[width=1.1\linewidth ]{ figs/example-sdg-2}
\includegraphics <+>[width=1.1\linewidth ]{ figs/example-sdg-3}
\includegraphics <+>[width=1.1\linewidth ]{ figs/example-sdg-4}
\includegraphics <+>[width=1.1\linewidth ]{ figs/example-sdg-5}
\includegraphics <+>[width=1.1\linewidth ]{ figs/example-sdg-6}
2019-12-15 15:32:54 +01:00
\end { columns}
2019-12-14 15:27:01 +01:00
\end { frame}
2019-12-15 15:32:54 +01:00
\begin { frame} [fragile]{ The System Dependence Graph} { Traversal}
\begin { columns}
\column { 0.20\textwidth }
2019-12-19 13:03:04 +01:00
\begin { java} [basicstyle=\scriptsize \ttfamily \color <2->{ light-gray} ,numberstyle=\tiny \color { black} ,gobble=12]
(*@\textcolor <4->{ black} { void f(} @*)(*@\textcolor <8->{ black} { int x} @*)(*@\textcolor <4->{ black} { ) \{ } @*)
int sum = 0;
(*@\textcolor <4->{ black} { int prod = 0;} @*)
(*@\textcolor <6->{ black} { while (x>0) \{ } @*)
sum += sum;
(*@\textcolor <4->{ black} { prod*=prod;} @*)
(*@\textcolor <8->{ black} { x--;} @*)
(*@\textcolor <6->{ black} { \} } @*)
log(sum);
(*@\textcolor <2->{ black} { log(\textcolor <1>{ criterion} { prod} );} @*)
(*@\textcolor <4->{ black} { \} } @*)
2019-12-15 15:32:54 +01:00
\end { java}
\column { 0.8\textwidth }
\centering
\includegraphics <1>[width=1.1\linewidth ]{ figs/example-sdg} % original graph
\includegraphics <2>[width=1.1\linewidth ]{ figs/example-slice-1} % SC marked
\includegraphics <3>[width=1.1\linewidth ]{ figs/example-slice-2} % edges
\includegraphics <4>[width=1.1\linewidth ]{ figs/example-slice-3} % add 1, 3, 6
\includegraphics <5>[width=1.1\linewidth ]{ figs/example-slice-4} % edges
\includegraphics <6>[width=1.1\linewidth ]{ figs/example-slice-5} % add 4
\includegraphics <7>[width=1.1\linewidth ]{ figs/example-slice-6} % edges
\includegraphics <8>[width=1.1\linewidth ]{ figs/example-slice-7} % add 7, x
\includegraphics <9>[width=1.1\linewidth ]{ figs/example-slice-8} % edges
\includegraphics <10->[width=1.1\linewidth ]{ figs/example-slice} % final slice
\end { columns}
2019-12-14 15:27:01 +01:00
\end { frame}
2019-12-19 13:03:04 +01:00
\subsection { Exception handling}
\begin { frame} [fragile]{ Exception Handling Systems} { Java}
\begin { columns}
\column { 0.5\textwidth }
\begin { java} [tabsize=2,gobble=12]
void main() {
(*@\textcolor <5->{ color1} { try} @*) {
f();
} (*@\textcolor <5->{ color1} { catch} @*) ((*@\textcolor <6>{ color1} { Exception e} @*)) {
log("caught exception");
} (*@\textcolor <5->{ color1} { catch} @*) ((*@\textcolor <6>{ color1} { Throwable e} @*)) {
log("caught throwable");
}
}
\end { java}
\column { 0.5\textwidth }
\begin { java} [firstnumber=10,tabsize=2,gobble=12]
void f() (*@\textcolor <4>{ color1} { throws Throwable} @*) {
switch(x) {
case A:
log("no error");
break;
case B:
(*@\textcolor <2-4>{ color1} { throw} @*) (*@\textcolor <3-4>{ color1} { new Exception()} @*);
default:
(*@\textcolor <2-4>{ color1} { throw} @*) (*@\textcolor <3-4>{ color1} { new Throwable()} @*);
}
}
\end { java}
\end { columns}
\end { frame}
% TODO: possible animation; selecting each named exception and explaining its contents, then splitting into checked/unchecked.
% TODO: título: jerarquía de herencia
\begin { frame} { Exception Handling Systems} { Java}
\begin { columns}
\column { 0.5\textwidth }
\begin { center}
\includegraphics [height=0.85\textheight] { figs/exception-hierarchy}
\end { center}
\column { 0.5\textwidth }
\begin { itemize}
\item \textit { Checked} (solid): must be caught (\texttt { try-catch} ) or declared (\texttt { f() throws T} ).
\item \textit { Unchecked} (dashed).
\end { itemize}
\end { columns}
\end { frame}
% TODO: iluminar las que si en otro color
\begin { frame} { Exception Handling Systems} { Other programming languages}
\begin { table}
\begin { columns}
\column { 0.6\linewidth }
\centering
\begin { tabular} { r | r }
\textbf { Language} & $ \% $ usage \\ \hline
\textcolor <2->{ hasExcClr} { JavaScript} & 69.7 \\ \hline
\textcolor <3->{ color2} { HTML/CSS} & 63.1 \\ \hline
\textcolor <3->{ color2} { SQL} & 56.5 \\ \hline
\textcolor <2->{ hasExcClr} { Python} & 39.4 \\ \hline
\textcolor <2->{ hasExcClr} { Java} & 39.2 \\ \hline
\textcolor <3->{ color2} { Bash/Shell} /\textcolor <2->{ hasExcClr} { PowerShell} & 37.9 \\ \hline
\textcolor <2->{ hasExcClr} { C\# } & 31.9 \\ \hline
\textcolor <2->{ hasExcClr} { PHP} & 25.8 \\ \hline
\textcolor <2->{ hasExcClr} { TypeScript} & 23.5 \\ \hline
\textcolor <2->{ hasExcClr} { C++} & 20.4 \\ \hline
\end { tabular}
\column { 0.4\linewidth }
\begin { tabular} { r | r }
\textbf { Language} & $ \% $ usage \\ \hline
\textcolor <3->{ color2} { C} & 17.3 \\ \hline
\textcolor <2->{ hasExcClr} { Ruby} & 8.9 \\ \hline
\textcolor <3->{ color2} { Go} & 8.8 \\ \hline
\textcolor <2->{ hasExcClr} { Swift} & 6.8 \\ \hline
\textcolor <2->{ hasExcClr} { Kotlin} & 6.6 \\ \hline
\textcolor <2->{ hasExcClr} { R} & 5.6 \\ \hline
\textcolor <3->{ color2} { VBA} & 5.5 \\ \hline
\textcolor <2->{ hasExcClr} { Objective-C} & 5.2 \\ \hline
\textcolor <3->{ color2} { Assembly} & 5.0 \\ \hline
\end { tabular}
\end { columns}
\caption [Commonly used programming languages] { Programming language by usage in the software industry (StackOverflow's 2019 Developer Survey)}
\label { tab:popular-languages}
\end { table}
\end { frame}
2019-12-14 15:27:01 +01:00
\section { Problems and proposals}
\subsection { Problem 1: incorrect slices with nested unconditional jumps}
2019-12-15 15:32:54 +01:00
\begin { frame} [fragile]{ Problem 1} { The subsumption correctness error}
2019-12-14 15:27:01 +01:00
\begin { minipage} { 0.39\linewidth }
2019-12-19 13:03:04 +01:00
\begin { java} [gobble=8]
public void f() {
while (X) {
if (Y) {
(*@\textcolor <4->{ light-gray} { if (Z) \{ } @*)
(*@\textcolor <3->{ light-gray} { A;} @*)
(*@\textcolor <4->{ light-gray} { break;} @*)
(*@\textcolor <4->{ light-gray} { \} } @*)
(*@\textcolor <3->{ light-gray} { B;} @*)
break;
2019-12-14 15:27:01 +01:00
}
2019-12-19 13:03:04 +01:00
(*@\textcolor <2->{ criterion} { C} @*);
}
(*@\textcolor <3->{ light-gray} { D;} @*)
2019-12-14 15:27:01 +01:00
}
2019-12-19 13:03:04 +01:00
\end { java}
2019-12-14 15:27:01 +01:00
\end { minipage}
\begin { minipage} { 0.59\linewidth }
2019-12-19 13:03:04 +01:00
\includegraphics <2>[width=0.9\linewidth ]{ figs/problem1}
\includegraphics <3->[width=0.9\linewidth ]{ figs/problem1-sliced}
2019-12-14 15:27:01 +01:00
\end { minipage}
\end { frame}
\begin { frame} { Problem 1: proposed solution} { The subsumption correctness error}
2019-12-19 13:03:04 +01:00
\begin { columns}
\column { 0.5\textwidth }
\begin { enumerate}
\item Identify edges caused by unconditional jumps. \pause
\item Remove from $ E _ c $ all $ ( a, b ) $ such that $ ( a', b ) \in E _ c \wedge a', b \in J \wedge ( a', b ) , ( a, b ) \in E _ { a' } $
\\ $ J $ : unconditional jumps
\\ $ E _ c $ : control edges
\\ $ E _ { a' } $ : edges caused by $ a' $
\end { enumerate}
\column { 0.5\textwidth }
\includegraphics <3>[width=0.9\linewidth ]{ figs/problem1-solution}
\includegraphics <4->[width=0.9\linewidth ]{ figs/problem1-solution-sliced}
\end { columns}
2019-12-14 15:27:01 +01:00
\end { frame}
\subsection { Problem 2: incorrect weak slices}
2019-12-15 15:32:54 +01:00
\begin { frame} [fragile]{ Problem 2} { Unnecessary instructions in weak slicing}
2019-12-14 15:27:01 +01:00
\begin { minipage} { 0.33\linewidth }
2019-12-19 13:03:04 +01:00
\begin { java} [gobble=12]
void g() {
int a = 1;
while (a > 0) {
(*@\textcolor <3->{ light-gray} { if (a > 10)} @*)
(*@\textcolor <3->{ light-gray} { break;} @*)
(*@\textcolor { red} { a} @*)++;
}
(*@\textcolor <2->{ light-gray} { log(a);} @*)
}
\end { java}
2019-12-14 15:27:01 +01:00
\end { minipage}
2019-12-19 13:03:04 +01:00
\begin { minipage} { 0.66\textwidth }
2019-12-14 15:27:01 +01:00
\centering
2019-12-19 13:03:04 +01:00
\includegraphics <2->[width=0.5\textwidth ]{ figs/problem2}
2019-12-14 15:27:01 +01:00
\end { minipage}
\end { frame}
\begin { frame} { Problem 2: proposed solution} { Unnecessary instructions in weak slicing}
2019-12-19 13:03:04 +01:00
\begin { columns}
\column { 0.5\textwidth }
\begin { enumerate}
\item Remove all forward-jumping unconditional jump's nodes.
\pause [3] \item Traverse the graph.
\pause \item Re-add all nodes removed if there is any statement in the slice after their destination.
\pause \item If (3) changed the graph, goto (2).
\end { enumerate}
\column { 0.5\textwidth }
\includegraphics <1>[width=0.7\linewidth ]{ figs/problem2-sol1}
\includegraphics <2>[width=0.7\linewidth ]{ figs/problem2-sol2}
\includegraphics <3-5>[width=0.7\linewidth ]{ figs/problem2-sol3}
\includegraphics <6>[width=0.7\linewidth ]{ figs/problem2-sol4}
\end { columns}
2019-12-14 15:27:01 +01:00
\end { frame}
\subsection { Problem 3: incomplete \texttt { catch} treatment}
2019-12-19 13:03:04 +01:00
\begin { frame} [fragile]{ Problem 3} { The Lack of Dependencies of \texttt { catch} Statements}
\begin { columns}
\column { 0.4\textwidth }
\begin { java} [gobble=12,basicstyle=\scriptsize \ttfamily ]
int x;
void main() (*@\alt <6>{ \fcolorbox { black} { pink} { throws Exception} } { throws Exception} @*) {
try {
(*@\alt <3-4>{ \fcolorbox { black} { lightgreen} { f()} } { f()} @*);
} (*@\textcolor <11->{ light-gray} { \alt <4>{ \fcolorbox { black} { pink} { catch (Exception e)} } { catch (Exception e)} \{ } @*)
(*@\textcolor <8,11->{ light-gray} { log("error");} @*)
(*@\textcolor <11->{ light-gray} { \} } @*)
(*@\visible <9->{ \alt <9>{ \fcolorbox { black} { lightgreen} { x = 0;} } { x = 0;} } @*)
(*@\alt <5-6>{ \fcolorbox { black} { lightgreen} { f()} } { f()} @*);
}
void f() throws Exception {
x++;
if (x > 0)
throw new Exception();
log((*@\textcolor { criterion} { x} @*));
}
\end { java}
\column <+->{ 0.6\textwidth }
\includegraphics <+>[width=1.1\textwidth ]{ figs/problem3-data-edge}
\includegraphics <+>[width=1.1\textwidth ]{ figs/problem3-data-edge-color-f1}
\includegraphics <+>[width=1.1\textwidth ]{ figs/problem3-data-edge-color-f1-error}
\includegraphics <+>[width=1.1\textwidth ]{ figs/problem3-data-edge-color-f2}
\includegraphics <+>[width=1.1\textwidth ]{ figs/problem3-data-edge-color-f2-error}
\includegraphics <+>[width=1.1\textwidth ]{ figs/problem3-data-edge}
\includegraphics <+>[width=1.1\textwidth ]{ figs/problem3-data-edge-sliced}
\includegraphics <+>[width=1.1\textwidth ]{ figs/problem3-color-x0}
\includegraphics <+>[width=1.1\textwidth ]{ figs/problem3}
\includegraphics <+>[width=1.1\textwidth ]{ figs/problem3-sliced}
\end { columns}
2019-12-14 15:27:01 +01:00
\end { frame}
2019-12-19 13:03:04 +01:00
% \begin{frame}[fragile,label=p3]{Problem 3}{The lack of dependencies of \texttt{catch} statements}
% \begin{columns}
% \column{0.4\textwidth}
% \begin{java}[gobble=12,basicstyle=\scriptsize\ttfamily]
% void main() throws Exception {
% try {
% f();
% } (*@\textcolor<2->{light-gray}{catch (Exception e) \{}@*)
% (*@\textcolor<2->{light-gray}{log("error");}@*)
% (*@\textcolor<2->{light-gray}{\}}@*)
% x = 0;
% f();
% }
% void f() throws Exception {
% x++;
% if (x < 0)
% throw new Exception();
% log((*@\textcolor{criterion}{x}@*));
% }
% \end{java}
% % TODO: highlight each section of the graph.
% \column{0.6\textwidth}
% \includegraphics<1>[height=0.9\textheight]{figs/problem3}
% \includegraphics<2>[height=0.9\textheight]{figs/problem3-sliced}
% \end{columns}
% \end{frame}
% % TODO: reorder, good approach, error, solution
% \begin{frame}{Problem 3}{The lack of dependencies of \texttt{catch} statements}
% \centering
% \includegraphics<+>[height=0.9\textheight]{figs/problem3}
% \includegraphics<+>[height=0.9\textheight]{figs/problem3-data-edge}
% \includegraphics<+>[height=0.9\textheight]{figs/problem3-data-edge-sliced}
% \end{frame}
% \againframe<1>{p3}
2019-12-14 15:27:01 +01:00
\begin { frame} { Problem 3: proposed solution} { The lack of dependencies of \texttt { catch} statements}
2019-12-19 13:03:04 +01:00
\centering
\includegraphics <+>[height=0.9\textheight ]{ figs/problem3}
\includegraphics <+>[height=0.9\textheight ]{ figs/problem3-color}
\includegraphics <+>[height=0.9\textheight ]{ figs/problem3-sol-color}
\includegraphics <+>[height=0.9\textheight ]{ figs/problem3-sol}
\includegraphics <+>[height=0.9\textheight ]{ figs/problem3-sol-sliced}
2019-12-14 15:27:01 +01:00
\end { frame}
\section { Conclusions}
\begin { frame} { Conclusions}
\begin { itemize}
2019-12-19 13:03:04 +01:00
\item <+-> Program slicing: a powerful technique, not yet complete for commonly used programming languages.
\item Efficiency vs. completeness and correctness.
\item <+-> Results: 3 problems and proposed solutions.
% \begin{itemize}
% \item
% \item Problem 1: submitted to LCTES 2020 (ACM SIGPLAN Languages, Compilers and Tools for Embedded Systems).
% \end{itemize}
2019-12-14 15:27:01 +01:00
\end { itemize}
\end { frame}
\begin { frame} { Future work}
\begin { itemize}
2019-12-19 13:03:04 +01:00
% \item Publish Problem 2 and Problem 3.
2019-12-14 15:27:01 +01:00
\item Improve correctness of \texttt { try-catch} .
\item Implement into existing software tools, benchmark against state of the art.
\item Adapt to other variants of program slicing.
2019-12-19 13:03:04 +01:00
\item Redefine control dependence (extend Danicic's work \cite { DanBHHKL11} ), \textit { execution dependence} vs. \textit { presence dependence} .
2019-12-14 15:27:01 +01:00
\end { itemize}
\end { frame}
\appendix
% \section*{Extra slides}
\begin { frame} [noframenumbering]{ Related work}
Change to state of the art and move to introduction
\begin { itemize}
2019-12-19 13:03:04 +01:00
\item 1988: Horwitz, Reps and Ball \cite { HorwitzRB88} present the SDG.
\item 1993: Ball and Horwitz \cite { BalH93} present SDG with unconditional jumps
\item 1998: Sinha and Harrold \cite { SinH98,SinHR99} present SDG with exceptions.
\item 2003: Allen and Horwitz \cite { AllH03} improves \cite { SinH98} .
\pause
\item 2004: Jo and Chang \cite { JoC04} present an alternative construction of the graph (not demonstrated, not an improvement).
\item 2006: Jiang et al. \cite { JiaZSJ06} propose a solution for C++, not applicable.
\item 2011: Prabhy, Maeda and Blakrishnan \cite { PraMB11} propose another solution for C++, no notable improvement.
\item 2011: Jie and Shu-juan \cite { JieS11} introduce Object-Oriented + Exception SDG, same errors as \cite { AllH03} .
2019-12-14 15:27:01 +01:00
\end { itemize}
\end { frame}
2019-12-19 13:03:04 +01:00
\begin { frame} [noframenumbering]{ Program slicing} { Strong and Weak Slices}
\begin { definition} [Strong slice \cite { Wei81} ]
Given a program $ P $ , its slice $ S $ w.r.t. a slicing criterion $ SC $ is a subset of the statements ($ S \subseteq P $ ) such that the execution of $ S $ yields the same sequence of values on $ SC $ as the execution of $ P $ .
\end { definition}
\begin { definition} [Weak slice \cite { BinG96} ]
Given a program $ P $ , its slice $ S $ w.r.t. a slicing criterion $ SC $ is a subset of the statements ($ S \subseteq P $ ) such that the execution of $ S $ yields a sequence of values on $ SC $ ($ \textit { seq } _ S $ ), the execution of $ P $ yields a sequence of values on $ SC $ ($ \textit { seq } _ P $ ), and $ \textit { seq } _ P $ is a prefix of $ \textit { seq } _ S $ .
\end { definition}
\end { frame}
\begin { frame} [noframenumbering]{ Program Slicing} { Strong and Weak Slices: Example}
\begin { table}
\centering
\label { tab:slice-weak}
\begin { tabular} { r | r | r | r | r | r }
Original program & 1 & 2 & 6 & - & - \\ \hline
Slice A & 1 & 2 & 6 & - & - \\ \hline
Slice B & 1 & 2 & 6 & 24 & 120 \\ \hline
Slice C & 1 & 1 & 1 & 1 & 1 \\
\end { tabular}
\caption { Sequences of values produced on the slicing criterion.}
\end { table}
2019-12-14 15:27:01 +01:00
\end { frame}
2019-12-19 13:03:04 +01:00
\begin { frame} [noframenumbering,allowframebreaks]{ Bibliography}
2019-12-15 15:32:54 +01:00
\printbibliography
\end { frame}
2019-12-14 15:27:01 +01:00
\end { document}