SlideShare a Scribd company logo
Nguyen Ngoc Anh
anhnn3@fpt.com.vn
Fu Hoa Lac, 3- 2013
Objectives

o Why testing?

o Basic principles

o How to choosing test case

o Test-First Programming

o Introduction to Junit

o Let’s do together!!!!


                     FUAgile: Unit Testing Basic   2
CRISIS




Numbers:
4.4 million cars recalled
Billions of $ loss.
Damage the brand

                            FUAgile: Unit Testing Basic   3
Desire vs. Reality

       Desired                                   Reality
Requirement
                        gap             Implementation
  Design



                    testing


                 FUAgile: Unit Testing Basic               4
Why testing?

o Ensuring QUALITY

o Managing RISKS

o Optimizing Return-On-Investment (ROI)

o Professionalism



                    FUAgile: Unit Testing Basic   5
Typical Production model

    Requirement


         Design


         Implement


                 Test

      FUAgile: Unit Testing Basic   6
Bug cost




FUAgile: Unit Testing Basic   7
Testing level

o Unit testing
   o On individual unit of source code (function, class, etc.)
   o Smallest testable part
   o Developer testing
o Integration testing
   o On groups of modules
o System testing
   o On complete integrated system



                       FUAgile: Unit Testing Basic               8
Basic Principles

o Be systematic

  o Haphazard testing & exhaustive testing are impossible.

  o test cases must be chosen carefully and systematically

o Do it early and often

  o Don’t leave testing until the end  debugging longer and
    more painful

  o test-first programming
                     FUAgile: Unit Testing Basic               9
Basic Principles

o Automate it

  o Nothing makes tests easier to run, and more likely to be
    run, than complete automation.

  o For regression test




                     FUAgile: Unit Testing Basic               10
Why Testing is Hard

o We want to

  o know when product is stable enough to launch

  o deliver product with known failure rate (preferably low)

  o offer warranty?




                      FUAgile: Unit Testing Basic              11
Why Testing is Hard

o But

  o it’s very hard to measure or ensure quality in software
  o residual defect rate after shipping:
    • 1 - 10 defects/kloc (typical)
    • 0.1 - 1 defects/kloc (high quality: Java libraries?)
    • 0.01 - 0.1 defects/kloc (very best: Praxis, NASA)
  o exhaustive testing is infeasible

  o statistical testing doesn’t work for software

                        FUAgile: Unit Testing Basic           12
Find bugs as cheaply and quickly as possible!




              FUAgile: Unit Testing Basic       13
Choosing Test Cases

o Key Idea #1: Partition the Input Space

  o input space is very large, but program is small  so
    behavior must be the “same” for whole sets of inputs

  o ideal test suite
     o identify sets of inputs with the same behavior

     o try one input from each set



                       FUAgile: Unit Testing Basic         14
Choosing Test Cases

Ex: multiply : BigInteger x BigInteger  BigInteger

partition BigInteger into:

   BigNeg, SmallNeg, -1, 0, 1, SmallPos, BigPos

pick a value from each class

   -265, -9 -1, 0, 1, 9, 265

test the 7 × 7 = 49 combinations

                     FUAgile: Unit Testing Basic      15
Choosing Test Cases

Ex2: max : int vs int  int

partition into:

    a < b, a = b, a > b

pick value from each class

    (1, 2), (1, 1), (2, 1)



                       FUAgile: Unit Testing Basic   16
Choosing Test Cases
0




       FUAgile: Unit Testing Basic   17
Choosing Test Cases

o Key idea #2: Boundary testing

  o include classes at boundaries of the input space

   zero, min/max values, empty set, empty string, null
  o why? because bugs often occur at boundaries
    o off-by-one errors

    o forget to handle empty container

    o overflow errors in arithmetic

                      FUAgile: Unit Testing Basic        18
Choosing Test Cases

EX: Find max value in a list of nonnegative integers. Assuming
that list is not empty.

public static int max(List<Integer> l) { ... }

    list length: length 0, length 1, length 2+

    max position: start, middle, end of list

    value of max: MIN_INT, negative, 0, positive, MAX_INT

                      FUAgile: Unit Testing Basic          19
