12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

60
Testing and Debugging Testing, Bug Fixing and Debugging the Code Yordan Dimitrov Telerik Corporation www.telerik.com Team Leader, TeamPulse, Telerik Corporation, Blog:http://blogs.tel erik.com/ jordandimitrov/ http://codecourse.telerik.com/

description

High-Quality Code @ Telerik AcademyTelerik Software Academy: http://codecourse.telerik.com/The website and all video materials are in Bulgarian Content:What Is Testing?Seven Testing PrinciplesDeveloper TestingDeveloper vs. QA TestingDebugging vs. TestingBlack-box vs. White-box TestingRole of Developer Testing in Software QualityRecommended Approach to Developer Testing

Transcript of 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Page 1: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Testing and Debugging

Testing, Bug Fixing and Debugging the Code

Yordan Dimitrov

Telerik Corporationwww.telerik.com

Team Leader, TeamPulse,

Telerik Corporation, Blog:http://blogs.telerik.com/

jordandimitrov/

http://codecourse.telerik.com/

Page 2: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Testing and Debugging

Testing, Bug Fixing and Debugging the Code

Yordan DimitrovTelerik Corporationwww.telerik.

com

Page 3: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Table of Contents What Is Testing? Seven Testing Principles Developer Testing

Developer vs. QA Testing

Debugging vs. Testing

Black-box vs. White-box Testing

Role of Developer Testing in Software Quality

Recommended Approach to Developer Testing

3

Page 4: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

What Is Testing?

Page 5: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Main Test Activities Testing is not just running tests, but also: Planning and control Choosing test conditions Designing and executing test cases Checking results Evaluating exit criteria Reporting on the testing process

and system under test Finalizing or completing closure

activities6

Page 6: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Main Objectives in Testing

Testing pursues several objectives: Finding defects Gaining confidence about the level

of quality Providing information for decision-

making Preventing defects

7

Page 7: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Different Viewpoints / Different Objectives

Objectives of testing differ according to the point of view: Development testing – cause as

many failures as possible and fix them

Acceptance testing – confirm that the system works as expected

Assessment – assess the quality of the software and its readiness for release 8

Page 8: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Different Viewpoints / Different Objectives (2)

Objectives of testing differ according to the point of view: Maintenance testing – check for

new defects, introduced during development

Operational testing – assess system characteristics such as reliability or availability

9

Page 9: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Seven Testing Principles

Page 10: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Seven Testing Principles (1)

1.Testing shows presence of defects Testing can show that defects are

present Cannot prove that there are no

defects Appropriate testing reduces the

probability for defects

11

Page 11: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Seven Testing Principles (2)

2.Exhaustive testing is impossible All combinations of inputs and

preconditions are usually almost infinite number

Testing everything is not feasible Except for trivial cases

Risk analysis and priorities should be used to focus testing efforts

12

Page 12: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Seven Testing Principles (3)

3.Early testing Testing activities shall be started as

early as possible And shall be focused on defined

objectives

The later a bug is found – the more it costs!

13

Page 13: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Seven Testing Principles (4)

4.Defect clustering Testing effort shall be focused

proportionally To the expected and later observed

defect density of modules

A small number of modules usually contains most of the defects discovered Responsible for most of

the operational failures

14

Page 14: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Seven Testing Principles (5)

5.Pesticide paradox Same tests repeated over and over

again tend to loose their effectiveness Previously undetected defects

remain undiscovered

New and modified test cases should be developed

15

Page 15: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Seven Testing Principles (6)

6.Testing is context dependent Testing is done differently in

different contexts Example: safety-critical software is

tested differently from an e-commerce site

16

Page 16: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Seven Testing Principles (7)

7.Absence-of-errors fallacy Finding and fixing defects itself

does not help in these cases: The system built is unusable

Does not fulfill the users’ needs and expectations

17

Page 17: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Developer TestingTesting as a Priority of the Developer

Page 18: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Developer vs. QA Testing

Software is tested in numerous ways Some are typically performed by

developers

Some are more commonly performed by specialized test personnel QA Engineers

19

Page 19: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Developer Testing Developer testing refers to testing by the developer

Usually the following tests are priority of developer testing: Unit tests

Component tests

Integration tests

Sometimes regression tests and system tests are also included

20

Page 20: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Testing as a Priority of the QA Engineer

Numerous additional kinds of testing are performed by QA Engineers and rarely performed by developers:

21

Beta tests

Customer-acceptance tests

Performance tests

Configuration

tests

Platform tests

Stress tests

Usability tests

Etc.

Page 21: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Debugging vs. Testing Testing

A means of initial detection of errors

Debugging A means of diagnosing and

correcting the root causes of errors that have already been detected

22

Page 22: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Black-box vs. White-box Testing

Testing is usually broken into two broad categories: Black-box testing

White-box testing

24

Page 23: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Black-box Techniques Black-box techniques are a way to derive and select test conditions, test cases, or test data Based on an analysis of the test

basis documentation Also called specification-based or

behavioral techniques Tests are based on the way the

