functional

W
Document Sample
scope of work template
							  CS 406 Software Testing Fall 98
                             Part II: Functional Testing

                  Aditya P. Mathur
                  Purdue University




Last update: July 19, 1998
Part II: Functional testing
 Learning objectives-
  – What is functional testing?
  – How to perform functional testing?
      • What are clues, test requirements, and test
        specifications?
      • How to generate test inputs?
   – What are equivalence partitioning, boundary
     value testing, domain testing, state testing, and
     decision table testing?
                        Functional testing               2
What is functional testing?
 When test inputs are generated using
  program specifications, we say that we are
  doing functional testing.
 Functional testing tests how well a program
  meets the functionality requirements.



                   Functional testing           3
The methodology
 The derivation of test inputs is based on
  program specifications.
 Clues are obtained from the specifications.
 Clues lead to test requirements.
 Test requirements lead to test specifications.
 Test specifications are then used to actually
  execute the program under test.
                   Functional testing          4
 Test methodology
           Specifications
                 Clues                 Expected behavior

                                                           Program output
        Test requirements                                  is correct
                                                  Oracle     or
       Test specifications
                                                           Program has
                                                           failed; make a
Until specs.
               Test driver                                 note and proceed
                                        Actual behavior
Exhausted.                                                 with testing or
                Program                                    get into the debug
                                                           mode.
                             Functional testing                             5
Specifications
 Inputs and tasks:
   – Given inputs
              I 1, I 2 ,...., I n , n  0
    – Perform tasks
               T 1, T2 ,...., Tm , m  0



                           Functional testing   6
Specifications-continued
 Input properties
   – Input
           Ik
  – must satisfy

           f ( I 1, I 2 ,.. I k ,.., I n )

 Function f is a pre-condition on input I k

                           Functional testing   7
Specifications-continued
 Two types of pre-conditions are considered:
  – Validated: those that are required to be
    validated by the program under test and an
    error action is required to be performed if the
    condition is not true.
  – Assumed: those that are assumed to be true and
    not checked by the program under test.


                     Functional testing           8
Specification: example
 For the sort program:
   – Inputs are:
     •N
     • pointer to a sequence of length N
     • pointer to an area in memory where the output
       sequence is to be placed.




                      Functional testing               9
Specification: example..continued

  – Tasks to be performed:
     • Sort the sequence in ascending order
     • Return the sorted sequence in an area provided.
     • Return 1 if sorting is successful, -1 otherwise.




                       Functional testing                 10
Preconditions for sort
 Validated:
  – N>0
  – On failure return -1; sorting considered
    unsuccessful.
 Assumed:
  – The input sequence contains N integers.
  – The output area has space for at least N
    integers.
                     Functional testing        11
Deriving pre-conditions
 Pre-conditions result from properties of
  inputs.
 Example:
  – alpha_sequence(name)
    alpha_sequence is the string obtained from
    name by removing all characters other then A-
    Z, and a-z. Thus, if name is “A12C” then
    alpha_name is “AC”.
                    Functional testing              12
Deriving pre-conditions-continued

 This leads to the following pre-condition:
  – Validated: the string alpha_sequence(name) is
    shorter than name.
  – On failure: print “invalid name”.
 This property could also lead to the pre-
  condition:
   – Assumed: the string alpha_ sequence(name) is
     shorter than name.
                     Functional testing             13
Post-conditions
 A post-condition specifies a property of the
  output of a program.
 The general format of a post-condition is:
   – if condition then effect-1 {else effect-2}
 Example:
  – For the sort program a post-condition is:
      • if N>0 then {the output sequence has the same
        elements as in the input sequence and in ascending
        order.}
                        Functional testing                   14
Post-condition-continued
 – This could be stated more formally as:
    • if N>0 then
    {      A1  A2    ....  AN

      and each Ai ,1  i  N is a member of the
           input sequence and sort returns 1.
    } else
    {      the output sequence is undefined and sort
           returns -1.
    }
                      Functional testing               15
Post-condition-continued
 Another example:
  – if (A=B) and (B=C) then return “equilateral”;
 Can you complete the above post-condition
  for a program that is required to classify a
  triangle given the length of three sides?
 Convention: We will not nest if-then-else
  statements while specifying a post-
  condition.
                     Functional testing             16
