Projekt angewandte Systemsoftwaretechnik - Exam.pdf

Projekt angewandte Systemsoftwaretechnik - Exam
Projekt angewandte Systemsoftwaretechnik - Exam Aufgabe 1) Du bist als Anforderungsmanager für ein neues Softwareprojekt verantwortlich. Die Anforderungsanalyse- und spezifikation ist entscheidend für den Erfolg dieses Projekts. Dein Ziel ist es, klare, vollständige und überprüfbare Anforderungen zu erheben, zu dokumentieren und zu verwalten. Du kannst dazu verschiedene Techniken wie Interviews, F...

© StudySmarter 2024, all rights reserved.

Projekt angewandte Systemsoftwaretechnik - Exam

Aufgabe 1)

Du bist als Anforderungsmanager für ein neues Softwareprojekt verantwortlich. Die Anforderungsanalyse- und spezifikation ist entscheidend für den Erfolg dieses Projekts. Dein Ziel ist es, klare, vollständige und überprüfbare Anforderungen zu erheben, zu dokumentieren und zu verwalten. Du kannst dazu verschiedene Techniken wie Interviews, Fragebögen, Beobachtungen und Workshops verwenden. Die Anforderungen werden in einem Lastenheft (Wünsche des Auftraggebers) und einem Pflichtenheft (konkrete Umsetzungsvorgaben) dokumentiert. Es ist wichtig, Missverständnisse zu vermeiden und die Anforderungen präzise und eindeutig zu formulieren. Beachte, dass es sowohl funktionale Anforderungen (was das System tun soll) als auch nicht-funktionale Anforderungen (wie das System es tun soll; z.B. Performance, Sicherheit) gibt. Die Anforderungen müssen validiert und auf Vollständigkeit und Konsistenz geprüft werden, und es ist notwendig, ihre Priorität festzulegen.

a)

Du führst Interviews mit verschiedenen Stakeholdern durch, um die Anforderungen an das Softwareprodukt zu erheben. Documentiere drei funktionale und zwei nicht-funktionale Anforderungen, die Du aus diesen Interviews erhältst. Beschreibe jeweils die Erhebungsmethode und begründe, warum Du diese Anforderungen als relevant erachtest.

Lösung:

  • Funktionale Anforderungen
    • Funktionale Anforderung 1: Das System muss es den Benutzern ermöglichen, sich zu registrieren und einzuloggen.
      • Erhebungsmethode: Interview mit dem Product Owner
      • Begründung: Diese Anforderung ist wesentlich, da ohne eine Benutzerregistrierung und -authentifizierung keine personalisierte Interaktionen ermöglicht werden könnten. Ein sicheres Login-System ist auch entscheidend für den Schutz der Benutzerdaten.
    • Funktionale Anforderung 2: Das System muss Benutzern die Möglichkeit geben, ihre Profilinformationen zu bearbeiten.
      • Erhebungsmethode: Fragebögen an potenzielle Endnutzer
      • Begründung: Benutzer möchten in der Lage sein, ihre Informationen, wie E-Mail-Adresse oder Passwort, selbstständig zu aktualisieren, ohne den Support kontaktieren zu müssen. Dies erhöht die Benutzerzufriedenheit und senkt die Supportkosten.
    • Funktionale Anforderung 3: Das System muss Berichte über Benutzeraktivitäten generieren können.
      • Erhebungsmethode: Interview mit dem Management-Team
      • Begründung: Diese Anforderung ist wichtig für das Management, um die Nutzung des Systems überwachen und strategische Entscheidungen treffen zu können. Berichte liefern Einblicke in das Benutzerverhalten und ermöglichen die Identifizierung von Verbesserungsmöglichkeiten.
  • Nicht-funktionale Anforderungen
    • Nicht-funktionale Anforderung 1: Das System muss eine Verfügbarkeit von mindestens 99,9% gewährleisten.
      • Erhebungsmethode: Interview mit dem technischen Leiter
      • Begründung: Eine hohe Verfügbarkeit ist besonders wichtig für die Benutzerzufriedenheit und das Vertrauen in das System. Ausfallzeiten können zu einem Verlust von Geschäfts- und Nutzervertrauen führen.
    • Nicht-funktionale Anforderung 2: Das System soll eine Antwortzeit von weniger als 2 Sekunden für Benutzerinteraktionen haben.
      • Erhebungsmethode: Workshop mit Endnutzern
      • Begründung: Eine schnelle Reaktionszeit ist entscheidend für eine positive Benutzererfahrung. Längere Wartezeiten können zu Frustrationen führen und die Nutzung des Systems beeinträchtigen.

b)

Das Team hat mehrere Anforderungen gesammelt. Es gibt jedoch Unsicherheiten bezüglich der Prioritäten und der Konsistenz der Angaben. Entwickle ein strukturiertes Validierungsverfahren, das Schritte zur Überprüfung der Vollständigkeit und Konsistenz dieser Anforderungen umfasst. Erläutere, wie Du die Anforderungen priorisieren würdest und welche Kriterien Du dabei anlegen würdest.

