diff options
Diffstat (limited to 'TDD/getting_started_with_tdd')
-rw-r--r-- | TDD/getting_started_with_tdd/tdd1.tex | 304 | ||||
-rwxr-xr-x | TDD/getting_started_with_tdd/tdd1_script.rst | 205 |
2 files changed, 509 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} diff --git a/TDD/getting_started_with_tdd/tdd1_script.rst b/TDD/getting_started_with_tdd/tdd1_script.rst new file mode 100755 index 0000000..9da1613 --- /dev/null +++ b/TDD/getting_started_with_tdd/tdd1_script.rst @@ -0,0 +1,205 @@ +.. Objectives +.. ---------- + + .. At the end of this tutorial, you will be able to: + + .. 1. Know what is TDD. + .. 2. Understand the use of test cases. + .. 3. Write simple tests for a function. + +.. Prerequisites +.. ------------- + +.. 1. Getting started with functions + + +Script +------ + +.. L1 + +{{{ Show the first slide containing title, name of the production +team along with the logo of MHRD }}} + +.. R1 + +Hello friends and Welcome to the tutorial on +'Test driven development - Part 1'. + +.. L2 + +{{{ Show slide with objectives }}} + +.. R2 + +At the end of this tutorial, you will be able to, + + 1. understand basics of Test Driven Development. + #. understand the use test cases. + #. write simple tests for a function. + +.. L3 + +{{{ Switch to the slide3, pre-requisite slide }}} + +.. R3 + +Before beginning this tutorial,we would suggest you to complete the +tutorial on "Getting started with functions". + +.. R4 + +Test-driven development is a software development +process that relies on the repetition of a very short +development cycle. +In TDD,one writes a failing automated test case that +defines a desired improvement or new function, then produces +code to pass that test and finally refactors the new code to +acceptable standards. + + +.. L4 + +{{{ Switch to slide4 ,What is TDD?}}} + + +.. R5 + +To illustrate TDD, lets take a simple program. Consider a +function ``fibonacci``, that takes one argument and returns +the nth number of ``fibonacci`` series. + +.. L5 + +{{{ Switch to slide5, First test- fibonacci }}} + +.. R6 + +To test ``fibonacci`` function, we need test +cases. +As shown in this slide, +test cases are expected outputs for a given set of inputs. + + +.. L6 + +{{{ Switch to slide6, Test cases }}} + +.. R7 + +The sample code for test cases is shown here. Observe that if +any ``if`` statement is executed, test aborts after printing the +error message. + +.. L7 + +{{{ Switch to slide7, Test cases-Code }}} + +.. R8 + +The ``fibonacci`` function is written just enough so that +test can run. + + +.. L8 + +{{{ switch to slide8, Stubs }}} + +.. R9 + +Combine the function and test cases and put them together in +``fibonacci.py`` file.Add the test cases after name=main idiom. + +.. L9 + +{{{ Switch to slide9, fibonacci.py }}} + +.. R10 + +Lets run fibonacci.py by typing ``python fibonacci.py``. +As we haven't written any meaningful code in our ``fibonacci`` +function, it fails immediately. +Our next step is to write just minimum code to pass our tests. + +.. L10 + +{{{ Run the fibonacci.py in terminal and show the error output.}}} +:: + + python fibonacci.py + +.. R11 + +Modify the fibonacci stub function with given code. +Save and run it again as `` python fibonacci.py``. +{{{ pause }}} +Observe that, there will be no errors, as +the test passes successfully. + +.. L11 + +{{{ switch to slide-11, Euclidean Algorithm }}} +Switch to terminal and modify fibonacci function in ``nano`` +editor and run. +:: + + python fibonacci.py + +.. R12 + +The same ``fibonacci`` function is modified to make it more readable +and easy to understand using recursion. +Pause this video here.Replace the ``fibonacci`` function with recursive one. +Run the modified ``fibonacci.py`` file. The test should pass again +without any errors. +After successfully achieving this result, you can resume the video. + +.. L12 + +{{{ Show slide12, Euclidean Algorithm- Recursive}}} + + +.. R13 + +This brings us to the end of the tutorial.In this tutorial, + we have learnt to, + + 1. Undestand the basic steps involved in Test driven development. + #. Design a Test driven approach for a given ``fibonacci`` function. + + +.. L13 + +{{{ switch to slide-13,Summary }}} + +.. R14 + +Here are some self assessment questions for you to solve + 1. + + 2. + +.. L14 + +{{{ switch to slide-14, Evaluation }}} + +.. R15 + +And the answers are, + 1. + + 2. + +.. L15 + +{{{ switch to slide-15 ,Solutions}}} + +.. R16 + +Hope you have enjoyed this tutorial and found it useful. +Thank you! + +.. L16 + +{{{ Switch to slide-16, Thankyou}}} + |