1 cse1301 computer programming: lecture 15 flowcharts and debugging

60
1 CSE1301 Computer Programming: Lecture 15 Flowcharts and Debugging

Post on 20-Dec-2015

220 views

Category:

Documents


0 download

TRANSCRIPT

1

CSE1301 Computer Programming:

Lecture 15Flowcharts and Debugging

2

Topics

• The Software Development Cycle

• Flowcharts– Selection– Sequence

– Iteration

• How to diagnoze errors in your program?– Methods for debugging – Methods for testing

3

Components of the Software Development Process

Define the problem clearlyAnalyze the problem

Design an algorithmtop-down design

Document the system

Code (Implement) the algorithmTest the code

4

Development Cycle

Analysis Design Implement Test

debugging and testing

5

Debugging and Testing

• Debugging: the process of finding and correcting errors (a.k.a “bugs”)

• Testing: executing the program on a test data set

6

Types of Errors• syntactic: how instructions are written

• semantic: what they represent

while (i=0; i < 5; i++){ printf(“%d\n”, i);}

Example 1:

for (i=0; i < 5; i++);{ printf(“%d\n”, i);}

Example 2:

if (choice = ‘Q’) { break;}

Example 3:

7

Flowcharts

• Represent flow of control of algorithms:– sequences– selection– iteration

• Useful for:– Finding semantic errors– Determining test data set

8

Sequence (revision)

• Series of instructions to be carried out in a fixed sequential order

• Example 1: Step A: input number

Step B: add 1 to number

Step C: output number

9

Flowchart: Sequence

Step A: input number

Step B: add 1 to number

Step C: output number

Instructionin rectangular box

Order of executionindicated by arrows

• Represented by concatenating instructions (usually vertically)

10

Step A: input number

Step B:

if number is negative,

then add -1 to number

else add 1 to number

Step C: output number

Example 2:

an algorithminvolving

“selection”

Step A: input number

Step C: output number

Sequence (cont)

11

Flowchart: Selection

Step A

if ( condition C1 )

{

<sequence S1>

}

else

{

<sequence S2>

}

Step C

Step A

C1 true?

S2

Step C

S1

YES NO

Arrow labeled with result of condition test

Condition test

in diamond

12

input number

if number is negative,

then add -1 to number

else add 1 to number

output number

input number

is numbernegative?

add -1 to number

YES NO

add 1 to number

output number

Example: Algorithm to Flowchart

13

Flowchart: Iteration (while loop)

while ( condition C1 )

{

<sequence S1>

}

C1 true?

S1

YES

NO

14

Flowchart: Iteration (for loop)

for ( init ; condition C1 ; increment )

{

<sequence S1>

} C1 true?

S1

YES

NO

init

increment

15

How to choose which iteration?

• Do you know exactly how many times the loop will execute?

– If yes, then use FOR

• Is it possible the sequence may never be executed?

– If yes, then use WHILE

16

Example: Code to Flowchart (Spot the error!)

for ( i=0; i<10; i++ ) { scanf(“%d\n”, &x); if ( x < 0 ) { break; }}

is i < 10 ?

input value for x

YES

NO

set i to 0

increment i

is x < 0 ?NO YES

17

Example: Code to Flowchart (correct version)

for ( i=0; i<10; i++ ) { scanf(“%d\n”, &x); if ( x < 0 ) { break; }}

is i < 10 ?

input value for x

YES

NO

set i to 0

increment i

is x < 0 ?

NO

YES

18

Algorithm to FlowchartExample: AddNumbers

input totalNumbers

set sum to 0

set count to 0

while (count < totalNumbers)

{

input nextNum

add nextNum to sum

add 1 to count

}

output “Sum was” sum

output “Mean was” sum/count

input value for totalNumbers

set sum to 0

set count to 0

19

is count< totalNumbers?

Algorithm to FlowchartExample: AddNumbers (cont)

input totalNumbers

set sum to 0

set count to 0

while (count < totalNumbers)

{

input nextNum

add nextNum to sum

add 1 to count

}

output “Sum was” sum

output “Mean was” sum/count

input value for nextNum

YES

NO

increment count

add nextNum to sum

20

Algorithm to FlowchartExample: AddNumbers (cont)

input totalNumbers

set sum to 0

set count to 0

while (count < totalNumbers)

{

input nextNum

add nextNum to sum

add 1 to count

}

output “Sum was” sum

output “Mean was” sum/count

output value for sum

output value for sum/count

21

Algorithm to FlowchartExercise: AddNumbers (cont)

input totalNumbersset sum to 0set count to 0while (count < totalNumbers){

input nextNumadd nextNum to sumadd 1 to count

}output “Sum was” sumoutput “Mean was” sum/count

What if totalNumbers

is zero?

22

• Modify the flowchart to add an extra check so that the mean is output only when count is positive

Algorithm to FlowchartExercise: AddNumbers (cont)

23

Use of Flowcharts

• Pseudo-code flowchart

