<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="de">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">Haben wir Programmverstehen schon ganz verstanden?</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author role="corresp">
							<persName><forename type="first">Rainer</forename><surname>Koschke</surname></persName>
							<email>koschke@tzi.de</email>
							<affiliation key="aff0">
								<orgName type="department">Rebecca Tiarks Arbeitsgruppe Softwaretechnik Fachbereich Mathematik</orgName>
								<orgName type="institution">Informatik Universität Bremen</orgName>
								<address>
									<addrLine>Postfach 33 04 40</addrLine>
									<postCode>28334</postCode>
									<settlement>Bremen</settlement>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">Haben wir Programmverstehen schon ganz verstanden?</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">8002B6DBC5F27930D1E0380E7082ED84</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-24T23:31+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>Langlebige Systeme müssen kontinuierlich von Entwicklern angepasst werden, wenn sie nicht an Wert verlieren sollen. Ohne ausreichendes Verständnis des Änderungswunsches und des zu ändernden Gegenstands kann die Anpassung nicht effizient und effektiv vorgenommen werden. Deshalb ist es wichtig, das System so zu strukturieren, dass Entwickler es leicht verstehen können. Methoden und Werkzeuge müssen bereitgestellt werden, um die Aktivitäten bei der Änderung zu unterstützen. Dazu ist ein umfassendes Verständnis notwendig, wie überhaupt Entwickler Programme verstehen.</p><p>In diesem Beitrag geben wir eine Übersicht über den Stand der Wissenschaft zum Thema Programmverstehen und identifizieren weiteren Forschungsbedarf.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="de">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1">Einf ührung</head><p>Die Möglichkeit zur kontinuierlichen Wartung ist die Voraussetzung für langlebige Systeme, weil nur stete Anpassungen an geänderte Rahmenbedingungen Software nützlich erhält. Eine Reihe von Studien zeigt, dass die meisten Ressourcen in der Softwareentwicklung gerade in der Wartung und nicht für die initiale Erstellung von neuen Systemen verwendet werden <ref type="bibr" target="#b1">[AN91,</ref><ref type="bibr" target="#b3">Art88,</ref><ref type="bibr" target="#b28">LS81,</ref><ref type="bibr" target="#b30">Mar83]</ref>. In der Wartung werden Fehler beseitigt, umfassende Restrukturierungen vorgenommen oder neue Funktionalität eingebaut.</p><p>Wartbarkeit ist keine absolute Eigenschaft eines Systems; sie hängt neben inneren Eigenschaften des Systems immer ab von der Art der Änderung und nicht zuletzt auch von den Entwicklern, die sie durchführen sollen. So können manche Entwickler eine Änderung schnell vornehmen, während andere dafür sehr viel mehr Zeit benötigen. Diese Unterschiede ergeben sich aus unterschiedlichen kognitiven Fähigkeiten, Vertrautheit mit dem System und Erfahrung in der Wartung, aber auch durch unterschiedliche Vorgehensweisen.</p><p>Wenn wir also bei langlebigen Systemen für nachhaltige Wartbarkeit sorgen wollen, müssen wir nicht nur zukünftige Änderungen beim initialen Entwurf antizipieren, sondern das System auch so strukturieren und dokumentieren, dass die zukünftigen Wartungsentwickler in der Lage sind, das System für den Zweck ihrer Änderung soweit zu verstehen, dass sie es anpassen und testen können. Dies erfordert ein grundlegendes Verständnis, wie Entwickler Programme überhaupt verstehen. Wenn dieser Verstehensprozess ausreichend verstanden ist, können wir für verständnisfördernde Systemstrukturen sorgen und Wartungsentwicklern effektive und effiziente Methoden und Werkzeuge bereitstellen. Diese sollten sich nach dem jeweiligen Wartungsziel richten, um sowohl die korrektive als auch die adaptive Wartung optimal unterstützen zu können.</p><p>Die Forschung hat sich deshalb dem Thema Programmverstehen intensiv gewidmet. Jedoch flachte das Interesse nach einer Blütezeit in den Achtziger Jahren, in der vorwiegend Theorien über kognitive Strategien entwickelt wurden, wieder ab. Hin und wieder erscheinen auch in den letzten Jahren einzelne Publikationen zu diesem Thema. Dennoch können wir nicht belastbar behaupten, die Forschungsagenda, die im Jahre 1997 bei einem internationalen Workshop zu empirischen Studien in der Softwarewartung aufgestellt wurde, abgearbeitet zu haben <ref type="bibr" target="#b21">[KS97]</ref>. Die dort speziell in Bezug auf Entwickler geäußerten offen Fragen lauten: In diesem Beitrag geben wir eine Übersicht über den Stand der Wissenschaft zum Thema Programmverstehen und identifizieren weiteren Forschungsbedarf. Die folgende Darstellung zum Stand der Forschung im Programmverstehen gliedern wir in drei Themenfelder:</p><p>• Untersuchung von kognitiven Aspekten: In dieser Kategorie geht es um die Frage, wie ein Entwickler bzw. eine Entwicklerin vorgeht, wenn er oder sie ein Programm verstehen möchte.</p><p>• Entwicklung von Hilfsmitteln: Dieses Feld befasst sich mit der Frage, wie Werkzeuge beim Programmverstehen helfen können und wie diese aussehen sollten.</p><p>• Bisherige empirische Studien: Hier fassen wir frühere Studien zusammen, die empirisch neue Technologien und Werkzeuge sowie kognitive Aspekte untersuchten.</p><p>2 Untersuchung von kognitiven Aspekten Ein Verfechter des Top-Down-Modells ist Brooks <ref type="bibr" target="#b6">[Bro83]</ref>. Die Grundlage seines Modells des Programmverstehens bilden drei Pfeiler:</p><p>• Der Programmierprozess ist eine Konstruktion von Abbildungen von einem Anwendungsbereich über ein oder mehrere Zwischenbereiche auf einen Programmierbereich.</p><p>• Der Verstehensprozess umfasst die Rekonstruktion von allen oder Teilen dieser Abbildungen.</p><p>• • Die Wissensbasis beinhaltet Fachwissen, Wissen über den Problembereich, Stilregeln, Pläne und Ziele.</p><p>• Das mentale Modell beschreibt das gegenwärtige Verständnis des Programmierers über das Programm.</p><p>• Der Prozess des Wissenserwerbs gleicht Quellcode und Dokumentation mit der Wissensbasis ab. Dadurch entwickelt sich das mentale Modell weiter. Der Prozess kann sowohl top-down als auch bottom-up erfolgen.</p><p>Nach Letovsky <ref type="bibr" target="#b23">[Let86]</ref> gibt es drei Arten von Hypothesen:</p><p>• Warum-Vermutungen fragen nach dem Zweck eines Code-Fragments.</p><p>• Wie-Vermutungen fragen nach der Umsetzung eines Zwecks.</p><p>• Was-Vermutungen fragen nach, was etwas ist und was es tut (z. Auf Basis unserer Literaturstudie zum Thema Programmverstehen formulieren wir die folgenden offenen Fragen, die zukünftige Forschung adressieren sollte:</p><p>• Vorgehensweisen: Wie gehen Programmierer -abhängig von der Art ihrer Aufgabe -genau vor, wenn sie Programme ändern sollen? Aus welchen Einzelaktivitäten besteht der Programmverstehensprozess für welche Art von Aufgaben? Welche Informationen werden abhängig von der Aufgabe benötigt? Warum gehen Programmierer so vor? Worin unterscheiden sich die Vorgehensweisen unterschiedlicher Programmierer? Welche Vorgehensweisen führen eher zum Erfolg?</p><p>• Aufwand: Wie hoch ist der Aufwand des Programmverstehens in der Wartungsphase im Verhältnis zu Änderung und Test? Wie hoch ist der Aufwand der Einzelaktivitäten des Programmverstehens? Wie hoch sind die Kosten, wenn bestimmte Informationen fehlen?</p><p>• Werkzeuge: Wie werden moderne Entwicklungswerkzeuge beim Programmverstehen benutzt? Wie gut eignen sie sich für ihren Zweck? Wie lassen sie sich verbessern? Für welche Aspekte existiert noch unzureichende Werkzeugunterstützung? Welches Wissen kann kaum von Werkzeugen verwaltet werden?</p><p>• Methoden: Was sind gut geeignete Vorgehensweisen beim Programmverstehen für wiederkehrende Aufgabenarten? Welche Informationen und Werkzeuge sind geeignet, um diese Vorgehensweisen zu unterstützen?</p><p>• Code-Strukturen: Welche Auswirkungen haben die Bad Smells von Beck und Fowler auf das Programmverständnis?</p><p>• Einfluss von Architektur Wie wird Architektur in der Praxis dokumentiert? Wie wird sie von Programmierern benutzt? Welche Probleme gibt es für den Austausch des Architekturwissens?</p><p>• Wissenschaftliche Methoden: Welche Methoden aus den Sozial-und Kognitionswissenschaften und der Psychologie lassen sich für die Forschung im Programmverstehen wie übertragen? Wie können empirische Beobachtungen und Experimente durch Softwaresysteme unterstützt werden?</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_2"><head></head><label></label><figDesc>Der Rekonstruktionsprozess wird durch Erwartungen geleitet, d.h. durch das Aufstellen, Bestätigen und Verfeinern von Hypothesen. Beim Verstehensprozess werden die Abbildungen, die bei der Entwicklung des Programms als Grundlage dienten, rekonstruiert. Die Menge von Abbildungen und ihre Abhängigkeiten untereinander sind baumähnlich aufgebaut. Hypothesen sind Annahmen über diese Abhängigkeiten. Die primäre Hypothese bildet die Wurzel. Sie beschreibt, was das Programm nach dem gegenwärtigen Verständnis des Programmierers tut. Das Verfeinern der primären Hypothese führt zu einer Kaskade von ergänzenden Hypothesen. Dieser Prozess wird so-</figDesc><table /><note>lange fortgeführt, bis eine Hypothese gefunden ist, die präzise genug ist, um sie anhand des Codes und der Dokumentation zu verifizieren oder zu falsifizieren. Präzise genug heißt, dass die Hypothese Abläufe oder Datenstrukturen beschreibt, die mit sichtbaren Elementen im Quellcode oder der Dokumentation in Zusammenhang gebracht werden können. Diese sichtbaren Elemente werden mit dem Begriff Beacons beschrieben. Ein typischer Beacon für das Sortieren in einem Datenfeld wäre z.B. ein geschachteltes Paar von Schleifen, in denen zwei Elemente miteinander verglichen und vertauscht werden<ref type="bibr" target="#b6">[Bro83]</ref>.Ein weiteres Modell, das aus einer Kombination der beiden vorherigen Modelle besteht, ist das wissensbasierte Modell von Letovsky<ref type="bibr" target="#b23">[Let86]</ref>. Es geht davon aus, dass Programmierer sowohl top-down als auch bottom-up vorgehen. Es besteht aus drei Komponenten:</note></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_3"><head></head><label></label><figDesc>B. eine Funktion, die eine Variable setzt).Das integrierte Metamodell von Mayrhauser und Vans<ref type="bibr" target="#b51">[vMV95]</ref> ist ebenso eine Synthese der bereits erläuterten Modelle. Es besteht aus drei Komponenten, die Verstehensprozesse darstellen und verschiedene mentale Repräsentationen von Abstraktionsebenen enthalten. Die vierte Komponente bildet die Wissensbasis, die die Informationen für den Verstehensprozess bereit stellt und diese speichert.In allen Modellen lassen sich gemeinsame Elemente wiederfinden. So verfügt ein Programmierer über Wissen aus zwei Bereichen: das allgemeine und das systemspezifische Softwarewissen. Das allgemeine Wissen ist unabhängig von einem konkreten System, das verstanden werden soll, und umfasst Kenntnisse über Algorithmen, Programmiersprachen und allgemeine Programmierprinzipen. Das systemspezifische Wissen hingegen repräsentiert das gegenwärtige Verständnis des spezifischen Programms, das der Programmierer betrachtet. Während des Verstehensprozesses erwirbt der Programmierer weiteres systemspezifisches Wissen, jedoch kann ebenso zusätzliches allgemeines Wissen nötig sein<ref type="bibr" target="#b51">[vMV95]</ref>. Der Prozess des Programmverstehens gleicht neu erworbenes Wissen mit Bestehendem ab und prüft, ob zwischen beiden eine Beziehung besteht, d.h. ob sich bekannte Strukturen im neuen Wissen befinden. Je mehr Korrelationen erkannt werden, desto größer ist das Verständnis, und es bildet sich ein mentales Modell. Das mentale Modell beim Programmverstehen ist eine interne Repräsentation der betrachteten Software und setzt sich aus statischen und dynamischen Elementen zusammen<ref type="bibr" target="#b51">[vMV95]</ref>.Computergestützte Hilfsmittel können beim Programmverstehen von großem Nutzen sein, indem sie Programmierern helfen, Informationen herzuleiten, um daraus Wissen auf einem höheren Abstraktionsniveau zu schaffen.Reverse-Engineering ist ein wichtiger Begriff im Zusammenhang mit der Unterstützung des Programmverstehens. Nach Chikofsky und Cross<ref type="bibr" target="#b7">[CC90]</ref> ist Reverse-Engineering der Analyseprozess eines Systems, um die Systemkomponenten und deren Beziehungen zu identifizieren. Das Ziel des Reverse-Engineerings ist es, ein Softwaresystem zu verstehen, um das Korrigieren, Verbessern, Umstrukturieren oder Neuschreiben zu erleichtern [Rug92]. Reverse-Engineering kann sowohl auf Quellcodeebene als auch auf Architekturoder Entwurfsebene einsetzen. Die maschinelle Unterstützung von Programmverstehen ist Gegenstand der aktiven Forschung. Die resultierenden Werkzeuge lassen sich in drei Kategorien einteilen [TS96]: Werkzeuge zur Extraktion, zur Analyse und zur Präsentation. Werkzeuge, die sich mit der Extraktion von Daten befassen, sind beispielsweise Parser. Analysetools erzeugen Aufrufgraphen, Modulhierarchien oder Ähnliches mit Hilfe von statischen und dynamischen Informationen. Bei der statischen Analyse werden die Informationen über ein Programm aus dem zugrunde liegenden Quelltext extrahiert. Im Gegensatz dazu wird bei der dynamischen Analyse das Programm mit Testdaten ausgeführt. Zu den Tools, die sich mit der Präsentation der Informationen befassen, gehören Browser, Editoren und Visualisierungswerkzeuge. Moderne Entwicklungsumgebungen und Reverse-Engineering-Werkzeuge vereinen oft Eigenschaften aus mehreren Kategorien in einem integrierten Werkzeug. Neuere Ansätze befassen sich außerdem mit der Integration von auditiver Unterstützung in moderne Entwicklungsumgebungen [HTBK09, SG09]. Es ergeben sich verschiedene Anforderungen an die Werkzeuge, die das Programmverstehen unterstützen sollen. Nach Lakhotia [Lak93] sollte ein Werkzeug die partielle Rekonstruktion des System-Designs ermöglichen. Singer et al. [SLVA97] identifizieren drei wichtige Funktionen, die ein Werkzeug bieten sollte. Zum einen sollte es dem Benutzer ermöglichen, nach Artefakten im Programm zu suchen, und zum anderen sollte das Werkzeug die Abhängigkeiten und Attribute der gefundenen Artefakte in geeigneter Form darstellen können. Um bereits gefundene Informationen zu einem späteren Zeitpunkt wie-derverwenden zu können, sollte das Werkzeug außerdem die Suchhistorie speichern. Einen weiteren wichtigen Aspekt formulieren Mayrhauser und Vans [vMV93]: ein Werkzeug sollte die verschiedenen Arbeitsweisen von Programmierern unterstützen, statt die Aufgaben im gesamten Wartungsprozess fest vorzugeben. Leider ist festzuhalten, dass bisherige empirische Studien zur Eignung von Werkzeugen für das Programmverstehen oft nur mit einer geringen Anzahl von Teilnehmern und an kleineren Systemen durchgeführt wurden. Außerdem stehen bei den meisten Untersuchungen die Werkzeuge im Vordergrund und nicht die Verhaltensweisen und kognitiven Prozesse der Programmierer. Der steigende Bedarf an weitreichenderen Werkzeugen, die ein Benutzermodell entwickeln und den Entwickler somit besser proaktiv unterstützen können, erfordert jedoch mehr empirische Grundlagen auf diesem Gebiet. 4 Bisherige empirische Studien Sobald der Nutzen einer Methode, einer Theorie oder eines Werkzeugs von menschlichen Faktoren abhängt, sind Studien und Experimente mit Menschen erforderlich. In Bezug auf das Programmverstehen sind empirische Studien sowohl für die Erforschung kognitiver Aspekte als auch für die Entwicklung von unterstützenden Anwendungen wichtig. Sie bieten die einzige Möglichkeit, Hypothesen systematisch zu bestätigen oder zu widerlegen, da mathematische Beweisführung für dieses Feld nicht in Frage kommt [Tic98, RR08]. Eine Reihe von Experimenten zum Programmverstehen beschreiben Mayrhauser und Vans [vMV95]. Die meisten dokumentierten Versuche beziehen sich allerdings auf kleine Programme mit einigen hundert Zeilen Code. Es stellt sich die Frage, ob die Ergebnisse auch für größere Programme geltend gemacht werden können. Außerdem fehlen Aussagen über die Anwendung von Fachkenntnissen, da den meisten Untersuchungen lediglich Wissen über die statische Struktur eines Programms zu Grunde liegt. Ein großer Teil der Erkenntnisse stammt zudem von Studien, die bereits über zehn Jahre zurück liegen, aber bisher nicht wieder bestätigt oder widerlegt worden sind; so z.B. auch die Ergebnisse von Fjeldstad und Hamlen [FH79]. Bei den neueren Studien stellt sich die Frage nach der externen Validität und der statistischen Signifikanz, da sie auf einer starken Vereinfachung des Umfelds beruhen. So wurden bei der Untersuchung von Ko et al. [KDV07] beispielsweise nur ein Entwickler in einem einzelnen Unternehmen beobachtet. Murphy et al. [MN97] begründen den Nutzen der Reflektionsmethode anhand einer Fallstudie, an der nur ein Programmierer beteiligt war. Außerdem sind viele der Studien nur auf ein Werkzeug oder eine Programmiersprache beschränkt (z.B. Eclipse: [SDVFM05, KAM05, LOZP06], Java: [DH09b], C++:[MW01]. Die Resultate aus der Studie von Soloway und Ehrlich [SE84] belegen, dass Programmierer Programme besser verstehen, wenn sie mit bestimmten Konzepten erstellt worden sind und sie bestimmten Programmierrichtlinien folgen, jedoch waren die verwendeten Programme kurze, künstlich erstellte Code-Fragmente, so dass sich wieder die Frage nach der Übertragbarkeit auf große Programme stellt. Littman et al. [LPLS86] haben Wartungsprogrammierer beobachtet und dabei festgestellt, dass diese entweder einer opportunistischen oder einer systematischen Vorgehensweise folgen. Die Programmierer, die systematisch versucht haben, den Code zu verstehen, konnten ein mentales Modell des Programms aufbauen. Dadurch waren sie erfolgreicher bei der Umsetzung von Änderungen im Code. Ergebnisse zur Nützlichkeit von Werkzeugen stammen von Bennicke und Rust [BR04]. Die Experimente belegen, dass der Einsatz von Werkzeugen dazu führen kann, dass die Wartung effizienter und effektiver wird. Auch die Ergebnisse von Storey et al. [SWM00] zeigen, dass die drei von ihnen verglichenen Werkzeuge die bevorzugten Verstehensstrategien der Programmierer beim Lösen der gestellten Aufgabe unterstützen. Aktuellere Experimente haben sich mit der Frage befasst, inwieweit eine auditive Unterstützung, neben der visuellen, beim Programmverstehen hilfreich sein kann [SG09, HTBK09]. Sie belegen, dass der Einsatz von auditiven Informationen den Verstehensprozess positiv beeinflusst. Eine Studie von Robillard et al. [RCM04] befasst sich mit den Kennzeichen effektiven Programmverstehens, also mit der Frage, inwieweit Strategien beim Programmverstehen Einfluss haben auf den Erfolg einer Änderungsaufgabe. Die Ergebnisse belegen zwar, dass systematisches Vorgehen beim Programmverstehen bessere Erfolgsquoten bei der Änderungsaufgabe erzielt als das zufällige Vorgehen; allerdings waren bei dem Experiment nur fünf Programmierer beteiligt. Weitere Studien untersuchen Behauptungen über den positiven Einfluss bestimmter neuer Techniken auf das Programmverstehen. Beispiele für diese Kategorie von Studien sind die Arbeiten von Prechelt et al. [PULPT02] über den Einfluss von Dokumentation von Entwurfsmustern, von Arisholm et al. [AHL06] über den Einsatz von UML sowie von Murphy et al. [MWB98] über den Einfluss von aspektorientierten Konzepten auf Aktivitäten in der Wartung. Ein weiterer Mehrwert dieser Studien über die Überprüfung einer konkreten Hypothese hinaus ist der Beitrag zur empirischen Methodik. Sie adaptieren und verfeinern allgemeine empirische Methoden für konkrete Untersuchungen im Bereich Programmverstehen. Arbeiten zur empirischen Methodik finden sich unter anderem bei Di Penta et al. [PSK07, LP06]. Mit den individuellen Unterschieden von Programmierern befasst sich eine Studie von Crosby et al. [CSW02]. Sie untersucht, welchen Einfluss der Wissensstand eines Programmierers auf das Erkennen der von Brooks [Bro83] identifizierten Beacons hat. Demnach erkennen erfahrenere Programmierer eher die sogennanten Beacons und finden dadurch schneller die für das Verständnis wichtigen Teile im Quelltext. Nach Höfer und Tichy [HT06] fehlen allerdings empirische Untersuchungenen zu den individuellen Eigenschaften von Programmierern, die neben der Softwaretechnik auch andere Disziplinen wie Sozialwissenschaften und Psychologie miteinbeziehen. Eine Untersuchung von Ko [Ko03] belegt, dass die Erfahrung eines Programmierers Einfluss hat auf die Strategie, die er anwendet, wenn er mit einer unbekannten Programmierumgebung und Programmiersprache konfrontiert ist. Die Ergebnisse zeigen auch, dass für Wartungsarbeiten im Bereich der Fehlerbeseitigung das systemspezifische Wissen eher von Bedeutung ist als die Erfahrung eines Programmierers. Wie Programmierer vorgehen, wenn sie nach einer Unterbrechung eine Aufgabe erneut aufnehmen und somit sich somit an bereits erlangtes Wissen erinnern müssen, beschreibt eine Studie von Parnin und Rugaber [PR09].Das Ziel, den Aufwand der Wartung und damit die Gesamtkosten der Softwareentwicklung zu reduzieren, hat den Anstoß zu einer Reihe von Untersuchungen zum Programmverstehen gegeben. Diesen Studien liegen jedoch hauptsächlich Experimente mit relativ kleinen Programmen zu Grunde. Die meisten Untersuchungen wurden zudem nur mit einer kleinen Anzahl von Teilnehmern durchgeführt, wodurch sich die Frage nach der Verallgemeinerbarkeit der Ergebnisse stellt. Es fehlen Aussagen zu größeren Systemen sowie eine klare Methodologie für das Programmverstehen, die methodisches Vorgehen nach der Wartungsaufgabe differenziert. Außerdem liegen viele der Studien bereits Jahrzehnte zurück, und die heutige Gültigkeit der Ergebnisse angesichts moderner Programmiersprachen und Entwicklungsumgebungen steht in Frage. Die Trends der heutigen Softwareprojekte, wie z.B. das stärkere Einbinden von Open-Source-Komponenten, die zunehmende Verteilung der Entwickler oder die kürzeren Entwicklungszyklen, haben auch zu neuen Erkenntnisse über die Entwicklungsmethoden, die Eigenschaften der entwickelten Programme und das Verhalten der Entwickler geführt. Das hinterfragt zusätzlich die früheren Erkenntnisse über das Programmverstehen und erhöht den Bedarf nach aktuellen, detaillierten und signifikanten Untersuchungen.</figDesc><table><row><cell>mentare das Programmverstehen unterstützen können. Weitere Studien über den Nutzen</cell></row><row><cell>von Dokumentation stammen unter anderem von [BC05, DH09a, DH09b, SPL + 88]. Alle</cell></row><row><cell>Untersuchungen haben gezeigt, dass verschiedene Codecharateristika das Programmver-</cell></row><row><cell>stehen beeinflussen.</cell></row><row><cell>Inwieweit sich geschlechtsspezifische Unterschiede bei der räumlichen Wahrnehmung auf</cell></row><row><cell>den Verstehensprozess übertragen lassen, untersuchen Fisher et al. [FCZ06] basierend auf</cell></row><row><cell>der Hypothese von Cox et al. [CFO05], dass sich zwischen dem Programmverstehen und</cell></row><row><cell>der Raumkognition Gemeinsamkeiten identifizieren lassen. Diese Studie ist eine der weni-</cell></row><row><cell>gen, die explizit die Unterschiede des Programmverstehens hinsichtlich des Geschlechtes</cell></row><row><cell>betrachtet.</cell></row><row><cell>5 Fazit</cell></row><row><cell>Die Frage nach dem Einfluss von verschiedenen Codecharakteristika auf das Programm-</cell></row><row><cell>verstehen hat in den letzten Jahren zu einer Reihe von Untersuchungen geführt. Eine ältere</cell></row><row><cell>Studie von Arab [Ara92] untersucht, inwieweit die Formatierung von Quelltext und Kom-</cell></row></table><note>Man unterscheidet beim Programmverstehen zwischen zwei Strategien: die opportunistische und die systematische Vorgehensweise. Bei einem systematischen Ansatz geht ein Programmierer in einer systematischen Reihenfolge vor, um ein Verständnis für das Programm als Ganzes zu erlangen, z.B. durch zeilenweises Verstehen des Codes [vMVL98]. Beim opportunistischen Ansatz geht der Programmierer nach Bedarf vor und konzentriert sich nur auf die Teile des Codes, von denen er denkt, dass sie für seine aktuelle Aufgabe von Bedeutung sein könnten, ohne die weiteren Abhängigkeiten zu anderen Programmteilen weiter zu betrachten. [LPLS86, KR91, LS86]. Die kognitive Psychologie befasst sich außerdem mit der Frage, welche weiteren Faktoren einen Einfluss darauf haben, wie gut ein Programm verstanden werden kann. Mögliche Faktoren sind z.B. die Programmeigenschaften, die individuellen Unterschiede von Programmierern und die Aufgabenabhängigkeit [SWM00]. Zu den Programmeigenschaften gehören unter anderem die Dokumentation, die Programmiersprache und das Programmierparadigma, das einer Sprache zugrunde liegt. Die Programmierer selber unterscheiden sich ebenso durch eine Reihe von individuellen Eigenschaften in Bezug auf ihre Fähigkeiten und Kreativität. Weiterhin können sich die Vorgehensweisen beim Programmverstehen je nach Aufgabe und Wartungsfragestellung unterscheiden. Programmverstehen stellt kein eigenständiges Ziel im Wartungsprozess dar, sondern ist vielmehr ein nötiger Schritt, um Änderungen an einem Programm durchzuführen, Fehler zu beheben oder Programmteile zu erweitern. Somit hängt auch der Verstehensprozess von der jeweiligen Aufgabe ab. 3 Entwicklung von Hilfsmitteln Die existierenden Analysen werden in grundlegende und wissensbasierte Analysen unterschieden [KP96]. Die grundlegenden Analysen ermitteln Informationen über das Programm und präsentieren diese in geeigneter Form. Der Betrachter nimmt mithilfe dieser Informationen die Abstraktion selber vor. Grundlegende statische Analysen erleichtern den Zugriff auf Informationen aus dem Quelltext. Sie verwenden ausschließlich Daten, die direkt aus dem Quelltext oder anderen Dokumenten abgeleitet werden können. Ein Beispiel hierfür sind Kontrollflussanalysen. Grundlegende dynamische Analysen hingegen ermitteln Informationen während des Programmlaufs. Die wissensbasierten Analysen verfügen über Vorwissen. Dieses spezielle Wissen über Programmierung, Entwurf oder den Anwendungsbereich ermöglicht es den Analysen, automatisch zu abstrahieren. Nach Soloway und Ehrlich [SE84] verfügen erfahrene Programmierer über eine Basis an Wissen, die es ihnen ermöglicht, schneller als Unerfahrene zu abstrahieren. Anhand dieser Wissensbasis versuchen wissensbasierte Analysen, automatisch zu abstrahieren. Die Forschung auf dem Gebiet der Softwarevisualisierung hat zu einer Reihe von Werkzeugen zur Unterstützung des Programmverstehens geführt. Bei der Bildung eines mentalen Modell spielt die Präsentation der extrahierten Information eine wichtige Rolle. Ein Modell zur Bewertung von Visualisierungen wurde von Pacione et al. [PRW04] vorgestellt. Mit Hilfe dieses Modells können Visualisierungen anhand ihrer Abstraktion, ihres Blickwinkels und ihren zugrundeliegenden Informationen evaluiert werden.</note></figure>
		</body>
		<back>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<analytic>
		<title level="a" type="main">The impact of UML documentation on software maintenance: an experimental evaluation</title>
		<author>
			<persName><forename type="first">L</forename><forename type="middle">C</forename><surname>Arisholm</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Briand</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><forename type="middle">E</forename><surname>Hove</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Y</forename><surname>Labiche</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Computer Society TSE</title>
		<imprint>
			<biblScope unit="volume">32</biblScope>
			<biblScope unit="issue">6</biblScope>
			<biblScope unit="page" from="365" to="381" />
			<date type="published" when="2006-06">Juni 2006</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">Analysis of maintenance work categories through measurement</title>
		<author>
			<persName><forename type="first">A</forename><surname>Abran</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Nguyenkim</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings. Conference on</title>
				<meeting>Conference on</meeting>
		<imprint>
			<date type="published" when="1991-10">1991. Oct 1991</date>
			<biblScope unit="page" from="104" to="113" />
		</imprint>
	</monogr>
	<note>Software Maintenance</note>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">Enhancing program comprehension: formatting and documenting</title>
		<author>
			<persName><forename type="first">Mouloud</forename><surname>Arab</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">SIGPLAN Not</title>
		<imprint>
			<biblScope unit="volume">27</biblScope>
			<biblScope unit="issue">2</biblScope>
			<biblScope unit="page" from="37" to="46" />
			<date type="published" when="1992">1992</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<monogr>
		<title level="m" type="main">Software Evolution: A Software Maintenance Challenge</title>
		<author>
			<persName><forename type="first">Lowell</forename><surname>Jay</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Arthur</forename></persName>
		</author>
		<imprint>
			<date type="published" when="1988">1988</date>
			<publisher>John Wiley &amp; Sons</publisher>
			<biblScope unit="volume">2</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">Program comprehension: investigating the effects of naming style and documentation</title>
		<author>
			<persName><forename type="first">Scott</forename><surname>Blinman</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Andy</forename><surname>Cockburn</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. of AUIC&apos;05</title>
				<meeting>of AUIC&apos;05<address><addrLine>Darlinghurst, Australia, Australia</addrLine></address></meeting>
		<imprint>
			<publisher>Australian Computer Society, Inc</publisher>
			<date type="published" when="2005">2005</date>
			<biblScope unit="page" from="73" to="78" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<monogr>
		<author>
			<persName><forename type="first">M</forename><surname>Bennicke</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Rust</surname></persName>
		</author>
		<title level="m">Programmverstehen und statische Analysetechniken im Kontext des Reverse Engineering und der Qualitätssicherung</title>
				<imprint>
			<date type="published" when="2004-04">April 2004</date>
		</imprint>
	</monogr>
	<note>Virtuelles Software Engineering Kompetenzzentrum</note>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">Towards a Theory of the Comprehension of Computer Programs</title>
		<author>
			<persName><forename type="first">Ruven</forename><forename type="middle">E</forename><surname>Brooks</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IJMMS</title>
		<imprint>
			<biblScope unit="volume">18</biblScope>
			<biblScope unit="issue">6</biblScope>
			<biblScope unit="page" from="543" to="554" />
			<date type="published" when="1983">1983</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">Reverse Engineering and Design Recovery: a Taxonomy</title>
		<author>
			<persName><forename type="first">J</forename><surname>Elliot</surname></persName>
		</author>
		<author>
			<persName><surname>Chikofsky</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>James</surname></persName>
		</author>
		<author>
			<persName><surname>Cross</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Software</title>
		<imprint>
			<biblScope unit="volume">7</biblScope>
			<biblScope unit="issue">1</biblScope>
			<biblScope unit="page" from="13" to="17" />
			<date type="published" when="1990-01">Januar 1990</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<analytic>
		<title level="a" type="main">Theoretical Considerations on Navigating Codespace with Spatial Cognition</title>
		<author>
			<persName><forename type="first">Anthony</forename><surname>Cox</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Maryanne</forename><surname>Fisher Und Philip</surname></persName>
		</author>
		<author>
			<persName><forename type="first">O'</forename><surname>Brien</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. of PPIG&apos;05</title>
				<meeting>of PPIG&apos;05</meeting>
		<imprint>
			<date type="published" when="2005">2005</date>
			<biblScope unit="page" from="92" to="105" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<title level="a" type="main">The Roles Beacons Play in Comprehension for Novice and Expert Programmers</title>
		<author>
			<persName><forename type="first">Martha</forename><forename type="middle">E</forename><surname>Crosby</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Jean</forename><surname>Scholtz Und</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Susan</forename><surname>Wiedenbeck</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. PPIG&apos;02</title>
				<meeting>PPIG&apos;02</meeting>
		<imprint>
			<date type="published" when="2002">2002</date>
			<biblScope unit="page" from="18" to="21" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<analytic>
		<title level="a" type="main">Improving API Documentation Usability with Kneowledge Pushing</title>
		<author>
			<persName><forename type="first">Uri</forename><surname>Dekel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">James</forename><surname>Herbsleb</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. of ICSE&apos;09</title>
				<meeting>of ICSE&apos;09</meeting>
		<imprint>
			<date type="published" when="2009">2009</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<analytic>
		<title level="a" type="main">Reading the Documentation of Invoked API Functions in Program Comprehension</title>
		<author>
			<persName><forename type="first">Uri</forename><surname>Dekel Und</surname></persName>
		</author>
		<author>
			<persName><forename type="first">James</forename><forename type="middle">D</forename><surname>Herbsleb</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. of ICPC&apos;09</title>
				<meeting>of ICPC&apos;09<address><addrLine>Vancouver, Canada</addrLine></address></meeting>
		<imprint>
			<publisher>IEEE Computer Society</publisher>
			<date type="published" when="2009">2009</date>
			<biblScope unit="page" from="168" to="177" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b12">
	<analytic>
		<title level="a" type="main">Using Sex Differences to Link Spatial Cognition and Program Comprehension</title>
		<author>
			<persName><forename type="first">Maryanne</forename><surname>Fisher</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Anthony</forename><surname>Cox Und</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Lin</forename><surname>Zhao</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. ICSM&apos;06</title>
				<meeting>ICSM&apos;06<address><addrLine>Washington, DC, USA</addrLine></address></meeting>
		<imprint>
			<publisher>IEEE Computer Society</publisher>
			<date type="published" when="2006">2006</date>
			<biblScope unit="page" from="289" to="298" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<analytic>
		<title level="a" type="main">Application Program Maintenance Study: Report to our Respondents</title>
		<author>
			<persName><forename type="first">R</forename><forename type="middle">K</forename><surname>Fjeldstad</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><forename type="middle">T</forename><surname>Hamlen</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. of GUIDE 48</title>
				<meeting>of GUIDE 48<address><addrLine>Philadelphia, PA</addrLine></address></meeting>
		<imprint>
			<date type="published" when="1979">1979</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<analytic>
		<title level="a" type="main">Status of Empirical Research in Software Engineering</title>
		<author>
			<persName><forename type="first">Andreas</forename><surname>Höfer Und Walter</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Tichy</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Empirical Software Engineering Issues</title>
				<imprint>
			<date type="published" when="2006">2006</date>
			<biblScope unit="page" from="10" to="19" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<analytic>
		<title level="a" type="main">Sonification DEsign Guidelines to Enhance Program Comprehension</title>
		<author>
			<persName><forename type="first">Khaled</forename><surname>Hussein</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Eli</forename><surname>Tilevich</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Ivica</forename><surname>Ico Bukvic</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Soobeen</forename><surname>Und</surname></persName>
		</author>
		<author>
			<persName><surname>Kim</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. ICPC&apos;09</title>
				<meeting>ICPC&apos;09<address><addrLine>Vancouver, Canada</addrLine></address></meeting>
		<imprint>
			<publisher>IEEE Computer Society</publisher>
			<date type="published" when="2009">2009</date>
			<biblScope unit="page" from="120" to="129" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b16">
	<analytic>
		<title level="a" type="main">Eliciting Design Requirements for Maintenance-Oriented IDEs: A Detailed Study of Corrective and Perfective Maintenance Tasks</title>
		<author>
			<persName><forename type="first">Andrew</forename><forename type="middle">J</forename><surname>Ko</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Htet</forename><surname>Htet Aung Und</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Brad</forename><forename type="middle">A</forename><surname>Myers</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. ICSE&apos;05</title>
				<meeting>ICSE&apos;05</meeting>
		<imprint>
			<date type="published" when="2005">2005</date>
			<biblScope unit="page" from="126" to="135" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b17">
	<analytic>
		<title level="a" type="main">Information Needs in Collocated Software Development Teams</title>
		<author>
			<persName><forename type="first">Andrew</forename><forename type="middle">J</forename><surname>Ko</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Robert</forename><surname>Deline Und</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Gina</forename><surname>Venolia</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. ICSE&apos;07</title>
				<meeting>ICSE&apos;07</meeting>
		<imprint>
			<date type="published" when="2007">2007</date>
			<biblScope unit="page" from="344" to="353" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b18">
	<analytic>
		<title level="a" type="main">Individual Differences in Program Comprehension Strategies in an Unfamiliar Programming System</title>
		<author>
			<persName><forename type="first">Andrew</forename><surname>Jensen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Ko</forename></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">IWPC&apos;03</title>
				<imprint>
			<date type="published" when="2003">2003</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b19">
	<monogr>
		<author>
			<persName><forename type="first">R</forename><surname>Koschke</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Plödereder</surname></persName>
		</author>
		<title level="m">Ansätze des Programmverstehens</title>
				<editor>
			<persName><forename type="first">Franz</forename><surname>Lehner</surname></persName>
		</editor>
		<imprint>
			<publisher>Deutscher Universitätsverlag/Gabler Vieweg Westdeutscher Verlag</publisher>
			<date type="published" when="1996">1996</date>
			<biblScope unit="page" from="159" to="176" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b20">
	<analytic>
		<title level="a" type="main">Expert problem solving strategies for program comprehension</title>
		<author>
			<persName><forename type="first">Jürgen</forename><surname>Koenemann Und Scott</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Robertson</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. of SIGCHI&apos;91</title>
				<meeting>of SIGCHI&apos;91<address><addrLine>New York, NY, USA</addrLine></address></meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="1991">1991</date>
			<biblScope unit="page" from="125" to="130" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b21">
	<analytic>
		<title level="a" type="main">Methodologies for Performing Empirical Studies: Report from WESS&apos;97</title>
		<author>
			<persName><forename type="first">Chris</forename><forename type="middle">F</forename><surname>Kemerer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Sandra</forename><surname>Slaughter</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">EMSE</title>
		<imprint>
			<biblScope unit="volume">2</biblScope>
			<biblScope unit="issue">2</biblScope>
			<biblScope unit="page" from="109" to="118" />
			<date type="published" when="1997-06">Juni 1997</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b22">
	<analytic>
		<title level="a" type="main">Understanding someone else&apos;s code: Analysis of experiences</title>
		<author>
			<persName><forename type="first">Arun</forename><surname>Lakhotia</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">JSS</title>
		<imprint>
			<biblScope unit="volume">23</biblScope>
			<biblScope unit="issue">3</biblScope>
			<biblScope unit="page" from="269" to="275" />
			<date type="published" when="1993">1993</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b23">
	<analytic>
		<title level="a" type="main">Cognitive Processes in Program Comprehension</title>
		<author>
			<persName><forename type="first">Stanley</forename><surname>Letovsky</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Workshop ESP</title>
				<meeting><address><addrLine>Norwood, NJ, USA</addrLine></address></meeting>
		<imprint>
			<publisher>Ablex Publishing Corp</publisher>
			<date type="published" when="1986">1986</date>
			<biblScope unit="page" from="58" to="79" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b24">
	<monogr>
		<title level="m" type="main">Plan analysis of programs</title>
		<author>
			<persName><forename type="first">Stanley</forename><surname>Letovsky</surname></persName>
		</author>
		<imprint>
			<date type="published" when="1988">Dezember 1988</date>
			<biblScope unit="volume">662</biblScope>
		</imprint>
		<respStmt>
			<orgName>Yale University</orgName>
		</respStmt>
	</monogr>
	<note type="report_type">Bericht Research Report</note>
