Programmierwerkzeuge-00-Unterrichtskonzept
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}