Incompleteness of specifications
 Specifications may be incomplete or
  ambiguous.
 Example post-condition:
    if user places cursor on the name field then
    read a string
  – This post-condition does not specify any limit
    on the length of the input string hence is
    incomplete.
                    Functional testing               17
Ambiguous specifications
 It also does not make it clear as to
   – whether a string should be input only after the
     user has placed the cursor on the name field
     and clicked the mouse or simply placed the
     cursor on the name field.
   and hence is ambiguous.



                      Functional testing               18
Clues: summary
 Clues are:
  – Pre-conditions
  – Post-conditions
  – Variables, e.g. A is a length implying thereby
    that its value cannot be negative.
  – Operations, e.g. “search a list of names” or
    “find the average of total scores”
  – Definitions, e.g. “filename(name) is a name is
    no spaces.”
                     Functional testing              19
Clues-continued
 Ideally variables, operations and definitions
  should be a part of at least one pre- or post-
  condition.
 However, this may not be the case as
  specifications are not always written
  formally.
 Hence look out for variables, operations,
  and definitions within a specification!
                    Functional testing         20
Test requirements
 A test requirement is a description of how
  to test the program that is under test.
 Here is a sample test requirement for a
  program that classifies a triangle given the
  length of three sides.
  – A, B, C are non-zero and positive.
  – One of A, B, C is negative; error condition.
  – One of A, B, C is zero; error condition.
                     Functional testing            21
Test requirements-derivation
 Test requirements are derived from clues.
 For example, consider the following pre-
  conditions (clues):
     • Assumed: A, B, and C are lengths
     • Validated: A>0, B>0, C>0
 These pre-conditions on A, B, and C lead to
  the test requirement given above.

                      Functional testing      22
Test requirements-derivation
 Note that we have clumped pre-condition
  for each input variable into one condition.
  This is being done only for inconvenience.
 It is recommended that pre-conditions be
  separated for each variable.



                   Functional testing           23
Test requirements-derivation
 Note also that each validated pre-condition
  results in at least two requirements: one for
  the validated part and the other for the
  failure part.
 In our example above we did not list all
  requirements. For example, we are content
  with testing “one of A, B, C is negative;
  error condition.”
                    Functional testing            24
Test requirements-derivation
 Post-conditions also lead to test
  requirements.
 For example, the partial post-condition:
     • if (A=B) and (B=C) then return “equilateral”
  leads to the following test requirement:
     • A=B and B=C.



                      Functional testing              25
Compound validated pre-conditions

 Compound pre-conditions are ones that use
  the and or or connectors.
 Examples: validated compound pre-
  conditions:
  – Pre-condition: A and B
  – Pre-condition: user places the mouse over the
                         name field and clicks it.

                     Functional testing              26
Compound validated pre-conditions

 The first of the above pre-conditions leads
  to four requirements:
     •   A true, B true            (This is the validated part)
     •   A false, B true           (This and the rest are failures)
     •   A true, B false
     •   A false, B false
 You may work out the requirements for
  compound pre-condition with the or
  connector.
                            Functional testing                        27
Compound validated pre-conditions

 Compound validated pre-conditions could
  become quite complex.
 Example: (A and (B or C))
 Brute force method will lead to 8 test
  requirements.



                   Functional testing       28
Compound validated pre-conditions

 In general this will lead to too many test
  requirements.
 We can prune them by leaving out those
  requirements that are unlikely to reveal a
  program error.
 For example, consider the validated pre-
  condition: A or B.

                    Functional testing         29
Pruning test requirements
 There are four possible test requirements:
     •   A true, B true
     •   A false, B true
     •   A true, B false
     •   A false, B false
 Consider a correct C implementation:
     if (!(A || B))
        exit_with_error(“Error: A is %d, B is %d”, A, B);
     else.. {/* the validated code comes here.*/}
                            Functional testing              30
Possible errors
 Programmer forgets to check for one of the
  two cases resulting in the code:
       • if (!A)
         exit_with_error(“Error: A is %d, B is %d”, A, B);
  or
       • if (!B)
         exit_with_error(“Error: A is %d, B is %d”, A, B);



                         Functional testing                  31
