diff options
author | Srikant | 2012-01-24 16:01:00 +0530 |
---|---|---|
committer | Srikant | 2012-01-24 16:01:00 +0530 |
commit | a3e5c61aba9df89897fab9c8efc04bdb89ce2034 (patch) | |
tree | 04aa6030fdaaff9ecf5cf8f126bb625e4557da07 /TDD/getting_started_with_tdd/tdd1.tex | |
parent | a5156445125ead612522ad3eddb739c4ed1dfa5a (diff) | |
download | sdes-stscripts-a3e5c61aba9df89897fab9c8efc04bdb89ce2034.tar.gz sdes-stscripts-a3e5c61aba9df89897fab9c8efc04bdb89ce2034.tar.bz2 sdes-stscripts-a3e5c61aba9df89897fab9c8efc04bdb89ce2034.zip |
Added slides and script.
Self evaluation questions are need to be added.
Diffstat (limited to 'TDD/getting_started_with_tdd/tdd1.tex')
-rw-r--r-- | TDD/getting_started_with_tdd/tdd1.tex | 304 |
1 files changed, 304 insertions, 0 deletions
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} |