From a3e5c61aba9df89897fab9c8efc04bdb89ce2034 Mon Sep 17 00:00:00 2001
From: Srikant
Date: Tue, 24 Jan 2012 16:01:00 +0530
Subject: Added slides and script.

Self evaluation questions are need to be added.
---
 TDD/getting_started_with_tdd/tdd1.tex | 304 ++++++++++++++++++++++++++++++++++
 1 file changed, 304 insertions(+)
 create mode 100644 TDD/getting_started_with_tdd/tdd1.tex

(limited to 'TDD/getting_started_with_tdd/tdd1.tex')

diff --git a/TDD/getting_started_with_tdd/tdd1.tex b/TDD/getting_started_with_tdd/tdd1.tex
new file mode 100644
index 0000000..f056ce5
--- /dev/null
+++ b/TDD/getting_started_with_tdd/tdd1.tex
@@ -0,0 +1,304 @@
+\documentclass[12pt,presentation]{beamer}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{fixltx2e}
+\usepackage{graphicx}
+\usepackage{longtable}
+\usepackage{float}
+\usepackage{wrapfig}
+\usepackage{soul}
+\usepackage{textcomp}
+\usepackage{marvosym}
+\usepackage{wasysym}
+\usepackage{latexsym}
+\usepackage{amssymb}
+\usepackage{hyperref}
+\tolerance=1000
+\usepackage[english]{babel} \usepackage{ae,aecompl}
+\usepackage{mathpazo,courier,euler} \usepackage[scaled=.95]{helvet}
+\usepackage{listings}
+\lstset{language=Python, basicstyle=\ttfamily\bfseries,
+commentstyle=\color{red}\itshape, stringstyle=\color{green},
+showstringspaces=false, keywordstyle=\color{blue}\bfseries}
+\providecommand{\alert}[1]{\textbf{#1}}
+
+\title{SEES: Test Driven Development}
+\author{FOSSEE}
+
+\usetheme{Warsaw}\usecolortheme{default}\useoutertheme{infolines}\setbeamercovered{transparent}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+\begin{document}
+
+\begin{frame}
+\begin{center}
+\vspace{12pt}
+\textcolor{blue}{\huge Test Driven Development \\Part I}
+\end{center}
+\vspace{18pt}
+\begin{center}
+\vspace{10pt}
+\includegraphics[scale=0.95]{../images/fossee-logo.png}\\
+\vspace{5pt}
+\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ 
+\scriptsize Funded by National Mission on Education through ICT\\
+\scriptsize  MHRD,Govt. of India\\
+\includegraphics[scale=0.30]{../images/iitb-logo.png}\\
+\end{center}
+\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Introduction}
+
+\begin{frame}
+  \frametitle{Objectives}
+  At the end of this tutorial, you will be able to,
+  \begin{itemize}
+  \item Know what is TDD.
+  \item Understand the use of test cases.
+  \item Write simple tests for a function.
+ 
+  \end{itemize}
+\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}
+\frametitle{Pre-requisite}
+\label{sec-3}
+
+Spoken tutorial on -
+\begin{itemize}
+\item Getting started with functions.
+\end{itemize}
+\end{frame}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begin{frame}
+  \frametitle{What is TDD?}
+  The basic steps of TDD are roughly as follows --
+  \begin{enumerate}
+  \item Decide upon the feature to implement and the methodology of
+    testing it.
+  \item Write the tests for the feature decided upon.
+  \item Just write enough code, so that the test can be run, but it fails.
+  \item Improve the code, to just pass the test and at the same time
+    passing all previous tests.
+  \item Run the tests to see, that all of them run successfully.
+  \item Refactor the code you've just written -- optimize the algorithm,
+    remove duplication, add documentation, etc.
+  \item Run the tests again, to see that all the tests still pass.
+  
+  \end{enumerate}
+\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{First Test}
+
+\begin{frame}[fragile]
+  \frametitle{First Test -- fibonacci}
+  \begin{itemize}
+  \item simple program -- Returns nth fibonacci number
+  \item What are our code units?
+    \begin{itemize}
+    \item Only one function \texttt{fibonacci}
+    \item Takes one number as argument
+    \item Returns one number, which is the nth number of fibonacci series.
+    \end{itemize}
+\begin{lstlisting}
+c = fibonacci(3)
+\end{lstlisting}
+  \item c will contain 3rd number of fibonacci series,counting from 0.
+  \end{itemize}
+\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begin{frame}[fragile]
+  \frametitle{Test Cases}
+  \begin{itemize}
+  \item Important to have test cases and expected outputs even before
+    writing the first test!
+  \item $n=3$, $fibonacci=2$
+  \item $n=4$, $fibonacci=3$
+  \item Tests are just a series of assertions
+  \item True or False, depending on expected and actual behavior
+  \end{itemize}
+\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begin{frame}[fragile]
+  \frametitle{Test Cases -- Code}
+\begin{lstlisting}
+tc1 = fibonacci(3)
+if tc1 != 2:
+    print "Failed for n=3. Expected 2. \
+    Obtained %d instead." % tc1
+    exit(1)
+
+tc2 = fibonacci(4)
+if tc2 != 3:
+    print "Failed for n=4. Expected 3. \
+    Obtained %d instead." % tc2
+    exit(1)
+
+print "All tests passed!"
+\end{lstlisting}
+\begin{itemize}
+\item The function \texttt{fibonacci} doesn't even exist!
+\end{itemize}
+\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begin{frame}[fragile]
+  \frametitle{Stubs}
+  \begin{itemize}
+  \item First write a very minimal definition of \texttt{fibonacci}
+    \begin{lstlisting}
+def fibonacci(a):
+    pass
+    \end{lstlisting}
+  \item Written just, so that the tests can run
+  \item Obviously, the tests are going to fail
+  \end{itemize}
+\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[fragile]
+  \frametitle{\texttt{fibonacci.py}}
+\begin{lstlisting}
+def fibonacci(n):
+    pass
+
+if __name__ == '__main__':
+    tc1 = fibonacci(3)
+    if tc1 != 2:
+        print "Failed for n=3. \
+        Expected 2. Obtained %d instead." % tc1
+        exit(1)
+    tc2 = fibonacci(4)
+    if tc2 != 3:
+        print "Failed for n=4. \
+        Expected 3. Obtained %d instead." % tc2
+        exit(1)
+    print "All tests passed!"
+\end{lstlisting}
+\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[fragile]
+  \frametitle{First run}
+\begin{lstlisting}
+$ python fibonacci.py
+Traceback (most recent call last):
+  File "fibonacci.py", line 8, in <module> 
+  print "Failed for n=3. Expected 2. 
+  Obtained %d instead." % tc1
+TypeError: %d format: 
+a number is required, not NoneType
+\end{lstlisting} %$
+
+  \begin{itemize}
+  \item We have our code unit stub, and a failing test. 
+  \item The next step is to write code, so that the test just passes.
+  \end{itemize}
+\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[fragile]
+  \frametitle{Euclidean Algorithm}
+  \begin{itemize}
+  \item Modify the \texttt{fibonacci} stub function
+  \item Then, run the script to see if the tests pass.
+  \end{itemize}
+\begin{lstlisting}
+def fibonacci(n):
+    a, b = 0, 1
+    for i in range(n):
+        a, b = b, a + b
+    return a
+
+\end{lstlisting}
+\begin{lstlisting}
+$ python fibonacci.py
+All tests passed!
+\end{lstlisting} %$
+  \begin{itemize}
+  \item \alert{Success!}
+  \end{itemize}
+\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begin{frame}[fragile]
+  \frametitle{Euclidean Algorithm -- Recursive}
+  \begin{itemize}
+  \item Final improvement -- make \texttt{fibonacci} recursive
+  \item More readable and easier to understand
+\begin{lstlisting}
+def fibonacci(n):
+    if n == 0:
+        return 0
+    elif n == 1:
+        return 1
+    else:
+        return fibonacci(n-1) + fibonacci(n-2)
+        
+\end{lstlisting}
+  \item Check that the tests pass again
+  \end{itemize}
+\end{frame}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}
+\frametitle{Summary}
+\label{sec-8}
+
+  In this tutorial, we have learnt to,
+
+
+\begin{itemize}
+\item Undestand the basic steps involved in Test driven development.
+\item Design a TDD approach for a given \texttt{fibonacci} function.
+
+\end{itemize}
+\end{frame}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[fragile]
+\frametitle{Evaluation}
+\label{sec-9}
+
+
+\begin{enumerate}
+\item ?
+\vspace{8pt}
+\item ? 
+\end{enumerate}
+\end{frame}
+\begin{frame}
+\frametitle{Solutions}
+\label{sec-10}
+
+
+\begin{enumerate}
+\item 
+\vspace{15pt}
+\item 
+\end{enumerate}
+\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begin{frame}
+
+  \begin{block}{}
+  \begin{center}
+  \textcolor{blue}{\Large THANK YOU!} 
+  \end{center}
+  \end{block}
+\begin{block}{}
+  \begin{center}
+    For more Information, visit our website\\
+    \url{http://fossee.in/}
+  \end{center}  
+  \end{block}
+\end{frame}
+
+
+\end{document}
-- 
cgit 