• Flowchart code

24

Debugging Basics

• Know the (C) language well

printf(“%d\n”, &num);

Examples:

scanf(“%s”, &name);

if (i < N);{ scanf(“%d\n”, &i);}

float x, y, z = 3.5;

scanf(“%f”, x);

25

• Pay attention to compiler error and warning messages

Examples:

if (ch = ‘Q’){ break;}

Debugging Basics (cont)

“Possible incorrect assignment”

int N;

… scanf(“%d”, N);

“Possible use of ‘N’ before declaration”

26

Tracing• Trace execution of a program:

– location in the program– status/contents of variables

• Tools:– programming environment

• E.g., “step”, “breakpoints”, “watch”– debugging statements

• E.g., output values of variables, markers at specific locations, etc

27

Example: Debugging Statements

...for (i=0; i<N; i++){scanf(“%s”, name);

}

28

Example: Debugging Statements (cont)

TIP: make debugging statements conditional on a boolean variable

const int debugging = 1;...for (i=0; i<N; i++){scanf(“%s”, name);

if (debugging) {

printf("for: i=%d, name=%s\n", i, name);}

}

29

Example: Debugging Statements (alternative)

#define DEBUG 1int main()...for (i=0; i<N; i++){scanf(“%s”, name);

#if DEBUG printf("for: i=%d, name=%s\n", i, name); #endif

}

30

Testing Techniques

• Test data set should “fully” test the program

• All logical paths of the program should be traversed (i.e., every line of code should be executed at least once)

• Use the design represented by the flowchart

TIP: build your programs incrementally, testing small components as you go along

31

Example: BestMark

Problem:

• Write a program which reads a list of marks, and prints out the best mark

• Example:– Input: 18 56 65 96 24 30– Output: Best mark is 96

32

Example: BestMark (cont)

set bestMark to 0loop{ input mark if (end of input) then exit loop

}output “Best mark is “, bestMark

Algorithm

33

Example: BestMark (cont)

set bestMark to 0loop{ input mark if (end of input) then exit loop

if (mark > bestMark) then { set bestMark to mark }}output “Best mark is “, bestMark

Algorithm

34

Example: BestMark (cont)

set bestMark to 0loop{ input mark if (end of input) then exit loop

if (mark > bestMark) then { set bestMark to mark }}output “Best mark is “, bestMark

Algorithm

How do I validatethe input?

35

Classes of Test Data

• Valid data

• Valid boundary data

• Special or unusual cases

• Invalid data

36

Test Data: Valid Data

• Reasonable data for the problem

• Example: BestMark

– What is the test out of?

– If mark is out of 100, valid test data is

75, 65, 55

37

Test Data: Valid Boundary Data

• Data with extreme values– Example: BestMark

• minimum of 0• maximum of 100

• Test selection conditions

• Test iteration exit conditions

• Test first and last elements of an array

38

Test Data: Special Cases

• Example: BestMark– What if someone is absent or the mark is

withheld (special consideration)?

input markEnteredif (markEntered is “Abs” or “WH”) { output “No mark for this student”

set mark to 0 } else { set mark to numerical value of markEntered

}

39

Test Data: Invalid Data

• Invalid data is– of an incorrect type, or– outside the expected range

• Use features of the programming language to ensure correct data type– Example: BestMark

• mark can be restricted to an integer int mark;

scanf(“%d”, &mark);

40

Test Data: Invalid Data (cont)

...if ((mark < 0) or (mark > 100)){ output “Mark has to be between 0 and 100”}

input markEntered...set mark to numerical value of markEntered

if (cannot get number from markEntered){ output “Invalid input”}

41

loop{ set bestMark to 0 input markEntered if (end of input) break loop if ( markEntered is “Abs” or “WH” ) { output “No mark for this student” } else { set mark to numerical value of markEntered if (cannot get number from markEntered)

{ output “Invalid input” } else if ((mark < 0) or (mark > 100))

{ output “Mark has to be between 0 and 100” } else /* valid input! */

{ if (mark > bestMark) set bestMark to mark

}}

}output “Best mark is “, bestMark

Algorithm: BestMark

best1

42

Example

int x,y; scanf("%d %d", &x, &y);if (x > 2) { while (x > y) { printf("S1,"); x--; } printf("S2,"); } else if (x < y){ printf("S3,"); }printf("S4");

YES NOx>2?

Input x,y

NO

output S2

x<y?

output S4

YES

output S3

NO

YES

x>y?

output S1

decrement x

43

Example (cont)

int x,y; scanf("%d %d", &x, &y);if (x > 2) { while (x > y) { printf("S1,"); x--; } printf("S2,"); } else if (x < y){ printf("S3,"); }printf("S4");

YES NOx>2?

Input x,y

44