Possible errors-continued
 Or use a wrong logical operator as in:
     if (!(A && B))
        exit_with_error(“Error: A is %d, B is %d”, A, B);
 Let us analyze how the four different tests
  will perform in each of the four
  implementations: one correct, and three
  incorrect ones.

                       Functional testing                   32
Truth table: or condition
 Inputs             Correct                           Incorrect
                    implementation                    implementations


  A    B          !(A || B)             !(A&&B)               !A        !B

  T    F          F                     T                     F         T
  F    T          F                     T                     T         F
  F    F          T                     T                     T         T
  T    T          F                     F                     F         F

      Notice this one: will it help find any of the three possible errors?

                                 Functional testing                          33
Truth table analysis
Case 1:
  – A test input with A=true and B=false will cause
    the correct program to evaluate the condition to
    false.
  – The two incorrect implementations, !(A&&B)
    and (!B) will evaluate the condition to true.



                     Functional testing            34
Truth table analysis-continued
  – Both incorrect implementations will print the
    error message.
  – The oracle will observe that the correct and the
    incorrect implementations behave differently.
  – It will therefore announce failure for each
    incorrect implementation thereby pointing to an
    error.
End of Case 1.
                     Functional testing            35
Truth table analysis-continued
Case 2:
  – Test input A=false and B=true will reveal the
    error in the two incorrect implementations,
    !(A&&B) and (!A).
Case 3:
  – Test input A=false and B=false might find a
    fault in the then branch of the if condition.


                     Functional testing             36
Truth table analysis-continued
Case 4:
   – Test input A=true and B=true might find a fault
     in the else branch of the if condition.
 Thus, all four test inputs are likely to be
  useful.




                     Functional testing            37
Truth table analysis-continued
 However, if we were to check for the
  correct implementation of the condition A
  or B, then only the first two inputs are
  necessary.
 In this example, reducing the number of test
  specifications from 4 to 2 does not lead to
  any significant savings. When will the
  savings be significant?
                   Functional testing        38
Assumed pre-conditions
 Each assumed pre-condition is likely to
  result in a test requirement.
 Example:
  – Assumed: MODE is “on ground” or “flying”
  – This leads to two requirements:
     • MODE is “on ground” , MODE is not “flying”
     • MODE is not “on ground” , MODE is “flying”


                     Functional testing             39
Assumed pre-conditions
 – These can be simplified to:
    • MODE is “on ground”
    • MODE is “flying”




                   Functional testing   40
Test requirements checklist
 Obtaining clues and deriving test
  requirements can become a tedious task.
 To keep it from overwhelming us it is a
  good idea to make a checklist of clues.
 This checklist is then transformed into a
  checklist of test requirements by going
  through each clue and deriving test
  requirements from it.
                   Functional testing         41
Test specifications
 A test requirements indicates “how” to test
  a program. But it does not provide exact
  values of inputs.
 A test requirement is used to derive test
  specification, which is the exact
  specification of values of input and
  environment variables.

                   Functional testing           42
Test specifications-continued
 There may not be a one-to-one
  correspondence between test requirements
  and test specifications.
 A test requirement checklist might contain
  50 entries. These might result in only 22 test
  specifications.
 The fewer the tests the better but only if
  these tests are of good quality!
                   Functional testing         43
Test specifications-continued
 We will discuss test quality when
  discussing test assessment.
 A test specification looks like this:
  – Test 2:
     • global variable all_files is initially false.
     • next_record is set to 1.
  – Upon return expect:
     • all_files to be true
     • next_record is last_record+1
                         Functional testing            44
Test specifications-continued
 Notice the format of a test specification:
  – Each test is given a number which serves as its
    identifier.
  – There is a set of input values.
  – There is a set of expected values upon return
    from execution. Any side effects on files or
    networks must also be specified here. In
    essence, all observable effects must be
    specified in the “Expect” part of a test
    specification. Functional testing               45
Test specifications-continued
  – Any side effects on files or networks must also
    be specified. In essence, all observable effects
    must be specified in the “Expect” part of a test
    specification.
  – Similarly, values of all input variables, global
    or otherwise, must also be specified.




                     Functional testing            46
Test requirements to specifications

 The test requirements checklist guides the
  process of deriving test specifications.
 Initially all entries in the checklist are
  unmarked or set to 0.
 Each time a test is generated from a
  requirement it is marked or the count
  incremented by 1.

                     Functional testing        47