Lösung:

Strukturiertes Validierungsverfahren

  • Schritt 1: Anforderungen sammeln und dokumentieren
    • Aktivitäten: Erfasse alle gesammelten Anforderungen in einem zentralen Dokument, wie einem Lastenheft.
  • Schritt 2: Erste Überprüfung auf Vollständigkeit
    • Aktivitäten: Stelle sicher, dass jede Anforderung vollständig formuliert ist. Überprüfe, dass sie ausreicht, um ein klares Verständnis für die Entwicklungs- und Testteams zu vermitteln.
    • Werkzeuge: Checklisten
  • Schritt 3: Konsistenzprüfung
    • Aktivitäten: Überprüfe, ob die Anforderungen miteinander konsistent sind. Identifiziere potenzielle Widersprüche oder Dopplungen.
    • Werkzeuge: Reviews und Walkthrough
  • Schritt 4: Validierung mit Stakeholdern
    • Aktivitäten: Führe Validierungsworkshops mit den Stakeholdern durch, um sicherzustellen, dass alle Anforderungen die Erwartungen und Bedürfnisse widerspiegeln.
    • Werkzeuge: Workshops und Feedback-Sitzungen
  • Schritt 5: Festlegung der Prioritäten
    • Aktivitäten: Verwende eine Methodik zur Priorisierung (wie MoSCoW, Value vs Effort Matrix, etc.)
      • MoSCoW-Methode: Kategorien: Must have, Should have, Could have, Won't have

Kriterien zur Priorisierung

  • Geschäftlicher Wert: Wie stark trägt die Anforderung zur Erreichung der Geschäftsziele bei?
  • Dringlichkeit: Wie dringend und zeitkritisch ist die Umsetzung der Anforderung?
  • Machbarkeit: Wie realistisch ist es, diese Anforderung innerhalb des vorgegebenen Zeit- und Ressourcenrahmens umzusetzen?
  • Risiken: Welche Risiken sind mit der Nichterfüllung der Anforderung verbunden?
  • Abhängigkeiten: Gibt es andere Anforderungen, deren Erfüllung von dieser Anforderung abhängig ist?

Zusammenfassend

Durch die Anwendung dieses Validierungsverfahrens und die Verwendung klar definierter Kriterien für die Priorisierung stellst Du sicher, dass die Anforderungen vollständig, konsistent und nach ihrer Wichtigkeit geordnet sind. Dies erleichtert die planmäßige und erfolgreiche Umsetzung des Softwareprojekts.

Aufgabe 2)

Du bist Teil eines Scrum-Teams, das eine neue mobile Anwendung entwickelt. Das Projekt ist in Sprints unterteilt, und Du hast bereits die erste Iteration abgeschlossen. Dein Team besteht aus einem Product Owner, einem Scrum Master und fünf Entwicklern.

a)

Beschreibe die Hauptverantwortlichkeiten des Product Owners in diesem Projekt und erläutere, wie er zur Wertmaximierung des Produkts beiträgt.

Lösung:

In einem Scrum-Team spielt der Product Owner (PO) eine entscheidende Rolle. Seine Hauptverantwortlichkeiten umfassen die folgenden Aufgaben:

  • Produktvision und -strategie: Der PO entwickelt eine klare Produktvision und Strategie, die sich an den Bedürfnissen der Kunden und den Geschäftszielen orientiert. Er sorgt dafür, dass das gesamte Team diese Vision versteht und darauf hinarbeitet.
  • Backlog-Management: Der PO erstellt und pflegt das Product Backlog. Dies umfasst das Priorisieren der Einträge, um sicherzustellen, dass das Team an den wertvollsten Aufgaben arbeitet. Der PO muss dafür sorgen, dass das Backlog immer aktuell und detailliert genug ist, damit die Entwickler klar verstehen, was getan werden muss.
  • Anforderungserhebung: Der PO sammelt Anforderungen von Stakeholdern und Kunden und übersetzt diese in User Stories oder andere Backlog-Einträge. Er kommuniziert kontinuierlich mit diesen Interessengruppen, um sicherzustellen, dass das Team die richtigen Funktionen entwickelt.
  • Kundennutzen maximieren: Der PO konzentriert sich darauf, den Wert des Produkts für die Nutzer zu maximieren. Dies beinhaltet das Treffen von Entscheidungen über Prioritäten und den Umfang der Arbeit, basierend auf dem potenziellen Nutzen für die Nutzer und das Geschäft.
  • Sprintplanung und Reviews: Während der Sprintplanung stellt der PO sicher, dass die wichtigsten und wertvollsten Einträge im Sprint Backlog aufgenommen werden. Bei den Sprint Reviews präsentiert er die erledigte Arbeit den Stakeholdern und sammelt Feedback.
  • Kollaboration mit dem Team: Der PO arbeitet eng mit dem Scrum-Team zusammen, um Fragen zu klären und sicherzustellen, dass alle Anforderungen verstanden werden. Er unterstützt das Team dabei, Hindernisse zu überwinden und sicherzustellen, dass die Arbeit reibungslos abläuft.

