From aaa086e90ba6d70f0db372239c2e5cdf59b63117 Mon Sep 17 00:00:00 2001 From: Carlos Galindo Date: Fri, 6 Dec 2019 19:35:20 +0000 Subject: [PATCH] finished ch3 pass 1 --- Secciones/background.tex | 1 + Secciones/incremental_slicing.tex | 18 +++++++++++++++--- img/try-catch-example.dot | 2 +- img/try-catch-example.pdf | Bin 18546 -> 18712 bytes 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/Secciones/background.tex b/Secciones/background.tex index be95096..fb283f0 100644 --- a/Secciones/background.tex +++ b/Secciones/background.tex @@ -260,6 +260,7 @@ dependencies are \added{represented with }black \added{arcs}, data dependencies \item[Forward static.] Used to obtain the lines affected by a statement, used to identify dead code, to check the effects a line has on the rest of the program.\josep{la principal aplicacion de forward slicing es software maintenance: Predecir a que partes del programa va a afectar un cambio.} + \carlos{https://ieeexplore.ieee.org/document/83912} \item[Chopping static.] Obtains both the statements affected by and the statements that affect the selected statement. \item[Dynamic.] Can be combined with any of the previous variations, and diff --git a/Secciones/incremental_slicing.tex b/Secciones/incremental_slicing.tex index 07b1e4d..c1c9e8c 100644 --- a/Secciones/incremental_slicing.tex +++ b/Secciones/incremental_slicing.tex @@ -78,6 +78,16 @@ examples, \added{data and control dependencies are represented by thin solid red \label{def:pdg} \josep{Given a program $P$,} The \textsl{program dependence graph} (PDG) \josep{associated with $P$} is a directed graph (and originally a tree\sergio{???}\josep{sobran las aclaraciones historicas en una definicion}) represented by \josep{a triple $\langle N, E_c, E_d \rangle$ where $N$ is...} three elements: a set of nodes $N$, a set of control edges $E_c$ and a set of data edges $E_d$. \sergio{$PDG = \langle N, E_c, E_d \rangle$} + Method $M$, CFG $C = \langle N, E \rangle$, the PDG is $P = \langle N', E_c, E_d \rangle$, where + % $$E_c = \{ (a, b) | a, b \in N' \wedge a \ctrldep b\}$$ + + \begin{enumerate} + \vspace{-1em} + \item $N' = N \backslash \{End\}$ \vspace{-1em} + \item $(a, b) \in E_c \iff a, b \in N' \wedge a \ctrldep b ~ \wedge \not\exists c \in N' ~.~ a \ctrldep c \wedge c \ctrldep b$ \vspace{-1em} + \item $(a, b) \in E_d \iff a, b \in N' \wedge a \datadep b$ + \end{enumerate} + The set of nodes corresponds to the set of nodes of the CFG\josep{que CFG? no se puede dar por hecho que existe un CFG en una definicion}, excluding the ``End'' node. Both sets of edges are built as follows\josep{:}. There is a control edge between two nodes $n_1$ and $n_2$ if and only if $n_1 \ctrldep n_2$\sergio{acordarse de lo de evitar la generacion de arcos para prevenir la transitividad. Decidir si definimos Control arc como ua definicion aparte.}, and a data edge between $n_1$ and $n_2$ if and only if $n_1 \datadep n_2$. Additionally, if a node $n$ does not have any incoming control edges, it has a ``default'' control edge $e = (\textnormal{Start},n)$; so that ``Start'' is the only source node of the graph. @@ -91,8 +101,9 @@ Finally, the SDG is built from the combination of all the PDGs that compose the program. \begin{definition}[System dependence graph] - \label{def:sdg} + Given a program $P$ composed of a set of $n$ methods $M = \{m_0 ... m_n\}$ and their associated PDGs (each method $m_i$ has a PDG $G_{PDG}^i = \langle N^i, E_c^i, E_d^i \rangle$), the \textit{system dependence graph} (SDG) of $P$ is a graph $G = \langle N', E'_c, E'_d, E_{fc}, E_s \rangle$ where $N = \bigcup_{i=0}^n N^i$, $ $, $ $, $ $, and $ $. + \josep{Arreglar esta definicion como la del PDG. Ahora mismo es totalmente informal. Deberia definirse encima del PDG. Es decir, una SDG es la conexion adecuada de varios PDGs, uno por método. Y solo definir lo nuevo: call arcs, parameter-in arcs, parameter-out arcs y summary arcs.} The \textsl{system dependence graph} (SDG) is a directed graph that represents the control and data dependencies of a whole program. It has three kinds of edges: control, data and function call. The graph is built combining multiple PDGs, with the ``Start'' nodes labeled after the function they begin. There exists one function call edge between each node containing one or more calls and each of the ``Start'' node\josep{s} of the method called. In a programming language where the function call is ambiguous (e.g. with pointers or polymorphism), there exists one edge leading to every possible function called.\sergio{Esta definicion ha quedado muy informal no? Donde han quedado los $E_c,~E_d,~E_{fc},$ Nodes del PDG...?} \end{definition} @@ -372,7 +383,7 @@ structures generate different control dependencies by default.} \begin{example}[Catches.] Consider the following segment of Java code in figure~\ref{fig:try-catch}, which includes some statements that do not use data (X, Y and Z), and method call to \texttt{f} that uses \texttt{x} and \texttt{y}, two global variables. \texttt{f} may throw an exception, so it has been placed inside a \texttt{try-catch} structure, with a statement in the \texttt{catch} that logs the error when it occurs. Additionally, when \texttt{f} exits without an error, only \texttt{x} is modified; but when an error occurs, only \texttt{y} is modified. - Note how the + Note how the pseudo-statements act to create control dependencies between the \textit{true} and \textit{false} edges, such as the ``normal return'', ``catch'', ``try''. The statements contained after the function call, inside the \texttt{catch} and the \texttt{try} blocks are respectively control dependent on the aforementioned nodes. Finally, consider the statement \texttt{Z}; which is not dependent on any part of the \texttt{try-catch} block, as all exceptions that may be thrown are caught: it will execute regardless of the path taken inside the \texttt{try} block. \carlos{Consider critiquing the result, saying that despite the last sentence, statements can be removed (the catch) so that the dependencies are no longer the same.} \begin{figure}[h] \begin{minipage}{0.35\linewidth} \begin{lstlisting} @@ -394,7 +405,8 @@ Z; \end{figure} \end{example} -% \delete{From here to the end, move to solution chapter (CARLOS)} +\carlos{From here to the end of the chapter, delete / move to solution chapter} + Regardless of the approach, when there exists a catch--all block, there is no dependency generated from the \texttt{catch}, as all of them will lead to the next instruction. However, this means that if no data is outputted from the \texttt{try} or \texttt{catch} block, the catches will not be picked diff --git a/img/try-catch-example.dot b/img/try-catch-example.dot index da882c1..10dc470 100644 --- a/img/try-catch-example.dot +++ b/img/try-catch-example.dot @@ -23,7 +23,7 @@ digraph G { x_in [label = "x_in = x"]; y_in [label = "y_in = y"]; call [label = "f()"]; - nr [style=dashed]; + nr [style=dashed, label = "normal return"]; data [style=dashed, label = "x = x_out"]; y [label = "Y"]; c [label = "catch"]; diff --git a/img/try-catch-example.pdf b/img/try-catch-example.pdf index 6f69f06ca835144e4763c2054ed3c7ee88fec0a0..0fc8b384e4dae69cc0305d8be5b4a5014d13a245 100644 GIT binary patch delta 14182 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