system is supposed to work

25

Page 24: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

White-box Techniques White-box techniques

Also called structural or glass-box techniques

Based on an analysis of the structure of the component or system Information about how the software

is constructed?

E.g., code and detailed design information

Usually a priority of developers26

Page 25: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Role of Developer Testing in Software

Quality

Page 26: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Role of Developer Testing in Software

Quality Individual testing steps typically find less than 50 percent of the errors present each (Unit test, component test, and

integration test) The combination of testing steps often finds less than 60 percent of the errors present (Jones 1998)

28

Page 27: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Why is Testing a Hard Activity?

Testing's goal runs counter to the goals of other development activities

Testing can never completely prove the absence of errors

Testing by itself does not improve software quality

Testing requires you to assume that you'll find errors in your code

29

Page 28: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

How Much Testing is Enough?

How much testing should be done is a matter of risk: Too much testing can delay the

product release and increase the product price

Insufficient testing hides risks of errors in the final product

30

Page 29: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

How Much Time Should Be Spent in Developer

Testing ?

31

Developer testing should probably take 8 to 25 percent of the total project time

Page 30: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Recommended Approach to

Developer TestingGround Rules and Tips for Effective Development and Testing

Page 31: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Recommended Approach to Developer

Testing Test for each relevant requirement

Make sure that the requirements have been implemented

Test for each relevant design concern Make sure that the design has been

implemented

33

Page 32: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Recommended Approach to Developer

Testing (2) Use "basis testing" to add detailed test cases to those that test the requirements and the design

Use a checklist of the kinds of errors you've made on the project to date or have made on previous projects

34

Page 33: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Test First or Test Last?

Effort is the same

Detect defects earlier

Forces you to think at least a little bit

Exposes requirements problems sooner

Run it when you want

35Source: flickr

Page 34: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Limitations of Developer Testing

Developer tests tend to be "clean tests“

Developer testing tends to have an optimistic view of test coverage

Developer testing tends to skip more sophisticated kinds of test coverage

36

Page 35: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Bag of Testing Tricks Incomplete Testing Structured Basis Testing Data-Flow Testing Equivalence Partitioning Error Guessing Boundary Analysis Classes of Bad Data Classes of Good Data Use Test Cases That Make Hand-

Checks Convenient37

Page 36: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Structured Basis Testing

Test each statement in a program at least once

Compute the minimum number of test cases: Start with 1 for the straight path

through the routine

Add 1 for each of the following keywords, or their equivalents: if, while, repeat, for, and, and or

Add 1 for each case in a case statement If the case statement doesn't have a

default case, add 1 more

38

Page 37: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Sample

Statement1; <-- 1Statement2;

if ( x < 10 ) { <-- 2 Statement3;}

Statement4;

(1)Count "1" for the routine itself.(2)Count "2" for the if.

39

Page 38: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Sample Test Cases

40

Case

Minimum memory use Most readable output

1 Nominal case All boolean conditions are true

2 The initial for condition is false numEmployees < 1

3The first if is false

m_employee[ id ].governmentRetirementWith-held >=MAX_GOVT_RETIREMENT

4 The second if is false because the first part of the and is false

not m_employee[ id ].WantsRetirement

5 The second if is false because the second part of the and is false

not EligibleForRetirement( m_employee[id] )

6The third if is false

not EligibleForPersonalRetirement( m_employee[ id ] )

Page 39: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Data-Flow Testing

The normal combination of data states A variable is defined, used one or

more times, and perhaps killed

41Source: http://blog.radvision.com

Page 40: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Data-Flow Testing (2)

The key to writing data-flow test cases is to exercise all possible defined-used paths: All definitions

Test every definition of every variable

I.e., every place at which any variable receives a value

All defined-used combinations Test every combination of defining a

variable in one place and using it in another 42

Page 41: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Sample Test Casesif ( Condition 1 ) {

x = a;} else {

x = b; } if ( Condition 2 ) {

y = x + 1; } else {

y = x - 1; }

43

Case Test Description

1 Condition 1 = true, Condition 2 = true

2 Condition 1 = false, Condition 2 = false

?x = a; y = x – 1;

?x = b; y = x + 1;

Page 42: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Sample Test Cases

44

Case Test Description

7 Define companyRetirement in line 12, and use it first in line 26

This isn't necessarily covered by any of the previous test cases

8 Define companyRetirement in line 12, and use it first in line 31

This isn't necessarily covered by any of the previous test cases

Page 43: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Boundary Analysis

45

Case Test Description

1 Case 1 is defined so that the true condition for m_employee[ ID ]. governmentRetirementWithheld < MAX_GOVT_RETIREMENT is the first case on the true side of the boundary

3 Case 3 is defined so that the false condition for m_employee[ ID ]. governmentRetirementWithheld < MAX_GOVT_RETIREMENT is on the false side of the boundary

9 An additional test case is added for the case directly on the boundary in which m_employee [ ID ].governmentRetirementWithheld = MAX_GOVT_RETIREMENT

Page 44: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Compound Boundaries