Coverage
o all-statements: is every statement run by some test case?
 (common goal)

o all-branches: if every direction of an if or while statement (true
 or false) taken by some test case?

o all-paths: is every possible combination of branches – every
 path through the program – taken by some test case?



                        FUAgile: Unit Testing Basic               20
Test-first programming
2 approaches:

Code  Tests  Fix bugs (painful)

Write tests  Code           Test-first programming




        What is your choice?


                     FUAgile: Unit Testing Basic      21
Test-first programming
write tests before coding

specifically, for every method or class:
  1) write specification

  2) write test cases that cover the spec

  3) implement the method or class

  4) once the tests pass (and code coverage is sufficient), you’re done




                           FUAgile: Unit Testing Basic               22
JUnit

o Unit testing automation framework for Java

o Can do integration test

o Integrated in IDEs (Eclipse, NetBeans, IntelliJ, etc.)

o Must have tool for Java developers

                              http://www.junit.org/

                     FUAgile: Unit Testing Basic           23
JUnit
o A JUnit test case start with @Test

o Test case name start with testXXX()

o Using assertEquals, assertTrue, assertFalse…
@Test

public void testMaxAtStart(){

    ArrayList<Integer> list = new ArrayList<>();

    //add 5,2,3 to list

    assertEquals(MyClass.Max(list), 5);

}
                          FUAgile: Unit Testing Basic   24
JUnit
o If you expect an exception using

@Test(expected = SomeTypeOfException.class)
@Test(expected = IllegalArgumentException.class)

public void testMaxAtStart(){

    ArrayList<Integer> list = new ArrayList<>();

    MyClass.Max(list)

}



                        FUAgile: Unit Testing Basic   25
Let’s do together
Using Test-First programming

Ex1: Write a function with parameter is an integer n, if n<0 throw
IllegalArgumentException; otherwise
  • if n%3==0 return “Fizz”;

  • If n%5==0 return “Buzz”;

  • If n%3==0 and n%5==0 return “FizzBuzz”;

  • Else return the number itself

public static String fizzBuzz(int n) { ... }
                         FUAgile: Unit Testing Basic           26
Let’s do together
Using Test-First programming

Ex2: Find max value in a list of nonnegative integers. Assuming
that list is not empty.

public static int max(List<Integer> list) { ... }




                          FUAgile: Unit Testing Basic         27
Let’s do together
Using Test-First programming

Ex3: Find the union of 2 arrays of integers.

public static int[] union(int[] arr1, int[] arr2) { ... }




                          FUAgile: Unit Testing Basic       28

More Related Content

PPT
New Features Of Test Unit 2.x
KEY
An introduction to mutation testing
ODP
Advanced junit and mockito
PDF
Unit testing with Junit
PPTX
Testing with Junit4
PDF
C++ Unit Test with Google Testing Framework
PPTX
PPTX
Unit Testing with JUnit4 by Ravikiran Janardhana
New Features Of Test Unit 2.x
An introduction to mutation testing
Advanced junit and mockito
Unit testing with Junit
Testing with Junit4
C++ Unit Test with Google Testing Framework
Unit Testing with JUnit4 by Ravikiran Janardhana

What's hot (20)

PPT
05 junit
PDF
Mutation testing
PPTX
Java Unit Testing
PPT
Xp Day 080506 Unit Tests And Mocks
PDF
Test driven development - JUnit basics and best practices
PPSX
PPTX
Unit Testing with Python
PPTX
JUnit 5 - The Next Generation of JUnit - Ted's Tool Time
PPT
JUnit 4
PPT
PDF
JUnit & Mockito, first steps
PPTX
Introduction To J unit
PDF
Java custom annotations example
PPTX
JUnit- A Unit Testing Framework
PPT
3 j unit
PPS
Why Unit Testingl
PPS
JUnit Presentation
PDF
Unit testing, principles
PDF
MUTANTS KILLER - PIT: state of the art of mutation testing system
PPTX
Unit Testing in Java
05 junit
Mutation testing
Java Unit Testing
Xp Day 080506 Unit Tests And Mocks
Test driven development - JUnit basics and best practices
Unit Testing with Python
JUnit 5 - The Next Generation of JUnit - Ted's Tool Time
JUnit 4
JUnit & Mockito, first steps
Introduction To J unit
Java custom annotations example
JUnit- A Unit Testing Framework
3 j unit
Why Unit Testingl
JUnit Presentation
Unit testing, principles
MUTANTS KILLER - PIT: state of the art of mutation testing system
Unit Testing in Java
Ad

