#+LaTeX_CLASS: beamer #+LaTeX_CLASS_OPTIONS: [presentation] #+BEAMER_FRAME_LEVEL: 1 #+BEAMER_HEADER_EXTRA: \usetheme{Warsaw}\usecolortheme{default}\useoutertheme{infolines}\setbeamercovered{transparent} #+COLUMNS: %45ITEM %10BEAMER_env(Env) %10BEAMER_envargs(Env Args) %4BEAMER_col(Col) %8BEAMER_extra(Extra) #+PROPERTY: BEAMER_col_ALL 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 :ETC #+LaTeX_CLASS: beamer #+LaTeX_CLASS_OPTIONS: [presentation] #+LaTeX_HEADER: \usepackage[english]{babel} \usepackage{ae,aecompl} #+LaTeX_HEADER: \usepackage{mathpazo,courier,euler} \usepackage[scaled=.95]{helvet} #+LaTeX_HEADER: \usepackage{listings} #+LaTeX_HEADER:\lstset{language=Python, basicstyle=\ttfamily\bfseries, #+LaTeX_HEADER: commentstyle=\color{red}\itshape, stringstyle=\color{red}, #+LaTeX_HEADER: showstringspaces=false, keywordstyle=\color{blue}\bfseries} #+TITLE: #+AUTHOR: FOSSEE #+EMAIL: #+DATE: #+DESCRIPTION: #+KEYWORDS: #+LANGUAGE: en #+OPTIONS: H:3 num:nil toc:nil \n:nil @:t ::t |:t ^:t -:t f:t *:t <:t #+OPTIONS: TeX:t LaTeX:nil skip:nil d:nil todo:nil pri:nil tags:not-in-toc * #+begin_latex \begin{center} \vspace{12pt} \textcolor{blue}{\huge Testing and Debugging} \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_latex * Objectives At the end of the tutorial, you will be able to, - Understand what is software testing. - Test simple functions for their functionality. - Automate tests. - Understand the need for coding style - Learn some of the standards followed by the Python Community. - Handle Errors and Exceptions. * Pre-requisite Spoken tutorial on - - Getting started with functions. - Advanced Features of functions. * gcd function - Create gcd.py file with: #+begin_src python def gcd(a, b): if b == 0: return b return gcd(b, a%b) #+end_src python * Test for gcd.py - Edit gcd.py file #+begin_src python def gcd(a, b): if b == 0: return a return gcd(b, a%b) if __name__=='__main__': result = gcd(48, 64) if result != 16: print "Test failed" print "Test Passed" #+end_src * Idiom if \_\_name\_\_ == '\_\_main\_\_': * Exercise 1 - Write code for gcd and write tests for it * Structure of file | 12 | 28 | 4 | | 18 | 36 | 18 | | 4678 | 39763 | 2339 | * Code piece #+begin_src python if __name__ == '__main__': for line in open('testcases.txt'): numbers = line.split() x = int(numbers[0]) y = int(numbers[1]) result = int(numbers[2]) if gcd(x, y) != result: print "Failed gcd test for", x, y else: print "Test passed", result #+end_src * Exercise 2 - For the same inputs as gcd write automated tests for LCM. * Solution 2 #+begin_src python def gcd(a, b): if a % b == 0: return b return gcd(b, a%b) def lcm(a, b): return (a * b) / gcd(a, b) if __name__ == '__main__': for line in open('lcmtestcases.txt'): numbers = line.split() x = int(numbers[0]) y = int(numbers[1]) result = int(numbers[2]) if lcm(x, y) != result: print "Failed lcm test for", x, y else: print "Test passed", result #+end_src * Meaning full names #+begin_src python amount = 12.68 denom = 0.05 nCoins = round(amount / denom) rAmount = nCoins * denom #+end_src * Code style - Four Space Indentation - 79 character limit on a line - Funtions should be seperated by blank line - Use Docstring - White space around operators - l = 32 % 4 * Exercise 3 - Give meaningful names to the variables in following code - c = a / b * Solution 3 #+begin_src python quotient = dividend / divisor #+end_src * Using idb #+begin_latex \small \begin{lstlisting} In []: import mymodule In []: mymodule.test() --------------------------------------------- NameError Traceback (most recent call last) in () mymodule.py in test() 1 def test(): 2 total=1+1 ----> 3 print spam NameError: global name 'spam' is not defined In []: %debug > mymodule.py(2)test() 0 print spam ipdb> total 2 \end{lstlisting} #+end_latex * Summary In this tutorial, we have learnt to, - Create simple tests for a function. - Automate tests using many predefined test cases. - Use the python coding standards. - Differentiate between syntax error and exception. - Handle exception using ``try'' and ``except''. - Use ``%debug'' for debugging on ipython. * Evaluation 1. What is proper indentation for python code according to style guidelines? - two space identation - three space identation - four Space Indentation - no Indentation 2. How do you start the debugger on ipython? - debug - %debug - %debugger - start debugger 3. What is the idiom used for running python scripts in a standalone manner? * Solutions 1. Four Space Indentation 2. %debug 3. if \_\_name\_\_ == '\_\_main\_\_': * #+begin_latex \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_latex