testing-debugging/slides.tex
changeset 522 d33698326409
parent 521 88a01948450d
child 523 54bdda4aefa5
equal deleted inserted replaced
521:88a01948450d 522:d33698326409
     1 % Created 2010-11-12 Fri 02:00
       
     2 \documentclass[presentation]{beamer}
       
     3 \usepackage[latin1]{inputenc}
       
     4 \usepackage[T1]{fontenc}
       
     5 \usepackage{fixltx2e}
       
     6 \usepackage{graphicx}
       
     7 \usepackage{longtable}
       
     8 \usepackage{float}
       
     9 \usepackage{wrapfig}
       
    10 \usepackage{soul}
       
    11 \usepackage{t1enc}
       
    12 \usepackage{textcomp}
       
    13 \usepackage{marvosym}
       
    14 \usepackage{wasysym}
       
    15 \usepackage{latexsym}
       
    16 \usepackage{amssymb}
       
    17 \usepackage{hyperref}
       
    18 \tolerance=1000
       
    19 \usepackage[english]{babel} \usepackage{ae,aecompl}
       
    20 \usepackage{mathpazo,courier,euler} \usepackage[scaled=.95]{helvet}
       
    21 \usepackage{listings}
       
    22 \lstset{language=Python, basicstyle=\ttfamily\bfseries,
       
    23 commentstyle=\color{red}\itshape, stringstyle=\color{red},
       
    24 showstringspaces=false, keywordstyle=\color{blue}\bfseries}
       
    25 \providecommand{\alert}[1]{\textbf{#1}}
       
    26 
       
    27 \title{Testing and debugging}
       
    28 \author{FOSSEE}
       
    29 \date{}
       
    30 
       
    31 \usetheme{Warsaw}\usecolortheme{default}\useoutertheme{infolines}\setbeamercovered{transparent}
       
    32 \begin{document}
       
    33 
       
    34 \maketitle
       
    35 
       
    36 
       
    37 
       
    38 
       
    39 
       
    40 
       
    41 
       
    42 
       
    43 
       
    44 \begin{frame}
       
    45 \frametitle{Outline}
       
    46 \label{sec-1}
       
    47 
       
    48 \begin{itemize}
       
    49 \item What software Testing is?
       
    50 \item Learn to test simple functions for their functionality.
       
    51 \item Learn how to automate tests.
       
    52 \item Need for coding style and some of the standards followed by the Python Community.
       
    53 \item Handling Errors and Exceptions.
       
    54 \end{itemize}
       
    55 \end{frame}
       
    56 \begin{frame}[fragile]
       
    57 \frametitle{gcd function}
       
    58 \label{sec-2}
       
    59 
       
    60 \begin{itemize}
       
    61 \item Create gcd.py file with:
       
    62 \end{itemize}
       
    63 
       
    64 \begin{verbatim}
       
    65 def gcd(a, b):
       
    66       if a % b == 0: 
       
    67           return b
       
    68       return gcd(b, a%b)
       
    69 \end{verbatim}
       
    70 \end{frame}
       
    71 \begin{frame}[fragile]
       
    72 \frametitle{Test for gcd.py}
       
    73 \label{sec-3}
       
    74 
       
    75 \begin{itemize}
       
    76 \item Edit gcd.py file
       
    77 \end{itemize}
       
    78 
       
    79 \begin{verbatim}
       
    80 def gcd(a, b):
       
    81     if b == 0:
       
    82         return a
       
    83     return gcd(b, a%b)
       
    84 
       
    85 if __name__=='__main__':
       
    86     result = gcd(48, 64)
       
    87     if result != 16:
       
    88         print "Test failed"
       
    89     print "Test Passed"
       
    90 \end{verbatim}
       
    91 \end{frame}
       
    92 \begin{frame}[fragile]
       
    93 \frametitle{Automating tests}
       
    94 \label{sec-4}
       
    95 
       
    96 \begin{verbatim}
       
    97 if __name=__='__main__':
       
    98 for line in open('numbers.txt'):
       
    99     numbers = line.split()
       
   100     x = int(numbers[0])
       
   101     y = int(numbers[1])
       
   102     result = int(numbers[2])
       
   103     if gcd(x, y) != result:
       
   104         print "Failed gcd test
       
   105                       for", x, y
       
   106 \end{verbatim}
       
   107 \end{frame}
       
   108 \begin{frame}
       
   109 \frametitle{Question 1}
       
   110 \label{sec-5}
       
   111 
       
   112   For the same inputs as gcd write automated tests for LCM.
       
   113 \end{frame}
       
   114 \begin{frame}[fragile]
       
   115 \frametitle{Solution 1}
       
   116 \label{sec-6}
       
   117 
       
   118 \begin{verbatim}
       
   119 def gcd(a, b):
       
   120       if a % b == 0: 
       
   121           return b
       
   122       return gcd(b, a%b)
       
   123 
       
   124  def lcm(a, b):
       
   125       return (a * b) / gcd(a, b)
       
   126 
       
   127   if __name__ == '__main__':
       
   128     for line in open('lcmtestcases.txt'):
       
   129       numbers = line.split()
       
   130       x = int(numbers[0])
       
   131       y = int(numbers[1])
       
   132       result = int(numbers[2])
       
   133       if lcm(x, y) != result:
       
   134           print "Failed lcm test for", x, y
       
   135 \end{verbatim}
       
   136 \end{frame}
       
   137 \begin{frame}[fragile]
       
   138 \frametitle{Meaning full names}
       
   139 \label{sec-7}
       
   140 
       
   141 \begin{verbatim}
       
   142 
       
   143 amount = 12.68
       
   144 denom = 0.05
       
   145 nCoins = round(amount / denom)
       
   146 rAmount = nCoins * denom
       
   147 \end{verbatim}
       
   148 \end{frame}
       
   149 \begin{frame}
       
   150 \frametitle{Code style}
       
   151 \label{sec-8}
       
   152 
       
   153 \begin{itemize}
       
   154 \item Four Space Indentation
       
   155 \item 79 character limit on a line
       
   156 \item Funtions should be seperated by 
       
   157    blank line
       
   158 \item Use Docstring
       
   159 \item White space around operators
       
   160 
       
   161 \begin{itemize}
       
   162 \item l = 32 \% 4
       
   163 \end{itemize}
       
   164 
       
   165 \end{itemize}
       
   166 \end{frame}
       
   167 \begin{frame}
       
   168 \frametitle{Question 2}
       
   169 \label{sec-9}
       
   170 
       
   171 \begin{itemize}
       
   172 \item Give meaningful names to the variables in following
       
   173      code
       
   174 
       
   175 \begin{itemize}
       
   176 \item c = a / b
       
   177 \end{itemize}
       
   178 
       
   179 \end{itemize}
       
   180 \end{frame}
       
   181 \begin{frame}[fragile]
       
   182 \frametitle{Solution 2}
       
   183 \label{sec-10}
       
   184 
       
   185 \begin{verbatim}
       
   186 
       
   187 quotient = dividend / divisor
       
   188 \end{verbatim}
       
   189 \end{frame}
       
   190 \begin{frame}[fragile]
       
   191 \frametitle{Code Snippet}
       
   192 \label{sec-11}
       
   193 
       
   194 \begin{verbatim}
       
   195 
       
   196 while True print 'Hello world'
       
   197 \end{verbatim}
       
   198 \end{frame}
       
   199 \begin{frame}[fragile]
       
   200 \frametitle{Error}
       
   201 \label{sec-12}
       
   202 
       
   203 \begin{lstlisting}
       
   204  while True print 'Hello world'
       
   205  \end{lstlisting}
       
   206   \begin{lstlisting}
       
   207   File "<stdin>", line 1, in ?
       
   208     while True print 'Hello world'
       
   209 SyntaxError: invalid syntax
       
   210 \end{lstlisting}
       
   211 \end{frame}
       
   212 \begin{frame}[fragile]
       
   213 \frametitle{Code Snippet}
       
   214 \label{sec-13}
       
   215 
       
   216 \begin{verbatim}
       
   217 a = raw_input("Enter a number")
       
   218 try:
       
   219       num = int(a)
       
   220  except:
       
   221       print "Wrong input ..."
       
   222 \end{verbatim}
       
   223 \end{frame}
       
   224 \begin{frame}[fragile]
       
   225 \frametitle{Using idb}
       
   226 \label{sec-14}
       
   227 
       
   228 \small
       
   229 \begin{lstlisting}
       
   230 In []: import mymodule
       
   231 In []: mymodule.test()
       
   232 ---------------------------------------------
       
   233 NameError   Traceback (most recent call last)
       
   234 <ipython console> in <module>()
       
   235 mymodule.py in test()
       
   236       1 def test():
       
   237       2     total=1+1
       
   238 ----> 3     print spam
       
   239 NameError: global name 'spam' is not defined
       
   240 
       
   241 In []: %debug
       
   242 > mymodule.py(2)test()
       
   243       0     print spam
       
   244 ipdb> total
       
   245 2
       
   246 \end{lstlisting}
       
   247 \end{frame}
       
   248 \begin{frame}
       
   249 \frametitle{Summary}
       
   250 \label{sec-15}
       
   251 
       
   252 \begin{itemize}
       
   253 \item Create simple tests for a function.
       
   254 \item Learn to Automate tests using many predefined test cases.
       
   255 \item Good coding standards.
       
   256 \item Difference between syntax error and exception.
       
   257 \item Handling exception using try and except.
       
   258 \item Using \%debug for debugging on ipython.
       
   259 \end{itemize}
       
   260 \end{frame}
       
   261 \begin{frame}
       
   262 \frametitle{Thank you!}
       
   263 \label{sec-16}
       
   264 
       
   265   \begin{block}{}
       
   266   \begin{center}
       
   267   This spoken tutorial has been produced by the
       
   268   \textcolor{blue}{FOSSEE} team, which is funded by the 
       
   269   \end{center}
       
   270   \begin{center}
       
   271     \textcolor{blue}{National Mission on Education through \\
       
   272       Information \& Communication Technology \\ 
       
   273       MHRD, Govt. of India}.
       
   274   \end{center}  
       
   275   \end{block}
       
   276 \end{frame}
       
   277 
       
   278 \end{document}