Programmierwerkzeuge-00-Unterrichtskonzept

text/x-tex Programmierwerkzeuge-00-Unterrichtskonzept.tex — 18.1 KB

Dateiinhalt

\documentclass[12pt, twoside]{scrartcl}
%Anfang OERMacros.tex
% Zum Erstellen mit pdfLaTeX wird diese Datei und der CC BY Button by.png im selben Verzeichnis benötigt. 
% by.png ist unter https://mirrors.creativecommons.org/presskit/buttons/88x31/png/by.png zu finden. 

% Für den Lizenzhinweis zur Nutzung dieser OER kann das Macro \OERLizenzHinweis verendet werden. 

\usepackage[utf8]{inputenc}
\def\Autor {Reinhard Brocks}
\def\HomeAutor {https://www.htwsaar.de/ingwi/fakultaet/personen/profile/Reinhard\%20Brocks}
\def\OERLizenzHinweis 
{
	\includegraphics{by} % by.png ist unter https://mirrors.creativecommons.org/presskit/buttons/88x31/png/by.png zu finden. 
	\begin{minipage}[b]{11cm}\footnotesize
		\href{\HomeAutor/oer/pwz/programmierwerkzeuge-00-unterrichtskonzept/at_download/file}{Programmierwerkzeuge - \mysubtitle} 
		von 
		\href{\HomeAutor}{\Autor} 
		ist lizenziert unter einer 
		\href{http://creativecommons.org/licenses/by/4.0/}{Creative Commons Namensnennung 4.0 International Lizenz}.
	\end{minipage}
}


\def\HinweisLatex {Für die Nutzung und die Bearbeitung steht das Dokument \href{\HomeAutor/oer/pwz/latex}{hier} 
	auch im \LaTeX-Format zur Verfügung.}

\def\MailAutor {reinhard.brocks@htwsaar.de}

\def\MiniKontakt 
{
	Fragen und Verbesserungsvorschläge bitte an Prof.~Dr.~\Autor, 
	Hochschule für Technik und Wirtschaft des Saarlandes. \\
	E-Mail: \href{mailto:\MailAutor}{\MailAutor}\\[2ex]
}

\def\Kontakt
{
	\MiniKontakt
	Einen Überblick über die Unterrichtseinheiten zu \glqq Programmierwerkzeuge\grqq{} 
	findet man \href{\HomeAutor/oer/pwz/programmierwerkzeuge-00-unterrichtskonzept/at_download/file}{hier}.\\[1ex]
}

\def\Disclaimer 
{
	\begin{footnotesize}
		\textbf{Disclaimer}: Der Autor übernimmt keine Haftung für eventuelle 
		Datenschutz- und sonstige Rechtsverletzungen in anderen Webangeboten, 
		auf die er einen Link gesetzt hat. Für die Inhalte der von ihm 
		verlinkten Fremdangebote sind die jeweiligen Herausgeber verantwortlich. 
		Vor dem Einrichten von Links sind die Webseiten der anderen Anbieter 
		mit großer Sorgfalt und nach bestem Wissen und Gewissen geprüft worden. 
		Es kann jedoch keine Gewähr für die Vollständigkeit und Richtigkeit von 
		Informationen auf verlinkten Seiten übernommen werden. 
		Falls auf Seiten verweisen wird, deren Inhalt Anlass zur 
		Beanstandung gibt, bittet der Autor um eine Mitteilung 
		(\textit{\href{mailto:\MailAutor}{\MailAutor}}).
	\end{footnotesize}
}
%Ende OERMacros.tex%

%Anfang PackagesMacros.tex
\usepackage{a4,german}
\usepackage{hyperref}
\usepackage{hyperxmp}
\usepackage{color}
\usepackage{graphics}
\usepackage{longtable}
\parindent 0pt
\definecolor{Definitionsfarbe}{RGB}{0,100,0}
\newcommand{\TextBegriff}[1]{\textcolor{Definitionsfarbe}{\textbf{#1}}}
%Ende PackagesMacros.tex%

\def\mysubtitle {Unterrichtskonzept}
\def\mykeywords {Programmierwerkzeuge}

\hypersetup
{
	pdftitle={Programmierwerkzeuge},
	pdfsubject={\mysubtitle},
	pdfauthor={Reinhard Brocks},
	pdfkeywords={\mykeywords},
	pdfcopyright={CC BY 4.0},
	pdflicenseurl={http://creativecommon.org/licenses/by/4.0/}
}

\title{Programmierwerkzeuge}
\subtitle{\mysubtitle \\[2ex]{\small Lehr- und Lernmaterialien}}
\author{} 
\date{}

\begin{document}
\maketitle
\thispagestyle{empty}
\vfill

\begin{tabular}{|p{3cm}|p{10,5cm}|} \hline 
	Zielgruppe	&	Lernende, die schon eine Programmiersprache gelernt und erste 
					Erfahrungen in der Programmierung, am besten in Java, gesammelt haben.\\ \hline 
	Stichwörter & \mykeywords\\ \hline 
\end{tabular} \\[2ex]

\MiniKontakt

Versionsgeschichte\\[1ex]
\begin{tabular}{|l|l|l|}\hline 
	Datum 	& Änderung \\ \hline 
	26. Oktober 2019 & Erste Version \\ \hline 
\end{tabular}\\[1ex]

\OERLizenzHinweis\HinweisLatex
\newpage

\section*{Programmierwerkzeuge - \mysubtitle}
\subsection*{Motivation}
Die Softwareentwicklung hat sich in den letzten Jahren gewandelt. 
Ein Softwareentwickler wird mit mehreren Programmiersprachen arbeiten. 
Das Projektmanagement hat sich geändert und eine Vielzahl von Tools unterstützen den Entwicklungsprozess. 
Stichworte sind hier z.\,B. \glqq{}Continuous Integration / Continuous Delivery / Deployment\grqq{}, 
\glqq{}DevOps\grqq{} oder \glqq{}Developer Experience\grqq.

In den Anfängervorlesungen zur Programmierung werden aus guten Gründen häufig 
keine professionellen Werkzeuge für die Softwareentwicklung benutzt. Solche Tools 
sind von Entwicklern für Entwickler gemacht und damit nur bedingt didaktisch geeignet. 
Es werden vielmehr didaktische Entwicklungsumgebungen wie z.\,B. \glqq BlueJ\grqq{} 
(siehe \cite{BlueJ}) oder \glqq Eclipse IDE for Education\grqq{} (siehe \cite{EclipseForEducation}) 
für Java-Kurse benutzt. Die Übersicht im letzten Paragraph zeigt, wie unterschiedlich didaktische 
und professionelle Entwicklungstools sind. 

In den Übungen oder Praktika zur Programmierung ist häufig auch nicht die Zeit, um die 
Konzepte der Programmierwerkzeuge (zur Begriffserklärung, siehe \cite{PWZ}) zu lernen. 
Der Fokus liegt hier erst einmal auf Syntax und Semantik der Programmiersprache und auf 
algorithmischem Denken. Ein besseres Verständnis der Entwicklungswerkzeuge erlangt man 
wahrscheinlich eher nach den ersten Programmiererfahrungen. 

Deshalb sind diese Unterrichtseinheiten für Lernende gedacht, die eine Programmiersprache 
gerade erlernt haben und nun nach den ersten Erfahrungen mittelgroße Projekte angehen. 
Außerdem sollen die Unterrichtseinheiten Lernende motivieren, früher im Studium eine professionelle 
Entwicklungsumgebung zu nutzen. 

Ausgangspunkt dieser Unterrichtsreihe sind Vorträge am Tag der offenen Hörsäle zum Thema 
\glqq Der Werkzeugkasten eines Softwareentwicklers\grqq. In so einer Toolbox sind nicht nur 
Programme für die eigentliche Softwareentwicklung, Kenntnisse von Schnittstellen und Methodenwissen, 
sondern z.\,B. auch Office-Anwendungen, interkulturelle und kommunikative Kompetenzen und Sprachkenntnisse. 
Die folgenden Unterrichtseinheiten konzentrieren sich auf die Softwareentwicklungswerkzeuge, die für die 
Tätigkeiten des Programmierens genutzt werden. 
\newpage
\subsection*{Lernziele, Kompetenzen}
Die Unterrichtseinheiten haben zum Ziel, die Konzepte der Programmierwerkzeuge zu vermitteln. 
Die übergeordneten Lernziele aller Unterrichtseinheiten sind die folgenden: 
\begin{enumerate}
	\item Sie können für die unterschiedlichen Phasen im Implementierungsprozess 
			(implement, build, test, analyse, debug, deploy, document, refactor, maintaining) 
			unterstützende CASE-Tools auswählen. 
	\item Sie können die Toolchain für ein Softwareprojekt definieren, die dazugehörige 
			Entwicklungsumgebung konfigurieren und einen automatischen Build-Prozess implementieren. 
	\item Sie können die prinzipielle Funktionsweise von verschiedenen Programmierwerkzeugen 
			erläutern und für eine konkrete Programmiersprache solche benutzen. 
	\item Sie können den Aufbau von Software Development Kits, Programmbibliotheken 
			und Frameworks beschreiben und sind in der Lage, solche selbst zu erstellen 
			oder in eigene Projekte zu integrieren. 
	\item Sie können sich schnell in integrierte Entwicklungsumgebungen (IDEs) einarbeiten 
			und diese bei der Softwareentwicklung einsetzen. 
	\item Sie können sich in einem bestehenden Softwareprojekt schnell zurechtfinden. 
	\item Sie können eine Entwicklungsumgebung so konzipieren, dass andere Entwickler schnell die Strukturen verstehen. 	
\end{enumerate} 
\newpage
\subsection*{Liste der Unterrichtseinheiten}
Die ersten beiden Unterrichtseinheiten dienen der Motivation und sollten auch in dieser Reihenfolge 
gelehrt werden. Ansonsten sind die Unterrichtseinheiten voneinander unabhängig. 
Bei der hier vorgeschlagenen Reihenfolge nimmt der Schwierigkeitsgrad zu. 

Zentrale Unterrichtseinheiten sind: 
\begin{enumerate}
	\item Tätigkeiten des Programmierers
	\item Programmierwerkzeuge - Übersicht 
	\item Build-Prozess
	\item Integrierte Entwicklungsumgebung
	\item Funktionen des Quelltexteditors
	\item Software-Dokumentationswerkzeuge
	\item Debugger
	\item Automatische Build-Werkzeuge
	\item Versionsverwaltung
\end{enumerate}
Aufbauende Unterrichtseinheiten könnten sein: 
\begin{enumerate}
	\item Umgebungsvariablen, Kommandozeile und Skripte
	\item Issue-Tracking Systeme
	\item Statische Quellcodeanalyse
	\item Profiler
	\item Bugtracker
	\item Entwicklung auf Remote-Computern
	\item Test Frameworks
	\item Cross-Compiling
	\item Package Manager
	\item Virtuelle Maschinen
	\item Kontinuierliche Integration 
	\item Modellierungswerkzeuge
\end{enumerate}

\subsection*{Hinweise für den Dozenten}
Die Unterrichtseinheiten wurden und werden im Rahmen der Vorlesung \glqq Programmierwerkzeuge\grqq{} 
an der htw saar seit dem Sommersemester 2018 in einer Vorlesung mit 60 Unterrichtsstunden gehalten. 

Ziel ist es nicht, dass die Lernenden konkrete Entwicklungswerkzeuge perfekt benutzen können. 
Von den Tools sollen nur die Grundfunktionalitäten beherrscht werden, damit die wesentlichen 
Konzepte besser verstanden werden. Dies soll eine solide Basis für ein vertieftes Selbststudium bilden. 

Die Materialien sind so angelegt, dass die Lernenden sich die Themen selbstständig in Gruppenarbeit 
erarbeiten. Deshalb sollten zuerst auch nur die Arbeitsanweisungen oder Aufgaben verteilt werden. 
Die Arbeitsergebnisse der Studenten sind im Allgemeinen gut genug. Deshalb müssen die bei den einzelnen 
Unterrichtseinheiten zusammengestellten Inhalte nicht an die Lernenden verteilt werden. 
Diese können auch nur dem Dozenten als Leitfaden dienen. 

\newpage
\subsection*{Prüfungsform und Prüfungsleistung}
Die Prüfungsform kann ein Mini-Referenzprojekt mit Präsentation sein. Am besten arbeiten immer zwei 
Lernende in einer Gruppe. Dazu bekommen die Lernenden von einem fertigen Hello-World-Programm den Quellcode. 
Die Aufgabe besteht dann darin, dazu eine automatische Build-Umgebung (build, test, clean, deploy, run) 
zu erstellen und sich eine integrierte Entwicklungsumgebung so zu konfigurieren, dass die wichtigsten 
Programmiertätigkeiten auch über die IDE ausgeführt werden können. 

Zu dem Beispielprogramm sollte es ein Shell-Skript geben, damit die Lernenden wissen, wie der Build-Workflow ist. 
Ferner sollten alle Dateien in einem Verzeichnis liegen. Dadurch sind die Lernenden gezwungen, sich eine 
Ordnerstruktur zu überlegen und den Source-Code (packages) anzupassen. Die Erstellung von JavaDoc-Kommentaren 
ist eine Prüfungsleistung. Deshalb können im Quellcode Kommentare, aber keine JavaDoc-Kommentare, enthalten sein. 

Genügend Komplexität bekommt man schon bei Miniprojekten, falls einer der folgenden Punkte hinzukommt: 
\begin{enumerate}
	\item Code-Generierung (z.\,B. JNI, Protobuf) oder andere zusätzliche Prozesse (AspectJ)
	\item mehrere Artefakte (z.\,B. Client-Server, Plugins)
	\item Abhängigkeiten zu externen Bibliotheken (z.\,B. Google Gson Serialisierungsbibliothek)
	\item Frameworkerstellung (z.\,B. Mini-Tools auf Basis von Annotations, Framework zur Generierung eines Singletons)
\end{enumerate}

Constructive alignment sieht vor, dass die Prüfung und die Lernziele aufeinander abgestimmt sind. Die hier 
vorgeschlagene Prüfungsform kann einen Großteil der von den Studenten zu erlangenden Fach- und Handlungskompetenzen überprüfen. 

Die Präsentation dauert zwischen zwanzig und dreißig Minuten. Sie folgt einem 
fest vorgegebenen Ablauf (siehe nächster Abschnitt). Die Benotung ist einfach. Man kann z.\,B. den 
einzelnen Schritten, abhängig von der Wichtigkeit, Punkte zuordnen. 

Die Projektarbeiten führen häufig zu guten bis sehr guten Noten. Einige Gruppen bereiten allerdings 
auch die Präsentation nicht vor. Typische Probleme sind:  
\begin{itemize}
	\item die letzten Änderungen können nicht angezeigt werden, 
	\item fehlende Code-Dokumentation, 
	\item das Ausführen der Unit Tests ist nicht in den Build-Prozess integriert, 
	\item der Debugger kann nicht bedient werden, 
	\item ein UML-Klassendiagramm kann nicht generiert werden. 
\end{itemize}

\newpage
\subsection*{Aufgabenstellung Projektarbeit}
Wählen Sie sich ein Programm aus und arbeiten Sie zu zweit. 
Andere Programme können auf Anfrage als Prüfungsleistung zugelassen werden. 

\textbf{Aufgabe:} Erstellen Sie zum Programm eine Entwicklungsumgebung. 

\textbf{Abgabe:} Präsentation, Entwicklungsumgebung

Bei der Präsentation soll Folgendes möglich sein: 
\begin{enumerate}
	\item Aus einem lokalen GIT Verzeichnis können Sie die History anzeigen lassen und zwei verschiedene 
		Programmversionen auschecken. Anzeigen der letzten Änderung. Einchecken einer neuen Version. 
	\item Über Kommandozeile können Sie Folgendes anstoßen:
	\begin{enumerate}
		\item Generierung einer Code-Dokumentation
		\item Build mit (make), ant, maven oder gradle
		\item Ausführen des Programms
		\item Ausführung von Unit-Tests
		\item statische Analyse des Quellcodes aufgrund einer Software-Metrik
		\item Erstellung eines Installationspakets
		\item Clean
	\end{enumerate}
	\item Starten einer IDE, Ändern, Erstellen, Debuggen und Testen der Applikation. 
	\item Generierung eines UML-Klassendiagramms. 
	\item Zeigen des Projekt-Issue-Tracking und Bug-Tracking Systems für die Projektarbeit.
	\item Installation und Ausführen des Programms auf einem anderen Referenzrechner. 
\end{enumerate}
Eventuell vorhandene jar-Dateien im Programm sind dort, damit vereinfacht über Kommandozeile das Projekt kompiliert 
und ausgeführt werden kann. Wie das geht, sehen Sie im Shell-Skript, das Sie durch ein Build-Automation-Tool zu 
ersetzen haben. Sie müssen die Dateien auf Verzeichnisse verteilen und packages erstellen. Unter Umständen müssen 
Sie das Programm auch auf mehrere Projekte aufteilen. Die fehlende Code-Dokumentation ist von Ihnen zu erstellen. 

\newpage
\subsection*{Vergleich von didaktischen und professionellen Softwareentwicklungswerkzeugen}\label{sec:VergleichSEW}
Die folgende Tabelle \ref{table:Vergleich} stellt ohne jeglichen Anspruch auf Vollständigkeit oder Wissenschaftlichkeit 
die unterschiedlichen Merkmale von professionellen und didaktischen Softwareentwicklungswerkzeugen im Bereich 
Programmierung gegen\-über. 

	\newlength{\Spaltenbreitei}
	\newlength{\Spaltenbreiteii}
	\setlength{\Spaltenbreitei}{\textwidth}
	\divide\Spaltenbreitei by 2
	\setlength{\Spaltenbreiteii}{\textwidth}
	\advance\Spaltenbreiteii by -\Spaltenbreitei

	\begin{longtable}{|p{\Spaltenbreitei}|p{\Spaltenbreiteii}|} 
	\caption{Vergleich von didaktischen und professionellen Softwareentwicklungswerkzeugen}
	\label{table:Vergleich}
	\\ \hline {\textbf{Didaktisches Tool}}&\textbf{Professionelles Tool}\\ \hline
		Von Entwicklern und Lehrern für Lernende und Anfänger&Von Entwicklern für Entwickler \\ \hline
		\multicolumn{2}{c}{\textbf{Zielgruppe}} \\ \hline
		Für Studenten in den ersten Semestern & Für erfahrene Entwickler\\ \hline
		Lerngruppen von einem bis drei Lernenden&Unterstützung von Teamarbeit\\ \hline
		Lernende soll die Prinzipien der Programmiersprache, der Softwareentwicklung verstehen
		und Realisierungskompetenz erlangen & Der Entwickler soll das Projekt realisieren \\ \hline
		\multicolumn{2}{c}{\textbf{Benutzungsgrund}} \\ \hline
		Lernumgebung &	Entwicklungsumgebung \\ \hline
		Für die Lösung von Übungsaufgaben oder Testprogrammen, zum Verständnis  von Programmierprinzipien, ermöglicht einfaches Experimentieren &Für die Entwicklung von großen Systemen\\ \hline
		Durchschnittlicher Projektaufwand: von wenigen Stunden  bis zu zwei Wochen	& Projektaufwand von mehreren Mannmonaten\\ \hline
		Bis zu 500 Zeilen Code auf wenige Dateien verteilt& Eine Vielzahl von Quellcodedateien auf Verzeichnissen aufgeteilt\\ \hline
		Quellcodeaustausch zwischen Studenten&Quellcodeaustausch zwischen Teams und Import- / Export-Schnittstellen zu anderen Systemen \\ \hline
		\multicolumn{2}{c}{\textbf{Tool-Eigenschaften}} \\ \hline
		Kleine Stand-Alone Applikation mit geringer Komplexität&Komplexe Entwicklungsumgebung mit bis zu mehreren Gbyte Speicherbedarf und Schnittstellen zu anderen Tools\\ \hline
		Einfach zu installieren&Aufwendiger und umfangreicher Installationsprozess mit Konfigurationsmöglichkeiten\\ \hline
		Konkret auf eine Programmiersprache zugeschnitten&Gleichzeitige Unterstützung verschiedener Zielplattformen und Programmiersprachen\\ \hline
		Kostenlos	&Häufig kostenpflichtige Lizensierung mit aufwendigen Lizensierungsmaßnahmen\\ \hline 
		\multicolumn{2}{c}{\textbf{User interface design}} \\ \hline
		Didaktisch konzipiert & Funktional konzipiert\\ \hline
		Einfach zu bedienen und schnell zu erlernen	& Vielzahl von Menüpunkten und umfangreiche Werkzeugleisten mit komplexen Konfigurationsmöglichkeiten\\ \hline
		Programmierprinzipien klar darstellen & Unterstützung für optimales Arbeiten\\ \hline
		Automatische Umsetzung von Coding styles&	Konfigurierbare Coding styles\\ \hline
		Automatische Überprüfung des Designs (Designchecker)&	Konfigurierbare Überprüfung des \mbox{Designs} (Designchecker)\\ \hline
		Keine oder wenige Konfigurations\-möglichkeiten&Größtmögliche Konfigurationsmöglichkeiten\\ \hline
		Die Teilschritte des Software-Erstellungsprozesses klar herausstellen. Einüben von typischen Handlungsabläufen&Optimierter Software-Erstellungsprozess mit Automatisierungen im Hintergrund\\ \hline
		nachhaltig Wissen vermitteln&Konzeptionelles Wissen ist notwendige Voraussetzung für die Bedienung  \\ \hline
		Software-Tutor führt durch den Entwicklungsprozess, Unterstützung des kreativen Programmierprozesses&Vollständige Freiheit im Entwicklungsprozess\\ \hline
		Rollenmanagement, über Kenntnisstand konfigurierbar. Oberfläche, die sich dem Kenntnisstand anpassen lässt&	Expertenmodus\\ \hline
	\end{longtable}



\newpage

\begin{thebibliography}{9}
\bibitem{PWZ} Seite \glqq Programmierwerkzeug\grqq. 
			In: Wikipedia, Die freie Enzyklopädie. 
			Bearbeitungsstand: 8. Juni 2018, 09:16 UTC. 
			URL: \url{https://de.wikipedia.org/w/index.php?title=Programmierwerkzeug&oldid=178129986} 
			(Abgerufen: 25. Oktober 2019, 14:54 UTC)
\bibitem{BlueJ} Kings's College London, BlueJ, A free Java Development Environment designed for beginners.
			URL: \url{https://www.bluej.org/} 
			(Abgerufen: 25. Oktober 2019)
\bibitem{EclipseForEducation} Eclipse Foundation: Eclipse IDE for Education 
			URL: \url{https://wiki.eclipse.org/Eclipse_IDE_for_Education} 
			(Abgerufen: 25. Oktober 2019)
			
\end{thebibliography}

\Disclaimer
\end{document}

htw saar
Hochschule für
Technik und Wirtschaft
des Saarlandes

University of
Applied Sciences

Kontakt

Hochschule für Technik und Wirtschaft
des Saarlandes
Goebenstraße 40
66117 Saarbrücken

Telefon: (0681) 58 67 - 0
Telefax: (0681) 58 67 - 122
E-Mail: info@htwsaar.de

Aufsichtsbehörde:
Staatskanzlei des Saarlandes

Folge uns