Schlussendlich trägt der Product Owner zur Wertmaximierung des Produkts bei, indem er:

  • Sicherstellt, dass das Team stets an den wichtigsten und wertvollsten Aufgaben arbeitet.
  • Feedback von Kunden und Stakeholdern kontinuierlich einholt und in die Produktentwicklung einfließen lässt.
  • Das Produkt kontinuierlich anpasst und verbessert, basierend auf den sich ändernden Anforderungen und Marktbedingungen.

b)

Ein Sprint Review steht bevor. Erkläre den Zweck dieses Ereignisses und beschreibe die typischen Aktivitäten, die während eines Sprint Reviews stattfinden.

Lösung:

Ein Sprint Review ist ein wichtiger Bestandteil des Scrum-Prozesses und findet am Ende jedes Sprints statt. Der Zweck dieses Ereignisses besteht darin, die während des Sprints erbrachte Arbeit zu überprüfen und sicherzustellen, dass das Entwicklungsteam und die Stakeholder auf dem gleichen Stand sind. Es bietet eine Möglichkeit, Feedback zu erhalten und die nächsten Schritte zu planen. Hier sind die typischen Aktivitäten, die während eines Sprint Reviews stattfinden:

  • Präsentation der Arbeit: Das Entwicklungsteam präsentiert die während des Sprints abgeschlossenen Arbeiten, typischerweise in Form von funktionierenden Produktinkrementen. Diese Demonstrationen können Live-Demos oder andere Präsentationsformen umfassen.
  • Feedback sammeln: Stakeholder und andere Teilnehmer geben Feedback zu den präsentierten Produktinkrementen. Dieses Feedback ist wertvoll, um sicherzustellen, dass die entwickelten Funktionen den Anforderungen und Erwartungen entsprechen.
  • Diskussion über den Fortschritt: Es wird über den Fortschritt in Richtung der Produktziele gesprochen. Der Product Owner kann eine Übersicht über den aktuellen Status des Product Backlogs und die erreichten Ziele geben.
  • Anpassung des Backlogs: Basierend auf dem erhaltenen Feedback und den neuen Erkenntnissen wird das Product Backlog gemeinsam aktualisiert. Neue Anforderungen können hinzugefügt und bestehende Einträge priorisiert oder neu bewertet werden.
  • Planung der nächsten Schritte: Es wird diskutiert, welche Schritte als nächstes unternommen werden sollten, um den Wert des Produkts weiter zu steigern. Dies kann bereits eine grobe Planung für den nächsten Sprint beinhalten.
  • Feiern der Erfolge: Die Teammitglieder feiern die während des Sprints erzielten Erfolge und anerkennen die geleistete Arbeit. Dies stärkt die Teamdynamik und Motivation.

Zusammengefasst hat ein Sprint Review folgende Ziele:

  • Überprüfung und Bewertung der Fortschritte.
  • Sicherstellung, dass das Produkt den Anforderungen und Erwartungen entspricht.
  • Sammeln von Feedback und Anpassung des Product Backlogs.
  • Planen der nächsten Schritte im Entwicklungsprozess.
  • Stärken der Teamdynamik und Motivation durch Anerkennung der Erfolge.

c)

Während eines Daily Scrums erwähnt einer der Entwickler, dass er an einem Feature arbeitet, das mehr Zeit benötigt als ursprünglich geplant. Als Scrum Master, wie würdest Du in dieser Situation vorgehen, um sicherzustellen, dass der Fortschritt des Sprints nicht gefährdet wird?

Lösung:

Als Scrum Master hast Du die Verantwortung, sicherzustellen, dass das Team effektiv und effizient arbeitet und Hindernisse schnell beseitigt werden. Wenn ein Entwickler während eines Daily Scrums erwähnt, dass ein Feature mehr Zeit benötigt als ursprünglich geplant, solltest Du die folgenden Schritte unternehmen:

  • Verständnis der Situation: Kläre die Details der Verzögerung. Frage den Entwickler nach spezifischen Herausforderungen oder Hindernissen, die ihn daran hindern, die Aufgabe rechtzeitig abzuschließen. Dies kann während oder nach dem Daily Scrum erfolgen, um die Zeit der anderen Teammitglieder nicht zu stark zu beanspruchen.
  • Erhebung von Fakten: Finde heraus, ob es spezifische Probleme gibt, die gelöst werden können. Manchmal können technische Schwierigkeiten, fehlende Ressourcen oder unklare Anforderungen die Ursache sein.
  • Zusammenarbeit fördern: Ermutige das Team zur Zusammenarbeit. Andere Teammitglieder könnten Erfahrungen oder Lösungen haben, die bei der Bewältigung der Herausforderungen hilfreich sein könnten.
  • Neupriorisierung prüfen: Überprüfe gemeinsam mit dem Product Owner, ob es möglich und sinnvoll ist, andere Aufgaben im Sprint-Backlog zu priorisieren. Es könnte notwendig sein, weniger wichtige Aufgaben zu verschieben oder zu reduzieren, um kritische Funktionen rechtzeitig fertigzustellen.
  • Unterstützung anbieten: Frage den Entwickler, welche Art von Unterstützung er benötigt. Dies könnte zusätzliche Ressourcen, Trainings oder spezifisches Know-how umfassen.
  • Hindernisse beseitigen: Als Scrum Master liegt es in Deiner Verantwortung, Hindernisse aus dem Weg zu räumen. Arbeite aktiv daran, alle identifizierten Barrieren zu beseitigen, die den Entwickler daran hindern, seine Aufgabe abzuschließen.
  • Kommunikation sicherstellen: Stelle sicher, dass alle Teammitglieder über die aktuelle Situation informiert sind. Transparente Kommunikation ist entscheidend, um das Bewusstsein und die Zusammenarbeit im Team zu fördern.
  • Überwachung und Anpassung: Überwache den Fortschritt des Entwicklers und halte regelmäßige Check-ins, um sicherzustellen, dass das Problem gelöst wird. Bei Bedarf sollten weitere Anpassungen vorgenommen werden, um den Fortschritt des Sprints zu sichern.