</biblStruct>

<biblStruct xml:id="b25">
	<analytic>
		<title level="a" type="main">Improving Comprehensibility of Source Code via Traceability Information: a Controlled Experiment</title>
		<author>
			<persName><forename type="first">Andrea</forename><surname>De</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Lucia</forename></persName>
		</author>
		<author>
			<persName><forename type="first">Rocco</forename><surname>Oliveto</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Francesco</forename><surname>Zurolo Und Massimiliano</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Di</forename><surname>Penta</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Proc. of ICPC&apos;</title>
		<imprint>
			<biblScope unit="volume">06</biblScope>
			<biblScope unit="issue">0</biblScope>
			<biblScope unit="page" from="317" to="326" />
			<date type="published" when="2006">2006</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b26">
	<analytic>
		<title level="a" type="main">Experimental Settings in Program Comprehension: Challenges and Open Issues</title>
		<author>
			<persName><forename type="first">Giuseppe</forename><forename type="middle">A</forename><surname>Di Lucca Und Massimiliano</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Di</forename><surname>Penta</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. of ICPC&apos;06</title>
				<meeting>of ICPC&apos;06<address><addrLine>Washington, DC, USA</addrLine></address></meeting>
		<imprint>
			<publisher>IEEE Computer Society</publisher>
			<date type="published" when="2006">2006</date>
			<biblScope unit="page" from="229" to="234" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b27">
	<analytic>
		<title level="a" type="main">Mental Models and Software Maintenance</title>
		<author>
			<persName><forename type="first">D</forename><forename type="middle">C</forename><surname>Littman</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Je</forename><surname>Pinto</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Letovsky</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Soloway</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Workshop ESP</title>
				<meeting><address><addrLine>Norwood, NJ, USA</addrLine></address></meeting>
		<imprint>
			<publisher>Ablex Publishing Corp</publisher>
			<date type="published" when="1986-12">1986. Dec. 1987</date>
			<biblScope unit="volume">7</biblScope>
			<biblScope unit="page" from="341" to="355" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b28">
	<analytic>
		<title level="a" type="main">Problems in application software maintenance</title>
		<author>
			<persName><forename type="first">Bennet</forename><forename type="middle">P</forename><surname>Lientz</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Burton Swanson</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Commun. ACM</title>
		<imprint>
			<biblScope unit="volume">24</biblScope>
			<biblScope unit="issue">11</biblScope>
			<biblScope unit="page" from="763" to="769" />
			<date type="published" when="1981">1981</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b29">
	<analytic>
		<title level="a" type="main">Delocalized Plans and Program Comprehension</title>
		<author>
			<persName><forename type="first">S</forename><surname>Letovsky</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Soloway</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Software</title>
				<imprint>
			<date type="published" when="1986-05">May 1986</date>
			<biblScope unit="volume">3</biblScope>
			<biblScope unit="page" from="41" to="49" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b30">
	<monogr>
		<title level="m" type="main">Software Maintenance the Problem and Its Solution</title>
		<author>
			<persName><forename type="first">James</forename><surname>Martin</surname></persName>
		</author>
		<imprint>
			<date type="published" when="1983">1983</date>
			<publisher>Auflage</publisher>
			<biblScope unit="page">6</biblScope>
		</imprint>
	</monogr>
	<note>third printing</note>
