summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSrikant2012-01-24 16:13:23 +0530
committerSrikant2012-01-24 16:13:23 +0530
commitb5a5acdddb2ef001e9c97a2959b0dbff9096423c (patch)
tree08a3a15ddeceb476a8f175ed6f9ac8fe7353e85c
parenta3e5c61aba9df89897fab9c8efc04bdb89ce2034 (diff)
downloadsdes-stscripts-b5a5acdddb2ef001e9c97a2959b0dbff9096423c.tar.gz
sdes-stscripts-b5a5acdddb2ef001e9c97a2959b0dbff9096423c.tar.bz2
sdes-stscripts-b5a5acdddb2ef001e9c97a2959b0dbff9096423c.zip
removed the old slide.tex
-rw-r--r--TDD/getting_started_with_tdd/slide.tex352
1 files changed, 0 insertions, 352 deletions
diff --git a/TDD/getting_started_with_tdd/slide.tex b/TDD/getting_started_with_tdd/slide.tex
deleted file mode 100644
index 54875f9..0000000
--- a/TDD/getting_started_with_tdd/slide.tex
+++ /dev/null
@@ -1,352 +0,0 @@
-\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{Getting started with TDD}
-\author{FOSSEE}
-\institute{IIT Bombay}
-
-\usetheme{Warsaw}\usecolortheme{default}\useoutertheme{infolines}\setbeamercovered{transparent}
-
-\AtBeginSection[]
-{
- \begin{frame}<beamer>
- \frametitle{Outline}
- \tableofcontents[currentsection]
- \end{frame}
-}
-
-\begin{document}
-
-\begin{frame}
-
-\begin{center}
-\vspace{12pt}
-\textcolor{blue}{\huge Getting started with Test Driven Development}
-\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}
-
-\begin{frame}
-\frametitle{Outline}
-\setcounter{tocdepth}{3}
-\tableofcontents
-\end{frame}
-
-\section{Introduction}
-
-\begin{frame}
- \frametitle{Objectives}
- At the end of this section, you will be able to:
- \begin{itemize}
- \item Understand the concept of Test Driven Development.
- \item Write your code using the TDD paradigm.
- \end{itemize}
-\end{frame}
-
-
-\begin{frame}
-\frametitle{Pre-requisite}
-\label{sec-3}
-
-Spoken tutorial on Basic Python
-\begin{itemize}
-\item Topic of tutorial here
-\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.
- \item Go back to 1.
- \end{enumerate}
-\end{frame}
-
-\section{First Test}
-
-\begin{frame}[fragile]
- \frametitle{First Test -- GCD}
- \begin{itemize}
- \item simple program -- GCD of two numbers
- \item What are our code units?
- \begin{itemize}
- \item Only one function \texttt{gcd}
- \item Takes two numbers as arguments
- \item Returns one number, which is their GCD
- \end{itemize}
-\begin{lstlisting}
-c = gcd(44, 23)
-\end{lstlisting}
- \item c will contain the GCD of the two numbers.
- \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 $a=48$, $b=48$, $GCD=48$
- \item $a=44$, $b=19$, $GCD=1$
- \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 = gcd(48, 64)
-if tc1 != 16:
- print "Failed for a=48, b=64. Expected 16. \
- Obtained %d instead." % tc1
- exit(1)
-
-tc2 = gcd(44, 19)
-if tc2 != 1:
- print "Failed for a=44, b=19. Expected 1. \
- Obtained %d instead." % tc2
- exit(1)
-
-print "All tests passed!"
-\end{lstlisting}
-\begin{itemize}
-\item The function \texttt{gcd} doesn't even exist!
-\end{itemize}
-\end{frame}
-
-
-\begin{frame}[fragile]
- \frametitle{Stubs}
- \begin{itemize}
- \item First write a very minimal definition of \texttt{gcd}
- \begin{lstlisting}
-def gcd(a, b):
- 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{gcd.py}}
-\begin{lstlisting}
-def gcd(a, b):
- pass
-
-if __name__ == '__main__':
- tc1 = gcd(48, 64)
- if tc1 != 16:
- print "Failed for a=48 and b=64. \
- Expected 16. Obtained %d instead." % tc1
- exit(1)
- tc2 = gcd(44, 19)
- if tc2 != 1:
- print "Failed for a=44 and b=19. \
- Expected 1. Obtained %d instead." % tc2
- exit(1)
- print "All tests passed!"
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]
- \frametitle{First run}
-\begin{lstlisting}
-$ python gcd.py
-Traceback (most recent call last):
- File "gcd.py", line 7, in <module>
- print "Failed for a=48 and b=64. Expected 16.
- 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{gcd} stub function
- \item Then, run the script to see if the tests pass.
- \end{itemize}
-\begin{lstlisting}
-def gcd(a, b):
- if a == 0:
- return b
- while b != 0:
- if a > b:
- a = a - b
- else:
- b = b - a
- return a
-\end{lstlisting}
-\begin{lstlisting}
-$ python gcd.py
-All tests passed!
-\end{lstlisting} %$
- \begin{itemize}
- \item \alert{Success!}
- \end{itemize}
-\end{frame}
-
-
-\begin{frame}[fragile]
- \frametitle{Euclidean Algorithm -- Modulo}
- \begin{itemize}
- \item Repeated subtraction can be replaced by a modulo
- \item modulo of \texttt{a\%b} is always less than b
- \item when \texttt{a < b}, \texttt{a\%b} equals \texttt{a}
- \item Combine these two observations, and modify the code
-\begin{lstlisting}
-def gcd(a, b):
- while b != 0:
- a, b = b, a % b
- return a
-\end{lstlisting}
- \item Check that the tests pass again
- \end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
- \frametitle{Euclidean Algorithm -- Recursive}
- \begin{itemize}
- \item Final improvement -- make \texttt{gcd} recursive
- \item More readable and easier to understand
-\begin{lstlisting}
-def gcd(a, b):
- if b == 0:
- return a
- return gcd(b, a%b)
-\end{lstlisting}
- \item Check that the tests pass again
- \end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
- \frametitle{Document \texttt{gcd}}
- \begin{itemize}
- \item Undocumented function is as good as unusable
- \item Let's add a docstring \& We have our first test!
- \end{itemize}
-\begin{lstlisting}
-def gcd(a, b):
- """Returns the Greatest Common Divisor of the
- two integers passed as arguments.
-
- Args:
- a: an integer
- b: another integer
-
- Returns: Greatest Common Divisor of a and b
- """
- if b == 0:
- return a
- return gcd(b, a%b)
-\end{lstlisting}
-\end{frame}
-
-
-\begin{frame}[fragile]
- \frametitle{Persistent Test Cases}
- \begin{itemize}
- \item Tests should be pre-determined and written, before the code
- \item Test Data is repeatedly used; Hence, saved in persistent
- format
- \item Let's save data for GCD tests in a text file.
- \item The file shall have multiple lines of test data
- \item Each line corresponds to a single test case
- \item Each line consists of three comma separated values --
- \begin{itemize}
- \item First two coloumns are the integers for which the GCD has to be
- computed
- \item Third coloumn is the expected GCD to the preceding two
- numbers.
- \end{itemize}
- \item Let us call our data file \texttt{gcd\_testcases.dat}
- \end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
- \frametitle{Modify \texttt{gcd.py}}
-\begin{lstlisting}
-if __name__ == '__main__':
- for line in open('gcd_testcases.dat'):
- values = line.split(', ')
- a = int(values[0])
- b = int(values[1])
- g = int(values[2])
-
- tc = gcd(a, b)
- if tc != g:
- print "Failed for a=%d and b=%d.\
- Expected %d. Obtained %d instead."\
- % (a, b, g, tc)
- exit(1)
-
- print "All tests passed!"
-\end{lstlisting}
-\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}