Zusammengefasst: Klärung der Situation, Erhebung von Fakten, Förderung der Zusammenarbeit, Prüfung der Neupriorisierung, Angebot von Unterstützung, Beseitigung von Hindernissen, Sicherstellung der Kommunikation und kontinuierliche Überwachung und Anpassung sind die wesentlichen Schritte, die Du als Scrum Master unternehmen solltest, um sicherzustellen, dass der Fortschritt des Sprints nicht gefährdet wird.

d)

Während der Sprint Retrospective erkennt das Team ein wiederkehrendes Problem in Bezug auf die Kommunikation. Formuliere einen konkreten Plan zur Verbesserung der Kommunikation im Team und beschreibe, wie Du diese Maßnahmen im nächsten Sprint implementieren würdest.

Lösung:

Eine effektive Kommunikation im Team ist entscheidend für den Erfolg eines Projekts. Wenn während der Sprint Retrospective ein wiederkehrendes Kommunikationsproblem identifiziert wird, sollte sofort ein konkreter Plan zur Verbesserung erstellt werden. Hier ist ein detaillierter Plan, um die Kommunikation im Team zu verbessern und wie diese Maßnahmen im nächsten Sprint implementiert werden können:

Maßnahmen zur Verbesserung der Kommunikation

  • Einführung täglicher Stand-Up Meetings: Neben dem Daily Scrum kann ein kurzes zusätzliches tägliches Stand-Up-Meeting helfen, spezifische Probleme oder Fragen zu adressieren, die nicht im Daily Scrum besprochen wurden.
  • Kommunikationsrichtlinien etablieren: Definiere klare Kommunikationsrichtlinien, wie z.B. die Nutzung bestimmter Kommunikationskanäle (z.B. Slack, E-Mail) für verschiedene Zwecke, und stelle sicher, dass alle Teammitglieder diese Richtlinien verstehen und befolgen.
  • Verwendung eines gemeinsamen Collaboration-Tools: Setze ein oder mehrere Collaboration-Tools wie Trello, Jira oder Confluence ein, um den Informationsfluss zu verbessern und sicherzustellen, dass alle Teammitglieder auf dem gleichen Stand sind.
  • Peer Programming oder Pair Programming: Einführung von Peer Programming-Sitzungen, um den Wissensaustausch und die Zusammenarbeit zwischen den Entwicklern zu fördern.
  • Regelmäßige Check-Ins: Plane regelmäßige Check-Ins oder Feedback-Runden zwischen den Teammitgliedern, um sicherzustellen, dass jeder die Möglichkeit hat, Fragen zu stellen und Informationen auszutauschen.
  • Workshops und Trainings: Organisiere Kommunikationsworkshops oder Trainings, um die Kommunikationsfähigkeiten der Teammitglieder zu verbessern und Best Practices zu vermitteln.

Implementierung im nächsten Sprint

  • Planung: Während der Sprintplanung wird der Plan zur Verbesserung der Kommunikation vorgestellt und diskutiert. Alle Teammitglieder sollten dem Plan zustimmen und sich zur Umsetzung der Maßnahmen verpflichten.
  • Tägliche Stand-Up Meetings: Implementiere ab dem ersten Tag des neuen Sprints tägliche zusätzliche Stand-Up Meetings. Diese Meetings sollten kurz und fokussiert sein.
  • Durchführung von Workshops: Plane und führe Kommunikationsworkshops durch, um spezifische Probleme zu adressieren und die Kommunikationsfähigkeiten zu stärken.
  • Nutzung der Collaboration-Tools: Stelle sicher, dass alle Teammitglieder die vereinbarten Collaboration-Tools aktiv nutzen und regelmäßig aktualisieren.
  • Feedback-Runden: Plane regelmäßige Feedback-Runden (z.B. zweimal pro Woche), um den Fortschritt zu überprüfen und Anpassungen vorzunehmen.
  • Peer Programming-Sitzungen: Führe abwechselnd Peer Programming-Sitzungen ein, um die Zusammenarbeit zu fördern und Wissenssilos zu vermeiden.

