Software Engineering II 2013

Aufgabe 1 [Software-Architekturen] (10 Punkte)

  1. Nennen sie zwei nichtfunktionale Software-Anforderungen und erläutern sie mit welchen Architekturentscheidungen sie diese erreichen können.
  2. Inwiefern kann man von einem expliziten Architekturentwurf in der Softwareentwicklung profitieren. Nennen sie mindestens zwei Vorteile eines expliziten Architekturentwurfs.
  3. Die Architektur Integrierte Entwicklungsumgebungen (IDE) wie z.B. Eclipse oder NetBeans folgt oft weitgehend dem Style des Repositories. Erläutern sie weshalb.

Aufgabe 2 [Design Patterns] (5 Punkte)

Eine Pizzeria bietet einen Online-Bestellservice an. Jede Pizza hat einen Namen, einen Preis und eine Liste von Zutaten. Man kann die Zutatenliste der Pizza als String abrufen und ihren Preis abfragen.

Es werden verschiedene Pizza-Sorten angeboten, mindestens eine Salami- und eine Gemüsepizza. Jede Pizza hat Tomatensauce und Käse als Zutaten. Die weiteren Zutaten erhöhen den Preis.

Erstellen Sie ein objektorientiertes Entwurfsmodell mit Hilfe des Decorator-Patterns. Sie können entweder ein UML-Klassendiagramm oder Java-Klassen angeben, wobei die Methoden nicht implementiert sein müssen.

BONUS: Notieren sie vollständigen Java-Code, der ihren Entwurf implementiert.

Aufgabe 3 [IT-Projektmanagement] (10 Punkte)

  1. Leitlinien im Personalmanagement lasse sich durch die Schlagworte Konsistenz, Respekt, Inklusion und Aufrichtigkeit beschreiben. Nennen sie vier Methoden, die sie als IT-Projektmanager ergreifen, um diesen Leitlinien gerecht zu werden.
  2. Die Function-Points-Analyse und Cocomo sind zwei Verfahren zur Aufwandsabschätzung für die Planung von Software-Projekten. Erläutern sie die grundlegenden Ideen / Prinzipien eines dieser beiden Verfahren.
  3. Nennen sie je ein Beispiel für Projektrisiken, Produktrisiken und Geschäftsrisiken in IT-Softwareprojekten.

Aufgabe 4 [Enterprise-Applications] (15 Punkte)

  1. Was verstehen sie unter dem Phänomen Inconsistent Read?
  2. Erklären sie, was Read-Locks und Write-Locks sind und unter welchen Vorbedingungen sie bei pessimistischem Locking vergeben werden können.
  3. Beschreiben sie ein Szenario, in dem ein Deadlock auftritt.
  4. Nenn und erläutern sie zwei Strategien, um mit der Problematik umzugehen, dass in Enterprise Application Deadlocks auftreten können.

Aufgabe 5 [Testen] (15 Punkte)

  1. Erläutern sie zwei Methoden zur Software-Integration.
  2. Nennen sie zwei Merkmale von Auslieferungstests.
  3. Notieren sie die Aufrufe (Calls) in einem Unittest für die folgende Methode, der das Kriterium eines Mehrfachbedingungsüberdeckungstests, (C3) erfüllt.
  4. Weshalb kann man für die Methode methodUnderTest() sogar einen Pfadüberdeckungstest schreiben?
public int methodUnderTest(int a, int b) {
  if (a==0 || (b==0 && a+b>0))
    return 0;
  else
    return 1;
}

Aufgabe 6 [IT-Konferenzen] (3 Punkte)

Erläutern sie den prinzipiellen Ablauf einer Konferenz-Session mit zwei Vorträgen.

Aufgabe 7 [Spezifikation und Analyse von Contracts] (2 Punkte)

Nennen sie die (umgangssprachlich formulierten) Namen von mindestens zwei Modalitäten, die die Deontic Logic nutzt, um Verträge zu formalisieren.

Aufgabe 8 [Das statische Typsystem] (20 Punkte)

Die Sprache SIGNED ist folgendermaßen definiert.

Syntax (in erweiterter BNF):

u ::= 0 | [1-9][0-9]*
n ::= u | -u
var ::= [a-z][a-z]*
e ::= n | var | (e+e) | -e

Typsprache (in BNF):

t ::= int

Typregeln:

Für jede Typumgebung A gelte:

$ \texttt{[INT]}\frac{}{A~\vdash~n:~\texttt{int}} $
$ \texttt{[VAR]}\frac{x:~t\in A}{A~\vdash~x:~t}$
$ \texttt{[ADD]}\frac{A~\vdash~e_1:~\texttt{int}~~~~~A~\vdash~e_2:~\texttt{int}}{A~\vdash~(e_1+e_2):~\texttt{int}}$
$ \texttt{[INV]}\frac{A~\vdash~e:~\texttt{int}}{A~\vdash~-e:~\texttt{int}}$

Berechnungsregeln:

$ \texttt{[B-ADD]}\frac{}{(n_1+n_2)~\rightarrow~m}~~\texttt{mit}~~\lsem m\rsem_N=\lsem n_1\rsem_N+\lsem n_2\rsem_N$
$ \texttt{[B-SIGN]}\frac{e~\rightarrow~e'}{-e~\rightarrow~-e'}$
$ \texttt{[B-SIMPL]}\frac{}{--e~\rightarrow~e}$
$ \texttt{[B-ADD-L]}\frac{e_1~\rightarrow~e'_1}{(e_1+e_2)~\rightarrow~(e'_1+e_2)}$
$ \texttt{[B-ADD-R]}\frac{e_1~\rightarrow~e'_1}{(v+e)~\rightarrow~(v+e')}$

wobei v ein Wert ist.

  1. Welche der folgenden Ausdrücke sind in SIGNED syntaktisch korrekt? (Ankreuzen!)
    • -(m-p)
    • (17+(m+ -2))
    • –(p+2)
    • (p+(p+false))
  2. Es sei die Variable m wie folt definiert und initialisiert:

    int m = 4;

    Notieren sie die dadurch definierte Typumgebung!
  3. Weisen sie die Typkorrektheit des Ausdrucks mit Hilfe eines Herleitungsbaums nach.
  4. Wird die Information der Typkorrektheit zur Compile-Zeit oder zur Laufzeit gewonnen? Welche Fehler sind dadurch zu welchem Zeitpunkt ausgeschlossen?
  5. Werten sie diesen Ausdruck e mit Hilfe der Berechnungsregeln aus und rechtfertigen sie alle Berechnungsschritte mit jeweils einem Herleitungsbaum.