diff -r 88a01948450d -r d33698326409 testing-debugging/slides.org --- a/testing-debugging/slides.org Wed Nov 17 23:24:57 2010 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,209 +0,0 @@ -#+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: Testing and debugging -#+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 - -* Outline - - What software Testing is? - - Learn to test simple functions for their functionality. - - Learn how to automate tests. - - Need for coding style and some of the standards followed by the Python Community. - - Handling Errors and Exceptions. - -* gcd function - - Create gcd.py file with: -#+begin_src python - def gcd(a, b): - if a % 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 - -* Automating tests -#+begin_src python - if __name=__='__main__': - for line in open('numbers.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 -#+end_src - -* Question 1 - For the same inputs as gcd write automated tests for LCM. -* Solution 1 -#+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 - -#+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 - -* Question 2 - - Give meaningful names to the variables in following - code - - - c = a / b - -* Solution 2 -#+begin_src python - - quotient = dividend / divisor - -#+end_src - -* Code Snippet -#+begin_src python - - while True print 'Hello world' - -#+end_src - -* Error -#+begin_latex -\begin{lstlisting} - while True print 'Hello world' - \end{lstlisting} - \begin{lstlisting} - File "", line 1, in ? - while True print 'Hello world' -SyntaxError: invalid syntax -\end{lstlisting} -#+end_latex - -* Code Snippet -#+begin_src python - a = raw_input("Enter a number") - try: - num = int(a) - except: - print "Wrong input ..." - -#+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 - - Create simple tests for a function. - - Learn to Automate tests using many predefined test cases. - - Good coding standards. - - Difference between syntax error and exception. - - Handling exception using try and except. - - Using %debug for debugging on ipython. - -* Thank you! -#+begin_latex - \begin{block}{} - \begin{center} - This spoken tutorial has been produced by the - \textcolor{blue}{FOSSEE} team, which is funded by the - \end{center} - \begin{center} - \textcolor{blue}{National Mission on Education through \\ - Information \& Communication Technology \\ - MHRD, Govt. of India}. - \end{center} - \end{block} -#+end_latex -