Kontinuierliche Überwachung und Anpassung: Überwache die Effektivität der Maßnahmen kontinuierlich. Während der nächsten Sprint Retrospective wird überprüft, ob die Kommunikationsprobleme behoben wurden und welche Maßnahmen weiter verbessert oder angepasst werden müssen.

Aufgabe 3)

Angenommen, Du entwirfst ein neues E-Commerce-Portal, das verschiedene Produkte anbietet, Benutzern ermöglicht, Warenkörbe zu erstellen und Bestellungen aufzugeben. Kunden können Feedback geben, und es gibt verschiedene Rabattaktionen, die basierend auf Ereignissen wie Feiertagen oder Kundenloyalität aktiviert werden.

Du planst die Architektur dieses Portals basierend auf den folgenden Architekturmuster und -stile:

  • Schichtenarchitektur
  • Client-Server
  • Microservices
  • Event-Driven
  • REST
  • Model-View-Controller (MVC)
  • Publisher-Subscriber

a)

Beschreibe eine mögliche Anwendung der Schichtenarchitektur für das E-Commerce-Portal. Welche Schichten würdest Du definieren und welche Verantwortlichkeiten hättest Du in jeder Schicht?

Lösung:

Die Schichtenarchitektur ist ein bewährtes Architekturmodell, das die Software in verschiedene Schichten unterteilt, wobei jede Schicht eindeutige Verantwortlichkeiten hat. Für das E-Commerce-Portal könnte die Schichtenarchitektur wie folgt aussehen:

  • Präsentationsschicht (Presentation Layer): Diese Schicht ist für die Interaktion mit den Benutzern verantwortlich. Sie umfasst alle Benutzeroberflächenkomponenten, die den Kunden das Durchsuchen von Produkten, das Erstellen von Warenkörben und das Aufgeben von Bestellungen ermöglichen. Mögliche Technologien: HTML, CSS, JavaScript, React, Angular.
  • Anwendungsschicht (Application Layer): Diese Schicht enthält die Geschäftslogik des Portals. Sie verarbeitet Benutzereingaben, führt Geschäftsregeln aus und steuert den Ablauf der Anwendung. Sie kommuniziert mit der Datenzugriffsschicht, um erforderliche Daten zu erhalten oder zu speichern. Mögliche Technologien: Java, Spring Boot, .NET, Node.js.
  • Datenzugriffsschicht (Data Access Layer): Diese Schicht ist für den Datenzugriff und die Datenmanipulation verantwortlich. Sie enthält die Methoden zum Lesen und Schreiben von Daten in Datenbanken oder anderen Speicherlösungen. Mögliche Technologien: SQL, Hibernate, JPA.
  • Datenbankschicht (Database Layer): Diese Schicht enthält das eigentliche Datenspeichersystem, das von der Datenzugriffsschicht genutzt wird. Es verwaltet die Persistenz und Integrität der Daten der Anwendungsdomäne. Mögliche Technologien: MySQL, PostgreSQL, MongoDB.
  • Integrationsschicht (Integration Layer): Diese Schicht kann zur Integration externer Systeme und Dienste verwendet werden, wie z.B. Zahlungsabwickler, Bestandsverwaltungssysteme oder Versanddienste. Sie sorgt dafür, dass die Anwendung reibungslos mit anderen Systemen kommuniziert. Mögliche Technologien: REST-APIs, SOAP, RabbitMQ.

b)

Erkläre, wie das Event-Driven Architekturmuster verwendet werden kann, um die Aktivierung von Rabattaktionen basierend auf bestimmten Ereignissen zu ermöglichen. Welche Vorteile bietet dieses Muster in diesem Kontext?

Lösung:

Das Event-Driven Architekturmuster ist besonders gut geeignet für Systeme, die auf bestimmte Ereignisse schnell und effizient reagieren müssen. Im Kontext Deines E-Commerce-Portals könnte das Muster zur automatischen Aktivierung von Rabattaktionen basierend auf bestimmten Ereignissen verwendet werden. Hier ist eine mögliche Implementierung und die Vorteile, die dieses Muster bietet:

  • Implementierung:
    • Ein Ereignis ist eine signifikante Änderung oder Aktion im System. Beispiele für Ereignisse in Deinem E-Commerce-Portal könnten sein: ein neuer Feiertag steht bevor, ein Kunde erreicht einen gewissen Loyalitätsstatus, oder ein bestimmtes Produkt hat eine bestimmte Anzahl von Verkäufen erreicht.
    • Es gibt einen Ereignis-Emitter oder Publisher, der diese Ereignisse auslöst. Dies könnte z.B. ein Modul sein, das Feiertagskalender überwacht oder Kundendaten analysiert.
    • Ein oder mehrere Event-Listener oder Subscriber sind dafür verantwortlich, auf diese Ereignisse zu reagieren. Diese Listener könnten Module sein, die Rabattaktionen aktivieren, wenn sie ein bestimmtes Ereignis empfangen.
    • Ein Event-Bus oder eine Message Queue (z.B. RabbitMQ, Apache Kafka) wird genutzt, um die Nachrichten zwischen Publisher und Subscriber zu transportieren. Dies entkoppelt die Module voneinander und ermöglicht eine lose Kopplung.
    • Beispielablauf: Am Anfang des Monats wird ein „Neuer Monat beginnt“-Ereignis veröffentlicht. Dieses Ereignis wird an alle Abonnenten gesendet, von denen einer die Logik zur Aktivierung von Monatsrabatten enthält. Dieser Listener aktiviert dann automatisch die entsprechenden Rabatte auf der Website.
  • Vorteile:
    • Skalierbarkeit: Da Publisher und Subscriber entkoppelt sind, kann das System leicht skaliert werden. Neue Ereignisse oder neue Listener können hinzugefügt werden, ohne dass bestehender Code angepasst werden muss.
    • Flexibilität: Das System kann leicht an neue Geschäftsanforderungen oder Ereignisse angepasst werden. Zusätzliche Rabattaktionen können einfach hinzugefügt werden, indem neue Event-Listener implementiert werden.
    • Reaktionsfähigkeit: Ereignisse werden in Echtzeit verarbeitet, was bedeutet, dass Rabattaktionen sofort aktiviert werden können, wenn das entsprechende Ereignis auftritt. Dies sorgt für eine höhere Kundenzufriedenheit.
    • Wartbarkeit: Durch die lose Kopplung sind die einzelnen Komponenten des Systems einfacher zu warten und zu testen, da sie isoliert entwickelt und getestet werden können.
    • Erhöhte Zuverlässigkeit: Der Einsatz eines robusten Message-Queues-Systems stellt sicher, dass Ereignisse nicht verloren gehen und zuverlässig verarbeitet werden.

c)

Entwirf eine REST API für den Bestellprozess des E-Commerce-Portals. Liste die notwendigen Endpunkte auf und beschreibe, welche HTTP-Methoden Du verwenden würdest. Beispiel: Einen neuen Auftrag erstellen, Auftragsdetails abrufen, Bestellung stornieren etc.

Lösung:

Eine REST API für den Bestellprozess eines E-Commerce-Portals beinhaltet verschiedene Endpunkte, die es ermöglichen, Bestellungen zu erstellen, zu verwalten und abzurufen. Hier ist ein Entwurf der notwendigen Endpunkte und die entsprechenden HTTP-Methoden:

  • Bestellung erstellen:
    • Endpunkt: /orders
    • HTTP-Methode: POST
    • Beschreibung: Dieser Endpunkt wird verwendet, um eine neue Bestellung zu erstellen. Die Anfrage muss die Details der Bestellung im JSON-Format enthalten (z.B. Produkte, Mengen, Kundendaten).
  • Alle Bestellungen abrufen:
    • Endpunkt: /orders
    • HTTP-Methode: GET
    • Beschreibung: Dieser Endpunkt gibt eine Liste aller Bestellungen zurück. Optionale Filterparameter können genutzt werden, um spezifische Bestellungen abzurufen (z.B. nach Kunde, Datum).
  • Bestelldetails abrufen:
    • Endpunkt: /orders/{order_id}
    • HTTP-Methode: GET
    • Beschreibung: Gibt die Details einer einzelnen Bestellung zurück, die durch die order_id identifiziert wird.
  • Bestellung aktualisieren:
    • Endpunkt: /orders/{order_id}
    • HTTP-Methode: PUT
    • Beschreibung: Aktualisiert die Details einer bestehenden Bestellung. Die Anfrage muss die neuen Bestelldaten im JSON-Format enthalten.
  • Bestellung teilweise aktualisieren:
    • Endpunkt: /orders/{order_id}
    • HTTP-Methode: PATCH
    • Beschreibung: Aktualisiert nur bestimmte Felder einer bestehenden Bestellung. Die Anfrage muss die neuen Werte für die zu ändernden Felder im JSON-Format enthalten.
  • Bestellung stornieren:
    • Endpunkt: /orders/{order_id}
    • HTTP-Methode: DELETE
    • Beschreibung: Dieser Endpunkt wird verwendet, um eine Bestellung zu stornieren. Die Bestellung wird durch die order_id identifiziert.

Diese Endpunkte decken die grundlegenden Anforderungen ab, um den Bestellprozess im E-Commerce-Portal zu verwalten. Durch die Verwendung von gängigen HTTP-Methoden wie POST, GET, PUT, PATCH und DELETE wird gewährleistet, dass die API RESTful-Prinzipien einhält und dadurch gut verständlich und einfach zu nutzen ist.

Aufgabe 4)

Automatisierte Tests und Testskripte: Automatisierte Durchführung und Auswertung von Softwaretests mittels Skripten, um die Testeffizienz zu steigern.

  • Reduzieren manuellen Testaufwand
  • Verwenden von Testframeworks wie JUnit, Selenium
  • Unterstützen kontinuierliche Integration (CI/CD)
  • Testskripte in verschiedenen Programmiersprachen schreibbar
  • Wiederholbarkeit und Konsistenz
  • Beispiel:
    @Test public void testMethod() { ... }