</biblStruct>

<biblStruct xml:id="b31">
	<analytic>
		<title level="a" type="main">Reengineering with Reflexion Models: A Case Study</title>
		<author>
			<persName><forename type="first">Gail</forename><forename type="middle">C</forename><surname>Murphy</surname></persName>
		</author>
		<author>
			<persName><forename type="first">David</forename><surname>Notkin</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Reprinted in Nikkei Computer</title>
		<imprint>
			<biblScope unit="volume">30</biblScope>
			<biblScope unit="issue">8</biblScope>
			<biblScope unit="page" from="161" to="169" />
			<date type="published" when="1997-08">August 1997. January 1998</date>
		</imprint>
	</monogr>
	<note>IEEE Computer</note>
</biblStruct>

<biblStruct xml:id="b32">
	<analytic>
		<title level="a" type="main">Navigation and Comprehension of Programs by Novice Programmers</title>
		<author>
			<persName><forename type="first">Russel</forename><surname>Mosemann</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Susan</forename><surname>Weidenbeck</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. of IWPC&apos;01, Seite 79</title>
				<meeting>of IWPC&apos;01, Seite 79<address><addrLine>Washington, DC, USA</addrLine></address></meeting>
		<imprint>
			<publisher>IEEE Computer Society</publisher>
			<date type="published" when="2001">2001</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b33">
	<monogr>
		<title level="m" type="main">Evaluating Emerging Software Development Technologies: Lessons Learned from Assessing Aspect-oriented Programming</title>
		<author>
			<persName><forename type="first">G</forename><surname>Murphy</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Walker</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Baniassad</surname></persName>
		</author>
		<idno>TR-98-10</idno>
		<imprint>
			<date type="published" when="1998">1998</date>
		</imprint>
		<respStmt>
			<orgName>University of Britsh Columbia, Computer Science</orgName>
		</respStmt>
	</monogr>
	<note type="report_type">Technical Report</note>
