|
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} |