a)

Erkläre ausführlich, wie Automatisierte Tests und Testskripte die Wiederholbarkeit und Konsistenz in Softwaretests steigern können. Nenne mindestens zwei Szenarien, in denen dies besonders wichtig ist.

Lösung:

Automatisierte Tests und Testskripte: Ein ausführlicher Erklärungsansatz dazu, wie diese die Wiederholbarkeit und Konsistenz in Softwaretests steigern:

  • Wiederholbarkeit: Automatisierte Tests können immer wieder auf die gleiche Weise durchgeführt werden, ohne dass menschliche Fehler oder Abweichungen auftreten. Dies bedeutet, dass dieselben Tests unter denselben Bedingungen ausgeführt werden können, was die Überprüfung der Konsistenz von Testergebnissen vereinfacht.
  • Konsistenz: Durch den Einsatz von Skripten und Testframeworks wird sichergestellt, dass die Tests in einer standardisierten Umgebung mit den gleichen Eingaben und Erwartungen laufen. Dies garantiert robuste und einheitliche Testergebnisse, unabhängig davon, wer den Test durchführt.
Hier sind zwei Szenarien, in denen die Wiederholbarkeit und Konsistenz automatisierter Tests besonders wichtig ist:
  • Kontinuierliche Integration (CI/CD): Im CI/CD-Prozess werden Tests bei jedem Code-Commit automatisch ausgeführt. Dies stellt sicher, dass neue Änderungen keine unbeabsichtigten Fehler einführen. Durch konsistente Testergebnisse kann man sicher sein, dass der neue Code die vorhandene Funktionalität nicht beeinträchtigt.
  • Regressionstests: Bei der Entwicklung von Software werden häufig neue Funktionen hinzugefügt oder bestehende geändert. Regressionstests prüfen, ob diese neuen Änderungen bestehende Funktionalitäten beeinträchtigen. Automatisierte Regressionstests garantieren, dass frühere Fehlerkorrekturen weiterhin wirksam sind und keine neuen Probleme eingeführt werden.

b)

Schreibe einen einfachen JUnit Test in Java, der die Funktion \texttt{addition(int a, int b)} testet. Die Methode soll zwei Ganzzahlen addieren und das Ergebnis zurückgeben. Stelle sicher, dass der Test positiv und negativ Fälle abdeckt.

Lösung:

JUnit Test für die Methode addition(int a, int b)

Hier ist ein einfacher JUnit-Test in Java, der die Funktion addition testet, welche zwei Ganzzahlen addiert und das Ergebnis zurückgibt. Der Test deckt sowohl positive als auch negative Fälle ab:

import static org.junit.jupiter.api.Assertions.*;import org.junit.jupiter.api.Test;public class AdditionTest {    // Beispiel der zu testenden Methode    public int addition(int a, int b) {        return a + b;    }    // Positiver Testfall    @Test    public void testAddition_Positive() {        AdditionTest at = new AdditionTest();        // Test für positive Zahlen        assertEquals(5, at.addition(2, 3));        // Test für negative Zahlen        assertEquals(-5, at.addition(-2, -3));        // Test für eine positive und eine negative Zahl        assertEquals(1, at.addition(-2, 3));    }    // Negativer Testfall    @Test    public void testAddition_Negative() {        AdditionTest at = new AdditionTest();        // Test für Überlauf        int result = at.addition(Integer.MAX_VALUE, 1);        assertTrue(result < 0);        // Test für Unterlauf        result = at.addition(Integer.MIN_VALUE, -1);        assertTrue(result > 0);    }}
  • Positiver Testfall: Testet die korrekte Addition für positive, negative und gemischte Zahlen.
  • Negativer Testfall: Testet Überlaufs- und Unterlaufsbedingungen (Integer Überlauf).

c)

Discussiere die Rolle von Automatisierten Tests in einem CI/CD Pipeline. Wie können Testskripte die Effizienz der Softwareentwicklung und -bereitstellung verbessern? Gehe hierbei auf die Nutzung von Testframeworks wie JUnit oder Selenium ein.

Lösung:

Die Rolle von automatisierten Tests in einer CI/CD-Pipeline

