SlideServe
Menu
Préférences
© SlideServe · v2026

Unit Testing 101

wilford avatar
28 diapositives · 515 Views · Aug 22, 2012

Unit Testing 101. Black Box v. White Box. Definition of V&V. Verification - is the product correct Validation - is it the correct product. Background Info…. Textbook's Definition of Testing:

Unit Testing 101 - slide 1
01 / 28Unit Testing 101
1 / 17

Télécharger la présentation

Unit Testing 101
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation

Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement. Téléchargez la présentation en cliquant sur ce lien. Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.

F I N

Plus de contenu associé

Transcription de la présentation
  1. Unit Testing 101 Black Box v. White Box

  2. Definition of V&V • Verification - is the product correct • Validation - is it the correct product

  3. Background Info… • Textbook's Definition of Testing: • Software Testing is a formal process carried out by a specialized team in which a software unit, several integrated units or an entire software package are examined by running the programs on a computer. • Testing is the single biggest SQA task. • on average, 24% of the development budget is testing • Code Testing ≠ Code Walkthrough • Objectives of Testing: • reveal errors • after retesting, assurance of acceptable quality • compile record of software errors textbook pages 178-182

  4. Laws of Testing • The best person to test your code is someone else. • A good test is one that finds an error. • Testing can not prove the absence of errors. • Complete test coverage is impossible, so concentrate on problem areas. • It cost a lot less to remove bugs early.

  5. Testing Stages • Unit Testing • modules of code • Integration Testing • design • Validation Testing • requirements • System Testing • system engineering today next class

  6. Reality Check… • Why not just run the whole thing and see if it gives us the right answer or if it crashes?

  7. Unit Testing • White Box Testing • testing a module of code based on the source code • Black Box Testing • testing a module based on its description and/or the requirements specification • Also called "functional" and "behavioral" testing • Proof of Correctness • mathematically-based analysis of the requirements, similar to theorem proving

  8. White Box Testing Fundamentals • White Box testing is much more expensive than Black Box testing. • White Box is most appropriate when we must assure that the calculations are correct. • Covering every possible path through a module is usually not practical. • 10 if-then statements might require 1024 test cases • instead, base the number of tests on the complexity of the module

  9. Types of Code Coverage • Function coverage • Has each function in the program been executed? • Statement coverage • Has each line of the source code been executed? • Condition coverage • Has each evaluation point (such as a true/false decision) been executed? • Path coverage • Has every possible route through a given part of the code been executed? • Entry/exit coverage • Has every possible call and return of the function been executed?

  10. Example One int example1 (int value, boolean cond1, boolean cond2) { if ( cond1 ) value ++; if ( cond2 ) value --; return value; } • Total Statement Coverage with one case - True True. • Total Path Coverage with four paths - TT TF FT FF. • But, total path coverage is usually impractical, so Basis Path Testing is usually better.

  11. Basis Path Testing Objective is to test each conditional statement as both true and false • Draw a Flow Graph • Determine the Cyclomatic Complexity • CC = number of regions • CC = E - N + 2 • Max Number of tests = CC • Derive a basis set of independent paths • Generate data to drive each path

  12. Flow Graphs simple sequence if then else while do until case statement

  13. Example One - using basis path int example1 (int value, boolean cond1, boolean cond2) { 1 if ( cond1 ) 2 value ++; 3 if ( cond2 ) 4 value --; 5 return value; } Complexity = 3 Basis PathsTest Data 1 3 5 false false 1 2 3 5 true false 1 2 3 4 5 true true 1 2 3 4 5

  14. Example One - sample driver Test Data false false true false true true int example1 (int value, boolean cond1, boolean cond2) { ... } print ("test one ", example1 (5, false, false)); print ("test two ", example1 (5, true, false)); print ("test three ", example1 (5, true, true));

  15. Example Two float avg_negative_balance (int arraysize, float balances[]) { float total = 0.0; int count = 0; for I = 1 to arraysize if ( balances[I] < 0 ) total += balances[I]; count ++; end if; end for; return total / count; }

  16. Example Two - using basis path float avg_negative_balance (int arraysize, float balances[]) { 1 float total = 0.0; int count = 0; 2 for I = 1 to arraysize 3 if ( balances[I] < 0 ) 4 total += balances[I]; count ++; end if; end for; 5 return total / count; } Basis Paths Test Data 1 2 5 arraysize = 0 1 2 3 2 5 arraysize = 1, balance[1] = 25 1 2 3 4 2 5 arraysize = 1, balance[1] = -25 1 2 3 T F 5 4

  17. Example Two - Test Report Test # Test Data Result 1 array size = 0 failed 2 size = 1 passed array = [ 25 ] 3 size = 1 passed array = [ -25 ] Errors not detected: • precious errors when "total" gets very small

  18. Loop Testing Errors often occur near the beginnings and ends of loops. • For each loop that iterates max N times, test • N = 0 • N = 1 • N = max -1 • N = max • N = max + 1 • For nested loops • repeat above for the innermost loop, outer loop iterates once • then repeat all 5 possibilities for outer loop, while inner loop iterates only once

  19. Example Two - using loop testing float avg_negative_balance (int arraysize, float balances[]) { float total = 0.0; int count = 0; for I = 1 to arraysize if ( balances[I] < 0 ) total += balances[I]; count ++; end if; end for; return total / count; } Test Case Test Data N = 0 size = 0 N = 1 size = 1 N = max-1 size = 999 (if SRS says max=1000) N = max size = 1000 N = max+1 size = 1001, but array has only 1000 elements

  20. Simple Black Box Testing • Create Test Cases for • Easy-to-compute data • Typical data • Boundary / extreme data • Bogus data

  21. Boundary Value Analysis • Form of Black Box testing • similar to "Equivalence Partitioning" • Rationale: • off-by-one is the most common coding error • errors usually occur near the ends - boundaries

  22. BVA Test Cases • if an input specifies a range bounded by A and B, • test value = A • test value = B • test value < A • test value > B • do the same for outputs

  23. Example Two - using BVA Inputs and Outputs to be Tested: • Inputs • size • range from 0 to 1000 • array of balances • elements are positive and negative floats • Outputs • average of negative balances

  24. Example Two - using BVA Test Cases: • Based on Input Boundaries • size = 0 • size = 1, balance[1] is negative • size = 1, balance[1] is positive • size = 1000, all negatives • size = 1000, all positives • size = 1001 • Based on Output Boundaries • a test where the average negative is huge • a test where the average negative is small

  25. Random Testing • Method: • just randomly generate test data • Advantage: • very easy to generate lots of test cases • Disadvantage: • you have to get lucky that a test case will find an error

  26. A the moral of this story is… Use a testing tool.

  27. One last example... void count_balances (int arraysize, float balances[], out int people_we_owe, out int people_who_owe_us) { people_we_owe = 0; people_who_owe_us = 0; for I = 1 to arraysize if ( balances[I] < 0 ) people_who_owe_us ++; else people_we_owe ++; }

  28. Next Time… • Integration Testing • System Testing • User Interface Testing • Writing a Test Plan