Softwareentwicklungsaufgaben stellen eine große Herausforderung für den Einsatz von comu putergestützten Lernsystemen dar, da sie dem Programmierer immer einen sehr großen Spielraum für individuelle Lösungen eröffnen. Dieser Spielraum ergibt sich vor allem dadurch, dass typischerweise zwischen mehreren alternativen Lösungsstrategien gewählt werden kann, für die es dann wiederum zahlreiche Implementierungsvarianten gibt. Möchte man diesen Spielraum nicht durch entsprechende Vorgaben künstlich einengen, muss das Lehrsystem in die Lage versetzt werden, den Raum korrekter Lösungen möglichst vollständig abzubilden. Hierfür eignen sich constraint-basierte Modellierungsansätze besonders gut. Constraint-Verletzungen können dann als diagnostische Information über Mängel in der Lösung interpretiert werden. Damit das System in einem solchen Fall hilfreiche Hinweise zur Fehlerkorrektur geben kann, müssen Fehlererklärungen und Korrekturhinweise immer sehr genau auf die jeweils vom Nutzer gewählte Lösungsstrategie zugeschnitten sein. Andernfalls besteht die Gefahr gravierender Missverständnisse. Die im Rahmen des Projektes entwickelte und evaluierte Diagnosestrategie ist die erste, die sich dieser Probleme in systematischer Weise annimmt. Die prototypische Systemrealisierung, die nunmehr vorliegt, konzentriert sich auf Aufgabenstellungen aus der Logikprogrammierung, die sich wegen ihres deklarativen Charakters besonders gut für eine statische Diagnose am Programmtext eignet, gleichzeitig aber auch prozedurale Elemente einschließt. Große Lösungsräume lassen sich nicht mehr allein durch die Aufzählung von Musterlösungen beschreiben. An deren Stelle treten in dem hier realisierten Ansatz generalisierte Programmschemata, die jeweils einer Lösungsstrategie entsprechen. Deren obligatorische Elemente lassen sich unter Verwendung von Constraints auf die gegebene Schülerlösung abbilden. Constraint-Verletzungen geben Hinweise auf das Fehlen bzw. die fehlerhafte Verwendung bestimmter Lösungselemente. Es hat sich gezeigt, dass sich durch die explizite Modellierung von Lösungsstrategien fehlerhafte Diagnosen weitgehend vermeiden lassen. Gleichzeitig bietet die Verwendung generalisierter Programmschemata eine gute Grundlage zur Erweiterung der Aufgabenbasis auch durch Nichtspezialisten. Durch die explizite Behandlung alternativer Lösungsstrategien ergibt sich jedoch eine neue Quelle für diagnostische Mehrdeutigkeit: Zusätzlich zur Auswahl zwischen konkurrierenden Interpretationsvarianten besteht nunmehr auch die Notwendigkeit zur Identifizierung der durch den Studierenden jeweils intendierten Lösungsstrategie. Ohne geeignete Kompensationsmaßnahmen würde dies zu einer Vielzahl von alternativen, allerdings überwiegend irrelevanten und damit irreführenden Fehlerbeschreibungen führen. Um dennoch präzise Diagnoseergebo nisse bereitstellen zu können, wurde der constraint-basierte Ansatz um eine heuristische Komponente in Form von Constraint-Gewichten erweitert. Diese Gewichte dienen nicht nur zur Auswahl einer plausiblen Lösungsstrategie, sondern auch zur Sortierung der Fehlerhinweise nach ihrer Relevanz. Der Prototyp wurde sowohl off-line unter Verwendung von Klausurlösungen aus vergangenen Jahren, als auch on-line im Rahmen der Präsenzlehre evaluiert. Dabei konnte die jeweils gewählte Lösungsstrategie in 87.9% aller Fälle korrekt ermittelt werden. 92.7% der Fehler wurden richtig diagnostiziert. Im Vergleich zu einer Kontrollgruppe, die die gleichen Aufgaben bearbeitet haben, konnten die Nutzer des Lernsystems ihre Programmierfertigkeiten bereits nach einer ca. einstündigen Nutzung signifikant verbessern. Dabei lag der Leistungszuwachs mit einer Effektstärke (Cohen’s d) von ca. 0.3 Standardabweichungen höher als in der Kontrollgruppe. Durch die Ergebnisse das Projekts konnte gezeigt werden, dass auf der Basis eines Constraintbasierten Diagnoseansatzes auch in strukturell sehr anspruchsvollen Aufgabengebieten wie der Programmierung, für die eine Vielzahl von Lösungsalternativen charakteristisch ist, qualitativ hochwertige und für den Schüler hilfreiche Fehlererklärungen ermittelt werden können. Als Grundlage der Fehlerdiagnose kommen dabei ausschließlich Bedingungen für die Korrektheit einer Lösung zur Anwendung, so dass sich eine Antizipation der möglichen Fehler vollständig erübrigt. Damit wird ein wesentlicher Nachteil alternativer Diagnosetechniken überwunden, der darin besteht, dass selbst bei einer Beschränkung auf typische Fehlerfälle eine hinreichend vollständige Erfassung der erforderlichen Fehlerinformation für jede einzelne Aufgabenstellung mit einem extrem hohen Erarbeitungsaufwand verbunden ist. Das derzeitige Prototypsystem verwendet generalisierte Programmschemata als zentrales Mittel zur Modellierung der Korrektheitsforderungen. Die Abbildung auf die Lösung des Schülers erfolgt dann mit Hilfe von gewichteten Constraints und unter Zuhilfenahme von Regeln für Aquivalenztransformationen. Dadurch, dass das System von den Komponenten der generalisierten Programmschemata auf die notwendigen Elemente der Schülerlösung schließt, beschränkt sich seine Erklärungsfähigkeit im wesentlichen auf syntaktische Abweichungen von den Modellforderungen, z.B. zur Existenz bestimmter Programmierkonstrukte. Eine Begründung zu deren Notwendigkeit kann derzeit jedoch noch nicht gegeben werden. Hierzu wäre eine entsprechende Anreicherung der generalisierten Programmschemata oder aber eine (fehlersensitive) semantische Modellierung der abstrakten Maschine erforderlich. Die hierfür benötigten wissenschaftlich-technischen Grundlagen, sowie das Zusammenspiel mit einer eher form-basierten Diagnose sollten daher Gegenstand künftiger Forschungsarbeiten sein.