Probeklausur Wintersemester 19/20

| Back to Overview

Vorwort

Dies ist meine Lösung für die Probeklausur die wir bekommen haben... Es ist nicht die Lösung. Wie immer gilt: Wenn euch was Falsches auffällt, meldet euch, ich kanns anscheinend gebrauchen.

Oke also das jetzt ein kleiner Fail... Ich habe erst ab der 3ten Aufgabe gemerkt, dass wirklich die Gesamte Klausur unsere Aufgaben waren. Also könnte man auch einfach die Globalübungsblätter gucken...

Ich mache morgen noch eine andere Klausur dann ist das vielleicht hilfreicher, aber jetzt hab ichs ja schon gemacht. :(

Aufgabe 1 (Aktivitätsdiagramm)

Formalisieren Sie die folgende textuelle Beschreibung der Kommunikation während des Ladevorgangs zwischen einem Elektroauto und einer Ladesäule des Autoherstellers Carmpere, indem Sie ein geeignetes Aktivitätsdiagramm erstellen.

Als Erstes prüft das Elektroauto, ob der Ladestecker gesteckt ist. Steckt der Ladestecker nicht wird der Ladevorgang beendet. Nur bei gestecktem Stecker berechnet das Auto als Nächstes die zu ladende Menge Strom. Dieser Ladewunsch wird als Nächstes an die Ladesäule gesendet. Die Ladesäule prüft den Ladewunsch. Danach bereitet sie den Ladevorgang entsprechend vor und sendet gleichzeitig eine Anfrage nach der Zahlungsmethode an das Elektroauto. Daraufhin bestimmt das Elektroauto die Zahlungsmethode und sendet diese Information an die Ladesäule zurück. Erst nachdem die Zahlungsmethode empfangen wurde und der Ladevorgang vorbereitet ist, prüft die Ladesäule ein letztes Mal, ob der Ladevorgang gestartet werden kann. Nur wenn es bei dieser Prüfung zu keinem Fehler gekommen ist, stellt sie die angeforderte Menge Strom bereit. Ist dies der Fall, beginnt das Elektroauto zu laden. Ist es allerdings zu einem Fehler gekommen, meldet die Ladesäule einen Fehler.

Tipp: Achten Sie darauf, dass Kontrollknoten in Ihrem Aktivitätsdiagramm paarweise auftreten müssen und beachten Sie alle möglichen Akteure, die in der Beschreibung erwähnt werden.

Lösung

Korrigiert! Hatte die If's nicht zusammengeführt. Sollte man am besten machen.

Aufgabe 2 (Klassendiagramme)

a)

Formalisieren Sie die folgende textuelle Beschreibung des Systems, indem Sie ein geeignetes Klassendiagramm erstellen.

Es werden zwei Arten von Bibliotheken separat voneinander entwickelt. Die erste Art von Bibliothek enthält Algorithmen für Probleme aus der Geometrie. Jede Bibliothek dieser Art und jeder Algorithmus haben dabei einen Namen. Des Weiteren enthält die Bibliothek geometrische Objekte. Diese sind Quadrate, Kreise und Geraden, es kann aber noch andere Objekte geben. Kreise bieten dabei jeweils eine Funktion, um ihren Mittelpunkt und ihren Radius als Gleitkommazahl auszugeben. Eine spezielle Art von Algorithmus ist dafür gedacht zu bestimmen, ob sich zwei Kreise schneiden.

Die zweite Art von Bibliothek ist eine für geometrische Objekte, die auf Benutzeroberflächen (GUI) angezeigt werden können. Eine GUI Bibliothek hat einen Namen und enthält GUI Elemente. Jedes GUI Element hat einen Namen und eine Methode, mit der man es auf eine Benutzeroberfläche zeichnen kann. Es gibt genau die GUI Elemente Quadrat, Kreis und Punkt. Ein Punkt besitzt zusätzlich seine x und y Koordinaten als Gleitkommazahlen. Ein Kreis besitzt genau einen Punkt, der seinen Mittelpunkt festlegt und einen Radius, der als Gleitkommazahl angegeben wird.

Korrigiert! Hatte bissle was Falsch

b)

Da die Algorithmen zu Beginn nicht auf den GUI Elementen ausgeführt werden können, soll es durch eine neue Anforderung an das System nun möglich sein, Algorithmen, die prüfen, ob sich zwei Kreise schneiden, für Kreise aus der GUI Bibliothek zu nutzen.

Welches Entwurfsmuster ist zur Umsetzung dieser Anforderung geeignet?

Erweitern Sie Ihr Klassendiagramm aus Teilaufgabe a) entsprechend um das Entwurfsmuster.

Korrigiert! Hatte bissle was Falsch

c)

(Siehe Klausuren bin zu faul um das zu kopieren)

Um welches Entwurfsmuster handelt es sich?

Geben Sie an, welche Objektdiagramme mögliche Instanziierungen des Klassendiagramms sind und welche nicht.

Welche Objektdiagramme sind äquivalent?

Aufgabe 3 (Testen)

Gegeben ist die Methode closure(Boolean[][] m), welche die transitive Hülle eines Graphen berechnet. Der Eingabegraph ist mittels einer Adjazenzmatrix definiert, die durch das Array m kodiert ist.

