From 6e2ab8afd1005228655999f0355441f35456203d Mon Sep 17 00:00:00 2001 From: Carlos Galindo Date: Sat, 14 Dec 2019 15:27:01 +0100 Subject: [PATCH] update --- .gitmodules | 4 +- Makefile | 10 +- beamer.tex | 15 -- figs/problem1.dot | 22 +++ figs/problem2.dot | 29 ++++ figs/problem3.dot | 40 +++++ slides.tex | 390 ++++++++++++++++++++++++++++++++++++++++++++++ theme | 1 - 8 files changed, 488 insertions(+), 23 deletions(-) delete mode 100644 beamer.tex create mode 100644 figs/problem1.dot create mode 100644 figs/problem2.dot create mode 100644 figs/problem3.dot create mode 100644 slides.tex delete mode 160000 theme diff --git a/.gitmodules b/.gitmodules index b7330e1..dd6e9dc 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ -[submodule "theme"] - path = theme +[submodule "beamertheme-bjeldbak"] + path = beamertheme-bjeldbak url = https://github.com/martinbmadsen/beamertheme-bjeldbak.git diff --git a/Makefile b/Makefile index 9ca273d..e7ed7cd 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,13 @@ -all: beamer.pdf +all: slides.pdf -pdf: beamer.pdf +pdf: slides.pdf images: $(MAKE) -C figs -beamer.pdf: beamer.tex images - pdflatex -synctex=1 -interaction=nonstopmode beamer.tex - pdflatex -synctex=1 -interaction=nonstopmode beamer.tex +slides.pdf: slides.tex images + pdflatex -synctex=1 -interaction=nonstopmode slides.tex + pdflatex -synctex=1 -interaction=nonstopmode slides.tex clean: rm -f *.toc *.aux *.bbl *.blg *.fls *.out *.log *.synctex.gz diff --git a/beamer.tex b/beamer.tex deleted file mode 100644 index ceb0361..0000000 --- a/beamer.tex +++ /dev/null @@ -1,15 +0,0 @@ -\documentclass{beamer} - -\usepackage[utf8]{inputenc} -\usepackage[english]{babel} -\usepackage{graphicx} - -\title{Fragmentación de programas con excepciones} -\date{Dec 16th, 2019} -\author{Carlos S. Galindo Jiménez} - -\begin{document} - -\maketitle - -\end{document} \ No newline at end of file diff --git a/figs/problem1.dot b/figs/problem1.dot new file mode 100644 index 0000000..062fb32 --- /dev/null +++ b/figs/problem1.dot @@ -0,0 +1,22 @@ +digraph pdf { + entry [label="enter f()",style=filled]; + entry -> {while; D}; + while [label="while (X)",style=filled]; + C [style="bold,filled"] + "if (Y)" [style=filled] + "if (Z)" [style=filled] + while -> {"if (Y)" C}; + break2 [style=filled] + break1 [style=filled] + "if (Y)" -> {"if (Z)"}; + "if (Z)" -> {A break1}; + break1 -> B; + break1 -> break2; + break2 -> {C while}; + {rank=same; A break1 B break2} + {rank=same; "if (Z)" C} + {rank=same; while D} + {edge [style=invis]; + A -> break1 -> B -> break2; + } +} diff --git a/figs/problem2.dot b/figs/problem2.dot new file mode 100644 index 0000000..635d227 --- /dev/null +++ b/figs/problem2.dot @@ -0,0 +1,29 @@ +digraph g { + "f()" [shape=box, rank=min, style = filled]; + // Rank adjustment + { node [style=filled] + { rank = same; "int a = 1"; "while (a > 0)"; } + "if (a > 10)"; break; + } + { rank = same; "print(a)"; "a++"; } + { rank = max; "a++"; "print(a)"; } + "a++" [style="filled,bold"]; + // Control flow + "f()" -> "while (a > 0)"; + "f()" -> "int a = 1"; + "while (a > 0)" -> "if (a > 10)"; + "if (a > 10)" -> "break"; + "break" -> "print(a)"; + "break" -> "a++"; + "break" -> "while (a > 0)"; + // Data flow + { edge [color = red]; + "int a = 1" -> "while (a > 0)"; + "int a = 1" -> "if (a > 10)"; + "int a = 1" -> "print(a)"; + "a++" -> "a++"; + "a++" -> "while (a > 0)"; + "a++" -> "if (a > 10)"; + "a++" -> "print(a)" [constraint = true]; + } + } \ No newline at end of file diff --git a/figs/problem3.dot b/figs/problem3.dot new file mode 100644 index 0000000..0223270 --- /dev/null +++ b/figs/problem3.dot @@ -0,0 +1,40 @@ +digraph g { + enter [style = filled]; + mxin [label = "x = x_in", style = filled]; + try [style = filled]; + x_in [label = "x_in = x", style = filled]; + f [label = "f()", style = filled]; + nr [label = "normal return"]; + x_out_nr [label = "x = x_out"]; + er [label = "error return"]; + catch [label = "catch (Exception e)"]; + x_out_catch [label = "x = x_out"]; + log [label = "log(\"error\")"]; + x_0 [label = "x = 0", style = filled]; + x_in2 [label = "x_in = x", style = filled]; + f2 [label = "f()", style = filled]; + nr2 [label = "normal return"]; + er2 [label = "error return"]; + ee [label = "error exit"]; + x_out_nr2 [label = "x = x_out"]; + x_out_ee [label = "x = x_out"]; + + enter -> {mxin try}; + try -> f -> {x_in nr er} + nr -> x_out_nr + er -> catch -> {x_out_catch log} + enter -> {x_0 f2} + f2 -> {x_in2 nr2 er2} + nr2 -> x_out_nr2 + er2 -> ee -> x_out_ee; + + {edge [color = red, constraint = false]; + mxin -> x_in; + x_0 -> x_in2; + } + + {edge [color = blue, constraint = false]; + x_in -> {x_out_nr x_out_catch} + x_in2 -> {x_out_nr2 x_out_ee} + } +} \ No newline at end of file diff --git a/slides.tex b/slides.tex new file mode 100644 index 0000000..0b3f54a --- /dev/null +++ b/slides.tex @@ -0,0 +1,390 @@ +% !TEX encoding = UTF-8 +% !TEX spellcheck = en_GB + +\documentclass[aspectratio=169,compress]{beamer} + +\usepackage{pgfpages} +\usepackage{listings} +\usepackage[utf8]{inputenc} +\usepackage[spanish,english]{babel} +\usepackage{graphicx} + +\newcommand{\bluebold}[1]{\textbf{\textcolor{blue}{#1}}} + +% \usepackage{dot2texi} +\usepackage{tikz} +\usetikzlibrary{shapes,arrows} + +% \usetheme{beamertheme-bjeldbak/bjeldbak} +\setbeamertemplate{note page}[plain] + +% \setbeameroption{show notes on second screen=right} +\usetheme{-bjeldbak/beamerthemebjeldbak} + +% \usetheme{Madrid} +% \usecolortheme{whale} + +% \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 +} + +\begin{document} +\input{listings-config} + +\maketitle + +\begin{frame} + \frametitle{TODO} + + \begin{itemize} + \item Proposal no, solution o proposed solution. + \end{itemize} + + + +\end{frame} + +\begin{frame} + \frametitle{Table of Contents} + \tableofcontents +\end{frame} + +% \begin{frame}{Index} +% \note{some other notes} +% \begin{itemize} +% \item Example of program slicing (w/o graphs) +% \item Usages of slicing +% \item Thesis' goal: program slicing in presence of exceptions +% \item Example of difference between complete/correct with Venn diagram +% \item Exception handling in Java, and minor mention to other languages +% \item Example of a SDG +% \item Unconditional control flow: add pseudo-predicates and example +% \item Exceptions: throw treatment and example, try-catch and example +% \item Problem 1, generalization and solution +% \item Problem 2, generalization and solution +% \item Problem 3, generalization and solution +% \end{itemize} +% \end{frame} + +\section{Introduction} + +\subsection{Program slicing} + +\begin{frame}[containsverbatim]{Program slicing} + + \begin{minipage}{0.5\linewidth} + % Highlight using this, only useful line by line + % https://tex.stackexchange.com/questions/8851/how-can-i-highlight-some-lines-from-source-code#8860 + \begin{lstlisting} +void f(int x) { + int sum = 0; + int prod = 0; + while (x > 0) { + sum += x; + prod *= x; + x--; + } + log("sum: " + sum); + log("prod: " + prod); +} + \end{lstlisting} + \end{minipage} + \begin{minipage}{0.49\linewidth} + \begin{lstlisting} +void f(int x) { + + int prod = 0; + while (x > 0) { + + prod *= x; + x--; + } + + log("prod: " + prod); +} + \end{lstlisting} + \end{minipage} + + {\hfill Example adapted from [Tip 95].} +\end{frame} + +\begin{frame}{Program slicing}{Applications} + \begin{itemize} + \item Debugging + \item Program specialization + \item Software maintenance + \item Code obfuscation + \item Dead code removal + \item Program parallelization + \end{itemize} +\end{frame} + +\begin{frame}{Program slicing}{Metrics} + \begin{itemize} + \item \textbf{Completeness.} The slice includes all instructions that are necessary. + \item \textbf{Correctness.} The slice excludes all instructions that are not necessary. + \end{itemize} + + If we have a program (complete but not correct) and its slice (complete and correct) we can show examples of (correct but not complete?) and (nor complete nor correct)---This is a graphics placeholder. +\end{frame} + +% \subsection{Goals} + +% \begin{frame}{Objectives} +% TODO; remove, this is the toc +% \begin{itemize} +% \item Analyse the state-of-the-art +% \item Analyse exception handling in program slicing +% \item Find problems with the state-of-the-art and propose solutions +% \end{itemize} +% \end{frame} + +\subsection{Exception handling} + +\begin{frame}[containsverbatim]{Exception handling systems}{Java} + \begin{minipage}{0.49\linewidth} + \begin{lstlisting} +try { + f(); +} catch (Exception e) { + log("caught exception"); +} catch (Throwable e) { + log("caught throwable"); +} + \end{lstlisting} + \end{minipage} + \begin{minipage}{0.49\linewidth} + \begin{lstlisting} +void f() throws Exception { + switch(x) { + case A: + log("no error"); + break; + case B: + throw new Exception(); + default: + throw new Throwable(); + } +} + \end{lstlisting} + \end{minipage} +\end{frame} + +\begin{frame}{Exception handling systems}{Java} + Sources of exceptions: + \begin{itemize} + \item Array creation, array access, division, cast\dots + \item Method calls. + \item Field or method access on \texttt{null} variable. + \item Any instruction at any time. + \end{itemize} + + This should be removed. +\end{frame} + +\begin{frame}{Exception handling systems}{Other programming languages} + \begin{table} + \begin{minipage}{0.6\linewidth} + \centering + \begin{tabular}{r | r } + \textbf{Language} & $\%$ usage \\ \hline + JavaScript & 69.7 \\ \hline + HTML/CSS & 63.1 \\ \hline + SQL & 56.5 \\ \hline + Python & 39.4 \\ \hline + Java & 39.2 \\ \hline + \textbf<2->{\textcolor<2->{blue}{Bash/Shell}}/PowerShell & 37.9 \\ \hline + C\# & 31.9 \\ \hline + PHP & 25.8 \\ \hline + TypeScript & 23.5 \\ \hline + C++ & 20.4 \\ \hline + \end{tabular} + \end{minipage} + \begin{minipage}{0.39\linewidth} + \begin{tabular}{r | r } + \textbf{Language} & $\%$ usage \\ \hline + \textbf<3->{\textcolor<3->{blue}{C}} & 17.3 \\ \hline + Ruby & 8.9 \\ \hline + \textbf<4->{\textcolor<4->{blue}{Go}} & 8.8 \\ \hline + Swift & 6.8 \\ \hline + Kotlin & 6.6 \\ \hline + R & 5.6 \\ \hline + \textbf<5->{\textcolor<5->{blue}{VBA}} & 5.5 \\ \hline + Objective-C & 5.2 \\ \hline + \textbf<6->{\textcolor<6->{blue}{Assembly}} & 5.0 \\ \hline + \end{tabular} + \end{minipage} + % The caption has a weird structure due to the fact that there's a footnote + % inside of it. + \caption[Commonly used programming languages]{The most commonly used + programming languages by professional developers (Data from StackOverflow's 2019 Developer Survey)} + \label{tab:popular-languages} + \end{table} +\end{frame} + +\begin{frame}{Program slicing}{The system dependence graph} + \begin{enumerate} + \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 + \end{enumerate} + \centering + \includegraphics[width=0.9\linewidth]{figs/parameter-passing} +\end{frame} + +\begin{frame}{Program slicing}{Slicing the SDG} + \centering + \includegraphics[width=0.9\linewidth]{figs/parameter-passing} +\end{frame} + +\section{Problems and proposals} +\subsection{Problem 1: incorrect slices with nested unconditional jumps} +% TODO añadir nombres a los problemas + +\begin{frame}[containsverbatim]{Problem 1}{The subsumption correctness error} + \begin{minipage}{0.39\linewidth} + \begin{lstlisting} +public void f() { + while (X) { + if (Y) { + if (Z) { + A; + break; + } + B; + break; + } + C; + } + D; +} + \end{lstlisting} + \end{minipage} + \begin{minipage}{0.59\linewidth} + \includegraphics[width=0.8\linewidth]{figs/problem1} + \end{minipage} +\end{frame} + +\begin{frame}{Problem 1: proposed solution}{The subsumption correctness error} + TODO: show graph here, label the edges caused by each jump and then remove some. +\end{frame} + +\subsection{Problem 2: incorrect weak slices} + +\begin{frame}[containsverbatim]{Problem 2}{Unnecessary instructions in weak slicing} + \begin{minipage}{0.33\linewidth} + \begin{lstlisting} +void g() { + int x = 0; + while (x > 0) { + if (x > 10) + break; + x++; + } + log(x); +} + \end{lstlisting} + \end{minipage} + \begin{minipage}{0.66\linewidth} + \centering + \includegraphics[width=0.6\linewidth]{figs/problem2} + \end{minipage} +\end{frame} + +\begin{frame}{Problem 2: proposed solution}{Unnecessary instructions in weak slicing} + TODO: animate the multi-pass solution. + \begin{enumerate} + \item Remove all forward-jumping unconditional jump's nodes. + \item Traverse the graph. + \item Re-add all nodes that fulfil the condition of having something selected after them. + \item Goto 2. + \end{enumerate} +\end{frame} + +\subsection{Problem 3: incomplete \texttt{catch} treatment} + +\begin{frame}[containsverbatim]{Problem 3}{The lack of dependencies of \texttt{catch} statements} +\begin{minipage}{0.29\linewidth} + \begin{lstlisting} +void main() throws Exception { + try { + f(); + } catch (Exception e) { + log("error"); + } + x = 0; + f(); +} + \end{lstlisting} +\end{minipage} +\begin{minipage}{0.7\linewidth} + \includegraphics[width=\linewidth]{figs/problem3} +\end{minipage} +\end{frame} + +\begin{frame}{Problem 3: proposed solution}{The lack of dependencies of \texttt{catch} statements} + TODO: animate the conversion to the new dependencies and a slice. + \begin{enumerate} + \item Organize \texttt{catch} statements in a tree. + \item Add a path to the exit on the root. + \item Maybe reference parallelism with the treatment of unconditional statements. + \end{enumerate} +\end{frame} + +\section{Conclusions} + +\begin{frame}{Conclusions} + \begin{itemize} + \item Program slicing: a powerful technique, not yet complete for commonly used programming languages. + \item Any proposal exchanges efficiency for completeness/correctness. + \item Complete is required, correct is nice. + \item Unconditional jumps are complete: let's correct them. + \item Results + \begin{itemize} + \item 3 problems and proposed solutions. + \item NOMBRE PAPER, submitted to BLA BLA. + \item OTHER WORK, to be submitted to BLA BLA. + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame}{Future work} + \begin{itemize} + \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. + \item Redefine control dependence: Danicic TODO (nº cita) tried, \textit{execution dependence} vs. \textit{presence dependence}. + \end{itemize} +\end{frame} + +\begin{frame}{The End} +\end{frame} + + +\appendix +% \section*{Extra slides} + +\begin{frame}[noframenumbering]{Related work} + Change to state of the art and move to introduction + \begin{itemize} + \item SinH98 and SinH99 introduce the field slicing + exceptions + \item AllH03 improves the existing techniques + \item HorwitzRB88 introduces the current handling of unconditional jumps + \item JoC04 presents an alternative way to compute the CFG, but does not demonstrate the effects for program slicing. + \item JiaZSJ06 propose a solution in C++, ... TODO + \item PraMB11 also work in C++, no notable improvement TODO + \item JieS11 introduces OO + Exception SDG, but treats exceptions similar to Horwitz, leaving the original problems unresolved. + \end{itemize} +\end{frame} + +\begin{frame}[noframenumbering]{Program slicing}{Strong and weak slices} + Slide with definitions + examples (code and table w/ sequences). +\end{frame} + +\end{document} \ No newline at end of file diff --git a/theme b/theme deleted file mode 160000 index e2cea55..0000000 --- a/theme +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e2cea55a3837e29f92324b2f18d98482474b99e1