Automatisierte Tests spielen eine entscheidende Rolle in einer CI/CD (Continuous Integration/Continuous Deployment) Pipeline und tragen wesentlich zur Effizienz der Softwareentwicklung und -bereitstellung bei. Hier sind einige der Hauptvorteile und Funktionen, die sie in diesem Zusammenhang bieten:

  • Früherkennung von Fehlern: Automatisierte Tests ermöglichen es, Fehler frühzeitig im Entwicklungsprozess zu erkennen, sobald neuer Code in das Repository eingecheckt wird. Dies reduziert die Kosten und den Aufwand für Fehlerbehebungen, da Fehler früher identifiziert und behoben werden können.
  • Konsistenz und Zuverlässigkeit: Durch den Einsatz von Testframeworks wie JUnit (für Java) oder Selenium (für Webanwendungen) können Tests konsistent und zuverlässig durchgeführt werden. Dies bedeutet, dass Tests immer unter gleichen Bedingungen ablaufen und somit konsistente Ergebnisse liefern.
  • Reduzierung manueller Arbeit: Automatisierte Tests reduzieren den Bedarf an manuellen Tests erheblich, was zu einer schnelleren und effizienteren Testphase führt. Tester können sich auf komplexere Tests und Exploratives Testen konzentrieren, während Routinetests automatisiert ablaufen.
  • Skalierbarkeit: Automatisierte Tests können problemlos skaliert und parallel ausgeführt werden, was die Testzeit erheblich verkürzt. Dies ist besonders wichtig in großen Projekten oder bei häufigen Veröffentlichungen.
  • Unterstützung kontinuierlicher Integration: In einer CI/CD-Pipeline werden automatisierte Tests kontinuierlich ausgeführt, um sicherzustellen, dass neuer Code keine bestehenden Funktionen beeinträchtigt. Dies erfolgt meist durch Integrationstools wie Jenkins, Travis CI oder GitLab CI.

Nutzung von Testframeworks

  • JUnit: JUnit ist ein weit verbreitetes Testframework für Java, das Entwicklern ermöglicht, Unit-Tests zu schreiben und auszuführen. Es bietet Annotations wie @Test, @Before und @After, um Testfälle zu definieren und Testumgebungen vorzubereiten. JUnit lässt sich gut in CI/CD-Pipelines integrieren und kann Tests automatisch nach jedem Build-Prozess ausführen.
  • Selenium: Selenium ist ein Framework für Automatisierungstests von Webanwendungen. Es ermöglicht das Schreiben von Tests in verschiedenen Programmiersprachen und das Ausführen von Tests in verschiedenen Browsern. Selenium ist besonders nützlich für End-to-End-Tests und kann in CI/CD-Pipelines integriert werden, um sicherzustellen, dass Webanwendungen in verschiedenen Umgebungen korrekt funktionieren.

Zusammenfassend kann man sagen, dass automatisierte Tests in einer CI/CD-Pipeline die Effizienz der Softwareentwicklung und -bereitstellung erheblich verbessern, indem sie Fehler frühzeitig erkennen, konsistente und zuverlässige Tests bieten, manuelle Arbeit reduzieren, skalierbare Tests ermöglichen und kontinuierliche Integration unterstützen.

d)

Angenommen, Du entwickelst ein Webformular und möchtest sicherstellen, dass das Formular korrekt funktioniert und die Eingaben korrekt validiert werden. Schreibe ein Selenium Testskript in Python, welches überprüft, ob ein Fehler angezeigt wird, wenn das Formular ohne Eingabe abgeschickt wird.

Lösung:

Selenium Testskript in Python

Im folgenden Beispiel verwenden wir Selenium, um zu überprüfen, ob ein Fehler angezeigt wird, wenn ein Webformular ohne Eingabe abgeschickt wird:

from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysimport time# Initialisiere den Webdriver (hier verwenden wir den Chrome Webdriver)driver = webdriver.Chrome()# Öffne die Webseite mit dem Formulardriver.get('http://deine-webseite-mit-formular.com')# Finde das Formular und den Submit-Buttonsubmit_button = driver.find_element(By.ID, 'submit_button_id')# Klicke den Submit-Button, ohne Eingaben gemacht zu habensubmit_button.click()# Warte kurz, damit die Seite Zeit hat, den Fehler anzuzeigentime.sleep(2)# Finde die Fehleranzeigeerror_message = driver.find_element(By.ID, 'error_message_id')# Überprüfen, ob die Fehlernachricht angezeigt wirdassert error_message.is_displayed(), 'Fehler: Die Fehlernachricht wurde nicht angezeigt'# Gib die Fehlermeldung ausprint('Fehlermeldung angezeigt:', error_message.text)# Schließe den Browserdriver.quit()
  • Dieses Skript öffnet zunächst den Webbrowser und navigiert zur angegebenen URL des Webformulars.
  • Es findet den Submit-Button anhand der ID und klickt darauf, ohne vorherige Eingaben in das Formular zu machen.
  • Das Skript wartet dann kurz, um sicherzustellen, dass die Seite genug Zeit hat, den Fehler anzuzeigen (dies kann angepasst oder durch WebDriverWait ersetzt werden).
  • Es sucht dann nach dem Element, das die Fehlernachricht enthalten sollte, und überprüft, ob dieses sichtbar ist.
  • Falls die Fehlernachricht nicht angezeigt wird, gibt das Skript eine entsprechende Fehlermeldung aus.
  • Am Ende wird der Browser geschlossen.
Sign Up

Melde dich kostenlos an, um Zugriff auf das vollständige Dokument zu erhalten

Mit unserer kostenlosen Lernplattform erhältst du Zugang zu Millionen von Dokumenten, Karteikarten und Unterlagen.

Kostenloses Konto erstellen

Du hast bereits ein Konto? Anmelden