int x,y; scanf("%d %d", &x, &y);if (x > 2) { while (x > y) { printf("S1,"); x--; } printf("S2,"); else if (x < y){ printf("S3,"); }printf("S4");

YES NOx>2?

Input x,y

YES

x>y?

output S1

decrement x

Example (cont)

45

int x,y; scanf("%d %d", &x, &y);if (x > 2) { while (x > y) { printf("S1,"); x--; } printf("S2,"); } else if (x < y){ printf("S3,"); }printf("S4");

YES NOx>2?

Input x,y

x<y?

output S4

YES

output S3

NO

YES

x>y?

output S1

decrement x

Example (cont)

46

int x,y; scanf("%d %d", &x, &y);if (x > 2) { while (x > y) { printf("S1,"); x--; } printf("S2,"); } else if (x < y){ printf("S3,"); }printf("S4");

YES NOx>2?

Input x,y

NO

output S2

x<y?

output S4

YES

output S3

NO

YES

x>y?

output S1

decrement x

Example (cont)

47

Example (cont): Valid Data

• Which lines of code indicate what is valid data?

int x,y;

scanf("%d %d\n", &x, &y);

• Valid data is any integer:–positive, –negative, or–zero

48

Example (cont): Test data for all logical paths

• What is done for every input?

int x,y; scanf("%d %d", &x, &y);if (x > 2) { while (x > y) { printf("S1,"); x--; } printf("S2,"); } else if (x < y){ printf("S3,"); }printf("S4");

• What does this say about the output?– S4 must be output at

the end every time

49

int x,y; scanf("%d %d", &x, &y); if (x > 2) { while (x > y) { printf("S1,"); x--; } printf("S2,"); } else if (x < y){ printf("S3,"); }printf("S4");

Example (cont): Test data for all logical paths

YES

YES NOx>2?

Input x,y

NO

output S2

x<y?

output S4

output S3

NO

YES

x>y?

output S1

decrement x

TO DO: Test all paths from “Input” to “Output S4”

50

Example (cont): Choice Points

YES NOx>2?

Input x,y

NO

output S2

x<y?

output S4

YESoutput S3

NO

YES

x>y?

output S1

decrement x

Paths are determined by choice points

51

Example (cont): Choice Points

• What are the highest level choice points?

int x,y; scanf("%d %d", &x, &y); if (x > 2){ while (x > y) { printf("S1,"); x--; } printf("S2,"); } else if (x < y){ printf("S3,"); }printf("S4");

52

Example (cont): Choice Points

YES

YES NOx>2?

Input x,y

NO

output S2

x<y?

output S4

output S3

NO

YES

x>y?

output S1

decrement x

int x,y; scanf("%d %d", &x, &y); if (x > 2){ while (x > y) { printf("S1,"); x--; } printf("S2,"); } else if (x < y){ printf("S3,"); }printf("S4");

53

Example (cont): Choice Points

Test data Case 1: NOT (x>2), NOT (x<y)

Output: S4

Specific Values: x==2, y == 2

YES NOx>2?

Input x,y

NO

output S2

x<y?

output S4

YESoutput S3

NO

YES

x>y?

output S1

decrement x

54

Example (cont): Choice Points

Test data Case 2: NOT (x>2), x<y

Output: S3, S4

Specific Values: x==2, y == 3

YES NOx>2?

Input x,y

NO

output S2

x<y?

output S4

YESoutput S3

NO

YES

x>y?

output S1

decrement x

55

Example (cont): Choice Points

int x,y; scanf("%d %d", &x, &y); if (x > 2) { while (x > y) { printf("S1,"); x--; } printf("S2,"); } else if (x < y){ printf("S3,"); }printf("S4");

YES NOx>2?

Input x,y

NO

output S2

x<y?

output S4

YESoutput S3

NO

YES

x>y?

output S1

decrement x

56

Example (cont): Choice Points

Test data Case 3(Loop body not executed):

x > 2, NOT(x > y)

Output: S2, S4

Specific Values: x==3, y == 4

YES NOx>2?

Input x,y

NO

output S2

x<y?

output S4

YESoutput S3

NO

YES

x>y?

output S1

decrement x

57

Example (cont): Choice Points

Test data Case 4(Loop body executed):

x > 2, x > y

Output: S1, S2, S4

Specific Values: x==5, y == 4

YES NOx>2?

Input x,y

NO

output S2

x<y?

output S4

YESoutput S3

NO

YES

x>y?

output S1

decrement x

58

Notes on Loop Tests • Is it possible that a loop never terminates?

– only if the algorithm is incorrect

• Example:

while (x > y) { printf("S1,"); x++; }

while (x > y) { printf("S1,"); x--; }

59

Exercise: Changing the Algorithm

/* Step 1 */ while (x > 0){ /* Step 2 */ if (y == 2) { /* Step 2a */ } else { /* Step 2b */ } /* Step 3 */ } /* Step 4 */

• How would you ensure that the loop always terminates?

• Provide a set of test data:

– valid

– valid boundary

– invalid

60

Summary

• Testing is an important part of the software development process

• Considering all the test data cases can lead to a change in the algorithm

• Flowcharts can be used to design the test data set