Test requirements to specifications

 Thus, at any point in time, one could assess
  the progress made towards the generation of
  test specifications.
 One could also determine how many tests
  have been generated using any test
  requirement.


                   Functional testing            48
Test requirements to specifications

 Once a test requirement has been marked or
  its count is more than 0 we say that it has
  been satisfied.
 Some rules of thumb to use while designing
  tests:
  – Try to satisfy multiple requirements using only
    one test.
  – Satisfy all test requirements.
                    Functional testing            49
Test requirements to specifications
  – Avoid reuse of same values of a variable in
    different tests. Generating new tests by varying
    an existing one is likely to lead to tests that test
    the same part of the code as the previous one.
  In testing, variety helps!
 Though we try to combine several test
  requirements to generate one test case, this
  is not advisable when considering error
  conditions.
                      Functional testing               50
Test requirements to specifications

 For example, consider the following:
   – speed_dial, an interval
     • speed_dial<0 ,error
     • speed_dial>120, error
  – zones, an interval
     • zones <5, error
     • zones>10, error



                         Functional testing   51
Test requirements to specifications
  – One test specification obtained by combining
    the two requirements above is:
     • speed_dial=-1
     • zone=3
 Now, if the code to handle these error
  conditions is:



                       Functional testing          52
Test requirements to specifications
       if (speed_dial<0 || speed_dial>120)
        error_exit(“Incorrect speed_dial”);
       if (zone<6 ||zone>10)                  error
        error_exit(“Incorrect zone”);
  – For our test, the program will exit before it
    reaches the second if statement. Thus, it will
    miss detecting the error in coding the test for
    zone.


                         Functional testing           53
Test requirements to specifications

 Also, do not assume an error test to satisfy
  any other test requirement.
 Example:
  – Consider the function:
     • myfunction(int X, int Y);
  – A test for the erroneous value of X might not
    test the code that uses Y.


                       Functional testing           54
Test requirements to specifications

 Test specifications must not mention
  internal variables. Remember, a test
  specification aids in setting input variables
  to suitable values before the test begins.
  Values of internal variables are computed
  during program execution.
 However, there are exceptions to the above
  rule. Can you think of one?
                    Functional testing            55
Equivalence partitioning
 The input domain is usually too large for
  exhaustive testing.
 It is therefore partitioned into a finite
  number of sub-domains for the selection of
  test inputs.
 Each sub-domain is known as an
  equivalence class and serves as a source of
  at least one test input.
                   Functional testing           56
Equivalence partitioning
    Input domain                Input domain
                                partitioned into four
                                sub-domains.


                                                2
                                        1
                                            3

                                        4

    Too many                      Four test inputs, one
    test inputs.                  selected from each sub-domain.

                   Functional testing                          57
How to partition?
 Inputs to a program provide clues to
  partitioning.
 Example 1:
  – Suppose that program P takes an input X, X
    being an integer.
  – For X<0 the program is required to perform
    task T1 and for X>=0 task T2.


                    Functional testing           58
How to partition?-continued
 – The input domain is prohibitively large because
   X can assume a large number of values.
 – However, we expect P to behave the same way
   for all X<0.
 – Similarly, we expect P to perform the same way
   for all values of X>=0.
 – We therefore partition the input domain of P
   into two sub-domains.

                   Functional testing           59
Two sub-domains

        One test case:
        X=-3                                 Equivalence class

                      X<0 X>=0
Equivalence class                            Another test case:
                                             X=-15

  All test inputs in the X<0 sub-domain are considered equivalent.
  The assumption is that if one test input in this sub-domain reveals
  an error in the program, so will the others.

  This is true of the test inputs in the X>=0 sub-domain also.

                              Functional testing                        60
Non-overlapping partitions
 In the previous example, the two
  equivalence classes are non-overlapping. In
  other words the two sub-domains are
  disjoint.
 When the sub-domains are disjoint, it is
  sufficient to pick one test input from each
  equivalence class to test the program.

                   Functional testing       61
Non-overlapping partitions
 An equivalence class is considered covered
  when at least one test has been selected
  from it.
 In partition testing our goal is to cover all
  equivalence classes.



                    Functional testing            62
Overlapping partitions
 Example 2:
  – Suppose that program P takes three integers X,
    Y and Z. It is known that:
      • X<Y
      • Z>Y




                     Functional testing          63