public static Optional<Boolean[][]> closure(Boolean[][] m){
  for(int i = 0; i < m.length; i++){
    if(m.length != m[i].length){
      return Optional.empty();
    }
  }
  int length = m.length;
  for (int k = 0; k < length; k++) {
    for (int i = 0; i < length; i++) {
      if(m[i][k] != null && m[i][k]){
        for (int j = 0; j < length; j++) {
          if(m[k][j] != null && m[k][j]){
            m[i][j] = true;
          }
        }
      }
    }
  }
  return Optional.of(m);
}

a)

Konstruieren Sie einen Kontrollflussgraphen für die Methode closure(Boolean[][] m). Benutzen Sie die links vom Methodenrumpf angegebenen Nummern zur Beschriftung der zugehörigen Knoten im Kontrollflussgraphen. Nutzen Sie die nächste Seite.

b)

Nennen Sie eine repräsentative Eingabemenge für einen Anweisungsüberdeckungstest der Methode closure(Boolean[][] m). Für die Angabe der Eingabewerte können Sie die übliche Matrixschreibweise nutzen. Beispielsweise repräsentiert die Matrix (1324)\begin{pmatrix} 1 & 3 \\ 2 & 4 \\ \end{pmatrix} ein Array AA mit A[0][0]=1A[0][0]=1, A[1][0]=2A[1][0]=2, A[0][1]=3A[0][1]=3 und A[1][1]=4A[1][1]=4. Ihre Eingabewerte dürfen maximal 3 x 3 Matrizen sein.

c)

Gibt es eine Methode, deren Kontrollflussgraph nur Knoten enthält, die vom Startknoten aus erreichbar sind, obwohl es keine Menge von Eingaben gibt, sodass jede Anweisung der Methode mindestens bei einer Eingabe ausgeführt wird?

Falls Sie diese Frage negativ beantworten, dann begründen Sie die Antwort. Falls Sie die Frage positiv beantworten, dann geben Sie eine Methode an (z.B. in Java), die obiges erfüllt.

Korrektur! War zu lost

d)

Seien 𝑢 und 𝑣 zwei Knoten eines Kontrollflussgraphen 𝐺. Der Knoten 𝑢 dominiert den Knoten 𝑣 in 𝐺 genau dann, wenn jeder Pfad in 𝐺, der im Startknoten von 𝐺 beginnt und den Knoten 𝑣 besucht auch den Knoten 𝑢 besucht. Beurteilen Sie für jede der folgenden Aussagen, ob sie wahr ist und begründen Sie die jeweiligen Antworten mit maximal drei Sätzen oder durch ein Gegenbeispiel.

  1. Jeder Knoten eines Kontrollflussgraphen 𝐺 dominiert sich selbst in 𝐺.
  2. Wenn 𝑢 und 𝑣 zwei Knoten eines Kontrollflussgraphen 𝐺 sind und der Knoten 𝑢 den Knoten 𝑣 in 𝐺 dominiert, dann dominiert der Knoten 𝑣 den Knoten 𝑢 in 𝐺.
  3. Wenn 𝑢, 𝑣 und 𝑤 drei Knoten eines Kontrollflussgraphen 𝐺 sind, der Knoten 𝑢 den Knoten 𝑣 in 𝐺 dominiert und der Knoten 𝑣 den Knoten 𝑤 in 𝐺 dominiert, dann dominiert der Knoten 𝑢 den Knoten 𝑤 in 𝐺.

Wozu kann eine vollständig bekannte Dominanzrelation für einen Kontrollflussgraphen bei einer Anweisungsüberdeckungstesterstellung ausgenutzt werden?

Aufgabe 4 (Feature-Diagramme)

Guckt euch die Glob an

b)

  1. 4
  2. 1 (Nur die leere Menge)
  3. 2 (Wegen dem XOR nur (A+D+F))

c)

log_2(256) = 8

Also ein Feature Diagramm mit 8*2er Oder.

A5

Gar kein Bock das nochmal zu machen :D Guckt euch die Globalübung 2.2 an

A6

a)

Was ist eine funktionale Anforderung?

Was ist eine nicht-funktionale Anforderung?

b)

Was ist eine Fehlfunktion?

Wie stehen Programmefehler und das Auftreten einer Fehlfunktion in Beziehung?

c)

Füllen Sie im folgenden Sequenzdiagramm in den fünf freien Pfeilen die korrekten git Befehlen ein wie sie in der Vorlesung vorgestellt wurden

d)

Wie wurde die Methode des Generativen Software Engineerings (GSE) in der Vorlesung definiert?

e)

Tragen Sie die fünf Stufen des Capability Maturity Models, wie in der Vorlesung vorgestellt, ein und gebe Sie kurz ihre Bedeutung an. (Keine sorge wusste ich auch nicht)

f)

Füllen Sie in folgenden Zustandsdiagrammen die korrekten Bezeichnungen aller markierten Elemente ein. (Von links oben nach rechts unten)

Im Folgendem wird eine Transition eines Zustandsdiagramms genauer betrachtet. Tragen Sie die drei Elemente einer Transition ein.