</biblStruct>

<biblStruct xml:id="b34">
	<analytic>
		<title level="a" type="main">Comprehension Strategies in Programming</title>
		<author>
			<persName><forename type="first">N</forename><surname>Pennington</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Workshop ESP</title>
				<meeting><address><addrLine>Norwood, NJ, USA</addrLine></address></meeting>
		<imprint>
			<publisher>Ablex Publishing Corp</publisher>
			<date type="published" when="1987">1987</date>
			<biblScope unit="page" from="100" to="113" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b35">
	<analytic>
		<title level="a" type="main">Resumption Strategies for Interrupted Programming Tasks</title>
		<author>
			<persName><forename type="first">Chris</forename><surname>Parnin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Spencer</forename><surname>Rugaber</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Proc. of ICPC&apos;</title>
		<imprint>
			<biblScope unit="volume">09</biblScope>
			<biblScope unit="issue">0</biblScope>
			<biblScope unit="page" from="80" to="89" />
			<date type="published" when="2009">2009</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b36">
	<analytic>
		<title level="a" type="main">A Novel Software Visualisation Model to Support Software Comprehension</title>
		<author>
			<persName><forename type="first">J</forename><surname>Michael</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Marc</forename><surname>Pacione</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Murray</forename><surname>Roper Und</surname></persName>
		</author>
		<author>
			<persName><surname>Wood</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. of WCRE&apos;04</title>
				<meeting>of WCRE&apos;04<address><addrLine>Washington, DC, USA</addrLine></address></meeting>
		<imprint>
			<publisher>IEEE Computer Society</publisher>
			<date type="published" when="2004">2004</date>
			<biblScope unit="page" from="70" to="79" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b37">
	<analytic>
		<title level="a" type="main">Designing your Next Empirical Study on Program Comprehension</title>
		<author>
			<persName><forename type="first">Massimiliano</forename><surname>Di Penta</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><forename type="middle">E</forename><surname>Kurt Stirewalt Und</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Eileen</forename><surname>Kraemer</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">ICPC</title>
				<imprint>
			<publisher>IEEE Computer Society</publisher>
			<date type="published" when="2007">2007</date>
			<biblScope unit="page" from="281" to="285" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b38">
	<analytic>
		<title level="a" type="main">Two controlled experiments assessing the usefulness of design pattern documentation in program maintenance</title>
		<author>
			<persName><forename type="first">L</forename><surname>Prechelt</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Unger-Lamprecht</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Philippsen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><forename type="middle">F</forename><surname>Tichy</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Computer Society TSE</title>
		<imprint>
			<biblScope unit="volume">28</biblScope>
			<biblScope unit="issue">6</biblScope>
			<biblScope unit="page" from="595" to="606" />
			<date type="published" when="2002-06">Juni 2002</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b39">
	<analytic>
		<title level="a" type="main">How Effective Developers Investigate Source Code: An Exploratory Study</title>
		<author>
			<persName><forename type="first">M</forename><surname>Robillard</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><surname>Coelho</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Murphy</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Computer Society TSE</title>
		<imprint>
			<biblScope unit="volume">30</biblScope>
			<biblScope unit="issue">12</biblScope>
			<biblScope unit="page" from="889" to="903" />
			<date type="published" when="2004">2004</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b40">
	<monogr>
		<title level="m" type="main">Beginning behavioral research: A conceptual primer</title>
		<author>
			<persName><forename type="first">R</forename><forename type="middle">L</forename><surname>Rosnow</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Rosenthal</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2008">2008</date>
			<publisher>Pearson/Prentice Hall</publisher>
		</imprint>
	</monogr>
	<note>6th. Auflage</note>