Overlapping partitions
    X<Y, Z<=Y
    X=2, Y=3, Z=1
                                                X>=Y, Z<=Y
                     X<Y                        X=15, Y=4, Z=1

X<Y, Z>Y                      X>=Y
X=3, Y=4, Z=7
                     Z>Y     Z<=Y



                X>=Y, Z>Y
                X=15, Y=4, Z=7

                           Functional testing                    64
Overlapping partition-test selection

 In this example, we could select 4 test cases
  as:
  –   X=4, Y=7, Z=1          satisfies X<Y
  –   X=4, Y=2, Z=1          satisfies X>=Y
  –   X=1, Y=7, Z=9          satisfies Z>Y
  –   X=1, Y=7, Z=2          satisfies Z<=Y
 Thus, we have one test case from each
  equivalence class.
                      Functional testing      65
Overlapping partition-test selection

 However, we may also select only 2 test
  inputs and satisfy all four equivalence
  classes:
  – X=4, Y=7, Z=1          satisfies X<Y and Z<=Y
  – X=4, Y=2, Z=3          satisfies X>=Y and Z>Y
 Thus, we have reduced the number of test
  cases from 4 to 2 while covering each
  equivalence class.
                    Functional testing              66
Partitioning using non-numeric data

 In the previous two examples the inputs
  were integers. One can derive equivalence
  classes for other types of data also.
 Example 3:
  – Suppose that program P takes one character X
    and one string Y as inputs. P performs task T1
    for all lower case characters and T2 for upper
    case characters. Also, it performs task T3 for
    the null string and T4 for all other strings.
                    Functional testing               67
Partitioning using non-numeric data
  X: LC, Y: not null

                                                       X: UC, Y: not null
                         X: LC

                                  X:UC
X: LC, Y: null
                       Y: null Y: not null



                                                    LC: Lower case character
                 X: UC, Y: null
                                                    UC: Upper case character
                                                    null: null string.
                               Functional testing                           68
Non-numeric data
 Once again we have overlapping partitions.
 We can select only 2 test inputs to cover all
  four equivalence classes. These are:
  – X: lower case, Y: null string
  – X: upper case, Y: not a null string




                     Functional testing       69
Guidelines for equivalence partitioning

 Input condition specifies a range: create one
  for the valid case and two for the invalid
  cases.
  – e.g. for a<=X<=b the classes are
     • a<=X<=b (valid case)
     • X<a and X>b (the invalid cases)




                      Functional testing       70
Guidelines-continued

 Input condition specifies a value: create one
  for the valid value and two for incorrect
  values (below and above the valid value).
  This may not be possible for certain data
  types, e.g. for boolean.
 Input condition specifies a member of a set:
  create one for the valid value and one for
  the invalid (not in the set) value.
                   Functional testing         71
Sufficiency of partitions
 In the previous examples we derived
  equivalence classes based on the conditions
  satisfied by input data.
 Then we selected just enough tests to cover
  each partition.
 Think of the advantages and disadvantages
  of this approach!

                   Functional testing       72
Boundary value analysis (BVA)
 Another way to generate test cases is to
  look for boundary values.
 Suppose a program takes an integer X as
  input.
 In the absence of any information, we
  assume that X=0 is a boundary. Inputs to
  the program might lie on the boundary or on
  either side of the boundary.
                   Functional testing        73
BVA: continued
 This gives us 3 test inputs:
     • X=0, X=-20, and X=14.
  – Note that the values -20 and 14 are on either side of the
    boundary and are chosen arbitrarily.
 Notice that using BVA we get 3
  equivalence classes. One of these three
  classes contains only one value (X=0), the
  other two are large!
                        Functional testing                  74
BVA: continued
 Now suppose that a program takes two
 integers X and Y and that x1<=X<=x2 and
 y1<=Y<=y2.
                                                             14
             1                 5                     2
        y2
                                       10
                     11
             8                     9                     6
                                            13
        y1                12                         3
                 4                      7

                     x1                         x2

                           Functional testing                     75
BVA-continued
 In this case the four sides of the rectangle
  represent the boundary.
 The heuristic for test selection in this case
  is:
  – Select one test at each corner (1, 2, 3, 4).
  – Select one test just outside of each of the four
    sides of the boundary (5, 6, 7, 8)

                     Functional testing                76
