CMPT 120 Topic Software Development Process Last step

  • Slides: 23
Download presentation
CMPT 120 Topic: Software Development Process Last step -> Testing and Debugging

CMPT 120 Topic: Software Development Process Last step -> Testing and Debugging

Learning outcomes At the end of this course, a student is expected to: •

Learning outcomes At the end of this course, a student is expected to: • Create (design) simple algorithms • Create (design) small to medium size programs using Python: • Decompose a solution into parts • Translate pseudocode to/from Python programs • Use the core features of Python to design programs to solve problems • Test small to medium size programs in Python: • Test boundary case • Describe and apply techniques to debug programs: • Recognize and categorize errors as syntax, runtime, semantic 2

Last Lecture • Strings • Indexing • Slicing • Immutable 3

Last Lecture • Strings • Indexing • Slicing • Immutable 3

Today’s Menu • Let’s practice using the Python building blocks we have seen so

Today’s Menu • Let’s practice using the Python building blocks we have seen so far • Last step of the software development process -> 5. Testing (and debugging) • Type of errors 4

Remember? Software Development Process 1. Problem Statement • Make sure we understand what the

Remember? Software Development Process 1. Problem Statement • Make sure we understand what the problem 2. a) Solution(s) Design • We come up with one or more solutions -> solution is expressed as an algorithm b) Identify data involved in problem • Input – identify data needed in order to solve problem • Structure and represent data into algorithms/programs • Output – identify data produced by solution to problem 3. Selection • We select the “best” solution by analyzing algorithms • Which one is the most effective/efficient? 4. Implementation • We implement the algorithm into a computer program 5. Testing and debugging • Does the program execute (run)? • Does it solve the problem? 5

5. Testing and debugging • Does the program execute (run)? • If it executes

5. Testing and debugging • Does the program execute (run)? • If it executes then the answer is Yes -> Youpi! • If it does not execute because there is an error (a bug), then we need debug • Debugging: identifying and correcting errors • What could go wrong? 6

A bit of history – Grace Hopper and UNIVAC • https: //upload. wikimedia. org/wikipedia/commons/3/37/Grace_Hopper_and_UNIVAC.

A bit of history – Grace Hopper and UNIVAC • https: //upload. wikimedia. org/wikipedia/commons/3/37/Grace_Hopper_and_UNIVAC. jpg 7

Debugging • From Grace Hopper’s notes: 8 Source: https: //mostinterestingfacts. files. wordpress. com/2009/04/bug. jpg

Debugging • From Grace Hopper’s notes: 8 Source: https: //mostinterestingfacts. files. wordpress. com/2009/04/bug. jpg

#1 - Syntax error • Occurs when our Python code does not follow the

#1 - Syntax error • Occurs when our Python code does not follow the Python syntax rules • Our textbook says that … • if there is a syntax error anywhere in our program, Python displays an error message and quits, and we will not be able to run the program • Example: 9

#1 - Syntax error • Looking at the software development process, at which step

#1 - Syntax error • Looking at the software development process, at which step would a syntax error be detected? • In which step(s) would we fix a syntax error? And how do we fix a syntax error? 10

5. Testing and debugging • Does the program solve the problem? • We answer

5. Testing and debugging • Does the program solve the problem? • We answer this question by testing our Python program using a variety of test cases, each using • Valid data • Invalid data • Boundary data • When testing, our goal is to “crash” our program 11

Test case • Test case contains 1. Test data: 1 particular set of specific

Test case • Test case contains 1. Test data: 1 particular set of specific data (either valid, invalid or boundary), i. e. , values 2. Expected result: must be computed beforehand (before we start our testing) • Before feeding the test data into our program, we must know what the result will be otherwise we will be unable to ascertain whether our program works or not 12

Example of test cases for our Average_of_5_Midterms. py Test Case # Test Data Expected

Example of test cases for our Average_of_5_Midterms. py Test Case # Test Data Expected Results 1 all 5 midterms = 8 8. 00 2 mt 1 = 5, mt 2 = 6, 4. 20 mt 3 = 7, mt 4 = 3, mt 5 = 0 Can you think of another test case? 3 13

Observations about the creation of test cases 14

Observations about the creation of test cases 14

5. Testing and debugging • We test our Python program using 1 test case

5. Testing and debugging • We test our Python program using 1 test case at a time • We feed the test data of the test case into our executing program • We compare its results (perhaps displayed on the computer monitor screen) with the expected results of the test case • If both results are the same -> Youpi! • If they are not, then we need to debug • The error could be in … • • Our program Our expected results • Once we debugged, we test our program again with all the test cases we have used so far • What could now go wrong? 15

#2 - Runtime error • Our textbook defines a runtime error as follows: •

#2 - Runtime error • Our textbook defines a runtime error as follows: • The second type of error is a runtime error, so called because the error does not appear until after the program has started running (i. e. , at runtime) • These errors are also called exceptions because they usually indicate that something exceptional (and bad) has happened 16

#2 - Runtime error - Example • It may be the case that the

#2 - Runtime error - Example • It may be the case that the data assigned to our variables are such that an error occurs • Example: sum = float(input("Please enter the sum: ")) # at this point the user enters 2635 num. Of. Stds = float(input("Please enter number of students: ")) # at this point, the user enters 0 average = sum / num. Of. Stds • Result: Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> sum / num. Of. Stds Zero. Division. Error: integer division or modulo by zero 17

#2 - Runtime error • Looking at the software development process, at which step

#2 - Runtime error • Looking at the software development process, at which step would a runtime error be detected? • In which step(s) would we fix a runtime error? And how do we fix a runtime error? 18

#3 - Semantic error • Our textbook defines a semantic error as follows: •

#3 - Semantic error • Our textbook defines a semantic error as follows: • If there is a semantic error in our program, it will run without generating error messages, but it will not produce the expected (correct) result • So, in a sense, the meaning of the program is erroneous as it does not do what its intended purpose (its description) said it would • The bottom line: our Python program will not solve the problem!!! 19

#3 - Semantic error • Can you think of an example? 20

#3 - Semantic error • Can you think of an example? 20

#3 - Semantic error • Looking at the software development process, at which step

#3 - Semantic error • Looking at the software development process, at which step would a semantic error be detected? • In which step(s) would we fix a semantic error? • Identifying semantic errors (debugging) can be tricky because it requires us to hand trace the program trying to figure out where it went wrong • Trick: work backward -> demo 21

Summary • Practice using the Python building blocks seen so far • Last step

Summary • Practice using the Python building blocks seen so far • Last step of the software development process -> 5. Testing (and debugging) • Type of errors 22

Next Lecture • Lists 23

Next Lecture • Lists 23