</biblStruct>

<biblStruct xml:id="b41">
	<analytic>
		<title level="a" type="main">Program Comprehension for Reverse Engineering</title>
		<author>
			<persName><forename type="first">Spencer</forename><surname>Rugaber</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">AAAI Workshop</title>
				<imprint>
			<date type="published" when="1992-07">Juli 1992</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b42">
	<analytic>
		<title level="a" type="main">Managing software change tasks: an exploratory study</title>
		<author>
			<persName><forename type="first">J</forename><surname>Sillito</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><forename type="middle">De</forename><surname>Voider</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Fisher</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Murphy</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">ESE&apos;05</title>
				<imprint>
			<date type="published" when="2005-11">Nov. 2005</date>
			<biblScope unit="volume">10</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b43">
	<analytic>
		<title level="a" type="main">Empirical Studies of Programming Knowledge</title>
		<author>
			<persName><forename type="first">Elliot</forename><surname>Soloway</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Kate</forename><surname>Ehrlich</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE TSE</title>
		<imprint>
			<biblScope unit="volume">10</biblScope>
			<biblScope unit="issue">5</biblScope>
			<biblScope unit="page" from="595" to="609" />
			<date type="published" when="1984">1984</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b44">
	<analytic>
		<title level="a" type="main">Using Spoken Text to Aid Debugging: An Emperical Study</title>
		<author>
			<persName><forename type="first">Andreas</forename><surname>Stefik</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Ed</forename><surname>Gellenbeck</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Proc. of ICPC&apos;</title>
		<imprint>
			<biblScope unit="volume">09</biblScope>
			<biblScope unit="issue">0</biblScope>
			<biblScope unit="page" from="110" to="119" />
			<date type="published" when="2009">2009</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b45">
	<analytic>
		<title level="a" type="main">An examination of software engineering work practices</title>
		<author>
			<persName><forename type="first">Janice</forename><surname>Singer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Timothy</forename><surname>Lethbridge</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Norman</forename><surname>Vinson Und</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Nicolas</forename><surname>Anquetil</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. of CASCON&apos;97</title>
				<meeting>of CASCON&apos;97</meeting>
		<imprint>
			<publisher>IBM Press</publisher>
			<date type="published" when="1997">1997</date>
			<biblScope unit="page">21</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b46">
	<analytic>
		<title level="a" type="main">Syntactic/Semantic Interactions in Programmer Behavior: A Model and Experimental Results</title>
		<author>
			<persName><forename type="first">B</forename><surname>Shneiderman</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Mayer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">;</forename><forename type="middle">E</forename><surname>Soloway</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Pinto</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Letovsky</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Littman Und</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Lampert</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Commun. ACM</title>
		<imprint>
			<biblScope unit="volume">8</biblScope>
			<biblScope unit="issue">3</biblScope>
			<biblScope unit="page" from="1259" to="1267" />
			<date type="published" when="1979-11">1979. November 1988</date>
		</imprint>
	</monogr>
	<note>IJCIS</note>
