\documentclass{bschlangaul-aufgabe} \bLadePakete{java,kontrollflussgraph} \begin{document} \bAufgabenMetadaten{ Titel = {White-Box-Test}, Thematik = {Größter gemeinsamer Teiler}, Referenz = SOSY.Testen.Black_White-Box-Test.Groesster-gemeinsamer-Teiler, RelativerPfad = Module/40_SOSY/05_Testen/20_Black_White-Box-Test/Aufgabe_Groesster-gemeinsamer-Teiler.tex, ZitatSchluessel = sosy:e-klausur, BearbeitungsStand = mit Lösung, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {Datenfluss-annotierter Kontrollflussgraph, Zyklomatische Komplexität nach Mc-Cabe, C2b Schleife-Inneres-Pfadüberdeckung (Boundary-Interior Path Coverage)}, } Gegeben sei folgende Methode: \footcite{sosy:e-klausur} \bJavaDatei[firstline=4,lastline=12]{aufgaben/sosy/white_box/WhiteBox} \begin{enumerate} \item Erstellen Sie den zur Methode gehörenden datenflussannotierten Kontrollflussgraphen.\index{Datenfluss-annotierter Kontrollflussgraph} \begin{bAntwort} \begin{tikzpicture}[li kontrollfluss,xscale=1,yscale=-1.2] \node[knoten] at (0,0) (nS) {S}; % public int ggT(int a, int b) { \node[knoten] at (0,1) (n1) {1}; % int result = 1; \node[knoten] at (0,2) (n2) {2}; % in der for: int i = 1; \node[knoten] at (0,3) (n3) {3}; % in der for: i <= Math.min(a, b); \node[knoten] at (0,4) (n4) {4}; % if((a % 1 == 0) & (b % i == 0)) { \node[knoten] at (1,5) (n5) {5}; % result = i; \node[knoten] at (0,6) (n6) {6}; % i++ \node[knoten] at (0,7) (nE) {E}; % return result; \draw[->] (nS) -- (n1); \draw[->] (n1) -- (n2); \draw[->] (n2) -- (n3); \draw[->] (n3) -- node[name=n3n4]{} (n4); \draw[->] (n4) -- node[name=n4n5]{} (n5); \draw[->] (n4) -- node[name=n4n6]{} (n6); \draw[->] (n5) -- (n6); \draw[->] (n6) -- (nE); \draw[->] (n3) -- (2,3) -- node[name=n3nE]{} (2,7) -- (nE); \draw[->] (n6) -- (-2,6) -- (-2,3) -- (n3); \node[usebox] at (2,0) {def(a, b)} edge[dashed] (nS); \node[usebox] at (2,1) {def(result)} edge[dashed] (n1); \node[usebox] at (2,2) {def(i)} edge[dashed] (n2); \node[usebox] at (3,3) {p-use(i), c-use(a, b)} edge[dashed] (n3n4.center) edge[dashed] (n3nE.center); \node[usebox] at (-5,4) {p-use(a, b, i)} edge[dashed] (n4n5.center) edge[dashed] (n4n6.center); \node[usebox] at (3,5) {def(result), c-use(i)} edge[dashed] (n5); \node[usebox] at (3,6) {def(i), c-use(i)} edge[dashed] (n6); \node[usebox] at (-1,8) {c-use(result)} edge[dashed] (nE); \end{tikzpicture} \end{bAntwort} %% % %% \item Geben Sie die zyklomatische Komplexität $M$ nach McCabe der Methode \bJavaCode{ggT} an. (Nur das Ergebnis!) \index{Zyklomatische Komplexität nach Mc-Cabe} \begin{bAntwort} Berechnung durch Anzahl Binärverzweigungen $b$ ($p$ Anzahl der Zusammenhangskomponenten des Kontrollflussgraphen) \begin{displaymath} M = b + p \end{displaymath} $\rightarrow M = 2 + 1 = 3$ \noindent oder durch Anzahl Kanten $e$ und Knoten $n$ \begin{displaymath} M = e - n + 2p \end{displaymath} $\rightarrow M = 9 - 8 + 2 \cdot 1 = 3$ \end{bAntwort} \item Geben Sie je einen Repräsentanten aller Pfadklassen im Kontrollflussgraphen an, die zum Erzielen einer vollständigen Schleifen-Inneres-Überdeckung (Boundary-Interior-Coverage) genügen würden. \index{C2b Schleife-Inneres-Pfadüberdeckung (Boundary-Interior Path Coverage)} \begin{bAntwort} \bPseudoUeberschrift{Äußere Pfade} \begin{itemize} \item S 1 2 3 E \end{itemize} \bPseudoUeberschrift{Grenzpfade} \begin{itemize} \item S 1 2 3 4 5 6 3 E \item S 1 2 3 4 6 3 E \end{itemize} \bPseudoUeberschrift{Innere Pfade} \begin{itemize} \item S 1 2 3 4 5 6 3 4 5 6 3 E \item S 1 2 3 4 6 3 4 6 3 E \item S 1 2 3 4 5 6 3 4 6 3 E \item S 1 2 3 4 6 3 4 5 6 3 E \end{itemize} \end{bAntwort} %% % %% \item Geben Sie an, welche der Pfade aus der vorherigen Aufgabe nicht überdeckbar ("feasible") sind und begründen Sie dies. \begin{bAntwort} \bPseudoUeberschrift{Äußere Pfade} \begin{description} \item[S 1 2 3 E] ja, \zB \bJavaCode{ggT(-1, -2)}. \end{description} \bPseudoUeberschrift{Grenzpfade} \begin{description} \item[S 1 2 3 4 5 6 3 E] ja, \zB \bJavaCode{ggT(10, 20)}. \item[S 1 2 3 4 6 3 E] ja, \zB \bJavaCode{ggT(1, 2)}. \end{description} \bPseudoUeberschrift{Innere Pfade} \begin{description} \item[S 1 2 3 4 5 6 3 4 5 6 3 E] ja, \zB \bJavaCode{ggT(2, 2)}. \item[S 1 2 3 4 6 3 4 6 3 E] nicht feasible, da geteilt durch eins immer Modulo 0 ergibt, egal welche Zahl a oder b hat. Bei der ersten Schleifenwiederholung wird immer die innere If-Verzweigung genommen. \item[S 1 2 3 4 5 6 3 4 6 3 E] ja, \zB \bJavaCode{ggT(2, 3)}. \item[S 1 2 3 4 6 3 4 5 6 3 E] nicht feasible, da geteilt durch eins immer Modulo 0 ergibt, egal welche Zahl a oder b hat. Bei der ersten Schleifenwiederholung wird immer die innere If-Verzweigung genommen. \end{description} \end{bAntwort} \end{enumerate} \end{document}