\documentclass{bschlangaul-aufgabe}

\begin{document}
\bAufgabenMetadaten{
  Titel = {Aufgabe 3},
  Thematik = {Vermischte Softwaresysteme-Fragen},
  Referenz = 66116-2013-H.T1-TA2-A3,
  RelativerPfad = Examen/66116/2013/09/Thema-1/Teilaufgabe-2/Aufgabe-3.tex,
  ZitatSchluessel = sosy:ab:9,
  ZitatBeschreibung = {Aufgabe 1},
  BearbeitungsStand = mit Lösung,
  Korrektheit = unbekannt,
  Ueberprueft = {unbekannt},
  Stichwoerter = {Testen, Model Checking, Refactoring, EXtreme Programming, White-Box-Testing, Black-Box-Testing, Funktionale Anforderungen, Nicht-funktionale Anforderungen, Kontinuierliche Integration (Continuous Integration), Unit-Test, wp-Kalkül},
  EinzelpruefungsNr = 66116,
  Jahr = 2013,
  Monat = 09,
  ThemaNr = 1,
  TeilaufgabeNr = 2,
  AufgabeNr = 3,
}

\begin{enumerate}

%%
%
%%

\item Nennen\footcite[Aufgabe 1]{sosy:ab:9} Sie jeweils einen Vorteil
und einen Nachteil für Qualitätssicherung durch
\emph{„Testing“}\index{Testen} bzw. durch \emph{„Model Checking“}\index{Model
Checking}.
\footcite[Thema 1 Teilaufgabe 2 Aufgabe 3]{examen:66116:2013:09}

\begin{bAntwort}
\bPseudoUeberschrift{Qualitätssicherung durch „Testing“}

\begin{description}
\item[Vorteil]
schnell, Massentests

\item[Nachteil]
keine 100\% Garantie, dass alles getestet ist
\end{description}

\bPseudoUeberschrift{Qualitätssicherung durch „Model Checking“}

\begin{description}
\item[Vorteil]
mathematischer Beweis

\item[Nachteil]
teilweise langwierig / nicht möglich
\end{description}
\end{bAntwort}

%%
%
%%

\item Definieren Sie den Begriff „Refactoring“.\index{Refactoring}

\begin{bAntwort}
Verbesserung der Code-/Systemstruktur mit dem Ziel einer besseren
Wartbarkeit

\begin{itemize}
\item Dokumentation, Namen, Kommentare
\item keine neuen Funktionalitäten
\item bessere Struktur, einheitlich, einfacher
\end{itemize}
\end{bAntwort}

%%
%
%%

\item Begründen Sie, warum bei der Entwicklung nach der Methode des
„eXtreme Programming“\index{EXtreme Programming} langfristig gesehen
Refactorings zwingend notwendig werden.

\begin{bAntwort}
Im „eXtreme Programming“ wird das Projekt kontinuierlich aufgebaut,
somit ist ein Refactoring, auch aufgrund des Pair-Programmings, auf
lange Sicht gesehen notwendig.
\end{bAntwort}

%%
%
%%

\item Wie wird in der Praxis während und nach erfolgtem Refactoring
sichergestellt, dass keine neuen Defekte eingeführt werden bzw. wurden?

\begin{bAntwort}
Re-testing $\rightarrow$ erneute Verifikation mit Tests nach Refactoring
\end{bAntwort}

%%
%
%%

\item Worin besteht der Unterschied zwischen
„White-Box-Testing“\index{White-Box-Testing} und
„Black-Box-Testing“\index{Black-Box-Testing}?

\begin{bAntwort}
\begin{description}
\item[White-Box-Testing:]
Struktur-Test $\rightarrow$ Wie funktioniert der Code?

\item[Black-Box-Testing:]
Funktionstest $\rightarrow$ Das nach außen sichtbare Verhalten wird
getestet.
\end{description}
\end{bAntwort}

%%
%
%%

\item Nennen Sie vier Qualitätsmerkmale von Software.

\begin{bAntwort}
Änderbarkeit, Wartbarkeit, gute Dokumentation, Effizienz, Funktionalität
($\rightarrow$ Korrektheit), Zuverlässigkeit, Portabilität
\end{bAntwort}

%%
%
%%

\item Worin besteht der Unterschied zwischen
funktionalen\index{Funktionale Anforderungen} und nicht-funktionalen
Anforderungen\index{Nicht-funktionale Anforderungen}?

\begin{bAntwort}
\item[Funktionale Anforderung:]
Anforderung an die Funktionalität des Systems, also „Was kann es?“

\item[Nicht-funktionale Anforderung:]
Design, Programmiersprache, Performanz
\end{bAntwort}

%%
%
%%

\item Was verbirgt sich hinter dem Begriff „Continuous Integration”
\index{Kontinuierliche Integration (Continuous Integration)}?

\begin{bAntwort}
Continuous Integration: Das fertige Modul wird sofort in das bestehende
Produkt integriert. Die Integration erfolgt also schrittweise und nicht
erst, wenn alle Module fertig sind. Somit können auch neue
Funktionalitäten sofort hinzugefügt werden ($\rightarrow$ neue
Programmversion).
\end{bAntwort}

%%
%
%%

\item Nennen Sie sechs Herausstellungsmerkmale des \emph{„eXtreme
Programming“}\index{EXtreme Programming} Ansatzes.

\begin{bAntwort}
\begin{itemize}
\item Werte: Mut, Respekt, Einfachheit, Feedback, Kommunikation

\item geringe Bedeutung von formalisiertem Vorgehen, Lösen der
Programmieraufgabe im Vordergrund

\item fortlaufende Iterationen

\item Teamarbeit und Kommunikation (auch mit Kunden)

\item Ziel: Software schneller und mit höherer Qualität bereitstellen,
höhere Kundenzufriedenheit

\item Continuous Integration und Testing, Prototyping

\item Risikoanalysen zur Risikominimierung

\item YAGNI (You ain’t gonna need it) $\rightarrow$ nur die Features,
die gefordert sind, umsetzen; kein Vielleicht braucht man’s... “
\end{itemize}
\end{bAntwort}

%%
%
%%

\item Was versteht man unter einem Unit-Test?\index{Unit-Test} Begründen
Sie, warum es unzureichend ist, wenn eine Test-Suite ausschließlich
Unit-Tests enthält.

\begin{bAntwort}
Unter einem Unit-Test versteht man den Test eines einzelnen
Software-Moduls oder auch nur einer Methode. Dies ist allein nicht
ausreichend, da man so nichts über das Zusammenspiel der Module aussagen
kann.
\end{bAntwort}

%%
%
%%

\item Nennen Sie jeweils eine Methodik, mit welcher in der Praxis die
Prozesse der \emph{„Validierung“} und der \emph{„Verifikation“}
durchgeführt werden.

\begin{bAntwort}
\begin{description}
\item[Methodik der Verifikation:]
Testen, wp-Kalkül\index{wp-Kalkül}, Model Checking

\item[Methodik der Validierung:]
Kundentest, Kundengespräch (Spezifiaktion durchsprechen)
\end{description}
\end{bAntwort}

%%
%
%%

\item Grenzen Sie die Begriffe \emph{„Fault“} und \emph{„Failure“}
voneinander ab.

\begin{bAntwort}

\begin{description}
\item[Fault:]
interner Fehlerzustand, der nach außen nicht nicht sichtbar werden muss,
aber kann.

\item[Failure:]
Systemfehler / Fehlerzustand, der nach außen sichtbar wird.
\end{description}
\end{bAntwort}
\end{enumerate}
\end{document}