Viewers also liked (8)

PPTX
Глеб Сахрай, PR-Technologies
PPTX
Business Essentials budget, strategy & human resources
PPTX
Where Does Your Water Shed State Poster Contest
PDF
Overview
PPT
Bai giang trac dia dai cuong bk
PPTX
Virtual instrumentation (LabVIEW)
PDF
VHT Education - OD1 - Google
Глеб Сахрай, PR-Technologies
Business Essentials budget, strategy & human resources
Where Does Your Water Shed State Poster Contest
Overview
Bai giang trac dia dai cuong bk
Virtual instrumentation (LabVIEW)
VHT Education - OD1 - Google
Ad

Similar to Fu agile#2 unit_testing (20)

PDF
Agile process
PDF
Tester Challenges in Agile ?
PPS
Why unit testingl
PPS
Why Unit Testingl
PDF
Identify and Exploit Behavioral Boundaries for Unit Testing
PPT
Unit 6
PPT
Software testing
PPTX
Helping Programmers Write Better Tests
PPS
Unit Testing
PPT
Testing Fundamentals
PPTX
These risks can arise from various sources and can affect different aspects o...
PPTX
Testing 101
PDF
Unit testing and scaffolding
PPTX
Software Testing Introduction (Part 1)
PPTX
The Test way
PDF
Testing untestable code - STPCon11
PPT
&lt;p>Software Testing&lt;/p>
PPT
An overview to Software Testing
PPTX
1.1 Chapter_22_ Unit Testing-testing (1).pptx
PDF
Engineering Software Products: 9. testing
Agile process
Tester Challenges in Agile ?
Why unit testingl
Why Unit Testingl
Identify and Exploit Behavioral Boundaries for Unit Testing
Unit 6
Software testing
Helping Programmers Write Better Tests
Unit Testing
Testing Fundamentals
These risks can arise from various sources and can affect different aspects o...
Testing 101
Unit testing and scaffolding
Software Testing Introduction (Part 1)
The Test way
Testing untestable code - STPCon11
&lt;p>Software Testing&lt;/p>
An overview to Software Testing
1.1 Chapter_22_ Unit Testing-testing (1).pptx
Engineering Software Products: 9. testing

Recently uploaded (20)

PPTX
vertigo topics for undergraduate ,mbbs/md/fcps
PPTX
obstructive neonatal jaundice.pptx yes it is
PDF
Intl J Gynecology Obste - 2021 - Melamed - FIGO International Federation o...
PPTX
ANATOMY OF MEDULLA OBLANGATA AND SYNDROMES.pptx
PPT
STD NOTES INTRODUCTION TO COMMUNITY HEALT STRATEGY.ppt
PDF
focused on the development and application of glycoHILIC, pepHILIC, and comm...
DOCX
PEADIATRICS NOTES.docx lecture notes for medical students
PPTX
Human Reproduction: Anatomy, Physiology & Clinical Insights.pptx
PPTX
preoerative assessment in anesthesia and critical care medicine
PPTX
NRPchitwan6ab2802f9.pptxnepalindiaindiaindiapakistan
PPTX
y4d nutrition and diet in pregnancy and postpartum
PPTX
Post Op complications in general surgery
PPTX
1. Basic chemist of Biomolecule (1).pptx
PPTX
Neuropathic pain.ppt treatment managment
PDF
Copy of OB - Exam #2 Study Guide. pdf
PPTX
Anatomy and physiology of the digestive system
PPT
HIV lecture final - student.pptfghjjkkejjhhge
PPT
Infections Member of Royal College of Physicians.ppt
PPT
MENTAL HEALTH - NOTES.ppt for nursing students
PPTX
NASO ALVEOLAR MOULDNIG IN CLEFT LIP AND PALATE PATIENT
vertigo topics for undergraduate ,mbbs/md/fcps
obstructive neonatal jaundice.pptx yes it is
Intl J Gynecology Obste - 2021 - Melamed - FIGO International Federation o...
ANATOMY OF MEDULLA OBLANGATA AND SYNDROMES.pptx
STD NOTES INTRODUCTION TO COMMUNITY HEALT STRATEGY.ppt
focused on the development and application of glycoHILIC, pepHILIC, and comm...
PEADIATRICS NOTES.docx lecture notes for medical students
Human Reproduction: Anatomy, Physiology & Clinical Insights.pptx
preoerative assessment in anesthesia and critical care medicine
NRPchitwan6ab2802f9.pptxnepalindiaindiaindiapakistan
y4d nutrition and diet in pregnancy and postpartum
Post Op complications in general surgery
1. Basic chemist of Biomolecule (1).pptx
Neuropathic pain.ppt treatment managment
Copy of OB - Exam #2 Study Guide. pdf
Anatomy and physiology of the digestive system
HIV lecture final - student.pptfghjjkkejjhhge
Infections Member of Royal College of Physicians.ppt
MENTAL HEALTH - NOTES.ppt for nursing students
NASO ALVEOLAR MOULDNIG IN CLEFT LIP AND PALATE PATIENT

