#separator:tab
#html:true
#tags:input-processing-output-quiz
#columns:Vorderseite Rückseite
Aus welchen drei Teilen besteht nach dem IPO-Modell jedes Teilproblem, das ein Computer lösen kann?
- Planung, Umsetzung, Dokumentation
- Hardware, Software, Daten
- Eingabe, Verarbeitung, Ausgabe
- Sender, Kanal, Empfänger
- Eingabe, Verarbeitung, Ausgabe
Genau: Vorn geht etwas hinein, hinten kommt etwas heraus, und dazwischen rechnet die Maschine. Input, processing, output, kurz IPO.
Jedes Stück, das ein Computer lösen kann, hat eine Eingabe, eine Verarbeitung und eine Ausgabe.
Warum bringt ein Kasten mit klarer Eingabe und klarer erwarteter Ausgabe seinen Test gleich mit?
- Weil der Computer bei jedem Aufruf selbst meldet, ob die gelieferte Ausgabe zur Eingabe passt.
- Weil du eine bekannte Eingabe hineingeben und das Ergebnis mit der erwarteten Ausgabe vergleichen kannst.
- Weil man in einem klar geschnittenen Kasten beim Lesen des Codes sofort sieht, welche Zeile welchen Teil der Ausgabe erzeugt.
- Weil die Verarbeitung im Kasten dann so überschaubar ist, dass sie kaum noch falsch sein kann.
- Weil du eine bekannte Eingabe hineingeben und das Ergebnis mit der erwarteten Ausgabe vergleichen kannst.
Genau das ist der Test: bekannte Eingabe, erwartete Ausgabe, Vergleich, mit Ja oder Nein und ohne Deutungsspielraum.
Eine bekannte Eingabe und eine erwartete Ausgabe sind schon ein Test, ohne Blick in den Kasten.
"Vor einem Farbsensor mit vier Messkanälen leuchtet eine rote Lampe. Was ist die tatsächliche Eingabe, mit der ein Empfängerprogramm arbeitet?
- Die Farbe Rot, so wie sie auch ein Mensch sieht, der neben dem Sensor steht.
- Das Wort ""red"", das der Sensor als erkannte Farbe an das Programm meldet.
- Vier Zahlen: die Anteile von Rot, Grün und Blau und die Gesamthelligkeit.
- Ein kleines Bild der Lampe, aus dem das Programm die Farbe an der hellsten Stelle abliest.
" - Vier Zahlen: die Anteile von Rot, Grün und Blau und die Gesamthelligkeit.
Genau: Der Sensor liefert vier Messwerte, etwa r=203, g=41, b=57, c=310. Was davon als Rot gilt, entscheidet das Programm aus den Zahlen.
Die Eingabe des Kastens ist das, was der Sensor liefert, und die Entscheidung ist die Arbeit des Programms.
"Eine Strecke überträgt Text mit Licht als Kette von Kästen. Welche Aussagen treffen zu? (Mehrere richtige Antworten möglich.)
""hi"" → encode() → Farben → Licht → Sensor → decode() → ""hi""
- Die Ausgabe von
encode() ist die Eingabe des nächsten Kastens. - Sender und Empfänger müssen vorher vereinbaren, welche Farbe für welchen Buchstaben steht.
decode() kann unabhängig davon arbeiten, was encode() macht.- Die Kette zeigt, in welcher Reihenfolge die Daten durch das System fließen.
- Die Kästen lassen sich in beliebiger Reihenfolge anordnen, solange jeder vorkommt.
" - Die Ausgabe von
encode() ist die Eingabe des nächsten Kastens.
Richtig, genau das heißt, Kästen zu verbinden: Die Ausgabe des einen wird zur Eingabe des nächsten. - Sender und Empfänger müssen vorher vereinbaren, welche Farbe für welchen Buchstaben steht.
Richtig: encode() macht aus Buchstaben Farben und decode() aus Farben wieder Buchstaben, also brauchen beide dieselbe Tabelle, etwa „h“ ist Rot. Ohne sie sieht der Empfänger Farben, kann sie aber nicht lesen. - Die Kette zeigt, in welcher Reihenfolge die Daten durch das System fließen.
Richtig: Kästen in einer Reihe zeigen den Datenfluss, von der Nachricht bis zur Nachricht.
Kästen in einer Reihe zeigen den Datenfluss, und Sender und Empfänger passen nur zusammen, wenn sie dieselbe Vereinbarung nutzen.
Betrachte diese Funktion als IPO-Kasten. Was sind ihre Eingabe und ihre Ausgabe?
def encode(text):
colours = []
for letter in text:
colours.append(colour_for(letter))
return colours
- Die Eingabe ist ein Text, die Ausgabe eine Liste von Farben.
- Die Eingabe ist eine Liste von Farben, die Ausgabe ein Text.
- Die Eingabe ist Licht, die Ausgabe sind vier Sensorwerte.
- Die Eingabe ist ein einzelner Buchstabe, die Ausgabe eine einzelne Farbe.
- Die Eingabe ist ein Text, die Ausgabe eine Liste von Farben.
Richtig: text geht hinein, jeder Buchstabe fügt der Liste eine Farbe hinzu, und colours kommt heraus. Das ist der Kasten des Senders.
Die Parameter einer Funktion sind ihre Eingabe, ihr Rückgabewert ist ihre Ausgabe, und ein Aufruf darin ist ein kleinerer Kasten.
"Du willst einen Kasten classify() prüfen, der aus vier Sensorwerten eine Farbe entscheidet. Welcher Test passt zum IPO-Modell?
classify() eine Stunde lang mit laufenden Messwerten arbeiten lassen und schauen, ob es ohne Absturz durchhält.classify() mit zufälligen Zahlen aufrufen und prüfen, dass keine Fehlermeldung kommt.- Gespeicherte Messwerte, die sicher bei roter Lampe entstanden sind, hineingeben und prüfen, ob ""red"" herauskommt.
- Den Quelltext von
classify() Zeile für Zeile lesen und jede Bedingung im Kopf mit Beispielwerten nachvollziehen.
" "- Gespeicherte Messwerte, die sicher bei roter Lampe entstanden sind, hineingeben und prüfen, ob ""red"" herauskommt.
Genau: bekannte Eingabe, erwartete Ausgabe, Vergleich. Der Kasten wird an Daten geprüft, deren Wahrheit du kennst.
Ein Test braucht Eingaben, deren richtige Ausgabe du vorher kennst.
"
Aus dem IPO-Kasten ergeben sich zwei Fragen: Wie arbeitet der Kasten, und wie werden Eingabe und Ausgabe für die Maschine dargestellt? Welche davon beantwortet ein Programm?
- Beide: Ein Programm legt auch fest, wie Farben und Zeichen dargestellt werden.
- Die Frage der Verarbeitung: Ein Programm beschreibt, wie der Kasten arbeitet.
- Die Frage der Darstellung: Ein Programm legt fest, wie Daten aussehen.
- Keine von beiden: Programme sind ein eigenes, drittes Thema.
- Die Frage der Verarbeitung: Ein Programm beschreibt, wie der Kasten arbeitet.
Genau: Ein Programm ist das, was im Kasten geschieht. Die Frage der Darstellung bleibt offen und wird mit Messwerten, Symbolen und Codesystemen beantwortet.
Programme beantworten, wie ein Kasten arbeitet; die Darstellung beantwortet, was seine Ränder überquert.
Dasselbe IPO-Modell erscheint auf mehreren Ebenen. Welche Aussagen treffen zu? (Mehrere richtige Antworten möglich.)
System: Nachricht → Sender → Licht
Funktion: Text → encode() → Farben
Logikgatter: 1, 1 → AND → 1
- Von außen betrachtet ist der ganze Sender ein einziger Kasten: Nachricht hinein, Licht heraus.
- Öffnest du den Kasten, wird seine Verarbeitung zu einer Kette kleinerer Kästen mit eigenen Eingaben und Ausgaben.
- Ein einzelnes Logikgatter ist zu klein für das IPO-Modell, weil es nichts verarbeitet, sondern nur Strom durchlässt oder sperrt.
- Welche Ebene die richtige ist, hängt von der Frage ab, die du gerade untersuchst.
- Von außen betrachtet ist der ganze Sender ein einziger Kasten: Nachricht hinein, Licht heraus.
Richtig: send() ist dann der Name für die gesamte Verarbeitung im Inneren. - Öffnest du den Kasten, wird seine Verarbeitung zu einer Kette kleinerer Kästen mit eigenen Eingaben und Ausgaben.
Richtig, und jeder dieser kleineren Kästen lässt sich einzeln prüfen, was die Ebenen so nützlich macht. - Welche Ebene die richtige ist, hängt von der Frage ab, die du gerade untersuchst.
Richtig: Wer das ganze System testet, braucht andere Eingaben und Ausgaben als jemand, der nur encode() untersucht.
Die Form bleibt auf jeder Ebene gleich, und die richtige Ebene ist die, auf der sich deine Frage prüfen lässt.
Eine Textübertragung über eine Lichtstrecke liefert am Ende falschen Text. Was ist nach dem Kastenmodell der sinnvollste nächste Schritt?
- Die ganze Übertragung so oft wiederholen, bis der Text stimmt.
- Den großen Kasten öffnen und einen inneren Kasten, etwa
encode(), für sich mit bekannter Eingabe prüfen. - Den Quelltext von Sender und Empfänger nebeneinanderlegen und die Stelle suchen, an der die Vereinbarung nicht zusammenpasst.
- Den Abstand zwischen Sender und Empfänger verändern und erneut senden.
- Den großen Kasten öffnen und einen inneren Kasten, etwa
encode(), für sich mit bekannter Eingabe prüfen.
Genau: Eine Ebene tiefer haben die kleinen Kästen eigene Eingaben und Ausgaben und lassen sich einzeln prüfen, sodass aus „irgendwo falsch“ ein „hier falsch“ wird.
Folge den Daten und prüfe eine Grenze nach der anderen, bis du den Kasten findest, an dem sie zuerst falsch werden.
Warum „sieht“ der Computer keine Farbe, sondern nur Zahlen?
- Weil der Farbsensor zu billig ist; ein besserer würde Farben direkt liefern.
- Weil eine Maschine nur mit Dingen arbeiten kann, die in einer verarbeitbaren Darstellung vorliegen, meistens als Zahlen.
- Weil der Umweg über Zahlen eine Eigenheit der Programmiersprache ist; eine Sprache mit eingebautem Farbtyp würde die Farbe direkt sehen.
- Weil die Lampe nie reines Rot ausstrahlt.
- Weil er die Farbe sehr wohl erkennt, sie intern aber als Zahlen ablegt und deshalb nur so weitergeben kann.
- Weil eine Maschine nur mit Dingen arbeiten kann, die in einer verarbeitbaren Darstellung vorliegen, meistens als Zahlen.
Genau die Kernaussage: Bevor ein Computer mit etwas arbeiten kann, muss es dargestellt sein. Deine Augen sehen Rot, der Kasten sieht 203, 41, 57, 310.
Ein Computer arbeitet nur mit Darstellungen, und die Bedeutung kommt aus der Regel im Programm.
Auch ein KI-Assistent ist ein IPO-Kasten: Deine Worte gehen hinein, Code kommt heraus, und hineinsehen kannst du nicht. Was folgt daraus?
- Der Kasten ist fertig und muss nicht mehr geprüft werden.
- Die Eingabe spielt kaum eine Rolle: Der Assistent liefert zu jeder Frage ähnlich guten Code, egal wie du sie stellst.
- Du kennst die Eingabe und prüfst die Ausgabe, weil dir die Verarbeitung verschlossen ist.
- Der Kasten arbeitet am schnellsten, also sollte möglichst viel Arbeit dorthin.
- Du kennst die Eingabe und prüfst die Ausgabe, weil dir die Verarbeitung verschlossen ist.
Genau: Die Verarbeitung ist unzugänglich, aber Eingabe und Ausgabe gehören dir, und geprüft wird am Ausgang.
Mit einem Test musst du einem Kasten, in den du nicht hineinsehen kannst, nicht vertrauen.
"Welcher der folgenden Aufrufe ist ein Test mit eingebauter Erwartung?
def to_signal(brightness):
if brightness > 100:
return ""on""
return ""off""
to_signal(150) aufrufen und prüfen, dass ""on"" herauskommt.to_signal(150) aufrufen und sich das Ergebnis ansehen.to_signal() mit vielen verschiedenen Werten aufrufen, um die Funktion gut auszulasten.- Prüfen, dass der Aufruf keine Fehlermeldung erzeugt.
" "to_signal(150) aufrufen und prüfen, dass ""on"" herauskommt.
Genau: bekannte Eingabe, 150, erwartete Ausgabe, ""on"", denn 150 ist größer als 100, und ein Vergleich. Ein Ergebnis mit Ja oder Nein, ohne Deutung.
Die Erwartung steht vor dem Ergebnis; ohne sie ist ein Aufruf kein Test.
"
"Was gehört zur Eingabe des Kastens classify(), der aus den Messwerten eines Sensors eine Farbe entscheidet?
- Die erkannte Farbe, zum Beispiel ""red"".
- Die vier Messwerte des Sensors.
- Der Quelltext von
classify(). - Die Farbe, wie ein Mensch sie sieht.
" - Die vier Messwerte des Sensors.
Richtig: Die vier Zahlen sind alles, was der Kasten bekommt.
Eingabe, Verarbeitung und Ausgabe sind drei verschiedene Dinge: Messwerte, Regel und Entscheidung.