BVA-continued
  – Select one test just inside of each of the four
    sides of the boundary (10, 11, 12, 13).
  – Select one test case inside of the bounded
    region (9).
  – Select one test case outside of the bounded
    region (14).
 How many equivalence classes do we get?


                      Functional testing              77
BVA -continued
 In the previous examples we considered
  only numeric data.
 BVA can be done on any type of data.
 For example, suppose that a program takes
  a string S and an integer X as inputs. The
  constraints on inputs are:
  – length(S)<=100 and a<=X<=b
 Can you derive the test cases using BVA?
                  Functional testing           78
BVA applied to output variables
 Just as we applied BVA to input data, we
  can apply it to output data.
 Doing so gives us equivalence classes for
  the output domain.
 We then try to find test inputs that will
  cover each output equivalence class.


                   Functional testing         79
BVA-continued
 Example: each student to construct one!




                  Functional testing        80
Finite State Machines (FSMs)
 A state machine is an abstract
  representation of actions taken by a
  program or anything else that functions!
 It is specified as a quintuple:
     • A: a finite input alphabet
     • Q: a finite set of states
     • q0: initial state which is a member of Q.


                       Functional testing          81
FSMs-continued
    • T: state transitions which is a mapping
             Q x A--> Q
    • F: A finite set of final states, F is a subset of Q.
 – Example: Here is a finite state machine that
   recognizes integers ending with a carriage
   return character.
    • A={0,1,2,3,4,5,6,7,8,9, CR}
    • Q={q0,q1,q2}
    • q0: initial state
                        Functional testing                   82
FSMs-continued
     • T: {((q0,d),q1),(q1,d),q1), (q1,CR),q2)}
     • F: {q2}
 A state diagram is an easier to understand
  specification of a state machine. For the
  above machine, the state diagram appears
  on the next page.



                       Functional testing         83
State diagram
                                         State transitions indicated
                                         by labeled arrows from one state
                                         the another (which could be
                d                        the same). Each label must be from
                                         the alphabet. It is also known as
       d               CR                an event.
  q0            q1               q2

                                             Final state indicated
                                             by concentric circles.
           States indicated by
           circles.
                                                 d: denotes a digit

                            Functional testing                          84
State diagram-actions
                      d/add 10*d to i                  x/y: x is an element of
                                                       the alphabet and y is
             d/set i to d                              an action.
        q0                  q1                  q2
                                 CR/output i

 i is initialized to d when the machine moves from state q0 to q1.
 i is incremented by 10*d when the machine moves from q1 to q1.
 The current value of i is output when a CR is encountered.

 Can you describe what this machine computes?Can you
 construct a regular expression that describes all strings
 recognized by this state machine?
                                  Functional testing                       85
State machine: languages
 Each state machine recognizes a language.
 The language recognized by a state machine
  is the set S of all strings such that:
  – when any string s in S is input to the state
    machine the machine goes through a sequence
    of transitions and ends up in the final state after
    having scanned all elements of s.


                      Functional testing              86
State diagram-errors
                         d/add 10*d to I

                d/set I to d
           q0                  q1                  q2
                                    CR/output I

   reset
                               q4

 q4 has been added to the set of states. It represents an error
 state. Notice that reset is a new member added to the alphabet.




                                     Functional testing            87
State diagram-program
 A state diagram can be transformed into a
  program using case analysis. Here is a C
  program fragment that embodies logic
  represented by the previous state diagram.
 There is one function for each action.
 digit is assumed to be provided by the
  lexical analyzer.

                   Functional testing          88