Fu agile#2 unit_testing

  • 2. Objectives o Why testing? o Basic principles o How to choosing test case o Test-First Programming o Introduction to Junit o Let’s do together!!!! FUAgile: Unit Testing Basic 2
  • 3. CRISIS Numbers: 4.4 million cars recalled Billions of $ loss. Damage the brand FUAgile: Unit Testing Basic 3
  • 4. Desire vs. Reality Desired Reality Requirement gap Implementation Design testing FUAgile: Unit Testing Basic 4
  • 5. Why testing? o Ensuring QUALITY o Managing RISKS o Optimizing Return-On-Investment (ROI) o Professionalism FUAgile: Unit Testing Basic 5
  • 6. Typical Production model Requirement Design Implement Test FUAgile: Unit Testing Basic 6
  • 7. Bug cost FUAgile: Unit Testing Basic 7
  • 8. Testing level o Unit testing o On individual unit of source code (function, class, etc.) o Smallest testable part o Developer testing o Integration testing o On groups of modules o System testing o On complete integrated system FUAgile: Unit Testing Basic 8
  • 9. Basic Principles o Be systematic o Haphazard testing & exhaustive testing are impossible. o test cases must be chosen carefully and systematically o Do it early and often o Don’t leave testing until the end  debugging longer and more painful o test-first programming FUAgile: Unit Testing Basic 9
  • 10. Basic Principles o Automate it o Nothing makes tests easier to run, and more likely to be run, than complete automation. o For regression test FUAgile: Unit Testing Basic 10
  • 11. Why Testing is Hard o We want to o know when product is stable enough to launch o deliver product with known failure rate (preferably low) o offer warranty? FUAgile: Unit Testing Basic 11
  • 12. Why Testing is Hard o But o it’s very hard to measure or ensure quality in software o residual defect rate after shipping: • 1 - 10 defects/kloc (typical) • 0.1 - 1 defects/kloc (high quality: Java libraries?) • 0.01 - 0.1 defects/kloc (very best: Praxis, NASA) o exhaustive testing is infeasible o statistical testing doesn’t work for software FUAgile: Unit Testing Basic 12
  • 13. Find bugs as cheaply and quickly as possible! FUAgile: Unit Testing Basic 13
  • 14. Choosing Test Cases o Key Idea #1: Partition the Input Space o input space is very large, but program is small  so behavior must be the “same” for whole sets of inputs o ideal test suite o identify sets of inputs with the same behavior o try one input from each set FUAgile: Unit Testing Basic 14
  • 15. Choosing Test Cases Ex: multiply : BigInteger x BigInteger  BigInteger partition BigInteger into: BigNeg, SmallNeg, -1, 0, 1, SmallPos, BigPos pick a value from each class -265, -9 -1, 0, 1, 9, 265 test the 7 × 7 = 49 combinations FUAgile: Unit Testing Basic 15
  • 16. Choosing Test Cases Ex2: max : int vs int  int partition into: a < b, a = b, a > b pick value from each class (1, 2), (1, 1), (2, 1) FUAgile: Unit Testing Basic 16
  • 17. Choosing Test Cases 0 FUAgile: Unit Testing Basic 17
  • 18. Choosing Test Cases o Key idea #2: Boundary testing o include classes at boundaries of the input space zero, min/max values, empty set, empty string, null o why? because bugs often occur at boundaries o off-by-one errors o forget to handle empty container o overflow errors in arithmetic FUAgile: Unit Testing Basic 18
  • 19. Choosing Test Cases EX: Find max value in a list of nonnegative integers. Assuming that list is not empty. public static int max(List<Integer> l) { ... } list length: length 0, length 1, length 2+ max position: start, middle, end of list value of max: MIN_INT, negative, 0, positive, MAX_INT FUAgile: Unit Testing Basic 19
  • 20. Coverage o all-statements: is every statement run by some test case? (common goal) o all-branches: if every direction of an if or while statement (true or false) taken by some test case? o all-paths: is every possible combination of branches – every path through the program – taken by some test case? FUAgile: Unit Testing Basic 20
  • 21. Test-first programming 2 approaches: Code  Tests  Fix bugs (painful) Write tests  Code Test-first programming What is your choice? FUAgile: Unit Testing Basic 21
  • 22. Test-first programming write tests before coding specifically, for every method or class: 1) write specification 2) write test cases that cover the spec 3) implement the method or class 4) once the tests pass (and code coverage is sufficient), you’re done FUAgile: Unit Testing Basic 22
  • 23. JUnit o Unit testing automation framework for Java o Can do integration test o Integrated in IDEs (Eclipse, NetBeans, IntelliJ, etc.) o Must have tool for Java developers http://www.junit.org/ FUAgile: Unit Testing Basic 23
  • 24. JUnit o A JUnit test case start with @Test o Test case name start with testXXX() o Using assertEquals, assertTrue, assertFalse… @Test public void testMaxAtStart(){ ArrayList<Integer> list = new ArrayList<>(); //add 5,2,3 to list assertEquals(MyClass.Max(list), 5); } FUAgile: Unit Testing Basic 24
  • 25. JUnit o If you expect an exception using @Test(expected = SomeTypeOfException.class) @Test(expected = IllegalArgumentException.class) public void testMaxAtStart(){ ArrayList<Integer> list = new ArrayList<>(); MyClass.Max(list) } FUAgile: Unit Testing Basic 25
  • 26. Let’s do together Using Test-First programming Ex1: Write a function with parameter is an integer n, if n<0 throw IllegalArgumentException; otherwise • if n%3==0 return “Fizz”; • If n%5==0 return “Buzz”; • If n%3==0 and n%5==0 return “FizzBuzz”; • Else return the number itself public static String fizzBuzz(int n) { ... } FUAgile: Unit Testing Basic 26
  • 27. Let’s do together Using Test-First programming Ex2: Find max value in a list of nonnegative integers. Assuming that list is not empty. public static int max(List<Integer> list) { ... } FUAgile: Unit Testing Basic 27
  • 28. Let’s do together Using Test-First programming Ex3: Find the union of 2 arrays of integers. public static int[] union(int[] arr1, int[] arr2) { ... } FUAgile: Unit Testing Basic 28

Editor's Notes

  • #3: I don’t want to frustrate you by bunch of testing terms. Just focus on thinking, process and how-tos.
  • #4: Global: 4.4 million cars recalled (http://wsws.org/articles/2010/feb2010/toyo-f12.shtml )In the first quarter of 2009, the company posted a $7.7 billion loss. The estimated loss for Toyota in the current financial year, calculated before the expansion of the recall process in January, is $5.5 billion.http://parttimembadegree.com/business-school-cases/toyota-recalls-pr-management-crisis/http://en.wikipedia.org/wiki/2009%E2%80%932011_Toyota_vehicle_recallsVN: “mua toy chonólành” – lost
  • #6: For ROI optimization, see the analysis of Rex Black on Managing the Testing Process: Practical Tools and Techniques for Managing Hardware and Software Testing
  • #8: In conclusion: Test a.s.a.pTesting is responsibilities of all including developers.