</biblStruct>

<biblStruct xml:id="b47">
	<analytic>
		<title level="a" type="main">How do program understanding tools affect how programmers understand programs?</title>
		<author>
			<persName><forename type="first">M.-A</forename><forename type="middle">D</forename><surname>Storey</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Wong</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><forename type="middle">A</forename><surname>Müller</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Science of Computer Programming</title>
		<imprint>
			<biblScope unit="volume">36</biblScope>
			<biblScope unit="issue">2-3</biblScope>
			<biblScope unit="page" from="183" to="207" />
			<date type="published" when="2000">2000</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b48">
	<analytic>
		<title level="a" type="main">Should computer scientists experiment more?</title>
		<author>
			<persName><forename type="first">F</forename><surname>Walter</surname></persName>
		</author>
		<author>
			<persName><surname>Tichy</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Computer</title>
		<imprint>
			<biblScope unit="volume">31</biblScope>
			<biblScope unit="issue">5</biblScope>
			<biblScope unit="page" from="32" to="40" />
			<date type="published" when="1998-05">Mai 1998</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b49">
	<monogr>
		<title level="m" type="main">Coming Attractions in Program Understanding</title>
		<author>
			<persName><forename type="first">R</forename><surname>Scott</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Dennis</forename><forename type="middle">B</forename><surname>Tilley</surname></persName>
		</author>
		<author>
			<persName><surname>Smith</surname></persName>
		</author>
		<imprint>
			<date type="published" when="1996">Dezember 1996</date>
			<pubPlace>Pittsburgh, PA 15213</pubPlace>
		</imprint>
		<respStmt>
			<orgName>Bericht, Software Engineering Institute</orgName>
		</respStmt>
	</monogr>
