FAQ zum Kurs 1613 Organisatorische Fragen 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Ich habe schon den Kurs, aber noch keine Aufgaben erhalten. Meine Kursunterlagen habe ich unvollständig erhalten. Welchen Pascal-Compiler kann ich für diesen Kurs verwenden? Welche Rolle spielen die Studienzentren? Ich habe den Kurs 01613 belegt, kann diesen im LVU aber nicht finden. Bekomme ich die Musterlösungen auch, wenn ich die Aufgaben nicht eingereicht habe? Wie werden die AB-Aufgaben bewertet? Wie werden HB-Aufgaben bewertet? Warum sind meine handbewerteten Aufgaben noch nicht korrigiert? Ich habe eine Mail "es wurden Korrekturen freigegeben." bekommen, aber es ist nur eine von zwei HB-Aufgaben korrigiert? Ich bin mit der Bewertung meiner AB-Aufgaben nicht einverstanden! Ich bin mit der Bewertung meiner HB-Aufgaben nicht einverstanden! Meine Lösung funktioniert bei mir lokal, das Übungssystem meldet einen Fehler. Wie stelle ich Schlüsselworte im Übungssystem fett dar? Das Übungssystem meldet Syntaxfehler, obwohl keine vorliegen. Das Übungssystem meldet Syntaxfehler in Zeilen, die zum vorgegebenen Programmrahmen, nicht zu meiner Einsendung gehören! Kann ich auch Fragen per E-Mail stellen? Gibt es eine Sammlung alter Klausuraufgaben? Wann sind die Studientage? Was sind die Voraussetzungen für die Klausurteilnahme? Wie melde ich mich zur Klausur an? Gilt die Klausurzulassung auch in späteren Semestern? Ich habe bereits eine Klausurzulassung zu Kurs 1612. Kann ich damit auch an einer 1613-Klausur teilnehmen? Ich habe die Klausurzulassung in einem früheren Semester erworben, das Online-Übungssystem sagt aber, ich sei nicht zugelassen. Wie kann ich mich von der Klausur wieder abmelden? Ich habe die Klausurzulassung (laut Übersicht) nicht erreicht, dennoch kann ich mich anscheinend zur Klausur anmelden. Der Klausuranmeldeschluss steht bevor, aber ich habe die Klausurzulassung aufgrund ausstehender Korrekturen noch nicht erreicht? Ist die Klausurteilnahme Pflicht? Ist diese Klausur eine Prüfung? Wie stelle ich meinen Compiler so ein, dass er sich identisch zur Testumgebung im Onlineübungssystem verhält? Inhaltliche Fragen 31 32 33 34 35 36 37 38 39 40 41 42 Fehler in der Musterlösung zu Aufgabe 1A (KE1)? Sind Unterstriche in Bezeichnern erlaubt? Warum gibt es Abweichungen zwischen der im Kurs definierten Syntax und der vom Compiler akzeptierten Syntax? Fehler in der Musterlösung zu Aufgabe 2C (KE1)? Warum wird im Kurs Pascal benutzt und nicht eine neuere Sprache wie C++ oder Java? Warum kann mein Compiler kein ParaPascal übersetzen? Ich finde die Mussregeln unangemessen! Warum ist strukturierte Programmierung so wichtig? Kann man alles, was unstrukturiert programmiert wurde, auch strukturiert programmieren? Bei einer Aufgabe zum Whitebox-Test ist eine fehlerhafte Prozedur bzw. Funktion gegeben! Ist das Absicht? Woher weiß ich, wann ich in Pascal ein Semikolon setzen muss und wann nicht? Sind beim Bilden von Testfällen Grenzen wie maxint zu berücksichtigen? Welches Ergebnis wird in Testdaten angegeben? Organisatorische Fragen 1 Ich habe schon den Kurs, aber noch keine Aufgaben erhalten. Das ist normal. Der Kurs wird zu einem Vorabtermin versendet, die Aufgaben können Sie jedoch erst ab Anfang April respektive Anfang Oktober (KE1) im Online-Übungssystem einsehen und bearbeiten. Die Aufgaben zu den folgenden Kurseinheiten können Sie dann jeweils in zweiwöchigem Abstand bearbeiten. Eine Versendung von gedruckten Aufgabenstellungen findet nicht statt. 2 Meine Kursunterlagen habe ich unvollständig erhalten. Wenden Sie sich an die Reklamationsstelle: 02331 / 987-2077 3 Welchen Pascal-Compiler kann ich für diesen Kurs verwenden? Der Kurs 1613 orientiert sich (abgesehen von der Verwendung des String-Datentyps) an Standard-Pascal. Somit können grundsätzlich alle Pascal-Compiler benutzt werden, welche Standard-Pascal sowie den String-Typ unterstützen. Da es in diesem Kurs weniger um das Erlernen der Programmiersprache Pascal als um die Vermittlung von grundsätzlichen Konzepten geht, spielt der Compiler eine eher untergeordnete Rolle. Um dennoch Inkompatibilitäten zu vermeiden, empfehlen wir Free Pascal zu verwenden. Im Online-Übungssystem finden Sie weitere Informationen im Informationsschreiben Pascal-Compiler. Die diversen Compiler besitzen i.d.R. erweiterte Fähigkeiten, die durch den Kurstext nicht abgedeckt werden und teils auch weit über den Standard hinausgehen. Wir möchten aus diesem Grund ausdrücklich darauf hinweisen, dass für die Einsendeaufgaben allein die im Kurstext verwendete Syntax und Semantik bindend ist! 4 Welche Rolle spielen die Studienzentren? In erster Linie dienen die Studienzentren der Kontaktaufnahme unter den Studierenden. Ferner ermöglichen sie mit Hilfe kompetenter Mentoren, Fragen zum Kurs zu klären. Studienzentren sind aber nicht die Hörsäle der FernUniversität. Den Inhalt der Kurse müssen Sie sich selbst erarbeiten, Vorlesungen gibt es in der Regel keine. Organisatorische und inhaltliche Äußerungen der Mentoren sind nicht verbindlich. Die Mentoren sind keine Mitarbeiter unseres Lehrgebiets. 5 Ich habe den Kurs 01613 belegt, kann diesen im LVU aber nicht finden. Bei Fragen zum LVU wenden Sie sich bitte an die Betreuer der VU. Der Datenabgleich zwischen Ihren Belegdaten, die im Rechenzentrum gespeichert werden und den Daten in der VU, findet nur in unregelmäßigen Abständen statt. 6 Bekomme ich die Musterlösungen auch, wenn ich die Aufgaben nicht eingereicht habe? Ja. Die Musterlösungen werden sofort nach Einsendeschluss sichtbar. 7 Wie werden die AB-Aufgaben bewertet? Zu jeder Aufgabe wird die erreichte Punktzahl in Abhängigkeit der Gesamtpunktzahl wie folgt berechnet: (Anzahl der richtigen Angaben - Anzahl der falschen Angaben) * (Gesamtpunktzahl / Anzahl Alternativen) Es werden keine negativen Punkte vergeben. Ein Beispiel: Gesamtpunktzahl sei 25 bei 5 Alternativen, also (25 / 5) = 5 Punkte pro Alternative gegebene Antwort korrekte Lösung Bewertung --------------------------------------------------------------------------------------------------A + falsch (-5) B richtig (+5) C + falsch (-5) D + + richtig (+5) E richtig (+5) => (3 richtige - 2 falsche) * (25 / 5) = 5 Punkte Zu jeder Alternative geben Sie eine Antwort, indem Sie die Checkbox markieren oder nicht. Jede dieser Antworten kann richtig sein (mit der Musterlösung übereinstimmen) oder nicht. Somit ist es nicht nur ein Fehler, eine falsche Alternative zu markieren, sondern auch, eine korrekte Alternative nicht zu markieren. Fehlerhafte Antworten werden nicht mit null Punkten, sondern mit Minuspunkten bewertet – andernfalls könnte man allein durch Raten im Durchschnitt die erforderlichen 50% der Punkte erreichen, während nach dieser Bewertung ein Raten zu durchschnittlich 0 Punkten führt, also tatsächlich Verständnis des Stoffes nötig ist, um genügend Punkte zu erzielen. 8 Wie werden HB-Aufgaben bewertet? Die semantische Korrektheit einer Lösung ist nicht das einzige Qualitätsmerkmal einer Einsendung. Die Einhaltung der Mussregeln und eine ausreichende Kommentierung sind u.a. auch Kriterien, die der Korrektor berücksichtigt. Dies kann im Extremfall dazu führen, dass für eine semantisch korrekte Lösung nur 50% der Punkte vergeben werden. Lösungen in einer anderen Programmiersprache als Pascal werden, ohne Überprüfung der Korrektheit, sofort mit 0 Punkten bewertet. Die von den Korrektoren verwendeten Korrekturrichtlinien haben sich in den letzten Jahren bei mehr als 25.000 Einsendungen (auch für die Studierenden) bewährt. Beachten Sie, dass für die Klausurzulassung nur 30% der Punkte aller HB-Aufgaben benötigt werden. 9 Warum sind meine handbewerteten Aufgaben noch nicht korrigiert? Wir bekommen alle 14 Tage ca. 2000 Einsendeaufgaben zugesendet. Die Korrektoren geben ihr Bestes - die Korrektur kann aber bis zu zwei Wochen dauern, in Ausnahmefällen auch länger. 10 Ich habe eine Mail "es wurden Korrekturen freigegeben." bekommen, aber es ist nur eine von zwei HBAufgaben korrigiert? Die Mail sagt nur aus, dass Korrekturen freigegeben wurden, nicht dass alle Aufgaben schon korrigiert sind. Da viele Korrektoren aufgabenweise korrigieren, ist das durchaus normal. Nach Freigabe der zweiten Korrektur erhalten Sie wieder eine E-Mail. 11 Ich bin mit der Bewertung meiner AB-Aufgaben nicht einverstanden! Die Bewertung ist korrekt. Schauen Sie sich den Punkt 7 dieser FAQ an. 12 Ich bin mit der Bewertung meiner HB-Aufgaben nicht einverstanden! Überprüfen Sie bitte intensiv die Anmerkungen der Korrektoren. Wenn Sie dann noch Fehler in der Bewertung finden, schicken Sie unter Angabe der Matrikelnummer und der Kursnummer eine E-Mail an: [email protected]. Dabei müssen Sie weder Ihre Lösung noch Ihre Korrektur einreichen, ein Hinweis auf die Aufgabe reicht aus. Die Kursbetreuer werden sich Ihre Einsendung ansehen. 13 Meine Lösung funktioniert bei mir lokal, das Übungssystem meldet einen Fehler. Ihre Lösung ist sehr wahrscheinlich fehlerhaft. Überprüfen Sie diese nochmals. Unsere Testumgebungen haben weit mehr als 500.000 Einsendungen verarbeitet, Sie sollten den Ausgaben trauen. Es kann durchaus auch vorkommen, dass eine mit Ihrem eigenen Compiler übersetzte Lösung bei Ihnen scheinbar fehlerfrei funktioniert und das Übungssystem dennoch Fehler aufdeckt. In diesem Fall enthält Ihr Programm Fehler, die bei Ihnen lokal lediglich nicht entdeckt wurden (wie z.B. das Dereferenzieren von NIL oder Bereichsüberschreitungen bei Ausschnittstypen). Häufig liegt es an Compiler-Optionen, ob beim Programmablauf gewisse Fehler erkannt werden oder nicht. Insbesondere Bereichsüberläufe werden nicht erkannt, wenn ein Compiler aus Effizienzgründen auf den Einbau entsprechender Prüfroutinen verzichtet. Mit einer Range Checking-Compileroption lässt er sich i.d.R. dazu bewegen, entsprechende Bereichsprüfungen doch vorzunehmen. 14 Wie stelle ich Schlüsselworte im Übungssystem fett dar? Gar nicht. Eine Hervorhebung der Schlüsselworte ist im Übungssystem nicht möglich und auch nicht nötig (ist auch keine Muss-Regel). 15 Das Übungssystem meldet Syntaxfehler, obwohl keine vorliegen. Achten Sie darauf, dass beim Kopieren Ihrer Lösungen in die Eingabefelder keine unsichtbaren Steuerzeichen mitkopiert werden! Bzw. wenn Sie dieses Problem feststellen, probieren Sie, alle möglicherweise vorhandenen unsichtbaren Zeichen vor dem ersten bzw. nach dem letzten Wort der Einsendung zu löschen und senden Sie erneut ein. 16 Das Übungssystem meldet Syntaxfehler in Zeilen, die zum vorgegebenen Programmrahmen, nicht zu meiner Einsendung gehören! Der Programmrahmen ist korrekt, der Fehler liegt in Ihrer Einsendung. Die Codestelle, an der ein Compiler das Vorliegen eines Fehlers feststellt, muss nicht zwangsläufig diejenige sein, an der logisch gesehen die Fehlerursache liegt. Vergessen Sie beispielsweise das letzte end; zu Ihrer Prozedur, wird der Compiler das nachfolgende Hauptprogramm als Teil Ihrer Prozedur interpretieren und spätestens beim abschließenden end. einen Syntaxfehler melden, da (aufgrund fehlenden Prozedurendes und Hauptprogramms) noch kein Punkt stehen darf. 17 Kann ich auch Fragen per E-Mail stellen? Prinzipiell sollen Sie Ihre Fragen in der Newsgroup stellen. Nur wenn es um individuelle, persönliche Probleme geht, wenden Sie sich per eMail an: [email protected]. 18 Gibt es eine Sammlung alter Klausuraufgaben? Die Aufgabensammlung (früher Kurs 76847) wird nicht mehr in gedruckter Form angeboten. Es gibt eine Sammlung alter Klausuren auf der Internetseite der Fachschaft. 19 Wann sind die Studientage? s. Informationsschreiben. 20 Was sind die Voraussetzungen für die Klausurteilnahme? Für die Zulassung zur Klausur müssen Sie mindestens 50% der Punkte der automatisch bewerteten Aufgaben (über alle Kurseinheiten gesehen), sowie mindestens 30% der Punkte der handbewerteten Aufgaben (über alle Kurseinheiten gesehen) erreichen. 21 Wie melde ich mich zur Klausur an? s. Informationsschreiben. 22 Gilt die Klausurzulassung auch in späteren Semestern? Ja! Eine Klausurzulassung des Kurses 01613 bleibt bis zur nächsten grundlegenden Überarbeitung des Kursinhalts gültig. Bitte beachten Sie, dass falls Sie die Klausur in einem späteren Semester schreiben wollen, Sie den Kurs in dem Semester als Wiederholer belegen müssen, um dann an der Klausur teilnehmen zu können. 23 Ich habe bereits eine Klausurzulassung zu Kurs 1612. Kann ich damit auch an einer 1613-Klausur teilnehmen? Ja! Der Kurs 1613 ist im Wesentlichen eine Teilmenge des ehemaligen Kurses 1612, daher wird die Klausurzulassung anerkannt. Allerdings wird sie von uns nicht automatisch übernommen, weisen Sie uns die Zulassung nach, indem Sie Ihre Zulassungsbescheinigung zum Zeitpunkt der Klausuranmeldung (per Post, Fax oder E-Mail) in Kopie an die Kursbetreuung senden. Beachten Sie außerdem, dass der Kurs 1613 zum WS 08/09 leicht überarbeitet wurde. Haben Sie den Kurs zuletzt vor dem WS 08/09 bearbeitet, empfehlen wir, wenigstens die Abschnitte zu Rekursion und Testen in der aktuellen Fassung zu lesen. 24 Ich habe die Klausurzulassung in einem früheren Semester erworben, das Online-Übungssystem sagt aber, ich sei nicht zugelassen. Die Klausurzulassungsübersicht im Online-Übungssystem zeigt an, ob die im laufenden Semester erzielten Punkte zur Klausurzulassung ausreichen. Bereits bestehende Zulassungen aus früheren Semestern werden nicht angezeigt, sind aber natürlich immer noch gültig. Haben Sie jedoch Ihre Klausurzulassung vor Wintersemester 2005/2006 erreicht (und uns seither nicht nachgewiesen), so schicken Sie uns zum Zeitpunkt der Klausuranmeldung unaufgefordert eine Kopie Ihrer Zulassungsbescheinigung zu. Sollten Sie diese verloren haben, nennen Sie uns Kurs, Matrikelnummer und das Semester, in dem Sie die Zulassung erreicht haben. 25 Wie kann ich mich von der Klausur wieder abmelden? Sie können sich von der Klausur bis zum Klausurtermin unter https://pos.fernuni-hagen.de/ abmelden. 26 Ich habe die Klausurzulassung (laut Übersicht) nicht erreicht, dennoch kann ich mich anscheinend zur Klausur anmelden. Die Anmeldung ist auch dann möglich, wenn laut Übungssystem noch keine Klausurzulassung erreicht wurde, aus guten Gründen: Erstens können sich so auch Kurswiederholer online zur Klausur anmelden, die schon in früheren Semestern die Klausurzulassung erreicht haben, zweitens können sich so auch schon Studenten anmelden, deren Einsendungen noch nicht sämtlich fertig korrigiert sind und die nur deshalb die Klausurzulassung noch nicht erreicht haben. Auch wenn Sie sich ohne Klausurzulassung zur Klausur anmelden können, so ist die Klausurzulassung doch Voraussetzung für den Schein, d.h. nehmen Sie ohne Zulassung an der Klausur teil, können Sie damit keinen Schein erwerben! Beachten Sie weiterhin, dass wir intern nur diejenigen Anmeldungen berücksichtigen, zu denen (zum Zeitpunkt der Erstellung der Teilnehmerlisten, also insb. nach Abschluss der Korrekturen der Einsendeaufgaben) eine Klausurzulassung vorliegt, d.h. wenn Sie nicht zugelassen sind (oder uns eine Zulassung aus einem früheren Semester vor WS 2005/2006 oder eine Zulassung von Kurs 1612 nicht nachgewiesen haben) und sich dennoch angemeldet haben, wird Ihre Anmeldung nicht berücksichtigt. Melden Sie sich daher bitte nur an, wenn Sie die Klausurzulassung erreicht haben (oder wenn, sofern noch nicht alle Korrekturen zu Einsendeaufgaben vorliegen, noch die Möglichkeit besteht, mit den Punkten der noch ausstehenden Korrekturen die Klausurzulassung zu erreichen). 27 Der Klausuranmeldeschluss steht bevor, aber ich habe die Klausurzulassung aufgrund ausstehender Korrekturen noch nicht erreicht? Siehe Antwort zu Frage 26. 28 Ist die Klausurteilnahme Pflicht? Die Klausur dient zum Erwerb eines Leistungsnachweises zum betreffenden Kurs. Sie müssen nur an der Klausur teilnehmen, wenn Sie den Leistungsnachweis (Schein) benötigen. Der Leistungsnachweis in 01613 ist z.B. ein Pflicht-Schein für den Bachelor-Informatik-Studiengang. 29 Ist diese Klausur eine Prüfung? Die Klausur zu 01613 ist lediglich eine Klausur zum Erwerb eines Leistungsnachweises, aber keine Prüfungsleistung. 30 Wie stelle ich meinen Compiler so ein, dass er sich identisch zur Testumgebung im Onlineübungssystem verhält? Der Compiler des Online-Übungssystems ist nicht in jeder Aufgabe gleich eingestellt, daher ist eine dauernde identische Einstellung schwerlich möglich. Insbesondere in früheren Aufgaben ist der Compiler auf weitgehende Standard-Pascal-Kompatibilität eingestellt, da er damit aber den Datentyp String nicht unterstützt, wird er in den meisten späteren Aufgaben weniger restriktiv eingestellt. Folgende Einstellungen halten wir jedoch für sinnvoll: Range Checking sowie Complete Boolean Evaluation. Im Informationsschreiben zum Pascal-Compiler im Online-Übungssystem finden Sie nähere Informationen. Inhaltliche Fragen 31 Fehler in der Musterlösung zu Aufgabe 1A (KE1)? Sind Unterstriche in Bezeichnern erlaubt? Diese Aufgabe sorgt regelmäßig für Diskussionen, da ein Bezeichner wie Beispiel_Program von Compilern wie Turbo Pascal oder Free Pascal akzeptiert wird. Wir weisen jedoch mehrfach darauf hin, dass die im Kurs definierte Syntax bindend ist, und laut Kurstext ist ein Unterstrich in Bezeichnern nicht zulässig. Aus dem Verhalten eines Compilers kann also nicht auf Korrektheit der Lösung geschlossen werden! Vgl. Frage 3 und Frage 32. 32 Warum gibt es Abweichungen zwischen der im Kurs definierten Syntax und der vom Compiler akzeptierten Syntax? Wir richten uns im Kurs weitgehend nach der Syntax von Standard-Pascal. Für die praktische Programmierung wurden von Compilerherstellern teils weitreichende Erweiterungen der Sprache Pascal eingeführt, z.B. das Zulassen von bestimmten Sonderzeichen in Bezeichnern. Da diese Erweiterungen nicht standardisiert sind, haben sich dabei jedoch unterschiedliche Dialekte entwickelt. Dieser Kurs soll nur Konzepte vermitteln, und dazu reicht (ein Ausschnitt von) Standard-Pascal im Wesentlichen völlig aus. Lediglich zum einfacheren Umgang mit Zeichenketten verwenden wir im Kurs mit dem Datentyp String eine Erweiterung des Turbo-Pascal-Dialekts (die sich auch in praktisch allen anderen Dialekten finden dürfte). 33 Fehler in der Musterlösung zu Aufgabe 2C (KE1)? Nein! Alternative C (i/3) ist korrekt. Lesen Sie nach auf Seite 53, "implizite Typanpassung". 34 Warum wird im Kurs Pascal benutzt und nicht eine neuere Sprache wie C++ oder Java? Bei der Programmierausbildung (und nicht nur da) legen wir Wert auf ein konzeptuelles Verständnis und weniger auf rasch veraltendes Spezialwissen, denn man muss sich auch nach dem Studium permanent mit neuen Herausforderungen auseinandersetzen. Im InformatikBerufsfeld langfristig zu bestehen, erfordert daher eine universitäre Ausbildung, die zum einen lehrt, wie man lernt, und zum anderen kurzfristige Zeitströmungen überdauernde Konzepte bereitstellt, deren Allgemeingültigkeit den Einstieg in neue Techniken erleichtert. Nun stellt sich kein gefestigtes konzeptuelles Verständnis ohne praktische Übung ein. Diese unumgängliche praktische Übung erzeugt als Nebeneffekt ein technisches Basiswissen, das auch noch aus einem anderen Grund wichtig ist. Schließlich kann jeder spätere Arbeitgeber von den Absolventen eines Informatikstudienganges in gewissen Umfang aktuelle technische Basiskenntnisse erwarten. Es sei jedoch an die Adresse der Industrie ein klares Wort gerichtet: Wer das immer wieder in Anzeigen geforderte Spezialwissen erfüllt, mag vielleicht unmittelbar einsetzbar sein, hat aber später häufig Mühe, in anderen Einsatzgebieten oder bei gravierenden Neuerungen in seinem Spezialgebiet gleichwertige Leistungen zu erbringen. Auch führt eine zu sehr produktorientierte Ausbildung ohne fundierte Vermittlung der dahinterstehenden Grundlagen zu einer mangelhaften Beurteilungsfähigkeit und kritikloser Übernahme der Werbeversprechen der Anbieterindustrie. Ein Absolvent eines stärker an Grundlagen und Konzepten orientierten Studiums benötigt zwar eine gewisse Anlaufzeit, bis er mit einem Spezialisten konkurrieren kann, wird aber mittelfristig einen erheblich größeren Gewinn für das Unternehmen bedeuten. Die skizzierten Vorstellungen über eine universitäre Programmierausbildung schlagen sich natürlich im Inhalt und Aufbau dieses Kurses nieder. Zunächst einmal sind Qualität und Quantität des Kursmaterials so ausgelegt, dass auch absolute Programmierneulinge – nach universitärem Maßstab – mit ihm zurechtkommen sollten. Studierende mit Programmiererfahrung können sich mit dem Stoff zum Teil deutlich leichter tun. An vielen Universitäten wird derzeit mit der objektorientierten Programmierung und z.B. der Programmiersprache Java begonnen. Unserer Meinung nach ist ein angemessenes Verständnis objektorientierter Programmierkonzepte in einem Anfängerkurs (5 Leistungspunkte, 2+1 SWS) kaum zu vermitteln. Dieser Kurs beginnt deshalb mit elementaren imperativen Konzepten (mit denen sich Anfänger bereits durchaus schwer tun können). Dabei achten wir darauf, dass die vorgestellten imperativen Konzepte und Techniken den Blick für die objektorientierte Programmierung nicht verstellen. Anschließend wird im zweiten Semester der Kurs 01618 Einführung in die Objektorientierte Programmierung (Programmiersprache Java) angeboten. Als Programmiersprache haben wir Pascal gewählt, da sie die einfachste uns bekannte und allgemein verfügbare Programmiersprache ist, mit der sich die vorgestellten Konzepte sauber konkretisieren und praktisch anwenden lassen. Die Sprache ist gut strukturiert, ihre Syntax über Syntaxdiagramme wohldefiniert, und Pascal-Programme sind vergleichsweise gut lesbar. Insbesondere für das Fernstudium hat sich Pascal als erster Einstieg in die Programmierung bewährt, denn Pascal ist leicht zu erlernen und ein Pascal-System kann für den privaten PC billig beschafft und ohne fremde Hilfe leicht bedient werden. Es ist jedoch auf keinen Fall unser Anliegen, Ihnen die Programmiersprache Pascal mit allen ihren Möglichkeiten vollständig nahezubringen. Vielmehr werden wir uns auf diejenigen Pascal-Konstrukte konzentrieren, die zur praktischen Anwendung der vorgestellten elementaren Programmierkonzepte notwendig sind. Die behandelten Konzepte finden sich in allen aktuellen imperativen und den meisten objektorientierten Sprachen (wie z.B. Java) wieder. Einen weiteren Schwerpunkt legen wir auf Aspekte, die für die Entwicklung qualitativ hochwertiger Programme von Bedeutung sind. Wir halten es für wichtig, dass die Anwendung entsprechender Methoden von klein auf, d. h. parallel zu den ersten Programmierversuchen, eingeübt wird. Hierzu gehören ein guter Programmierstil sowie Testverfahren als Teil der analytischen Qualitätssicherung, die das Aufspüren von Fehlern in Programmen zum Ziel haben. Natürlich muss ein Informatiker erheblich weitergehende Programmierkenntnisse und -fertigkeiten besitzen als in diesem Kurs vermittelt werden. Dafür werden Kurse wie z.B. 01618 Einführung in die Objekorientierte Programmierung (Java), 01816 Logisches und funktionales Programmieren (Prolog, Scheme) sowie der weiterführende Kurs 01853 Moderne Programmiertechniken und -methoden angeboten. Zusätzlich gibt es das Programmierpraktikum, in dem Programmierfertigkeiten eingeübt werden. Wie qualitativ hochwertige Software für komplexe Problemstellungen entwickelt wird, ist Gegenstand der Kurse über Software Engineering. Im Praktikum Software Engineering werden diese Kenntnisse auf ein größeres Beispiel angewendet und das Arbeiten im Team geübt. 35 Warum kann mein Compiler kein ParaPascal übersetzen? Weil es sich, und das steht explizit im Kurstext, um eine fiktive Sprache handelt. Im Abschnitt "Prozeduren und Parameterübergabe in Pascal" lernen Sie, wie die ParaPascal Konzepte in Standard-Pascal umgesetzt werden. 36 Ich finde die Mussregeln unangemessen! Die Mussregeln sind einerseits dazu gedacht, den Studierenden von Anfang an einen sauberen Programmierstil beizubringen, zum anderen sorgen sie dafür, dass die Korrektoren Lösungen erhalten, die in vertretbarer Zeit zu korrigieren sind. Im Übrigen sollten Sie auch im Hinblick auf späteres Programmieren im Team lernen, sich auf vorgegebene Richtlinien einzustellen und dafür persönliche Vorlieben zurückzustellen. 37 Warum ist strukturierte Programmierung so wichtig? Lesen Sie im Abschnitt "Strukturierte Programmierung" nach. Nicht-strukturierte Programme sind Hauptursache für unzuverlässige und fehlerhafte Programme. 38 Kann man alles, was unstrukturiert programmiert wurde, auch strukturiert programmieren? Ja! Dies ist ein wichtiger Satz der Berechenbarkeitstheorie. 39 Bei einer Aufgabe zum Whitebox-Test ist eine fehlerhafte Prozedur bzw. Funktion gegeben! Ist das Absicht? Ja. Beim Testen geht es darum, die Existenz von Fehlern nachzuweisen (wozu verglichen wird, ob der Prüfling auf bestimmte Eingaben auch wie erwartet reagiert). In Übungsaufgaben zum Testen gibt daher die Vorgabe eines nicht korrekten Programms, in dem ein Test tatsächlich Fehler aufdecken kann, durchaus Sinn. 40 Woher weiß ich, wann ich in Pascal ein Semikolon setzen muss und wann nicht? Viele Studenten versuchen, sich die Regeln zur Semikolonsetzung zu merken, indem sie prinzipiell nach jeder Anweisung ein Semikolon setzen und sich eine Reihe von Ausnahmen (wie "unnötig aber ungefährlich vor end" oder "auf keinen Fall ein Semikolon vor else") zu merken. Das ist unnötig kompliziert. Die Syntaxdefinition (vgl. Syntaxdiagramme) legt für Semikolons innerhalb von Anwendungsblöcken ganz schlicht und einfach folgendes fest: Bei einer Folge (Aufzählung) von Anweisungen werden die Elemente (Anweisungen) durch Semikolon getrennt. Das erklärt insbesondere, warum vor dem end kein Semikolon stehen muss. Das ist vergleichbar mit der Aufzählung von Elementen einer Menge, z.B.: {1; 3; 8}. Auch dort muss nach der 8 als dem letzten Element der Aufzählung kein Semikolon mehr vor die schließende Mengenklammer gesetzt werden. Zum else: In Pascal ist if Ausdruck then Anweisung else Anweisung eine (zusammengesetzte) Anweisung, daher darf da nirgends ein Semikolon zwischen stehen. Würde hinter dem then-Zweig ein Semikolon eingefügt, so läge eine If-Anweisung ohne Else-Zweig vor und der Compiler würde das darauffolgende else als neue Anweisung interpretieren – was zum Compilerfehler führt, da else keine eigenständige Anweisung ist. All das lässt sich sehr gut aus den Syntaxdiagrammen ablesen. (In anderen Sprachen wie C oder Java wird dagegen das Semikolon nicht als Anweisungstrenner sondern als Anweisungsabschluss verwendet, muss also nach jeder Anweisung stehen, selbst wenn eine "}"-Klammer, das Äquivalent zum "end" in Pascal, folgt.) 41 Sind beim Bilden von Testfällen Grenzen wie maxint zu berücksichtigen? In manchen Einsendeaufgaben geht es um Prüflinge, die z.B. natürliche Zahlen als Eingabedaten entgegennehmen und deren Implementierung hierzu einen Typ wie tNatzahl = 1..maxint verwendet. Die Menge dieser akzeptierten Zahlen von 1 bis maxint ist nun nur eine Teilmenge der natürlichen Zahlen. Da Testdaten lt. Definition nur zulässige Eingabedaten und die zugehörige erwartete Ausgabe enthalten sollen, würde sich zunächst die Frage stellen, was genau mit zulässigen Eingabedaten gemeint ist. Man kann hier eher technisch argumentieren und die plattformspezifischen, technisch aufgezwungenen Grenzen wie maxint berücksichtigen, oder man kann von der allgemeineren Problembeschreibung, die noch keine solche Grenzen berücksichtigt, ausgehen. Um die Vorstellung der einzelnen Konzepte nicht unnötig kompliziert zu machen, wurde im gesamten Kurs i.d.R. auf die explizite Berücksichtigung solcher Grenzen verzichtet. Unsere Problemspezifikationen vernachlässigen solche rein technischen Grenzen, nur die Implementierung hängt natürlich davon ab. In den Testfällen beziehen wir uns, was den gültigen Ein- und Ausgaberaum angeht, auf die allgemeinere Problemspezifikation (vgl. diverse Beispiele im Kurs). Auch in den Einsendeaufgaben ist i.A. eine allgemeinere Problemspezifikation gegeben, und die Testdaten sind darauf zu beziehen. Wie bei den Implementierungsaufgaben auch (siehe auch "Wichtige Mitteilungen der Kursbetreuung") sind also Grenzen wie maxint zu vernachlässigen, sofern die Aufgabenstellung nicht explizit etwas anderes verlangt. Im realen Einsatz kann es dagegen durchaus sinnvoll sein – gerade im Hinblick auf eine Grenzwertanalyse –, auch solche Grenzen zu berücksichtigen. Eine Besonderheit dabei ist jedoch, dass diese Grenzen abhängig von der gewählten Zielplattform sind, d.h. die konkreten Testdaten erst dann bestimmt werden können, wenn die Plattform und damit die konkreten Grenzwerte wie maxint auch feststehen. 42 Welches Ergebnis wird in Testdaten angegeben? Testdaten enthalten (neben den Eingabedaten) das laut Spezifikation erwartete Ergebnis. Das tatsächliche Ergebnis dagegen kennt man im Normalfall erst nach dem Testlauf – sofern man es nicht bereits durch eine statische Analyse herausfindet, wodurch sich jedoch der Test erübrigen würde. Zur Idee der Ergebnisangaben in Testdaten: Um Tests durchzuführen, wird der Prüfling ausgeführt und mit Eingabedaten gefüttert. Dann wird verglichen, ob das unter diesen Eingaben von ihm "ausgespuckte" Ergebnis auch richtig ist. Um nun nicht einfach zufällig und unsystematisch zu testen, werden im Vorfeld der eigentlichen Testausführung verschiedene Klassen von Testdaten (Testfälle) gebildet, aus denen Repräsentanten zum Test herangezogen werden. (Dazu werden im Kurs viele verschiedene Whitebox- und Blackbox-Strategien vorgestellt). Würden wir nur die Eingabedaten in diesen Testdaten sammeln, so müsste der Tester, der den Prüfling startet und diese Daten eingibt, nach jedem Testlauf selbst beurteilen, ob das Ergebnis zu den Eingaben passt oder nicht. Dazu müsste er wissen, was der Prüfling eigentlich leisten soll, also seine Spezifikation kennen. Diesen Vorgang der Ableitung aus der Spezifikation, was eigentlich bei gegebenen Eingabedaten für ein Ergebnis herauskommen soll, verlagern wir nun ebenfalls in die Testvorbereitungsphase und nehmen das erwartete Ergebnis mit in die Testdaten auf. Das heißt: Jedes Testdatum enthält nicht nur die Eingabedaten für einen Testlauf, die der Tester bei der Ausführung in den Prüfling eingeben muss, sondern es sagt dem Tester auch, welches Ergebnis herauskommen soll. Dieses muss er dann nur noch mit der tatsächlichen Ausgabe vergleichen. Damit ist die eigentliche Testausführung ein ganz stumpfer Prozess ("Führe Prüfling mit Eingaben aus Testdatum aus und vergleiche die tatsächliche Ausgabe des Prüflings mit erwarteter Ausgabe aus Testdatum. Melde gefundenen Fehler, falls tatsächliche ungleich erwarteter Ausgabe."), der auch durch einen Computer übernommen, also automatisiert werden kann.