\documentclass{bschlangaul-aufgabe}
\bLadePakete{java}
\begin{document}
\bAufgabenMetadaten{
  Titel = {Aufgabe 4},
  Thematik = {Qualitätssicherung, Testen bei Bubblesort},
  Referenz = 46116-2017-H.T1-TA1-A4,
  RelativerPfad = Examen/46116/2017/09/Thema-1/Teilaufgabe-1/Aufgabe-4.tex,
  ZitatSchluessel = examen:46116:2017:09,
  BearbeitungsStand = mit Lösung,
  Korrektheit = unbekannt,
  Ueberprueft = {unbekannt},
  Stichwoerter = {Bubblesort, Black-Box-Testing, Anforderungsüberdeckung, Äquivalenzklassenzerlegung, Grenzwertanalyse, Kontrollflussgraph, C2a Vollständige Pfadüberdeckung (Full Path Coverage)},
  EinzelpruefungsNr = 46116,
  Jahr = 2017,
  Monat = 09,
  ThemaNr = 1,
  TeilaufgabeNr = 1,
  AufgabeNr = 4,
}

Ein\footcite{examen:46116:2017:09} gängiger Ansatz zur Messung der
Qualität von Software ist das automatisierte Testen von Programmen. Im
Folgenden werden praktische Testmethoden anhand des nachstehend
angegebenen Sortieralgorithmus diskutiert.

\bPseudoUeberschrift{Algorithmus 1 Bubble Sort\index{Bubblesort}}

\bJavaExamen{46116}{2017}{09}{BubbleSort}

\begin{enumerate}

%%
% a)
%%

\item Nennen Sie eine Art des Black-Box-Testens\index{Black-Box-Testing}
und beschreiben Sie deren Durchführung anhand des vorgegebenen
Algorithmus.

\begin{bAntwort}
Beim Black-Box-Testen sind die Testfälle von Daten getrieben
(Data-Driven) und beziehen sich auf die Anforderungen und das
spezifizierte Verhalten.)

$\Rightarrow$ Aufruf der Methoden mit verschiedenen
Eingangsparametern und Vergleich der erhaltenen Ergebnisse mit den
erwarteten Ergebnissen.

Das Ziel ist dabei eine möglichst hohe
Anforderungsüberdeckung\index{Anforderungsüberdeckung}, wobei man eine
minimale Anzahl von Testfällen durch
Äquivalenzklassenzerlegung\index{Äquivalenzklassenzerlegung} (1) und
Grenzwertanalyse\index{Grenzwertanalyse} (2) erhält.

\begin{description}
\item[zu (1):] Man identifiziert Bereiche von Eingabewerten, die jeweils
diesselben Ergebnisse liefern. Dies sind die sog. Äquivalenzklassen. Aus
diesen wählt man nun je einen Repräsentanten und nutzen diesen für den
Testfall.

\item[zu (2):] Bei der Grenzwertanalyse identifiziert man die
Grenzbereiche der Eingabedaten und wählt Daten aus dem nahen Umfeld
dieser für seine Testfälle.
\end{description}

Angewendet auf den gegebenen Bubblesort-Algorithmus würde die
Grenzwertanalyse bedeuten, dass man ein bereits aufsteigend sortiertes
Array und ein absteigend sortiertes Array übergibt.
\end{bAntwort}

%%
% b)
%%

\item Zeichnen Sie ein mit Zeilennummem beschriftetes
Kontrollflussdiagramm\index{Kontrollflussgraph} für den oben angegebenen
Sortieralgorithmus.

\begin{bAntwort}
Zur Erinnerung: Eine im Code enthaltene Wiederholung mit for muss wie
folgt im Kontrollflussgraphen „zerlegt“ werden:
\end{bAntwort}

%%
% c)
%%

\item Erklären Sie, ob eine vollständige Pfadüberdeckung\index{C2a
Vollständige Pfadüberdeckung (Full Path Coverage)} für die gegebene
Funktion möglich und sinnvoll ist.

\begin{bAntwort}
Eine vollständige Pfadüberdeckung ($C_1$-Test) kann nicht erreicht
werden, da die Bedingung der inneren Wiederholung immer wahr ist, wenn
die Bedingung der äußeren Wiederholung wahr ist. D. h., der Pfad
S-1-1-2-2-1“ kann nie gegangen werden. Dies wäre aber auch nicht
sinnvoll, weil jeder Eintrag mit jedem anderen verglichen werden soll
und im Fall true $\rightarrow$ false ein Durchgang ausgelassen.
\end{bAntwort}

\end{enumerate}
\end{document}