</biblStruct>

<biblStruct xml:id="b50">
	<analytic>
		<title level="a" type="main">From Program Comprehension to Tool Requirements for an Industrial Environment</title>
		<author>
			<persName><forename type="first">Anneliese</forename><surname>Von Mayrhauser Und</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><forename type="middle">Marie</forename><surname>Vans</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">IWPC</title>
				<imprint>
			<publisher>IEEE Computer Society Press</publisher>
			<date type="published" when="1993-07">Juli 1993</date>
			<biblScope unit="page" from="78" to="86" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b51">
	<analytic>
		<title level="a" type="main">Program Comprehension During Software Maintenance and Evolution</title>
		<author>
			<persName><forename type="first">Anneliese</forename><surname>Von Mayrhauser Und</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><forename type="middle">Marie</forename><surname>Vans</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Computer</title>
		<imprint>
			<biblScope unit="volume">28</biblScope>
			<biblScope unit="issue">8</biblScope>
			<biblScope unit="page" from="44" to="55" />
			<date type="published" when="1995">1995</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b52">
	<analytic>
		<title level="a" type="main">Program Comprehension and Enhancement of Software</title>
		<author>
			<persName><forename type="first">A</forename><forename type="middle">Marie</forename><surname>Anneliese Von Mayrhauser</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Steve</forename><surname>Vans</surname></persName>
		</author>
		<author>
			<persName><surname>Lang</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. of the IFIP World Computing Congress. IEEE</title>
				<meeting>of the IFIP World Computing Congress. IEEE</meeting>
		<imprint>
			<date type="published" when="1998-09">August-September 1998</date>
		</imprint>
	</monogr>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