Minimum and Maximum allowable values

46

Case Test Description

10 A large group of employees, each of whom has a large salary (what constitutes "large" depends on the specific system being developed)—for the sake of example, we'll say 1000 employees, each with a salary of $250,000, none of whom have had any social security tax withheld and all of whom want retirement withholding.

11 A group of 10 employees, each of whom has a salary of $0.00.

Page 45: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Classes of Bad Data

Too little data (Case 2-11)

Too much data The wrong kind of

data The wrong size of

data Uninitialized data

47

Case Test Description

12 An array of 100,000,000 employees. Tests for too much data.

13 A negative salary. Wrong kind of data.

14 A negative number of employees. Wrong kind of data.

Page 46: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Classes of Good Data Nominal cases—middle-of-the-road,

expected values Minimum normal configuration Maximum normal configuration Compatibility with old data

48

Case Test Description

16 A group of one employee. To test the minimum normal configuration.

17 A group of 500 employees. To test the maximum normal configuration.

Page 47: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Typical Errors Which Classes Contain the Most Errors?

Errors by Classification The scope of most errors is fairly

limited Many errors are outside the domain

of construction Most construction errors are the

programmers' fault Clerical errors (typos) are a

surprisingly common source of problems

49

Page 48: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Typical Errors (2) Errors by Classification

Misunderstanding the design is a recurring theme in studies of programmer errors

Most errors are easy to fix It's a good idea to measure your

own organization's experiences with errors

50Source: http://kathrynvercillo.com

Page 49: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Improving Your Testing

Planning to Test Retesting (Regression Testing) Automated Testing

51

Page 50: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Finding a Defect1.Stabilize the error

2.Locate the source of the errora)Gather the data

b)Analyze the data and form hypothesis

c)Determine how to prove or disprove the hypothesis

d)Prove or disprove the hypothesis by 2c

3.Fix the defect

4.Test the fix

5.Look for similar errors52

Page 51: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Finding a DefectDemo

Page 52: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Tips for Finding Defects (1)

Use all available data Refine the test cases Check unit tests Use available tools Reproduce the error several different ways

Generate more data to generate more hypotheses

Use the results of negative tests Brainstorm for possible hypotheses54

Page 53: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Tips for Finding Defects (2)

Narrow the suspicious region of the code

Be suspicious of classes and routines that have had defects before

Check code that’s changed recently Expand the suspicious region of the code

Integrate incrementally Check for common defects Talk to someone else about the problem

Take a break from the problem

55

Page 54: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Fixing a Defect Understand the problem before you fix it

Understand the program, not just the problem

Confirm the defect diagnosis Relax Save the original source code Fix the problem not the symptom Make one change at a time Add a unit test that expose the defect

Look for similar defects

56Source: http://www.movingseniorsbc.com

Page 55: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Your ego tells you that your code is good and doesn't have a defect even when you've seen that it has one.

How "Psychological Set" Contributes to Debugging Blindness

Psychological Considerations

57

Page 56: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Psychological Considerations (2)

58

Page 57: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Psychological Distance

How "Psychological Distance" can help

59

First Variable

Second Variable

Psychological Distance

stoppt stcppt Almost invisibleshiftrn shiftrm Almost nonedcount bcount Smallclaims1 claims2 Smallproduct sum Large

Page 58: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Testing and Quality Testing can give confidence in the quality of the software if it finds few or no defects

If defects are found, the quality increases when those defects are fixed

Lessons learnt from previous mistakes improve future performance

62

Page 59: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

форум програмиране, форум уеб дизайнкурсове и уроци по програмиране, уеб дизайн – безплатно

програмиране за деца – безплатни курсове и уроцибезплатен SEO курс - оптимизация за търсачки

уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop

уроци по програмиране и уеб дизайн за ученициASP.NET MVC курс – HTML, SQL, C#, .NET, ASP.NET MVC

безплатен курс "Разработка на софтуер в cloud среда"

BG Coder - онлайн състезателна система - online judge

курсове и уроци по програмиране, книги – безплатно от Наков

безплатен курс "Качествен програмен код"

алго академия – състезателно програмиране, състезания

ASP.NET курс - уеб програмиране, бази данни, C#, .NET, ASP.NETкурсове и уроци по програмиране – Телерик академия

курс мобилни приложения с iPhone, Android, WP7, PhoneGap

free C# book, безплатна книга C#, книга Java, книга C#Дончо Минков - сайт за програмиранеНиколай Костов - блог за програмиранеC# курс, програмиране, безплатно

?

? ? ??

?? ?

?

?

?

??

?

?

? ?

Questions?

?

Testing and Debugging

http://academy.telerik.com

Page 60: 12. Testing and Debugging - Testing, Bug Fixing and Debugging the Code

Free Trainings @ Telerik Academy

“High-Quality Programming Code" course @ Telerik Academy codecourse.telerik.com

Telerik Software Academy academy.telerik.com

Telerik Academy @ Facebook facebook.com/TelerikAcademy

Telerik Software Academy Forums forums.academy.telerik.com