<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://staging.moocwiki.org/index.php?action=history&amp;feed=atom&amp;title=Anwendungsentwicklung_und_Softwarequalit%C3%A4t_%E2%80%93_Ein_Softwareprojekt_fachlich_pr%C3%A4sentieren</id>
	<title>Anwendungsentwicklung und Softwarequalität – Ein Softwareprojekt fachlich präsentieren - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://staging.moocwiki.org/index.php?action=history&amp;feed=atom&amp;title=Anwendungsentwicklung_und_Softwarequalit%C3%A4t_%E2%80%93_Ein_Softwareprojekt_fachlich_pr%C3%A4sentieren"/>
	<link rel="alternate" type="text/html" href="https://staging.moocwiki.org/index.php?title=Anwendungsentwicklung_und_Softwarequalit%C3%A4t_%E2%80%93_Ein_Softwareprojekt_fachlich_pr%C3%A4sentieren&amp;action=history"/>
	<updated>2026-10-10T09:27:17Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in MOOCsWiki Staging</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://staging.moocwiki.org/index.php?title=Anwendungsentwicklung_und_Softwarequalit%C3%A4t_%E2%80%93_Ein_Softwareprojekt_fachlich_pr%C3%A4sentieren&amp;diff=63496&amp;oldid=prev</id>
		<title>Glanz: aiMOOC über GPT aiMOOC Action erstellt</title>
		<link rel="alternate" type="text/html" href="https://staging.moocwiki.org/index.php?title=Anwendungsentwicklung_und_Softwarequalit%C3%A4t_%E2%80%93_Ein_Softwareprojekt_fachlich_pr%C3%A4sentieren&amp;diff=63496&amp;oldid=prev"/>
		<updated>2026-10-09T19:35:04Z</updated>

		<summary type="html">&lt;p&gt;aiMOOC über GPT aiMOOC Action erstellt&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{T}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Anwendungsentwicklung und Softwarequalität – Ein Softwareprojekt fachlich präsentieren&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Einleitung =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Zielgruppe:&amp;#039;&amp;#039;&amp;#039; Ausbildung zum Fachinformatiker bzw. zur Fachinformatikerin, Fachrichtung Anwendungsentwicklung&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lernziel:&amp;#039;&amp;#039;&amp;#039; Du kannst ein Softwareprojekt fachlich, verständlich und kritisch präsentieren. Dabei erklärst Du den Nutzen, die Architektur, die Testergebnisse und die offenen Risiken.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Praxisfall:&amp;#039;&amp;#039;&amp;#039; Du entwickelst einen Prototyp für die Materialreservierung in einer fiktiven Ausbildungswerkstatt.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lernformat:&amp;#039;&amp;#039;&amp;#039; Sechs kurze Lerneinheiten, Visualisierungen, Videos, lokaler Python-Code, automatisierte Tests, interaktive Aufgaben und Präsentationstraining.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vorkenntnisse:&amp;#039;&amp;#039;&amp;#039; Grundkenntnisse in [[Python]], [[Programmierung]] und [[Softwareentwicklung]].&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Sicherheit:&amp;#039;&amp;#039;&amp;#039; Verwende ausschließlich fiktive Daten und eine lokale, ausdrücklich autorisierte Lernumgebung. Keine Produktivsysteme, fremden Netze, Zugangsdaten oder Kundendaten verwenden. Externe Lernmedien nur nach Freigabe öffnen. Dabei können Verbindungsdaten an die jeweiligen Anbieter übertragen werden.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Dein Lernpfad ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Einheit&lt;br /&gt;
