\documentclass[parskip=full]{scrartcl} \usepackage[utf8]{inputenc} % utf8 file encoding \usepackage[T1]{fontenc} % powerful pdf output encoding \usepackage[color]{PPaushang} \usepackage{helvet} \usepackage{csquotes} \usepackage{hyperref} \hypersetup{ pdftitle={PSE: Tipps}, pdfcreator={KIT, IPD Snelting}, debug=true, bookmarks=true, bookmarksopen=true, bookmarksopenlevel=2, } \usepackage[german]{babel} \usepackage{pgfplotstable} \title{Praxis der Software-Entwicklung \\ \Large{Tipps und Tricks}} \author{% \normalsize{Lehrstuhl Programmierparadigmen}\\ \normalsize{Karlsruher Institut f\"ur Technologie (KIT)}} \date{\normalsize{Stand: \today}} \let\Sectionmark\sectionmark \def\sectionmark#1{\def\Sectionname{#1}\Sectionmark{#1}} \newcommand{\artefakt}[1]{\textbf{Artefakt der Phase \Sectionname :} #1} \begin{document} \maketitle Manche Tipps und Tricks wiederholen wir häufig. Dies ist eine Sammlung, um nichts zu vergessen und weniger Fehler beim Erklären zu machen. \section{Technisches} \dictum[Francis Glassborow]{ Good programmers use their brains, but good guidelines save us having to think out every case. } \subsection{Versionskontrollsystem} Wir empfehlen Subversion oder Git, weil wir als Betreuer damit Erfahrung haben. Git-Tipps: \begin{itemize} \item \href{http://try.github.io}{Interactive Git Tutorial}: für Anfänger. \item \href{http://gitref.org/}{Git Reference}: relativ kompakte Anleitung. \item \href{http://git-scm.com/}{Offizielle Git Projektseite} \item \href{http://eagain.net/articles/git-for-computer-scientists/} {Git for Computer Scientists}: \enquote{Quick introduction to git internals for people who are not scared by words like Directed Acyclic Graph.} \item Vermeide den Parameter \texttt{--force} bzw. \texttt{-f}. Häufig schiebst du damit Probleme nur deinen Teamkollegen zu. \end{itemize} Genereller Tip: Keine generierten Dateien ins einchecken. Zum Beispiel erzeugt \TeX{} üblicherweise einige Dateien (Endungen wie log, aux, out oder blg) beim Erstellen einer pdf. Diese sollten nicht im Versionskontrollsystem landen. Ebensowenig die erzeugte pdf. \subsection{Dokumentenformat} Wir empfehlen \LaTeX, weil es sich gut mit Versionskontrollsystemen vereinbaren lässt und man hier schon für die Bachelorarbeit üben kann. Office o.ä. ist aber auch möglich. \subsubsection{\LaTeX} Statt den normalen Dokumentklassen, empfiehlen wir vor allem für deutsche Dokumente die KOMA-Scriptklassen zu verwenden. Diese sind flexibler und besser für deutsche Typografie ausgelegt. Das bedeutet deutsche Dokumente starten mit der folgenden Deklaration. \begin{verbatim} \documentclass[parskip=full]{scrartcl} \end{verbatim} Das \texttt{parskip=full} sorgt für eine Absatzabstand von einer Zeile und die erste Zeile eines Absatzes wird nicht eingerückt. Das ist im Deutsch das übliche Format, aber nicht im Englischen. Weitere für (deutsche) \LaTeX-Dokument fast immer gute Einstellungen: \begin{verbatim} \usepackage[utf8]{inputenc} % use utf8 file encoding for TeX sources \usepackage[T1]{fontenc} % avoid garbled Unicode text in pdf \usepackage[german]{babel} % german hyphenation, quotes, etc \usepackage{hyperref} % detailed hyperlink/pdf configuration \hypersetup{ % `texdoc hyperref` for options pdftitle={PSE: Tipps}, bookmarks=true, } \usepackage{csquotes} % provides \enquote{} macro for "quotes" \end{verbatim} Die Dokumentation der Pakete ist häufig lesenswert. Insbesondere bei den Paketen hyperref und scrguide (KOMA-Script). Wer TeXLive per Kommandozeile benutzt kann einfach \texttt{texdoc scrguide} aufrufen. Zum Erzeugen eines PDFs aus den \LaTeX-Sourcen empfehlen wir einen Wrapper wie \texttt{latexmk} zu verwenden. Dieser übernimmt beispielsweise das mehrfache Ausführen von \texttt{pdflatex}, wo es notwendig ist. \subsection{GUI Entwürfe} \begin{itemize} \item \href{http://www.inkscape.org/de/}{Inkscape} ist ein freies Vektorzeichenprogramm \item \href{http://pencil.evolus.vn/}{Pencil} ist ein Open-Source GUI Prototyping Tool (enthält Formen für Android, iOS, Web, GTK, Windows XP, Sketch, ...) \item Die \href{http://developer.android.com/tools/index.html}{Android Developer Tools} enthalten einen grafischen UI Builder \item Papier und Tusche geht natürlich auch \end{itemize} \subsection{UML Diagramme} \begin{itemize} \item \href{http://umbrello.kde.org/}{Umbrella} um einfach nur Diagramme zu zeichnen \item \href{http://argouml.tigris.org/}{ArgoUML} um auch Code zu generieren und beim Entwurf zu helfen \item \href{http://www-01.ibm.com/software/rational/uml/}{IBM Rational Software Architect} ist im ATIS Pool installiert. \item \href{http://www.bouml.fr}{BOUML} noch ein UML Tool \item \href{http://www.umlet.com/}{UMLet} noch ein UML Tool \item \href{http://www.umlgraph.org/}{UMLGraph} für Versions-Control-freundliche UML Diagramme. \item \href{http://www.objectaid.com/}{ObjectAid UML Explorer for Eclipse} ein Source-to-Diagram plugin. \end{itemize} \section{Kolloquium} \dictum[Lilly Walters]{ The success of your presentation will be judged not by the knowledge you send but by what the listener receives. } Ein paar Hinweise für die Kollquien bzw. für Präsentation allgemein. \begin{itemize} \item Alleine Üben! Daheim vor dem Spiegel üben. Einen Vortrag nur alleine, aber im Stehen und laut sprechend, vorzutragen ist meist schon lehrreich im Vergleich zu stillem Folienbasteln. \item Vor dem eigenen Team üben und konstruktiv gegenseitig kritisieren. Oft sehen die Kollegen Ticks, die man selbst nicht wahrnimmt. Beispielsweise häufige Ähs, häufiges Wegschauen vom Publikum, verschränkte Arme, Nuscheln, nervöses herumlaufen, etc. \item Lauf und deutlich sprechen. \item 10 Minuten sind nicht lange, aber man kann viel Information darin unterbringen. \item Prof. Snelting achtet sehr auf die Zeit. 10 Minuten sind nicht 12 Minuten und auch nicht 7 Minuten. \item Daumenregel: 2 Minuten pro Folie, also 5 Folien. Ein Folie umfasst dabei möglicherweise Animationen / Overlays. \item Die Folien dem Betreuer zur Durchsicht geben. \item Auf die interessanten Punkte konzentrieren und sich nicht in den Details verlieren. Trotzdem sollte natürlich der Inhalt möglichst vollständig sein. \item Keine Agenda-/Inhaltsverzeichnis-/Gliederungsfolie. Ist nicht mehr zeitgemäß und langweilt nur. \end{itemize} \section{Organisatorisches} \dictum[Bjarne Stroustrup]{ Design and programming are human activities; forget that and all is lost. } \begin{itemize} \item Meldet euch so früh wie möglich im \href{https://studium.kit.edu}{Studierendenportal} für PSE (Pr.Nr. 529) und TSE (Pr.Nr. 455) an. \item Mails an den Betreuer sollten vom Phasenverantwortlichen kommen. \end{itemize} \section{Pflichtenheft} \dictum[Dwight Eisenhower]{ I have always found that plans are useless, but planning is indispensable. } \artefakt{PDF Dokument} Das fertige (Software-)Produkt wird am Ende der gesamten Entwicklung am Pflichtenheft gemessen (Stichwort Endabnahme). Stellt der Auftraggeber zu große Unterschiede fest, wird er nicht bezahlen. D.h.\ schon das Pflichtenheft muss es dem Leser ermöglichen, eine exakte Vorstellung des fertigen Produkts zu bekommen. Insbesondere müssen \emph{alle} Produktfunktionen und -daten genannt und hinreichend genau beschrieben werden, (G)UI-Entwürfe sind Pflicht, Bedienelemente müssen erklärt sein (z.B. Menüführung), und der Leser muss durch das Pflichtenheft wissen, wie er das fertige Produkt verwenden kann (Stichwort Testfallszenarien). \begin{description} \item[Musskriterien] Mindestanforderungen, gehen aus Aufgabenstellung hervor. Möglichst klein halten. \item[Wunschkriterien] Von den Gruppen selbst definierte, zusätzliche Funktionalität. \item[Abgrenzungskriterien] Was unterstützt unser Produkt explizit \emph{nicht}. \end{description} Und noch einige generelle Anforderungen an das Pflichtenheft. \begin{itemize} \item Wird jedes Kriterium durch mindestens einen Testfall geprüft? Zumindest intern (möglicherweise auch direkt im Pflichtenheft selbst) sollte für jedes Kriterium eine Liste an Testreferenzen und für jeden Test eine Liste an Kriteriumsreferenzen feststehen. \item Man stelle sich vor, das Pflichtenheft wird für Entwurf und Implementierung an ein anderes Team übergeben und das Ergebnis kommt zur Qualitätssicherung zurück. Wie zuversichtlich seid ihr, dass das Ergebnis euren Vorstellungen entspricht? Abweichungen von euren Vorstellung dürfen nur kritisiert werden, wenn dadurch Testfälle fehlschlagen. \item Das Pflichtenheft sollte auch von nicht technisch-versierten Menschen zu großen Teilen verstanden werden können. Am besten jemand fach-fremden zum Lesen geben und danach Verständnisfragen stellen. \item Erfahrungsgemäßer Umfang: ca. 40 Seiten \end{itemize} \subsection{Struktur} Beschreibung und Beispiele von Pflichtenheften finden sich in der Vorlesung Softwaretechnik 1. Die Struktur muss aber nicht exakt übernommen werden. Sinnvolle Änderungen könnten sein: \begin{itemize} \item Funktionale Anforderungen von Muss- und Wunschkriterien mischen und durch Layout, Stil, Marker, Icons entsprechend kennzeichnen. \item Ein Pflichtenheft darf mehr enthalten als nur einen Katalog an Kriterien. Das Endprodukt soll komplett erklärt werden, also könnte Hintergrundwissen aus anderen Quellen hilfreich sein. \item Reihenfolge der Kapitel verändern, so dass es flüssiger von vorne nach hinten gelesen werden kann. \item Testfallszenarien als Liste formatieren, so dass es als Checkliste für den Tester fungiert. Ein Punkte sollte dabei immer genau eine Aktion des Testers und die erwartet Reaktion des Programms sein. \end{itemize} \subsection{Technisches Schreiben} Technisches Schreiben ist wichtig für alle Arten von technischen und wissenschaftlichen Dokumenten, also auch API-Dokumentation, Bachelorarbeit und Pflichtenheft. Es bedeutet vor allem eine präzise Ausdrucksweise und widerspricht dabei einigen Regeln, die man im Deutschunterricht gelernt hat. Ein paar praktische Tipps: \begin{itemize} \item Vermeide Adjektive. Oft (nicht immer) sind sie unnötig oder ein schlechter Ersatz für einen ungenauen Begriff. \item Definiere Begriffe klar und verwende keine Synonyme. Synonyme lassen offen, ob genau das gleiche gemeint ist oder nur etwas ähnliches. \item Abkürzungen sollten bei der ersten Verwendung (EV) ausgeschrieben werden. Nach der EV reicht dann die Kurzform. \item Versuche konkrete Zahlen und Namen anzugeben. Vermeide ungenaue Ausflüchte wie: meistens, viele, oft, möglichst, üblich, jemand, manche. \item Viele kurze Sätze sind einfacher zu verstehen als wenige lange Sätze. \item Beispiele machen das Endprodukt greifbarer. \item Illustrationen minimalistisch halten (z.B. IKEA Bauanleitung). Eine Information, ein Bild. Lieber mehrere ähnliche Bilder als ein komplexes Bild. \item Vermeide Wiederholung, stattdessen Referenzen benutzen. Wiederholungen haben oft subtile Unterschiede, was zu Unklarheit und Verwirrung führt. Bei Änderungen wird oft vergessen, dass Wiederholungen auch angepasst werden müssen. \item Versionskontrolle ergibt auch für technische Texte Sinn und nicht nur für Code. \end{itemize} Das Pflichtenheft ist das entscheidenste Dokument zwischen Kunde und Entwickler am Ende eines Projekts. Es darf \textbf{keinen Spielraum für Interpretationen} offen lassen. \subsection{Inhalt der Präsentation} \begin{itemize} \item Kurze Einführung zur Aufgabenstellung \item Überblick über die wichtigsten Features \item Grundsätzliche selbstgesetzte Rahmenbedingungen \item Ein Testfallszenario als anschauliches durchgehenden Beispiel \end{itemize} \section{Entwurf} \dictum[Bob Martin]{ Design is the art of separation, grouping, abstraction, and hiding. The fulcrum of design decisions is change. Separate those things that change for different reasons. Group together those things that change for the same reason. } \artefakt{PDF Dokument mit UML-Diagrammen, Klassenbeschreibungen, Erläuterungen, Designentscheidungen} \subsection{Inhalt} \begin{itemize} \item Einleitung mit grobem Überblick. Dieser Abschnitt soll an das Pflichtenheft anschließen und die Aufteilung in die Pakete erklären. \item Detaillierte Beschreibung \emph{aller} Klassen. Das beinhaltet (JavaDoc) Beschreibungen zu allen Methoden, Konstruktoren, Packages und Klassen. \item Beschreibung von charakteristischen Abläufen anhand von Sequenzdiagrammen. Beispielsweise bieten sich Testszenarien aus dem Pflichtenheft hier an. Wir empfehlen Sequenzdiagramme möglichst früh zu erstellen, dann dabei werden die Schnittstellen zwischen Packages und Klassen klar. \item Aufteilung in Klassen/Pakete die unabhängig voneinander implementiert und getestet werden können. Mit Blick auf den Implementierungsplan. \item Änderungen zum Pflichtenheft, bspw. gekürzte Wunschkriterien \item Vollständiges großformatiges Klassendiagramm im Anhang. Ausschnitte/Teile können bereits vorher verwendet werden, um Teilkomponenten zu beschreiben. \item Identifikation von Entwurfsmustern um Struktur gröber zu beschreiben (möglicherweise). \item Erfahrungsgemäßer Umfang: über 100 Seiten, primär Klassenbeschreibungen \end{itemize} \subsection{Bewertung eines Entwurfs} Hier ein paar Tipps, wie man einen Entwurf einschätzen kann. Paradoxe Anforderungen zeigen, dass gutes Design ein Kunst ist. \begin{itemize} \item Geheimnisprinzip (information hiding) beachtet? Jede Entwurfsentscheidung sollte in genau einer Klasse gekapselt sein, so dass eine Änderung dieser Entscheidung auch nur diese eine Klasse betrifft. Allgemein sollte ein Klasse/Paket möglichst wenig interne Details nach außen preisgeben. \item Lose Koppelung zwischen Klassen/Paketen? Abhängigkeiten zu fremden Schnittstellen machen spätere Änderungen aufwendiger. Im UML Diagramm sollten möglichst wenig Verbindungen zwischen Klassen zu sehen sein. Siehe auch Law of Demeter. \item Starke Kohäsion innerhalb von Klasse/Paket? Wenn Methoden einer Klasse eigentlich unabhängig voneinander sind, ist es ein Zeichen, dass eine Auftrennung in zwei Klassen sinnvoll sein könnte. Kohäsion führt zu besserer Wiederverwendbarkeit der einzelnen Klassen. \item Klassen/Pakete sind gleichzeitig erweiterbar und stabil? Erweiterbarkeit bei stabilem Interface ist der große Vorteil von objekt-orientertem gegenüber proceduralem Entwurf, der durch Vererbung und Polymorphie erreicht wird. Siehe auch Open-Closed Principle. \item Liskovsches Substitutionsprinzip bei Vererbung erfüllt? Unterklassen sollte alle Nachbedingungen und alle Invarianten der Oberklasse erfüllen. Andernfalls könnte es zu Fehlern kommen, wenn eine Unterklasse als Oberklasse verwendet wird. \item Verhalten von Implementierung getrennt? Das Verhalten (Was soll getan werden) ändert sich sehr viel häufiger als die Implementierung (konkrete Algorithmen). Beispielsweise sind Sortieralgorithmen recht statisch, während die Frage wonach sortiert werden soll, sehr flexibel sein sollte. \item Keine zyklischen Abhängigkeiten? Beispielsweise ist eine zyklische Abhängigkeit von Konstruktoren schlicht nicht möglich. Eine zyklische Abhängigkeit von größeren Modulen bedeutet, dass man alles auf einmal implementieren muss, bevor irgendwas funktioniert. Entwurfsmuster um Abhängigkeiten zu entfernen: Observer, Visitor, Strategy \item Lokalitätsprinzip beachtet? Eine Klasse/Paket/Methode sollte für sich verständlich sein, ohne das Kontext notwendig ist. \end{itemize} \subsection{Mehr Links} \begin{itemize} \item \href{https://github.com/MatzeB/texdoclet}{TeXdoclet} um mit JavaDoc \LaTeX{} zu erzeugen. Das ermöglicht den automatischen Flow: ArgoUML $\rightarrow$ JavaDoc+TeXdoclet $\rightarrow$ \LaTeX{} $\rightarrow$ Section \enquote{Klassenbeschreibung} im Entwurf. \item \href{http://www.iste.uni-stuttgart.de/se-old/links/links-se/entwurfsregeln-fuer-den-objektorientierten-entwurf/principles.html}{Prinzipien für den objektorientierten Entwurf}, Guter Überblicksartikel. \item \href{http://prinzipien-der-softwaretechnik.blogspot.de/}{Prinzipien Der Softwaretechnik}, Blog zum Thema Prinzipien im Software Engineering. \end{itemize} \subsection{Inhalt der Präsentation} \begin{itemize} \item Kurze Einführung und Verbindung zum Pflichtenheft \item Ein Sequenzdiagram als anschauliches Beispiel mit Ausschnitten aus dem Klassendiagramm. \item Überblick über das Gesamtklassendiagramm, Pakete, Module geben. \item Gestrichene Wunschkriterien \item Verwendete externe Resourcen (Bilder,Frameworks,Bibliotheken,Sounds,Musik,etc) \item Nur kurz erwähnen weil eher langweilig: Eigene Formate, Datenbankschemata, Einstellungen und Dialoge. \end{itemize} \section{Implementierung} \dictum[Linus Torvalds]{Talk is cheap. Show me the code.} \artefakt{Implementierungsplan zu Beginn, Implementierungsbericht und vollständiger source code} \subsection{Implementierungsplan} \begin{itemize} \item Klarer zeitlicher Ablauf der Implementierungsphase, um frühzeitig Verzögerungen zu bemerken. \item Klare Aufgabenverteilung im Team. \item Abhängigkeiten aus dem Entwurf müssen beachtet werden. \item Als Form bietet sich ein GANTT Chart an. Verpflichtend ist es aber nicht. \item Zu \emph{Beginn} der Implementierungsphase beim Betreuer abzugeben. \end{itemize} \subsection{Implementierungsbericht} \begin{itemize} \item Erfahrungsgemäßer Umfang: ca. 20 Seiten \item Einleitung mit Anschluss auf Pflichtenheft und Entwurf \item Dokumentation über Änderungen am Entwurf, beispielsweise entfernte oder neu hinzugefügte Klassen und Methoden \item Welche Muss- und Wunschkriterien sind implementiert? \item Welche Verzögerungen gab es im Implementierungsplan? Kann beispielsweise als zweites GANTT Diagramm am Ende dargestellt werden. \item Übersicht zu unit tests \end{itemize} \subsection{Unittests} \begin{itemize} \item Von Anfang an Unittests benutzen. Diese Tests gehören \emph{nicht} in die Phase Qualitätssicherung. \item Vor allem nicht-graphische Klassen können so frühzeitig getestet und Regressionen vermieden werden. \item Nur öffentliche Schnittstellen testen. Private Methoden werden nicht getestet. \item Unittests testen nur kleine \enquote{units} (üblicherweise einzelne Klassen) für sich. Es sollen nicht ganze Testszenarien getestet werden. \end{itemize} \subsection{Sonstiges} \begin{itemize} \item Warnungen reparieren. Es ist empfehlenswert, dass ein Projekt beim Bauen keine Warnungen ausgibt. Eine Warnung bedeutet, dass der Code üblicherweise aber nicht garantiert fehlerhaft ist. In Ausnahmen kann der Programmierer in Java dann Annotationen einfügen um Warnungen zu unterdrücken. \item Warnungen anschalten. In Eclipse kann man zusätzliche Warnungen anschalten: Project properties $\rightarrow$ Java Compiler $\rightarrow$ Errors/Warnings. Standardmäßig wird das meiste ignoriert. Beispielsweise kann man aktivieren, dass eine Zuweisung innerhalb einer Bedingung \enquote{\texttt{if(a=b)}} eine Warnung (oder sogar ein Fehler) ist. \item Kommentare im Code (also nicht API Doku) sollten das \enquote{Warum} klären, nicht das \enquote{Wie}. Es ist naturgemäß schwierig vorherzusehen, welche Warum-Fragen sich jemand stellt, der ein Stück Code liest. Die Fragen sind üblicherweise \enquote{Warum ist X hier notwendig?}, \enquote{Warum ist kein X hier?} oder \enquote{Warum X, wobei Y doch besser wäre?}. \item Exceptions (nicht RuntimeException) für Fehler beim Aufrufer. Assertions für interne Konsistenzfehler bzw. um Annahmen explizit zu machen. \end{itemize} \subsection{Inhalt der Präsentation} \begin{itemize} \item Was wurde implementiert? Welche Wunschkriterien gestrichen? \item Zeitplan eingehalten? Wo nicht? \item Unerwartete Probleme bei der Implementierung? \item Größere Änderungen am Entwurf? \item Grobe Statistiken. Lines of Code, Wieviele Commits, Arbeitsaufteilung im Team. \end{itemize} \begin{figure}\centering \begin{tikzpicture} \pgfplotstableread{ % Read the data into a table macro Label Alice Bob Carol Dan Eve 1 623 523 923 323 133 2 1223 923 1426 923 1433 3 1125 1523 1222 1523 1734 4 1328 1226 1821 1923 2435 5 2126 1998 1987 2123 2539 }\datatable \begin{axis}[ ybar stacked, % Stacked horizontal bars ymin=0, % Start x axis at 0 xtick=data, % Use as many tick labels as y coordinates xticklabels from table={\datatable}{Label} ] \addplot [fill=green!70!blue]table [y=Bob, x expr=\coordindex] {\datatable}; \addplot [fill=red!80!yellow] table [y=Carol, x expr=\coordindex] {\datatable}; \addplot [fill=blue] table [y=Dan, x expr=\coordindex] {\datatable}; \addplot [fill=yellow] table [y=Alice, x expr=\coordindex] {\datatable}; \addplot [fill=red!50!blue]table [y=Eve, x expr=\coordindex] {\datatable}; \end{axis} \end{tikzpicture} \label{fig:loc-per-person} \caption{Anzahl Codezeilen je Person über 5 Wochen hinweg. Diese Art von Graph zeigt dass die Verteilung im Team fair aussieht. Auch sieht man den kontinuierlichen Wachstum.} \end{figure} \section{Qualitätssicherung} \dictum[Edsger Dijkstra]{ Program testing can be used to show the presence of bugs, but never to show their absence! } \artefakt{Testberichte} \begin{itemize} \item Überdeckung der Unittests maximieren. (Siehe bspw.: \href{http://www.eclemma.org/}{EclEmma}) Wenn GUIs im Spiel sind, ist 100\% Überdeckung üblicherweise nicht möglich. \item Komplette Testszenarien aus dem Pflichtenheft durchgehen. Ein Testdurchlauf sollte möglichst automatisch ablaufen. \item \href{http://developer.android.com/tools/help/monkeyrunner_concepts.html}{Monkey Testing} für einfaches GUI testen. Der Ertrag ist vermutlich nicht sehr groß, also nicht zuviel Aufwand hineinstecken. Automatisierung mit \href{https://code.google.com/p/robotium/}{Robotium} und \href{http://developer.android.com/tools/help/uiautomator/index.html}{UIAutomator}? \item \href{http://developer.android.com/tools/debugging/improving-w-lint.html}{Lint} und andere statische Werkzeuge recherchieren. Codequalität kann gar nicht gut genug sein. \item \href{http://en.wikipedia.org/wiki/Usability_testing#Hallway_testing}{Hallway Usability Testing}. Systematisches Vorgehen ist wichtig, also vorher Fragen, Aufgaben und Umfang festlegen. Qualitative (Interviewzitate) und quantitative (Durchschnitt über alle Tester) Ergebnisse dokumentieren. \item Alle gefunden Bugs und deren Reparatur dokumentieren. So entsteht der Testbericht am Ende. \end{itemize} \newpage \section{Abschlusspräsentation} \dictum[George Torok]{ We love to hear stories. We don’t need another lecture. Just ask kids. } \artefakt{Präsentationsfolien} Showtime! \subsection{Inhalt} Wichtigster Inhalt ist \enquote{\textbf{Was rauskam}}. Präsentiert eure Applikation. Das darf so kreativ sein, wie ihr euch traut. Von der Livedemo bis zum Theaterspielen ist alles erlaubt. Nebenbei dürfen folgende Informationen auch in den Vortrag: \begin{itemize} \item Kurze Statistik: Wieviel Zeilen Code, wieviele Commits und Tests, wieviel Überdeckung? \item Lernerfahrung: Was hat erstaunlich gut funktioniert? Was war aufwendiger als gedacht? Was würden wir beim nächsten Mal anders machen? Insbesondere Soft-Skill Erfahrung in Sachen Teamarbeit und Organisation sind hier interessant. \item Die ganze Gruppe: Mindestens sollten alle Namen auf den Folien stehen. Alle Teammitglieder sollten sich mal zeigen. Vielleicht können sogar alle sinnvoll in die Präsentation eingebunden werden? \end{itemize} Zu diesem Zeitpunkt habt ihr erfolgreich ein ordentliches Softwareprojekt von Anfang bis Ende durchgeführt. Selbst wenn nicht alles glatt lief, so könnt ihr trotzdem Stolz auf euch sein. Egal was ihr gemacht habt, völlig falsch kann es nicht gewesen sein. \subsection{Mehr Links} \begin{itemize} \item \href{http://www.presentationzen.com/}{Presentation Zen} \item \href{http://beza1e1.tuxen.de/articles/technical_presentation.html}{9 Tips How to Give a Technical Presentation} \item \href{http://dilbert.com/blog/entry/the_science_of_making_your_story_memorable/}{The Science of Making Your Story Memorable} \item \href{http://www.nytimes.com/2013/10/06/magazine/and-then-steve-said-let-there-be-an-iphone.html?pagewanted=all}{Backstage at the First iPhone Presentation} \end{itemize} \newpage \section{Feedback} Wir wissen gerne was wir besser machen könnten. Falls ihr also den Jahrgängen nach euch etwas Gutes tun wollt, dann gebt eurem Betreuer ein Feedback. Zum Beispiel könnt ihr die folgenden beiden Fragen beantworten: \begin{enumerate} \item Auf einer Skala von 0 (schlecht) bis 10 (perfekt), wie fandet ihr PSE/TSE? \hfill\fbox{\begin{minipage}{1cm} \hspace{0.4cm}\vspace{10pt} \end{minipage}} \item Warum in Frage 1 genau diese Zahl? \end{enumerate} \end{document}