testing-debugging/slides.tex
changeset 487 cb3974daced5
parent 403 9858ca9e3f93
equal deleted inserted replaced
486:591369704df0 487:cb3974daced5
     1 % Created 2010-11-07 Sun 18:57
     1 % Created 2010-11-12 Fri 02:00
     2 \documentclass[presentation]{beamer}
     2 \documentclass[presentation]{beamer}
     3 \usepackage[latin1]{inputenc}
     3 \usepackage[latin1]{inputenc}
     4 \usepackage[T1]{fontenc}
     4 \usepackage[T1]{fontenc}
     5 \usepackage{fixltx2e}
     5 \usepackage{fixltx2e}
     6 \usepackage{graphicx}
     6 \usepackage{graphicx}
    59 
    59 
    60 \begin{itemize}
    60 \begin{itemize}
    61 \item Create gcd.py file with:
    61 \item Create gcd.py file with:
    62 \end{itemize}
    62 \end{itemize}
    63 
    63 
    64 \begin{lstlisting}[language=python]
    64 \begin{verbatim}
    65   def gcd(a, b):
    65 def gcd(a, b):
    66         if a % b == 0: 
    66       if a % b == 0: 
    67             return b
    67           return b
    68         return gcd(b, a%b)
    68       return gcd(b, a%b)
    69 \end{lstlisting}
    69 \end{verbatim}
    70 \end{frame}
    70 \end{frame}
    71 \begin{frame}[fragile]
    71 \begin{frame}[fragile]
    72 \frametitle{Test for gcd.py}
    72 \frametitle{Test for gcd.py}
    73 \label{sec-3}
    73 \label{sec-3}
    74 
    74 
    75 \begin{itemize}
    75 \begin{itemize}
    76 \item Edit gcd.py file
    76 \item Edit gcd.py file
    77 \end{itemize}
    77 \end{itemize}
    78 
    78 
    79 \begin{lstlisting}[language=python]
    79 \begin{verbatim}
    80 
    80 def gcd(a, b):
    81   def gcd(a, b):
    81     if b == 0:
    82       if b == 0:
    82         return a
    83           return a
    83     return gcd(b, a%b)
    84       return gcd(b, a%b)
    84 
    85   
    85 if __name__=='__main__':
    86   if __name__=='__main__':
    86     result = gcd(48, 64)
    87       result = gcd(48, 64)
    87     if result != 16:
    88       if result != 16:
    88         print "Test failed"
    89           print "Test failed"
    89     print "Test Passed"
    90       print "Test Passed"
    90 \end{verbatim}
    91 \end{lstlisting}
       
    92 \end{frame}
    91 \end{frame}
    93 \begin{frame}[fragile]
    92 \begin{frame}[fragile]
    94 \frametitle{Automating tests}
    93 \frametitle{Automating tests}
    95 \label{sec-4}
    94 \label{sec-4}
    96 
    95 
    97 \begin{lstlisting}[language=python]
    96 \begin{verbatim}
    98 
    97 if __name=__='__main__':
    99     if __name=__='__main__':
    98 for line in open('numbers.txt'):
   100     for line in open('numbers.txt'):
    99     numbers = line.split()
   101         numbers = line.split()
   100     x = int(numbers[0])
   102         x = int(numbers[1])
   101     y = int(numbers[1])
   103         y = int(numbers[2])
   102     result = int(numbers[2])
   104         result = int(numbers[3])
   103     if gcd(x, y) != result:
   105         if gcd(x, y) != result:
   104         print "Failed gcd test
   106             print "Failed gcd test
   105                       for", x, y
   107                           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
   108 \end{lstlisting}
   210 \end{lstlisting}
   109 
   211 \end{frame}
   110 
   212 \begin{frame}[fragile]
   111 
   213 \frametitle{Code Snippet}
   112 
   214 \label{sec-13}
   113 $^{1}$ FOOTNOTE DEFINITION NOT FOUND: 0
   215 
   114 
   216 \begin{verbatim}
   115 $^{2}$ FOOTNOTE DEFINITION NOT FOUND: 1
   217 a = raw_input("Enter a number")
   116 
   218 try:
   117 $^{3}$ FOOTNOTE DEFINITION NOT FOUND: 2
   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}
   118 \end{frame}
   276 \end{frame}
   119 
   277 
   120 \end{document}
   278 \end{document}