665 lines
20 KiB
TeX
665 lines
20 KiB
TeX
\documentclass{beamer}
|
||
|
||
%%%%% title %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||
\title[]{Scientific Computing --- Reproduzierbarkeit}
|
||
\author[]{Jan Grewe}
|
||
\institute[]{Neuroethology}
|
||
\date[]{WS 14/15}
|
||
\titlegraphic{\includegraphics[width=0.3\textwidth]{UT_WBMW_Rot_RGB}}
|
||
|
||
%%%%% beamer %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||
\mode<presentation>
|
||
{
|
||
\usetheme{Singapore}
|
||
\setbeamercovered{opaque}
|
||
\usecolortheme{tuebingen}
|
||
\setbeamertemplate{navigation symbols}{}
|
||
\usefonttheme{default}
|
||
\useoutertheme{infolines}
|
||
% \useoutertheme{miniframes}
|
||
}
|
||
|
||
%\AtBeginSection[]
|
||
%{
|
||
% \begin{frame}<beamer>
|
||
% \begin{center}
|
||
% \Huge \insertsectionhead
|
||
% \end{center}
|
||
% \end{frame}
|
||
%}
|
||
|
||
\setbeamertemplate{blocks}[rounded][shadow=true]
|
||
\setcounter{tocdepth}{1}
|
||
|
||
%%%%% packages %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||
\usepackage[english]{babel}
|
||
\usepackage{amsmath}
|
||
\usepackage{bm}
|
||
\usepackage{pslatex} % nice font for pdf file
|
||
%\usepackage{multimedia}
|
||
\usepackage{wasysym}
|
||
\usepackage{tikz}
|
||
|
||
\newcommand{\naZ}{\mathds{N}}
|
||
\newcommand{\gaZ}{\mathds{Z}}
|
||
\newcommand{\raZ}{\mathds{Q}}
|
||
\newcommand{\reZ}{\mathds{R}}
|
||
\newcommand{\reZp}{\mathds{R^+}}
|
||
\newcommand{\reZpN}{\mathds{R^+_0}}
|
||
\newcommand{\koZ}{\mathds{C}}
|
||
|
||
%%%% graphics %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||
\usepackage{graphicx}
|
||
|
||
%%%%% listings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||
\usepackage{listings}
|
||
\lstset{
|
||
basicstyle=\ttfamily,
|
||
numbers=left,
|
||
showstringspaces=false,
|
||
language=Matlab,
|
||
commentstyle=\itshape\color{darkgray},
|
||
keywordstyle=\color{blue},
|
||
stringstyle=\color{green},
|
||
backgroundcolor=\color{blue!10},
|
||
breaklines=true,
|
||
breakautoindent=true,
|
||
columns=flexible,
|
||
frame=single,
|
||
captionpos=b,
|
||
xleftmargin=1em,
|
||
xrightmargin=1em,
|
||
aboveskip=10pt
|
||
}
|
||
|
||
\graphicspath{{figures/}}
|
||
|
||
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||
\begin{document}
|
||
|
||
\begin{frame}[plain]
|
||
\frametitle{}
|
||
\vspace{-1cm}
|
||
\titlepage % erzeugt Titelseite
|
||
\end{frame}
|
||
|
||
\subsection{Reproduzierbarkeit von wisschenschaftlichen Ergebnissen}
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||
\begin{frame}
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Problem --- Fehlende Informationen}
|
||
\only<1>{
|
||
\begin{figure}
|
||
\includegraphics[width=0.9\columnwidth]{./images/rung_brazma_2013}
|
||
\end{figure}
|
||
}
|
||
\only<2>{
|
||
\begin{tikzpicture}
|
||
\node[anchor=south west,inner sep=0] (image) at (0,0) {
|
||
\includegraphics[width=0.8\columnwidth]{images/rung_brazma_2013_grey}};
|
||
\node[align=center,red,font={\normalsize\bfseries}] at (image.center)
|
||
{``The authors replicated two studies ‘in principle’\\ and six
|
||
‘partially’, whereas ten were not reproduced,\\ ...\\ The main
|
||
reason for the lack of reproducibility \\ was the
|
||
unavailability of all relevant data or metadata:''};
|
||
\end{tikzpicture}
|
||
}
|
||
\only<3>{
|
||
\begin{figure}
|
||
\includegraphics[width=0.8\columnwidth]{./images/hines_etal_2014}
|
||
\end{figure}
|
||
}
|
||
\only<4> {
|
||
\begin{tikzpicture}
|
||
\node[anchor=south west,inner sep=0] (image) at (0,0) {
|
||
\includegraphics[width=0.8\columnwidth]{images/hines_etal_2014_grey}};
|
||
\node[align=center,red,font={\normalsize\bfseries}] at
|
||
(image.center) {``... our two laboratories quite reproducibly
|
||
were unable\\ to replicate each other’s
|
||
fluorescence-activated cell sorting \\ (FACS) profiles of
|
||
primary breast cells.``};
|
||
\end{tikzpicture}
|
||
}
|
||
\end{frame}
|
||
|
||
\begin{frame}
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Problem --- Gro{\ss}er Aufwand}
|
||
\only<1>{
|
||
\begin{figure}
|
||
\includegraphics[width=0.9\columnwidth]{./images/savage_vickers_2009_title}
|
||
\end{figure}
|
||
}
|
||
\only<2> {
|
||
\begin{figure}
|
||
\includegraphics[width=0.9\columnwidth]{./images/savage_vickers_2009}\\
|
||
\tiny{Savage and Vickers, 2009, PLoSOne}
|
||
\end{figure}
|
||
}
|
||
\end{frame}
|
||
|
||
\begin{frame}
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Auch auf im Labor --- Das ``Dead\footnote[frame]{Im Sinne von ''nicht mehr im Labor''} PhD - student'' Problem}
|
||
\begin{columns}
|
||
\begin{column}{2cm}
|
||
\begin{figure}
|
||
\includegraphics[width=0.9\columnwidth]{./images/project_start}\\
|
||
\end{figure}
|
||
\end{column} \pause
|
||
\begin{column}{4cm}
|
||
\begin{figure}
|
||
\includegraphics[width=0.9\columnwidth]{./images/project_middle}\\
|
||
\end{figure}
|
||
\end{column}\pause
|
||
\begin{column}{5cm}
|
||
\begin{figure}
|
||
\includegraphics[width=0.9\columnwidth]{./images/project_end}\\
|
||
\end{figure}
|
||
\end{column}
|
||
\end{columns}
|
||
\end{frame}
|
||
|
||
\begin{frame}
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Ist eine Herausforderung}
|
||
|
||
\begin{itemize}
|
||
\item Auf \textbf{lokaler} wie auch \textbf{globaler} Ebene.
|
||
\item Fehlende Annotation von Daten.
|
||
\item Information is h\"aufig weit verteilt (Laborbuch,
|
||
Protokollbl\"atter, Programmcode, ...).
|
||
\item Meist in nicht-maschinenlesbarer Form.
|
||
\item Manuelle Datenannotation ist ein gro{\ss}er Aufwand.
|
||
\item Implizites Wissen (Labortaditionen, Standardprotokolle) sind
|
||
nicht explizit verf\"ugbar.\pause \vspace{1em}
|
||
\item Ist nicht nur ein Problem in den Neurowissenschaften.\pause
|
||
\item Ist nicht nur ein Problem einer anderen Person sondern
|
||
etwas, was einen sehr schnell pers\"onlich in Schwierigkeiten
|
||
bringen kann.
|
||
\end{itemize}
|
||
\end{frame}
|
||
|
||
|
||
\begin{frame}
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{DFG: ``Gute wissenschaftliche Praxis''}
|
||
\begin{itemize}
|
||
\item Daten, auf denen Publikationen basieren m\"ussen f\"ur den
|
||
Zeitlraum von 10 Jahren archiviert und Verf\"ugbar gehalten
|
||
werden.
|
||
\item Auf Verlangen m\"ussen die Daten herausgegeben werden.
|
||
\item Daten m\"ussen verst\"andlich annotiert sein.
|
||
\item \url{http://www.dfg.de/foerderung/grundlagen_rahmenbedingungen/gwp/}
|
||
\end{itemize}
|
||
\end{frame}
|
||
|
||
|
||
\section{Annotationen}
|
||
|
||
\begin{frame}[plain]
|
||
\huge{1. Annotation von Daten und Code}
|
||
\end{frame}
|
||
|
||
\begin{frame}
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Annotation}
|
||
|
||
Probleme, die jeder kennt (oder kennenlernen wird):
|
||
\begin{enumerate}
|
||
\item Wie habe ich die Analyse nochmal gestartet?
|
||
\item Welche Parameter hatte ich f\"ur den Fit benutzt?\pause
|
||
\end{enumerate}
|
||
|
||
L\"osungsans\"atze:
|
||
\begin{enumerate}
|
||
\item Annotation der Ergebnisse. Zu jeder Abbildung/Analyse eine
|
||
Datei, die beschreibt, wie sie erstellt wurde.
|
||
\item Kommentare im Code.
|
||
\item Automatisches sammeln von Metadaten z.B. in Matlab Strukturen.\pause
|
||
\item \textbf{Provenance Tracking}
|
||
\end{enumerate}
|
||
\end{frame}
|
||
|
||
|
||
\begin{frame}
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Automatische Annotation}
|
||
|
||
Wenn man sich nicht auf ein gro{\ss}es Provenance Tracking System
|
||
einlassen will, z.B. weil es nicht der Labortradition entspricht,
|
||
dann stellt sicher, dass\footnote[frame]{Auch f\"ur euch selbst!}:
|
||
|
||
\begin{itemize}
|
||
\item Annotationen ``bei'' den Daten, bzw. den Resultaten gefunden
|
||
werden.
|
||
\item Annotationen lesbar sind!
|
||
\item Der Code lesbar ist!
|
||
\item Die Daten und Resultate in nachvollziehbarer und einheitlicher
|
||
Form organisiert sind.
|
||
\item Klar ist, welche \textbf{Version} der Analyse zu den Resultaten
|
||
z.B. der Masterarbeit gef\"uhrt hat.
|
||
\end{itemize}
|
||
\end{frame}
|
||
|
||
|
||
\section{Versionskontrolle}
|
||
\begin{frame}[plain]
|
||
\huge{2. Versionskontrolle}
|
||
\end{frame}
|
||
|
||
\begin{frame}
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\frametitle{Versionskontrolle}
|
||
|
||
Jeder kennt es:
|
||
\begin{enumerate}
|
||
\item Ich versuche das gleiche Programm nach ein paar Tagen wieder
|
||
auszuf\"uhren...\pause
|
||
\item Verdammt, ... eine Fehlermeldung, die vorher nicht da war (glaube ich).
|
||
\item Wann habe ich was an dem code ge\"andert?!?\pause
|
||
\end{enumerate}
|
||
\vspace{0.5cm}
|
||
\Large{L\"osung: \textbf{Versionskontrolle}}
|
||
\end{frame}
|
||
|
||
\begin{frame}
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Versionskontrolle}
|
||
|
||
Es gibt verschiedene Systeme, die einen im Hintergrund
|
||
unterst\"utzen \"Anderungen zu verfolgen.
|
||
\begin{enumerate}
|
||
\item Subversion.
|
||
\item Mercurial.
|
||
\item Git.
|
||
\item ... und viele andere.\pause
|
||
\end{enumerate}
|
||
|
||
Hier als Beispiel \textbf{Git}!
|
||
\url{http://www.git-scm.git}
|
||
\end{frame}
|
||
|
||
\begin{frame}
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Versionskontrolle --- Git ---}
|
||
|
||
\begin{itemize}
|
||
\item Aktuell das beliebteste VCS.
|
||
\item Ist open-source!
|
||
\item F\"ur alle Platformen verf\"ugbar.
|
||
\item Sehr gute Unterst\"utzung durch die Community.
|
||
\item Viele Web-Services, die auf Git basieren.
|
||
\item Viele Entwicklungsumgebungen (auch Matlab ab 2015b)
|
||
unterst\"utzen die Versionskontrolle mit Git.
|
||
\end{itemize}
|
||
\begin{columns}
|
||
\begin{column}{5cm}
|
||
\begin{figure}
|
||
\includegraphics[width=0.6\columnwidth]{images/git_logo}
|
||
\end{figure}
|
||
\end{column}
|
||
\begin{column}{5cm}
|
||
\begin{figure}
|
||
\includegraphics[width=0.5\columnwidth]{images/github_logo}
|
||
\end{figure}
|
||
\end{column}
|
||
\end{columns}
|
||
\end{frame}
|
||
|
||
|
||
\begin{frame}
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Versionskontrolle --- Git ---}
|
||
Vereinfacht die Zusammenarbeit:
|
||
\begin{figure}
|
||
\includegraphics[width=0.45\columnwidth]{images/git_pro_distributed}
|
||
\end{figure}
|
||
\end{frame}
|
||
|
||
|
||
\begin{frame}
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Versionskontrolle --- Git ---}
|
||
Aber auch nur auf dem eigenen Rechner
|
||
\begin{figure}
|
||
\includegraphics[width=0.5\columnwidth]{images/git_pro_local}
|
||
\end{figure}
|
||
\end{frame}
|
||
|
||
|
||
\begin{frame}
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Versionskontrolle --- Git ---}
|
||
Typischer Arbeitsablauf --- lokales Repository:
|
||
\only<1-2> {
|
||
\begin{enumerate}
|
||
\item \"Anderungen an einer oder mehreren Dateien.
|
||
\item Bekanntgabe der \"Anderung im VCS (\textit{commit}).
|
||
\item Unter Umst\"anden Synchronisation mit dem Repository auf einem
|
||
Server (\textit{pull} und \textit{push}).
|
||
\end{enumerate}
|
||
}
|
||
\only<1> {
|
||
\begin{figure}
|
||
\includegraphics[width=0.75\columnwidth]{images/git_pro_lifecycle}
|
||
\end{figure}
|
||
}
|
||
\only<2> {
|
||
\begin{figure}
|
||
\includegraphics[width=0.75\columnwidth]{images/pro_git_commits}
|
||
\end{figure}
|
||
}
|
||
\end{frame}
|
||
|
||
|
||
\begin{frame}
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Versionskontrolle --- Git ---}
|
||
|
||
Vorteile von Versionskontrolle:
|
||
|
||
\begin{enumerate}
|
||
\item Nachverfolgung von \"Anderungen. Wer hat was gemacht und wann?
|
||
\item Ver\"anderungen ungeschehen machen.
|
||
\item Jeder Zustand hat eine UUID, die ihn eindeutig identifizieren
|
||
(weltweit, f\"ur alle Zeit).
|
||
\item Es gibt Sicherheit! Wenn ich etwas kaputt mache, dann kann ich
|
||
es wiederherstellen.
|
||
\item Meist m\"uhelose Synchronisation mit anderen Rechnern oder
|
||
Servern.
|
||
\item Wenn mit einem Server synchronisiert, dann ist das Backup eingebaut.
|
||
\item Nicht nur f\"ur Programmcode sondern auch f\"ur Textdateien
|
||
(Bachelor-, Master-, Doktorarbeiten!!)
|
||
\end{enumerate}\pause
|
||
Mehr Information im Web (kostenloses Buch:
|
||
\url{www.git-scm.com/book}. Oder fragt uns, wenn ihr vor dem Problem
|
||
steht.
|
||
\end{frame}
|
||
|
||
\begin{frame}
|
||
\frametitle{Reproduzierbearkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Versionskontrolle --- Git ---}
|
||
|
||
Wir verwalten die Materialien f\"ur diesen Kurs in einem Git Repository.
|
||
\begin{figure}
|
||
\includegraphics[width=0.9\columnwidth]{images/course_git}
|
||
\end{figure}
|
||
\end{frame}
|
||
|
||
|
||
\section{Publikation von Daten und Code}
|
||
|
||
\begin{frame}[plain]
|
||
\huge{3. Publikation von Daten und Code}
|
||
\end{frame}
|
||
|
||
\begin{frame}
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Publikation von Daten und Programmcode}
|
||
|
||
\begin{itemize}
|
||
\item Es gibt mehr und mehr Bestrebungen Daten und Code zu teilen.
|
||
\item Mehrere Gr\"unde daf\"ur:
|
||
\begin{enumerate}
|
||
\item Zusammenarbeit von Experimentatoren und Theoretikern.
|
||
\item Gew\"ahrleistung von Datenverf\"ugbarkeit.
|
||
\item Reproduzierbarkeit von Ergebnissen.
|
||
\item Experimentelle Daten (z.B. \textit{in vivo} Elektrophysiology Daten
|
||
von Affen etc.) werden zunehmend wertvoller, weil die
|
||
Experimente politisch nicht mehr opportun sind.
|
||
\item Forderung von Geldgebern und Journalen.
|
||
\end{enumerate}
|
||
\end{itemize}
|
||
\end{frame}
|
||
|
||
\begin{frame}
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Publikation von Daten und Programmcode}
|
||
Es gibt verschiedene Platformen, die Data Sharing anbieten
|
||
zum Beispiel.
|
||
|
||
\begin{enumerate}
|
||
\item \url{Incf.org}
|
||
\item \url{www.crcns.org}
|
||
\item \url{www.g-node.org}\pause
|
||
\end{enumerate}
|
||
|
||
Sie alle kranken daran, dass es keine Standards gibt, in welcher
|
||
From Daten und Metadaten abgelegt werden.
|
||
\end{frame}
|
||
|
||
|
||
\begin{frame}
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Publikation von Daten und Programmcode}
|
||
|
||
Daten zu publizieren ist ein Problem. Zum einen sind die Datenmengen
|
||
h\"aufig nicht unerheblich, zum anderen gibt es rechtliche Bedenken?
|
||
|
||
\begin{enumerate}
|
||
\item Wem geh\"oren ``meine'' Daten eigentlich?\\ \pause
|
||
Dem Institut oder sogar dem Drittmittelgeber
|
||
\item Wer darf mit meinen Daten was machen?\\
|
||
Hierf\"ur gibt es verschiedene Lizenzmodelle. Generell kann man
|
||
festlegen, dass Daten nur nach Absprache und/oder unter Zitation
|
||
des Urhebers benutzt werden d\"urfen.
|
||
\end{enumerate}
|
||
\end{frame}
|
||
|
||
|
||
\begin{frame}
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Publikation von Daten und Programmcode}
|
||
|
||
Warum sollte ich meinen Programmcode oder meine Daten ver\"offentlichen?
|
||
|
||
\begin{itemize}
|
||
\item Es geht um Wissenschaft!
|
||
\item Sie muss reproduzierbar sein, dass hei{\ss}t, dass andere in
|
||
der Lage sein m\"ussen Deine Ergebnisse nachzuvollziehen und zu
|
||
\"uberpr\"ufen.
|
||
\end{itemize}
|
||
Es sollte eher eine Verpflichtung sein als eine Option.\\\pause
|
||
\vspace{1em}
|
||
|
||
Wenn man seinen Code in einem GitHub Repository hat, dann ist es
|
||
m\"oglich ihn zu archivieren und eine zitierbare DOI zu
|
||
erhalten\footnote[frame]{\url{https://guides.github.com/activities/citable-code/}}.
|
||
\end{frame}
|
||
|
||
|
||
\subsection{Unit Tests}
|
||
|
||
\begin{frame}[plain]
|
||
\huge{4. Unit Tests}
|
||
\end{frame}
|
||
|
||
\begin{frame}
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Unit Tests}
|
||
|
||
\begin{itemize}
|
||
\item[] Woher weiss ich eigentlich, dass mein Programm das tut, was es soll?
|
||
\vspace{0.5cm}
|
||
\item[] Wie stelle ich sicher, dass es auch nach \"Anderung noch all
|
||
das richtig macht, was es vorher tat?
|
||
\vspace{0.5cm}
|
||
\item[] Wie kann ich meinen Programmcode jemandem weitergeben ohne ein
|
||
schlechtes Gewissen zu haben?
|
||
\vspace{0.5cm}
|
||
\end{itemize}
|
||
\pause
|
||
\large{Unit tests!}
|
||
\end{frame}
|
||
|
||
\begin{frame}
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Unit Tests}
|
||
\begin{itemize}
|
||
\item Unit tests sind kleine Programme, die testen, ob sich eine
|
||
Funktion oder ein Programm so verh\"alt, wie es gedacht ist.
|
||
|
||
\item Normalerweise entwickelt man die Tests parallel zur
|
||
eigentlichen Implementierung.
|
||
\end{itemize}
|
||
|
||
\textbf{Vorteile:}
|
||
\begin{itemize}
|
||
\item Findet Probleme sehr fr\"uh..
|
||
\item Formalisiert unsere Erwartungen an das Programm.
|
||
\item Macht es sicher, das Programm zu \"uberarbeiten.
|
||
\item Ist eine Art Dokumentation, die zeigt wie das Programm eingesetzt
|
||
werden soll.
|
||
\end{itemize}\pause
|
||
|
||
\textbf{Limitationen:}
|
||
\begin{itemize}
|
||
\item Der Test kann nur f\"ur die F\"alle Sicherheit geben, die
|
||
explizit getestet werden.
|
||
\item Ist nur so gut, wie der Programierer sich M\"uhe gibt.
|
||
\end{itemize}
|
||
\end{frame}
|
||
|
||
|
||
\begin{frame}[fragile]
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Unit Tests}
|
||
|
||
Seit R2013b unterst\"utzt MATLAB Unit Tests und bietet ein Testing
|
||
Framework.
|
||
|
||
Angenommen man hat eine Funktion, die die Winkel in einem Dreieck berechnen soll:
|
||
|
||
\begin{lstlisting}
|
||
% Copyright 2015 The MathWorks, Inc.
|
||
function angles = rightTri(sides)
|
||
A = atand(sides(1)/sides(2));
|
||
B = atand(sides(2)/sides(1));
|
||
hypotenuse = sides(1)/sind(A);
|
||
C = asind(hypotenuse*sind(A)/sides(1));
|
||
angles = [A B C];
|
||
end
|
||
\end{lstlisting}
|
||
\end{frame}
|
||
|
||
\begin{frame}[fragile]
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Unit Tests}
|
||
Ein Testskript fuer diese Funktion k\"onnte so aussehen:
|
||
\footnotesize
|
||
\begin{lstlisting}
|
||
% Copyright 2015 The MathWorks, Inc.
|
||
tri = [7 9];
|
||
triIso = [4 4];
|
||
tri306090 = [2 2*sqrt(3)];
|
||
|
||
% preconditions
|
||
angles = rightTri(tri);
|
||
assert(angles(3) == 90,'Fundamental problem: rightTri not producing right triangle')
|
||
|
||
%% Test 1: sum of angles
|
||
angles = rightTri(tri);
|
||
assert(sum(angles) == 180)
|
||
|
||
angles = rightTri(triIso);
|
||
assert(sum(angles) == 180)
|
||
|
||
angles = rightTri(tri306090);
|
||
assert(sum(angles) == 180)
|
||
\end{lstlisting}
|
||
|
||
\end{frame}
|
||
|
||
\begin{frame}[fragile]
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Unit Tests}
|
||
Ein Testskript fuer diese Funktion k\"onnte so aussehen:
|
||
\footnotesize
|
||
\begin{lstlisting}
|
||
%% Test 2: isosceles triangles
|
||
angles = rightTri(triIso);
|
||
assert(angles(1) == 45)
|
||
assert(angles(1) == angles(2))
|
||
|
||
%% Test 3: 30-60-90 triangle
|
||
angles = rightTri(tri306090);
|
||
assert(angles(1) == 30)
|
||
assert(angles(2) == 60)
|
||
assert(angles(3) == 90)
|
||
\end{lstlisting}
|
||
\end{frame}
|
||
|
||
|
||
\begin{frame}[fragile]
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Unit Tests}
|
||
Um den Test auszuf\"uhren:
|
||
\begin{lstlisting}
|
||
result = runtests('rightTriTest');
|
||
\end{lstlisting}
|
||
\end{frame}
|
||
|
||
\begin{frame}[fragile]
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Unit Tests}
|
||
Das Testresultat k\"onnte so aussehen:
|
||
\tiny
|
||
\begin{lstlisting}
|
||
Running rightTriTest
|
||
..
|
||
|
||
================================================================================
|
||
Error occurred in rightTriTest/Test3_30_60_90Triangle and it did not run to completion.
|
||
|
||
--------------
|
||
Error Details:
|
||
--------------
|
||
Assertion failed.
|
||
|
||
================================================================================
|
||
.
|
||
Done rightTriTest
|
||
__________
|
||
|
||
Failure Summary:
|
||
|
||
Name Failed Incomplete Reason(s)
|
||
===========================================================================
|
||
rightTriTest/Test3_30_60_90Triangle X X Errored.
|
||
\end{lstlisting}
|
||
\end{frame}
|
||
|
||
\begin{frame}
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Unit Tests}
|
||
\Large{Summary}
|
||
\begin{enumerate}
|
||
\item Unit Tests sind ein m\"achtiges Tool um die Korrektheit des eigenen Codes zu testen.
|
||
\item In der Regel geben sie Sicherheit.
|
||
\item Machen das \"Andern einfacher und sicherer.
|
||
\item Sind eine Art Dokumentation.
|
||
\item Tests sind immer so gut, wie sie programmiert werden.
|
||
\end{enumerate}
|
||
Ein Aufwand der sich lohnen kann. Er formalisiert, was wir uns eh denken...
|
||
\end{frame}
|
||
|
||
\begin{frame}
|
||
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
|
||
\framesubtitle{Fazit}
|
||
\begin{itemize}
|
||
\item Reproduzierbarkeit wissenschaftlicher Resultate ist schwer zu erreichen.
|
||
\item Wir m\"ussen es trotzdem versuchen. Dazu braucht es:
|
||
\item Vollst\"andige Annotation der Daten mit Metadaten.
|
||
\item Provenance Tracking oder zumindest Versionskontrolle.
|
||
\item Ver\"offentlichung von Daten und Programmen.
|
||
\item Ein gewisses Ma{\ss} an Code Qualit\"at.
|
||
\item Jeder Wissenschaftler ist daf\"ur pers\"onlich verantwortlich!
|
||
\end{itemize}
|
||
|
||
\end{frame}
|
||
|
||
\end{document}
|