Program for “integer” state machine
 /* state is global, with values q0, q1, q2. i is also global.*/
 void event_digit()
     {
      switch (state)
       case q0:
         i=digit;                   /* perform action. */
         state=q1;                  /* set next state. */
         break;            /* event digit is done. */
       case q1:
         i=i+10*digit;     /* Add the next digit. */
         state=q1;
         break;
       /*…complete the program. */
                               Functional testing                  89
Checking state diagrams
 Unreachable state: One that cannot be
  reached from q0 using any sequence of
  transitions.
 Dead state: One that cannot be left once it is
  reached.



                   Functional testing         90
Test requirements
 Every state must be reached at least once,
  Obtain 100% state coverage.
 Every transition must be exercised at least
  once.Obtain 100% transition coverage.
 The textbook talks about duplicate
  transitions. No transitions are duplicate if
  the state machine definition we have given
  is used.
                   Functional testing            91
Example test requirements
 For the “integer” state machine:
   – state machine transitions:
     •   event digit in state q0
     •   event CR in state q0
     •   event digit in state q1
     •   event CR in state q1
     •   event reset in state q4



                          Functional testing   92
More testing of state machines?
 Yes, it is possible!
 When we learn about path coverage we will
  discuss how more test requirements can be
  derived from a state diagram.




                    Functional testing        93
Test specifications
 As before, test specifications are derived
  from test requirements.
 In the absence of dead states, all states and
  transitions can be reached by one test.
 It is advisable not to test the entire machine
  with one test case.
 Develop test specifications for our
  “integer” state machine.
                    Functional testing         94
Decision tables
 Requirements of certain programs are
  specified by decision tables.
 Such tables can be used for deriving test
  requirements and specifications.
 A decision table is useful when specifying
  complex decision logic


                   Functional testing          95
Decision tables
 A decision table has two parts:
  – condition part
  – action part
 The two together specify under what
  condition will an action be performed.



                   Functional testing      96
Decision table-nomenclature

   •   C: denotes a condition
   •   A: denotes an action
   •   Y: denotes true
   •   N:denotes false
   •   X: denotes action to be taken.
   •   Blank in condition: denotes “don’t care”
   •   Blank in action: denotes “do not take the action”


                       Functional testing                  97
Bank example
 Consider a bank software responsible for
  debiting from an account. The relevant
  conditions and actions are:
     •   C1: The account number is correct
     •   C2: The signature matches
     •   C3: There is enough money in the account
     •   A1: Give money
     •   A2: Give statement indicating insufficient funds
     •   A3: Call vigilance to check for fraud!
                         Functional testing                 98
Decision tables
     1     2            3           4   5
C1   N     N            Y           Y   Y
C2         N            N           Y   Y
C3                      N           Y   N
A1                                  X
A2                      X               X
A3         X

               Functional testing           99
Example-continued
 A1 is to be performed when C1, C2, and
  C3 are true.
 A2 is to be performed when C1 is true and
  C2 and C3 are false or when C1 and C2 are
  true and C3 is false.
 A3 is to be performed when C2 and C3 are
  false.

                  Functional testing       100
Default rules
 Are all possible combinations of conditions
  covered?
 No! Which ones are not covered?
 We need a default action for the uncovered
  combinations. A default action could be an
  error report or a reset.


                   Functional testing       101
Example-test requirements
 Each column is a rule and corresponds to at
  least one test requirement.
 If there are n columns then there are at least
  n test requirements.
 What is the maximum number of test
  requirements?


                    Functional testing         102
Example-test specifications
 For each test requirement find a set of input
  values of variables such that the selected
  rule is satisfied.
 When this test is input to the program the
  output must correspond to the action
  specified in the decision table.
 Should the testing depend on the order in
  which the conditions are evaluated?
                   Functional testing          103
Summary
 Specifications, pre-conditions, and post-
  conditions.
 Clues, test requirements, and test
  specifications.
 Clues from code.
 Test requirements catalog.
 Equivalence partitioning and boundary
  value analysis.
                   Functional testing         104
Summary-continued
 Finite state machine
 State diagram
 Events and actions
 Unreachable and dead states
 Test requirements and specifications for
  state machines
 Decision tables, rules, actions
                    Functional testing       105

						
Related docs
Other docs by NiceTime
Finding Balance and Relaxation In Arizona
Views: 1  |  Downloads: 0
Health_And_Beauty_-_Celebrities_And_Perfumes
Views: 5  |  Downloads: 0
Making a Great Teacher Website
Views: 20  |  Downloads: 0
Security07 Communityof Character Bulletin
Views: 3  |  Downloads: 0
consentdecrees
Views: 3  |  Downloads: 0
iprcr 0909
Views: 14  |  Downloads: 0
THU TUC MIEN THUE XNK
Views: 23  |  Downloads: 0
legal-notice- ROD
Views: 2  |  Downloads: 0
titles
Views: 24  |  Downloads: 0