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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 CvtC%;h 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