! Thema&lt;br /&gt;
! Ergebnis&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Projektnutzen&lt;br /&gt;
| Problem und Mehrwert erklären&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Anforderungen&lt;br /&gt;
| Anwendungsfall darstellen&lt;br /&gt;
|-&lt;br /&gt;
n| 3&lt;br /&gt;
| Architektur&lt;br /&gt;
| Softwareaufbau visualisieren&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Implementierung&lt;br /&gt;
| Lokale Demo ausführen&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Softwarequalität&lt;br /&gt;
| Tests und Daten bewerten&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Projektpräsentation&lt;br /&gt;
| Risiken und Entscheidungen begründen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Lerneinheit 1: Projektnutzen verständlich machen =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Leitfrage: Welches Problem löst Deine Software?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
In der fiktiven Ausbildungswerkstatt werden elektronische Bauteile benötigt. Eine Reservierung soll verhindern, dass mehr Material eingeplant wird, als verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Projektziel:&amp;#039;&amp;#039;&amp;#039; Ein einfacher Prototyp überprüft eine Reservierungsmenge und berechnet den verbleibenden Bestand.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nutzen:&amp;#039;&amp;#039;&amp;#039; Die Reservierungsregeln lassen sich einheitlich anwenden. Fehlerhafte Mengen können früh erkannt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wichtig:&amp;#039;&amp;#039;&amp;#039; Das ist ein erwarteter Nutzen. Eine tatsächliche Zeitersparnis müsste erst durch Messungen nachgewiesen werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Software Development Life cycle.png|450px|rahmenlos|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Abbildung: Phasen der Softwareentwicklung. Quelle: Wikimedia Commons, Tazlavi, CC BY-SA 4.0.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Mini-Aufgabe: Der überzeugende Projektsatz ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Basis:&amp;#039;&amp;#039;&amp;#039; Formuliere den Projektnutzen in höchstens 25 Wörtern.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hilfe 1:&amp;#039;&amp;#039;&amp;#039; Wer verwendet die Software?&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hilfe 2:&amp;#039;&amp;#039;&amp;#039; Welcher Fehler soll verhindert werden?&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hilfe 3:&amp;#039;&amp;#039;&amp;#039; Beginne mit „Unsere Anwendung unterstützt ...“.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Musterfeedback:&amp;#039;&amp;#039;&amp;#039; Eine Aussage wie „Unsere Anwendung prüft Reservierungsmengen und verhindert Buchungen über dem verfügbaren Bestand“ ist nachvollziehbar, weil sie eine konkrete Funktion und deren fachlichen Nutzen verbindet. „Unsere Software ist modern“ bleibt dagegen unbelegt.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Lerneinheit 2: Anforderungen und Anwendungsfälle =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Leitfrage: Was muss die Anwendung leisten?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Die Anwendung soll eine Materialmenge reservieren, sofern genügend Bestand vorhanden ist.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Anforderung&lt;br /&gt;
! Akzeptanzkriterium&lt;br /&gt;
|-&lt;br /&gt;
| Material reservieren&lt;br /&gt;
| Der neue Bestand ist korrekt berechnet&lt;br /&gt;
|-&lt;br /&gt;
| Überbuchung vermeiden&lt;br /&gt;
| Zu große Mengen werden abgewiesen&lt;br /&gt;
|-&lt;br /&gt;
| Eingaben prüfen&lt;br /&gt;
| Null und negative Mengen werden abgewiesen&lt;br /&gt;
|-&lt;br /&gt;
| Unbekannte Artikel erkennen&lt;br /&gt;
| Die Anwendung meldet einen unbekannten Artikel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Projektgrenze:&amp;#039;&amp;#039;&amp;#039; Der Prototyp besitzt noch keine Benutzerverwaltung, grafische Oberfläche, Datenbank oder gleichzeitige Mehrbenutzerverarbeitung.&lt;br /&gt;
&lt;br /&gt;
[[Datei:UML Use Case diagram.svg|480px|rahmenlos|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Abbildung: Allgemeines UML-Anwendungsfalldiagramm als Vergleichsbeispiel. Quelle: Slashme, Wikimedia Commons.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Deine Aufgabe:&amp;#039;&amp;#039;&amp;#039; Zeichne ein eigenes [[Anwendungsfalldiagramm]] für die Materialreservierung. Stelle einen Azubi als Akteur und das Reservieren von Material als Anwendungsfall dar.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Lerneinheit 3: Die Softwarearchitektur präsentieren =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Leitfrage: Welche Bausteine übernehmen welche Aufgaben?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Softwarearchitektur]] zeigt, wie ein System strukturiert ist und welche Verantwortlichkeiten seine Bausteine besitzen.&lt;br /&gt;
&lt;br /&gt;
Das Beispiel besitzt eine einfache lokale Architektur:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
       AZUBI&lt;br /&gt;
         |&lt;br /&gt;
         v&lt;br /&gt;
    CLI-DEMO&lt;br /&gt;
         |&lt;br /&gt;
         v&lt;br /&gt;
  reservieren()&lt;br /&gt;
  Geschäftslogik&lt;br /&gt;
         |&lt;br /&gt;
         v&lt;br /&gt;
  Python-Dictionary&lt;br /&gt;
  Bestand im RAM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;CLI-Demo:&amp;#039;&amp;#039;&amp;#039; Zeigt Eingaben und Ergebnisse im Terminal.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Geschäftslogik:&amp;#039;&amp;#039;&amp;#039; Prüft Mengen und berechnet den neuen Bestand.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Datenhaltung:&amp;#039;&amp;#039;&amp;#039; Verwendet ein Dictionary im Arbeitsspeicher. Der Bestand wird nicht dauerhaft gespeichert.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Model View Controller.svg|450px|rahmenlos|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Abbildung: Model-View-Controller als weiterführendes Architekturbeispiel. Unser kleiner Prototyp implementiert dieses Muster nicht. Quelle: MovGP0, CC BY-SA 3.0.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=KvoBrUd1-5E|500|center}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Fachvideo: Simon Brown – The C4 Model for Visualising Software Architecture. Das Video erklärt die Darstellung von Softwarearchitektur auf verschiedenen Abstraktionsebenen.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Merke:&amp;#039;&amp;#039;&amp;#039; Zeige in Deiner Präsentation zunächst das Gesamtsystem und danach nur die Architekturdetails, die Deine Entscheidungen erklären.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Mini-Aufgabe: Architekturentscheidung ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Anwendung:&amp;#039;&amp;#039;&amp;#039; Erkläre in zwei Sätzen, weshalb die Reservierungslogik als eigene Funktion umgesetzt wurde.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hilfe 1:&amp;#039;&amp;#039;&amp;#039; Denke an Wiederverwendbarkeit.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hilfe 2:&amp;#039;&amp;#039;&amp;#039; Die Funktion kann ohne Benutzeroberfläche getestet werden.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hilfe 3:&amp;#039;&amp;#039;&amp;#039; Vergleiche Geschäftslogik und Präsentationsschicht.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Musterfeedback:&amp;#039;&amp;#039;&amp;#039; Die Trennung ist sinnvoll, weil dieselben fachlichen Regeln unabhängig von einer späteren Oberfläche geprüft werden können. Allerdings sind die Bausteine im Beispiel nur logisch getrennt und befinden sich noch in einer Python-Datei.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Lerneinheit 4: Ein lauffähiges Softwareprojekt demonstrieren =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Leitfrage: Kannst Du die zentrale Funktion live nachweisen?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Die folgende Demonstration läuft mit Python 3 und benötigt keine zusätzlichen Pakete, Datenbanken oder Netzwerkdienste.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vorbereitung:&amp;#039;&amp;#039;&amp;#039; Erstelle auf Deinem lokalen Rechner einen neuen, leeren Lernordner. Speichere den folgenden, zuvor geprüften Quelltext als projekt.py. Verwende ausschließlich diese fiktiven Materialdaten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import unittest&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def reservieren(bestand, artikel, menge):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Berechnet neuen Bestand ohne Änderung der Eingabe.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if type(menge) is not int or menge &amp;lt;= 0:&lt;br /&gt;
        raise ValueError(&amp;quot;Menge muss positiv sein&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if artikel not in bestand:&lt;br /&gt;
        raise KeyError(&amp;quot;Artikel unbekannt&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if menge &amp;gt; bestand[artikel]:&lt;br /&gt;
        raise ValueError(&amp;quot;Bestand reicht nicht aus&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    ergebnis = dict(bestand)&lt;br /&gt;
    ergebnis[artikel] -= menge&lt;br /&gt;
    return ergebnis&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class TestReservierung(unittest.TestCase):&lt;br /&gt;
&lt;br /&gt;
    def setUp(self):&lt;br /&gt;
        self.daten = {&amp;quot;Arduino&amp;quot;: 8, &amp;quot;Sensor&amp;quot;: 5}&lt;br /&gt;
&lt;br /&gt;
    def test_erfolgreiche_reservierung(self):&lt;br /&gt;
        neu = reservieren(self.daten, &amp;quot;Arduino&amp;quot;, 3)&lt;br /&gt;
        self.assertEqual(neu[&amp;quot;Arduino&amp;quot;], 5)&lt;br /&gt;
&lt;br /&gt;
    def test_original_bleibt_unveraendert(self):&lt;br /&gt;
        reservieren(self.daten, &amp;quot;Arduino&amp;quot;, 3)&lt;br /&gt;
        self.assertEqual(self.daten[&amp;quot;Arduino&amp;quot;], 8)&lt;br /&gt;
&lt;br /&gt;
    def test_ueberbuchung(self):&lt;br /&gt;
        with self.assertRaises(ValueError):&lt;br /&gt;
            reservieren(self.daten, &amp;quot;Sensor&amp;quot;, 6)&lt;br /&gt;
&lt;br /&gt;
    def test_ungueltige_menge(self):&lt;br /&gt;
        with self.assertRaises(ValueError):&lt;br /&gt;
            reservieren(self.daten, &amp;quot;Sensor&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
    def test_unbekannter_artikel(self):&lt;br /&gt;
        with self.assertRaises(KeyError):&lt;br /&gt;
            reservieren(self.daten, &amp;quot;Motor&amp;quot;, 1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    if sys.argv[1:] == [&amp;quot;--test&amp;quot;]:&lt;br /&gt;
        unittest.main(argv=[sys.argv[0]], verbosity=2)&lt;br /&gt;
&lt;br /&gt;
    elif not sys.argv[1:]:&lt;br /&gt;
        vorher = {&amp;quot;Arduino&amp;quot;: 8, &amp;quot;Sensor&amp;quot;: 5}&lt;br /&gt;
        nachher = reservieren(vorher, &amp;quot;Arduino&amp;quot;, 3)&lt;br /&gt;
        print(&amp;quot;Vorher:&amp;quot;, vorher)&lt;br /&gt;
        print(&amp;quot;Nachher:&amp;quot;, nachher)&lt;br /&gt;
&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Aufruf: python projekt.py [--test]&amp;quot;)&lt;br /&gt;
        sys.exit(2)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Lokale Demo starten ==&lt;br /&gt;
&lt;br /&gt;
Öffne ein Terminal im Lernordner.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Demonstration:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python -I -B projekt.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Erwartete Ausgabe:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Vorher: {&amp;#039;Arduino&amp;#039;: 8, &amp;#039;Sensor&amp;#039;: 5}&lt;br /&gt;
Nachher: {&amp;#039;Arduino&amp;#039;: 5, &amp;#039;Sensor&amp;#039;: 5}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Automatisierte Tests:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python -I -B projekt.py --test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei unverändertem Programm sollten fünf Tests mit „OK“ abschließen.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hinweis:&amp;#039;&amp;#039;&amp;#039; Die Option -I aktiviert den isolierten Python-Modus, -B unterdrückt das Schreiben von Bytecode-Dateien. Dieser Modus ist keine vollständige Betriebssystem-Sandbox. Führe ausschließlich vertrauenswürdigen lokalen Beispielcode aus.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Flowchart de.svg|450px|rahmenlos|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Abbildung: Beispiel zur Darstellung eines Programmablaufs. Quelle: Erik Streb, CC BY-SA 3.0.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Mini-Aufgabe:&amp;#039;&amp;#039;&amp;#039; Beschreibe den Ablauf Deiner Funktion als eigenes Flussdiagramm mit Eingabeprüfung, Bestandsprüfung und Ergebnis.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Lerneinheit 5: Softwarequalität durch Tests belegen =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Leitfrage: Was beweisen Deine Tests tatsächlich?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Softwarequalität]] umfasst unter anderem korrekte Funktionen, Zuverlässigkeit, Wartbarkeit und Sicherheit.&lt;br /&gt;
&lt;br /&gt;
Ein erfolgreicher Test zeigt, dass das getestete Verhalten unter den jeweiligen Bedingungen dem erwarteten Ergebnis entspricht. Er beweist nicht die allgemeine Fehlerfreiheit.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Testing Pyramid.svg|450px|rahmenlos|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Abbildung: Testpyramide mit Unit-, Integrations- und End-to-End-Tests. Quelle: Abbe98, CC BY-SA 4.0.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=6tNS--WetLI|500|center}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Fachvideo: Corey Schafer – Python Tutorial: Unit Testing Your Code with the unittest Module.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Testfälle als Qualitätsnachweis ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Test&lt;br /&gt;
! Erwartetes Verhalten&lt;br /&gt;
! Ebene&lt;br /&gt;
|-&lt;br /&gt;
| Gültige Reservierung&lt;br /&gt;
| Bestand wird korrekt reduziert&lt;br /&gt;
| Unit-Test&lt;br /&gt;
|-&lt;br /&gt;
| Unveränderter Eingabebestand&lt;br /&gt;
| Originaldaten bleiben erhalten&lt;br /&gt;
| Unit-Test&lt;br /&gt;
|-&lt;br /&gt;
| Überbuchung&lt;br /&gt;
| ValueError wird ausgelöst&lt;br /&gt;
| Unit-Test&lt;br /&gt;
|-&lt;br /&gt;
| Ungültige Menge&lt;br /&gt;
| Null wird abgewiesen&lt;br /&gt;
| Unit-Test&lt;br /&gt;
|-&lt;br /&gt;
| Unbekannter Artikel&lt;br /&gt;
| KeyError wird ausgelöst&lt;br /&gt;
| Unit-Test&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wichtig:&amp;#039;&amp;#039;&amp;#039; Die fünf Tests prüfen nur einzelne Aspekte der lokalen Geschäftslogik. Integrationstests, Oberflächentests, Lasttests und Sicherheitstests fehlen.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Daten visualisieren ==&lt;br /&gt;
&lt;br /&gt;
Die folgende Visualisierung verwendet ausschließlich fiktive Werte aus dem Programmbeispiel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bestand in Stück&lt;br /&gt;
&lt;br /&gt;
Arduino vorher   ████████  8&lt;br /&gt;
Arduino nachher   █████     5&lt;br /&gt;
&lt;br /&gt;
Sensor vorher    █████      5&lt;br /&gt;
Sensor nachher   █████      5&lt;br /&gt;
&lt;br /&gt;
Reserviert: 3 Arduino&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Interpretation:&amp;#039;&amp;#039;&amp;#039; Der Arduino-Bestand sinkt um drei Stück. Der Sensor-Bestand bleibt unverändert.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Präsentationstipp:&amp;#039;&amp;#039;&amp;#039; Zeige zu jeder Grafik die Ausgangsdaten, die Veränderung und die fachliche Bedeutung.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Mini-Aufgabe: Fehler gezielt erzeugen ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Anwendung:&amp;#039;&amp;#039;&amp;#039; Ändere in einer lokalen Kopie der Funktion die Berechnung von&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ergebnis[artikel] -= menge&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zu&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ergebnis[artikel] += menge&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Führe die Tests erneut aus und stelle anschließend die richtige Berechnung wieder her.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hilfe 1:&amp;#039;&amp;#039;&amp;#039; Welcher Test prüft den Bestand nach einer gültigen Reservierung?&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hilfe 2:&amp;#039;&amp;#039;&amp;#039; Vergleiche das erwartete Ergebnis mit dem tatsächlich berechneten Wert.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hilfe 3:&amp;#039;&amp;#039;&amp;#039; Der Wert muss nach einer Reservierung kleiner werden.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Begründetes Feedback:&amp;#039;&amp;#039;&amp;#039; Wenn der Erfolgstest jetzt fehlschlägt, hat die Testsuite den eingebauten Rechenfehler erkannt. Die übrigen Tests können trotzdem bestehen, weil sie andere Eigenschaften prüfen. Genau deshalb sind gezielt ausgewählte Testfälle wichtig.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Lerneinheit 6: Offene Risiken fachlich darstellen =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Leitfrage: Was kann die Anwendung noch nicht zuverlässig?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Ein professioneller Projektabschluss verschweigt keine Grenzen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Risikomatrix.svg|450px|rahmenlos|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Abbildung: Risikomatrix. Quelle: Josef Kolerus, CC BY-SA 4.0.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offenes Risiko&lt;br /&gt;
! Auswirkung&lt;br /&gt;
! Nächste Maßnahme&lt;br /&gt;
|-&lt;br /&gt;
| Gleichzeitige Reservierungen&lt;br /&gt;
| Mögliche widersprüchliche Bestände&lt;br /&gt;
| Zentrale Speicherung mit geeigneter Transaktionskontrolle&lt;br /&gt;
|-&lt;br /&gt;
| Fehlende dauerhafte Speicherung&lt;br /&gt;
| Bestand geht nach Programmende verloren&lt;br /&gt;
| Persistenz und Wiederherstellung konzipieren&lt;br /&gt;
|-&lt;br /&gt;
| Fehlende Rollenverwaltung&lt;br /&gt;
| Keine geregelten Berechtigungen&lt;br /&gt;
| Authentifizierung und Autorisierung planen&lt;br /&gt;
|-&lt;br /&gt;
| Unvollständige Testabdeckung&lt;br /&gt;
| Unentdeckte Fehler sind möglich&lt;br /&gt;
| Weitere Grenz-, Integrations- und Systemtests&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Risikobewertung:&amp;#039;&amp;#039;&amp;#039; Priorisiere Risiken nach ihrer geschätzten Eintrittswahrscheinlichkeit und Auswirkung. Die Priorität ist eine begründete Einschätzung, kein bereits gemessener Wert.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Transferaufgabe: Der gleichzeitige Zugriff ==&lt;br /&gt;
&lt;br /&gt;
Zwei Azubis möchten gleichzeitig die letzten verfügbaren Sensoren reservieren.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Aufgabe:&amp;#039;&amp;#039;&amp;#039; Erkläre, warum die bisherige Dictionary-Lösung für einen Mehrbenutzerbetrieb nicht ausreicht.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hilfe 1:&amp;#039;&amp;#039;&amp;#039; Wo befinden sich die Daten?&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hilfe 2:&amp;#039;&amp;#039;&amp;#039; Was geschieht, wenn zwei Vorgänge denselben Ausgangsbestand verwenden?&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hilfe 3:&amp;#039;&amp;#039;&amp;#039; Denke an gemeinsame Speicherung und atomare Buchungen.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Begründetes Feedback:&amp;#039;&amp;#039;&amp;#039; Eine überzeugende Lösung benennt das Risiko widersprüchlicher Buchungen und schlägt Transaktionen oder eine vergleichbare Synchronisierung vor. Zusätzliche Unit-Tests allein lösen das Problem nicht, weil auch die Architektur des Mehrbenutzerbetriebs angepasst werden muss.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Ein Softwareprojekt überzeugend präsentieren =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Deine Leitstruktur: Problem – Nutzen – Architektur – Nachweis – Risiko – Ausblick&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Die folgende Zeiteinteilung ist eine siebenminütige Übungspräsentation, keine verbindliche Prüfungszeit.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Zeitfenster&lt;br /&gt;
! Inhalt&lt;br /&gt;
! Geeignetes Medium&lt;br /&gt;
|-&lt;br /&gt;
| 0:00–0:45&lt;br /&gt;
| Ausgangslage und Ziel&lt;br /&gt;
| Problem-Nutzen-Folie&lt;br /&gt;
|-&lt;br /&gt;
| 0:45–2:00&lt;br /&gt;
| Anforderungen&lt;br /&gt;
| Anwendungsfalldiagramm&lt;br /&gt;
|-&lt;br /&gt;
| 2:00–3:15&lt;br /&gt;
| Architektur und Entscheidung&lt;br /&gt;
| Bausteindiagramm&lt;br /&gt;
|-&lt;br /&gt;
| 3:15–4:45&lt;br /&gt;
| Lokale Demo und Tests&lt;br /&gt;
| Terminal und Testtabelle&lt;br /&gt;
|-&lt;br /&gt;
| 4:45–6:00&lt;br /&gt;
| Offene Risiken&lt;br /&gt;
| Risikomatrix&lt;br /&gt;
|-&lt;br /&gt;
| 6:00–7:00&lt;br /&gt;
| Ergebnis und nächste Schritte&lt;br /&gt;
| Zusammenfassung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=pJc0l2DASpo|500|center}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Fachvideo: Mark Richards – Lesson 31: Presenting Architecture.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Präsentationsregel:&amp;#039;&amp;#039;&amp;#039; Zeige keine langen Quelltextseiten. Erkläre eine zentrale Funktion, führe einen Test vor und begründe Deine technischen Entscheidungen.&lt;br /&gt;
&lt;br /&gt;
Die IHK betont für die Projektpräsentation insbesondere die adressatengerechte Darstellung von Arbeitsergebnissen und die Begründung des Vorgehens. Beachte immer die aktuell geltenden Vorgaben Deiner zuständigen IHK.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Beispiel für Deinen Einstieg ==&lt;br /&gt;
&lt;br /&gt;
„In unserer fiktiven Ausbildungswerkstatt sollen elektronische Bauteile zuverlässig reserviert werden. Ich habe dafür einen Python-Prototyp entwickelt, der gültige Reservierungen verarbeitet und unzulässige Mengen abweist. Ich erläutere Ihnen den Aufbau, die automatisierten Tests und die noch offenen Risiken.“&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Checkliste für die Präsentation ==&lt;br /&gt;
&lt;br /&gt;
# [[Zielgruppenanalyse]]: Ist klar, für wen Du präsentierst?&lt;br /&gt;
# [[Anforderungsanalyse]]: Ist das Ausgangsproblem verständlich?&lt;br /&gt;
# [[Softwarearchitektur]]: Werden wichtige Bausteine und Entscheidungen erklärt?&lt;br /&gt;
# [[Softwaretest]]: Zeigst Du nachvollziehbare Testnachweise?&lt;br /&gt;
# [[Risikomanagement]]: Benennst Du Grenzen und konkrete Maßnahmen?&lt;br /&gt;
# [[Präsentationstechnik]]: Sind Grafiken lesbar, Aussagen präzise und Medien rechtlich geklärt?&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Interaktive Aufgaben =&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Quiz: Teste Dein Wissen ==&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Welche Aussage beschreibt den fachlichen Nutzen des Projekts am besten?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Reservierungen werden auf verfügbaren Bestand geprüft)&lt;br /&gt;
(!Das Projekt verwendet eine Programmiersprache)&lt;br /&gt;
(!Das Programm enthält mehrere Funktionen)&lt;br /&gt;
(!Die Anwendung startet im Terminal)&lt;br /&gt;
&lt;br /&gt;
{{E}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Welche Funktion gehört zur Geschäftslogik?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Prüfung und Berechnung einer Reservierung)&lt;br /&gt;
(!Anzeige eines Firmenlogos)&lt;br /&gt;
(!Gestaltung einer Präsentationsfolie)&lt;br /&gt;
(!Auswahl der Hintergrundfarbe)&lt;br /&gt;
&lt;br /&gt;
{{E}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Was beschreibt eine Projektgrenze?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Die Anwendung unterstützt noch keinen Mehrbenutzerbetrieb)&lt;br /&gt;
(!Die Anwendung besitzt alle denkbaren Funktionen)&lt;br /&gt;
(!Das Projekt hat grundsätzlich keine Risiken)&lt;br /&gt;
(!Die Software benötigt niemals Wartung)&lt;br /&gt;
&lt;br /&gt;
{{E}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Was ist ein Ziel eines Architekturdiagramms?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Bausteine und ihre Beziehungen verständlich darstellen)&lt;br /&gt;
(!Jede Quelltextzeile vollständig abbilden)&lt;br /&gt;
(!Sämtliche Testergebnisse ersetzen)&lt;br /&gt;
(!Alle Risiken automatisch beseitigen)&lt;br /&gt;
&lt;br /&gt;
{{E}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Warum erstellt die Funktion eine Kopie des Bestands?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Die ursprünglichen Eingabedaten bleiben unverändert)&lt;br /&gt;
(!Das Programm benötigt dadurch eine Datenbank)&lt;br /&gt;
(!Alle Reservierungen werden dauerhaft gespeichert)&lt;br /&gt;
(!Die Anwendung wird automatisch mehrbenutzerfähig)&lt;br /&gt;
&lt;br /&gt;
{{E}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Welcher Aufruf startet die fünf lokalen Unit-Tests?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(python -I -B projekt.py --test)&lt;br /&gt;
(!python -I -B projekt.py --server)&lt;br /&gt;
(!python -I -B projekt.py --deploy)&lt;br /&gt;
(!python -I -B projekt.py --network)&lt;br /&gt;
&lt;br /&gt;
{{E}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Was erwartet der Test bei einer Reservierung über dem verfügbaren Bestand?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Einen ValueError)&lt;br /&gt;
(!Eine erfolgreiche Reservierung)&lt;br /&gt;
(!Eine automatische Bestandserhöhung)&lt;br /&gt;
(!Eine Verbindung zu einem Webserver)&lt;br /&gt;
&lt;br /&gt;
{{E}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Was lässt sich aus fünf erfolgreichen Unit-Tests schließen?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Die fünf geprüften Verhaltensweisen entsprachen den Erwartungen)&lt;br /&gt;
(!Die Software ist vollständig fehlerfrei)&lt;br /&gt;
(!Alle Sicherheitsrisiken wurden beseitigt)&lt;br /&gt;
(!Die Software ist für den Produktivbetrieb freigegeben)&lt;br /&gt;
&lt;br /&gt;
{{E}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Welches Risiko besteht bei gleichzeitigen Reservierungen?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Widersprüchliche Bestände durch konkurrierende Zugriffe)&lt;br /&gt;
(!Automatisch vollständige Datensicherung)&lt;br /&gt;
(!Grundsätzlich fehlerfreie Buchungen)&lt;br /&gt;
(!Garantiert bessere Systemleistung)&lt;br /&gt;
&lt;br /&gt;
{{E}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wie gehst Du bei einer professionellen Projektpräsentation mit offenen Risiken um?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Du erläuterst Auswirkungen und geeignete nächste Maßnahmen)&lt;br /&gt;
(!Du verschweigst alle noch vorhandenen Probleme)&lt;br /&gt;
(!Du ersetzt fehlende Tests durch Werbeaussagen)&lt;br /&gt;
(!Du erklärst den Prototyp ungeprüft zum fertigen Produkt)&lt;br /&gt;
&lt;br /&gt;
{{E}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
Ordne die Begriffe ihren fachlich passenden Bedeutungen zu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;memo-quiz&amp;quot;&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| Projektnutzen || Mehrwert für die Zielgruppe&lt;br /&gt;
|-&lt;br /&gt;
| Anwendungsfall || Ablauf aus Sicht eines Nutzers&lt;br /&gt;
|-&lt;br /&gt;
| Geschäftslogik || Fachliche Regeln einer Anwendung&lt;br /&gt;
|-&lt;br /&gt;
| Unit-Test || Einzelprüfung einer Softwareeinheit&lt;br /&gt;
|-&lt;br /&gt;
| Grenzfall || Eingabe am Rand eines gültigen Bereichs&lt;br /&gt;
|-&lt;br /&gt;
| Restrisiko || Nach Maßnahmen verbleibende Gefährdung&lt;br /&gt;
|}&lt;br /&gt;
{{E}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Drag and Drop ==&lt;br /&gt;
&lt;br /&gt;
Ordne die Projektbegriffe den richtigen Beschreibungen zu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;lueckentext-quiz&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ordne die richtigen Begriffe zu.&lt;br /&gt;
! Thema&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Bedarfsanalyse&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Problem der Ausbildungswerkstatt&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Softwareentwurf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Verantwortlichkeiten der Bausteine&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Implementierung&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Entwicklung einer lauffähigen Funktion&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Verifikation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Abgleich mit erwarteten Testergebnissen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Risikobewertung&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Untersuchung möglicher negativer Auswirkungen&lt;br /&gt;
|}&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Kreuzworträtsel ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;kreuzwort-quiz&amp;quot;&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| Nutzen || Wie heißt der fachliche Mehrwert eines Projekts?&lt;br /&gt;
|-&lt;br /&gt;
| Architektur || Wie heißt die grundlegende Struktur eines Softwaresystems?&lt;br /&gt;
|-&lt;br /&gt;
| Unittest || Wie nennt man die automatisierte Prüfung einer einzelnen Softwareeinheit?&lt;br /&gt;
|-&lt;br /&gt;
| Risiko || Welcher Begriff bezeichnet die Möglichkeit eines unerwünschten Ereignisses?&lt;br /&gt;
|-&lt;br /&gt;
| Prototyp || Wie heißt eine vorläufige Ausführung zur Erprobung einer Lösung?&lt;br /&gt;
|-&lt;br /&gt;
| Bestand || Wie heißt die verfügbare Menge von Material?&lt;br /&gt;
|}&lt;br /&gt;
{{E}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== LearningApps ==&lt;br /&gt;
&lt;br /&gt;
Nutze die thematische Suche nach weiteren Lernübungen. Externe Angebote nur mit Freigabe öffnen und dort keine persönlichen oder betrieblichen Daten eingeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;iframe&amp;gt; https://learningapps.org/index.php?s=Anwendungsentwicklung+und+Softwarequalität+Ein+Softwareprojekt+fachlich+präsentieren &amp;lt;/iframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Lückentext ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;quiz display=simple&amp;gt;&lt;br /&gt;
{&amp;#039;&amp;#039;&amp;#039;Vervollständige den Text.&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
|type=&amp;quot;{}&amp;quot;}&lt;br /&gt;
Im Ausbildungsbeispiel wird eine einfache { Materialreservierung } entwickelt.&lt;br /&gt;
&lt;br /&gt;
Der fachliche { Nutzen } beschreibt den Mehrwert des Softwareprojekts.&lt;br /&gt;
&lt;br /&gt;
Ein { Anwendungsfall } verdeutlicht eine Funktion aus Nutzersicht.&lt;br /&gt;
&lt;br /&gt;
Die { Softwarearchitektur } beschreibt den grundlegenden Aufbau des Systems.&lt;br /&gt;
&lt;br /&gt;
Eine eigene Funktion verarbeitet die { Geschäftslogik } der Reservierung.&lt;br /&gt;
&lt;br /&gt;
Das Python-Programm speichert seinen aktuellen Datenbestand im { Arbeitsspeicher }.&lt;br /&gt;
&lt;br /&gt;
Automatisierte Einzeltests heißen auch { Unit-Tests }.&lt;br /&gt;
&lt;br /&gt;
Die fünf Beispieltests werden mit dem Framework { unittest } ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Eine erfolgreiche Testsuite beweist nicht die vollständige { Fehlerfreiheit } einer Anwendung.&lt;br /&gt;
&lt;br /&gt;
Gleichzeitige Zugriffe können zu widersprüchlichen { Beständen } führen.&lt;br /&gt;
&lt;br /&gt;
Die Bewertung offener Risiken berücksichtigt deren mögliche { Auswirkungen }.&lt;br /&gt;
&lt;br /&gt;
Eine überzeugende Projektpräsentation begründet technische { Entscheidungen }.&lt;br /&gt;
&amp;lt;/quiz&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Offene Aufgaben =&lt;br /&gt;
&lt;br /&gt;
Bearbeite die Aufgaben in aufsteigender Schwierigkeit. Verwende für praktische Versuche ausschließlich lokale Kopien und fiktive Daten.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
=== Leicht – Basisaufgaben ===&lt;br /&gt;
&lt;br /&gt;
# [[Projektnutzen]]: Gestalte eine Folie, die Ausgangslage, Zielgruppe und erwarteten Nutzen der Materialreservierung erklärt.&lt;br /&gt;
# [[Anwendungsfall]]: Zeichne ein einfaches Anwendungsfalldiagramm mit einem Akteur und einer Reservierungsfunktion.&lt;br /&gt;
# [[Softwarearchitektur]]: Erstelle ein eigenes Bausteindiagramm aus CLI, Geschäftslogik und Datenhaltung.&lt;br /&gt;
# [[Softwaretest]]: Führe die fünf lokalen Tests aus und erstelle einen kurzen Testbericht mit erwarteten und tatsächlichen Ergebnissen.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
=== Standard – Anwendungsaufgaben ===&lt;br /&gt;
&lt;br /&gt;
# [[Präsentationstechnik]]: Erstelle eine dreiminütige Projektpräsentation mit maximal vier inhaltsorientierten Folien.&lt;br /&gt;
# [[Testfall]]: Ergänze im lokalen Programm einen Test für eine negative Reservierungsmenge und erkläre das erwartete Ergebnis.&lt;br /&gt;
# [[Datenvisualisierung]]: Erstelle eine eigene Grafik zu den fiktiven Bestandsveränderungen und interpretiere sie fachlich.&lt;br /&gt;
# [[Softwaredokumentation]]: Produziere ein kurzes Bildschirmvideo der lokalen Demo ohne persönliche Daten, Zugangsdaten oder externe Veröffentlichung.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
=== Schwer – Transferaufgaben ===&lt;br /&gt;
&lt;br /&gt;
# [[Nebenläufigkeit]]: Entwirf eine Architektur für gleichzeitige Reservierungen und begründe den Einsatz geeigneter Transaktionsmechanismen.&lt;br /&gt;
# [[Risikomanagement]]: Entwickle eine Risikomatrix für eine spätere Mehrbenutzerversion und priorisiere drei Verbesserungen.&lt;br /&gt;
# [[Qualitätssicherung]]: Entwirf einen Testplan für eine zukünftige Version mit Datenbank, Benutzerverwaltung und Oberfläche.&lt;br /&gt;
# [[Fachgespräch]]: Simuliere ein Prüfungsgespräch mit einer anderen Person, zeichne die Antworten nach Einwilligung lokal auf und verbessere Deine Argumentation.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Selbstkontrolle und begründetes Feedback ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Niveau&lt;br /&gt;
! Prüffrage&lt;br /&gt;
! Begründetes Feedback&lt;br /&gt;
|-&lt;br /&gt;
| Basis&lt;br /&gt;
| Wird ein konkreter Nutzen genannt?&lt;br /&gt;
| Gut ist ein überprüfbarer Zusammenhang zwischen Problem und Lösung. Allgemeine Werbeaussagen sind kein fachlicher Nachweis.&lt;br /&gt;
|-&lt;br /&gt;
| Anwendung&lt;br /&gt;
| Stimmen Demo, Grafik und Tests überein?&lt;br /&gt;
| Gut ist eine konsistente Darstellung von Eingaben, erwarteten Ergebnissen und beobachtetem Verhalten. Widersprüche müssen untersucht werden.&lt;br /&gt;
|-&lt;br /&gt;
| Transfer&lt;br /&gt;
| Werden Architekturentscheidung und Restrisiko begründet?&lt;br /&gt;
| Gut ist eine Lösung, die Auswirkungen, Alternativen und technische Grenzen einbezieht. Eine bloße Aufzählung von Technologien genügt nicht.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{:Offene Aufgabe - MOOC erstellen}}&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Lernkontrolle =&lt;br /&gt;
&lt;br /&gt;
Die Lernkontrolle prüft vor allem Zusammenhänge, Begründungen und die Übertragung auf neue Situationen.&lt;br /&gt;
&lt;br /&gt;
# [[Wirtschaftlichkeit]]: Erkläre, wie Du den behaupteten Zeitgewinn einer Materialreservierung in einem späteren Pilotversuch fair messen würdest.&lt;br /&gt;
# [[Softwarearchitektur]]: Begründe, weshalb die lokale Dictionary-Lösung für einen Prototyp ausreichen kann, für den dauerhaften Mehrbenutzerbetrieb jedoch nicht.&lt;br /&gt;
# [[Teststrategie]]: Zeige anhand zweier zusätzlicher Tests, wie Du die bisherige Absicherung sinnvoll erweiterst, und erkläre die Grenzen dieser Tests.&lt;br /&gt;
# [[Fehleranalyse]]: Untersuche die Folgen einer versehentlich addierten statt subtrahierten Reservierungsmenge und beschreibe, wie Tests den Fehler sichtbar machen.&lt;br /&gt;
# [[Risikomanagement]]: Priorisiere fehlende Persistenz, fehlende Berechtigungen und konkurrierende Buchungen für einen geplanten Einsatz und begründe Deine Reihenfolge anhand eines konkreten Nutzungsszenarios.&lt;br /&gt;
# [[Projektpräsentation]]: Erkläre die gleiche Architektur einmal gegenüber einem Ausbilder mit technischem Hintergrund und einmal gegenüber einer fachlichen Leitung ohne Programmierkenntnisse.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Lernnachweis =&lt;br /&gt;
&lt;br /&gt;
Für einen aussagekräftigen Lernnachweis reichst Du folgende eigene Arbeitsergebnisse ein:&lt;br /&gt;
&lt;br /&gt;
# Eine Problem- und Nutzenbeschreibung mit prüfbarem Projektziel.&lt;br /&gt;
# Ein Anwendungsfall- und ein vereinfachtes Architekturdiagramm.&lt;br /&gt;
# Den lokal ausgeführten Python-Prototyp mit fiktiven Beispieldaten.&lt;br /&gt;
# Ein dokumentiertes Testprotokoll einschließlich mindestens eines untersuchten Fehlers.&lt;br /&gt;
# Eine selbst erstellte Datenvisualisierung mit fachlicher Interpretation.&lt;br /&gt;
# Eine priorisierte Übersicht offener Risiken und geeigneter Maßnahmen.&lt;br /&gt;
# Eine kurze, adressatengerechte Projektpräsentation mit begründeten Architekturentscheidungen.&lt;br /&gt;
# Eine persönliche Reflexion zu Qualitätsnachweisen, Grenzen und weiteren Entwicklungsschritten.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Bewertungsmaßstab:&amp;#039;&amp;#039;&amp;#039; Entscheidend sind fachliche Richtigkeit, Nachvollziehbarkeit, prüfbare Belege, Begründung technischer Entscheidungen und ehrlicher Umgang mit offenen Risiken.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= OERs zum Thema =&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Wikipedia ==&lt;br /&gt;
&lt;br /&gt;
Der folgende Artikel ergänzt die Grundlagen zur Softwarearchitektur.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;iframe&amp;gt; https://de.m.wikipedia.org/wiki/Softwarearchitektur &amp;lt;/iframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere geeignete Wikipedia-Themen: [[Softwarequalität]], [[Softwaretest]], [[Unit-Test]], [[Anwendungsfalldiagramm]], [[Softwarearchitektur]] und [[Risikomanagement]].&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Geprüfte Fachquellen ==&lt;br /&gt;
&lt;br /&gt;
# [https://www.ihk.de/freiburg/fachkraefte-entwickeln/ausbildung/zwischen-und-abschlusspruefungen/zwischen-und-abschlusspruefungen-a-z/fachinformatiker-in-6815514 IHK Südlicher Oberrhein – Fachinformatiker/in]: Anforderungen an Projektpräsentation, Fachgespräch und adressatengerechte Darstellung.&lt;br /&gt;
# [https://www.ihk.de/nordwestfalen/bildung/ausbildung/ausbildungsberufe-a-z/handreichung-fachinformatiker-anwendungsentwicklung-6562294 IHK Nord Westfalen – Betriebliche Projektarbeit]: Hinweise zur Projektpräsentation in der Fachrichtung Anwendungsentwicklung.&lt;br /&gt;
# [https://docs.python.org/3/library/unittest.html Python-Dokumentation – unittest]: Offizielle Beschreibung automatisierter Unit-Tests.&lt;br /&gt;
# [https://docs.python.org/3/using/cmdline.html Python-Dokumentation – Kommandozeilenoptionen]: Beschreibung des isolierten Python-Modus und weiterer Optionen.&lt;br /&gt;
# [https://c4model.com/ C4 Model – Simon Brown]: Architekturansichten und verständliche Visualisierung von Softwaresystemen.&lt;br /&gt;
# [https://martinfowler.com/articles/practical-test-pyramid.html Martin Fowler – The Practical Test Pyramid]: Fachlicher Hintergrund zu unterschiedlichen Testebenen.&lt;br /&gt;
# [https://owasp.org/projects/asvs OWASP ASVS]: Weiterführende Anforderungen zur Sicherheitsprüfung von Webanwendungen.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Bildquellen und Medienrechte ==&lt;br /&gt;
&lt;br /&gt;
Die verwendeten Wikimedia-Commons-Dateien wurden anhand ihrer Dateibeschreibungsseiten ausgewählt. Beachte bei Weiterverwendung insbesondere Namensnennung, Lizenzlink und gegebenenfalls die Weitergabe unter gleichen Bedingungen.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Medium&lt;br /&gt;
! Urheber&lt;br /&gt;
! Lizenz&lt;br /&gt;
|-&lt;br /&gt;
| [https://commons.wikimedia.org/wiki/File:Software_Development_Life_cycle.png Software Development Life cycle.png]&lt;br /&gt;
| Tazlavi&lt;br /&gt;
| CC BY-SA 4.0&lt;br /&gt;
|-&lt;br /&gt;
| [https://commons.wikimedia.org/wiki/File:UML_Use_Case_diagram.svg UML Use Case diagram.svg]&lt;br /&gt;
| Slashme&lt;br /&gt;
| Unter anderem CC BY-SA und GFDL&lt;br /&gt;
|-&lt;br /&gt;
| [https://commons.wikimedia.org/wiki/File:Model_View_Controller.svg Model View Controller.svg]&lt;br /&gt;
| MovGP0&lt;br /&gt;
| CC BY-SA 3.0&lt;br /&gt;
|-&lt;br /&gt;
| [https://commons.wikimedia.org/wiki/File:Flowchart_de.svg Flowchart de.svg]&lt;br /&gt;
| Erik Streb&lt;br /&gt;
| CC BY-SA 3.0&lt;br /&gt;
|-&lt;br /&gt;
| [https://commons.wikimedia.org/wiki/File:Testing_Pyramid.svg Testing Pyramid.svg]&lt;br /&gt;
| Abbe98&lt;br /&gt;
| CC BY-SA 4.0&lt;br /&gt;
|-&lt;br /&gt;
| [https://commons.wikimedia.org/wiki/File:Risikomatrix.svg Risikomatrix.svg]&lt;br /&gt;
| Josef Kolerus&lt;br /&gt;
| CC BY-SA 4.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die jeweiligen Datei- und Lizenzseiten enthalten die vollständigen Nutzungsbedingungen. Bei der Verwendung außerhalb von Wikimedia-Projekten müssen die geltenden Lizenzpflichten eingehalten werden.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;YouTube-Medien:&amp;#039;&amp;#039;&amp;#039; Die drei eingebetteten Fachvideos stammen aus konkret recherchierten YouTube-Einträgen. Sie werden lediglich zur Ansicht eingebunden und nicht als offen lizenziert ausgewiesen. Einbettung und Wiedergabe setzen voraus, dass der jeweilige Anbieter dies erlaubt. Keine Videos ungeprüft herunterladen oder weiterverbreiten.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Datenschutz und Lernumgebung:&amp;#039;&amp;#039;&amp;#039; Externe YouTube-, Wikipedia- und LearningApps-Angebote können Verbindungsdaten verarbeiten. Verwende diese nur nach entsprechender Freigabe. Der lokale Python-Prototyp benötigt selbst keine externe Datenübertragung. Er ist ein Lernbeispiel, kein produktionsreifes Reservierungssystem.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Verknüpfte Lernbereiche =&lt;br /&gt;
&lt;br /&gt;
{| align=center&lt;br /&gt;
{{:D-Tab}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Anwendungsentwicklung]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# [[Anforderungsanalyse]]&lt;br /&gt;
# [[Anwendungsfalldiagramm]]&lt;br /&gt;
# [[Softwarearchitektur]]&lt;br /&gt;
# [[Python]]&lt;br /&gt;
# [[Programmierung]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Softwarequalität]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# [[Qualitätssicherung]]&lt;br /&gt;
# [[Softwaretest]]&lt;br /&gt;
# [[Unit-Test]]&lt;br /&gt;
# [[Testautomatisierung]]&lt;br /&gt;
# [[Risikomanagement]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Projektmanagement]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# [[Projektplanung]]&lt;br /&gt;
# [[Wirtschaftlichkeit]]&lt;br /&gt;
# [[Softwaredokumentation]]&lt;br /&gt;
# [[Projektpräsentation]]&lt;br /&gt;
# [[Fachgespräch]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[IT-Sicherheit]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# [[Datenschutz]]&lt;br /&gt;
# [[Zugriffskontrolle]]&lt;br /&gt;
# [[Datenintegrität]]&lt;br /&gt;
# [[Nebenläufigkeit]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:Anwendungsentwicklung]]&lt;br /&gt;
[[Kategorie:Softwareentwicklung]]&lt;br /&gt;
[[Kategorie:Softwarequalität]]&lt;br /&gt;
[[Kategorie:Softwaretest]]&lt;br /&gt;
[[Kategorie:Softwarearchitektur]]&lt;br /&gt;
[[Kategorie:Projektmanagement]]&lt;br /&gt;
[[Kategorie:Berufsausbildung]]&lt;br /&gt;
[[Kategorie:Fachinformatiker]]&lt;br /&gt;
[[Kategorie:Präsentation]]&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= aiMOOC-Projekte =&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AI_MOOC]] [[Kategorie:GPT aiMOOC]]&lt;br /&gt;
{{MT}}&lt;/div&gt;</summary>
		<author><name>Glanz</name></author>
	</entry>
</feed>