testing_and_debugging/slides.org
changeset 522 d33698326409
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testing_and_debugging/slides.org	Wed Dec 01 16:51:35 2010 +0530
@@ -0,0 +1,209 @@
+#+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 "<stdin>", 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)
+<ipython console> in <module>()
+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
+