Difference between revisions of "CddTreeViewSpec"

 
(18 intermediate revisions by the same user not shown)
Line 1: Line 1:
The following describes how the test routine tree view should look like. Note that it should be possible to have one generic class to handle all cases.
+
[[Category:CDD]]
 +
Note: The Spec below is outdated. In order to release in time we have settled for a more simplistic design.
  
Examples: The examples represent the tree view. The bullet points represent the structure. The text after the bullent points represents the tag name.
+
The following describes how the test routine tree view should look like. Note that it should be possible to have one generic GUI class that we can use for all of the below use cases.
 +
 
 +
Example notation: The examples represent the tree view. The bullet points represent the structure. The text after the bullent points represents the tag name. The tag responsible for the grouping is given in italics.
  
 
   
 
   
= Use case 1: Group by test class and routine name =
+
== Use case 1: Group by test class and routine name ==
  
 
We need an implicit tag for this that labels each routine with the class name it located in and the routine name.
 
We need an implicit tag for this that labels each routine with the class name it located in and the routine name.
Line 13: Line 16:
  
 
grouping key: "name"
 
grouping key: "name"
* TEST_A_01
+
* TEST_A_01  
** test_routine_under_test
+
** test_routine_under_test         ''(name.TEST_A_01.test_routine_under_test)''
 
* TEST_B_01
 
* TEST_B_01
** test_routine_under_test
+
** test_routine_under_test         ''(name.TEST_B_01.test_routine_under_test)''
* MY_TESTS ''(manual test class)''
+
* MY_TESTS
** test_1
+
** test_1 ''(name.MY_TESTS.test_1)''
** test_2
+
** test_2 ''(name.MY_TESTS.test_2)''
** test_3
+
** test_3 ''(name.MY_TESTS.test_3)''
  
= Use case 2: Group by routine under test =
+
Note that there is no "others". This is because of implicit tags. Every routine has at least one tag.
 +
 
 +
== Use case 2: Group by routine under test ==
  
 
For this we need a tag "covers" that indicates what is being tested. Test routines not having the grouping key are grouped together under "others".
 
For this we need a tag "covers" that indicates what is being tested. Test routines not having the grouping key are grouped together under "others".
Line 29: Line 34:
 
grouper key: "covers"
 
grouper key: "covers"
  
* TEST_ROOT_CLASS_01
+
* ROOT_CLASS
** test_routine_under_test
+
** foo ''(covers.ROOT_CLASS.foo)''
* TEST_ROOT_CLASS_02
+
** foo ''(covers.ROOT_CLASS.foo)''
** test_routine_under_test
+
** bar ''(covers.ROOT_CLASS.bar)''
* A ''(manual test class with "covers" label)''
+
* A  
** test_1
+
** a1 ''(covers.A.a1)''
** test_2
+
** a2 ''(covers.A.a2)''
 
* others
 
* others
* MY_TESTS ''(manual test class with without "covers" label)''
+
** MY_TESTS.test_1 (''no covers tag'', displayed using "name" tag)
** test_1
+
** MY_TESTS.test_2 (''no covers tag'', displayed using "name" tag)
** test_2
+
  
= Use case 3: Group by any tag =
+
== Use case 3: Group by any tag ==
 
No grouper is defined. View is similar to gmail. Every distinct tag is a root node. Test cases are children of a root node if they contain the tag. Note that test cases may apear under several root nodes, since they might have several tags.
 
No grouper is defined. View is similar to gmail. Every distinct tag is a root node. Test cases are children of a root node if they contain the tag. Note that test cases may apear under several root nodes, since they might have several tags.
  
 
grouper key: ""
 
grouper key: ""
 
* tag1
 
* tag1
** TEST_CLASS_1.test_routine
+
** TEST_CLASS_1.test_routine ''(tag1)''
** TEST_CLASS_2.test_routine
+
** TEST_CLASS_2.test_routine ''(tag1)''
 
* tag2
 
* tag2
** TEST_CLASS_2.test_routine
+
** TEST_CLASS_2.test_routine ''(tag2)''
* tag21
+
** tag21
** TEST_CLASS_4.test_routine
+
*** TEST_CLASS_4.test_routine ''(tag2.tag21)''
 
* name
 
* name
** TEST_CLASS_1.test_routine
+
** TEST_CLASS_1
** TEST_CLASS_2.test_routine
+
*** test_routine ''(name.TEST_CLASS_1.test_routine)''
** TEST_CLASS_4.test_routine
+
** TEST_CLASS_2
 +
*** test_routine ''(name.TEST_CLASS_2.test_routine)''
 +
...
 +
* covers
 +
...
  
  
 
Note that there is no "others". This is because of implicit tags. Every routine has at least one tag.
 
Note that there is no "others". This is because of implicit tags. Every routine has at least one tag.
 +
 +
== Use case 4: Group by outcome ==
 +
Tests should be grouped by their outcome ("pass", "fail", and "unresolved").
 +
 +
grouper key: "covers"
 +
* pass
 +
** MY_TESTS
 +
*** test1 ''(covers.pass)''
 +
*** test2 ''(covers.pass)''
 +
** FOO
 +
*** bar1 ''(covers.pass)''
 +
*** bar2 ''(covers.pass)''
 +
* fail
 +
** FOO
 +
*** bar3 ''(covers.fail)''
 +
 +
Note that there is not "unresolved" node because in this example there were no unresolved test cases.
 +
 +
== Use case 5: Group by callstack ==
 +
Tests that were extracted from the same failure should be grouped together.
 +
 +
grouper key: "failure"
 +
* arg_not_void, 12.1.2007
 +
** f0
 +
** f1
 +
** f2
 +
** f3
 +
* v_small_enough, 1.5.2007
 +
** g0
 +
** g1
 +
** g2
 +
** g3
 +
 +
Note that 'f0' etc and 'g0' etc are the names of the routines for which the test case was extracted.

Latest revision as of 05:56, 10 January 2008

Note: The Spec below is outdated. In order to release in time we have settled for a more simplistic design.

The following describes how the test routine tree view should look like. Note that it should be possible to have one generic GUI class that we can use for all of the below use cases.

Example notation: The examples represent the tree view. The bullet points represent the structure. The text after the bullent points represents the tag name. The tag responsible for the grouping is given in italics.


Use case 1: Group by test class and routine name

We need an implicit tag for this that labels each routine with the class name it located in and the routine name. Note that the contens of this tag does not state what is tested (covers). Let's call the tag "name". A test routine TEST_ROOT_CLASS_01.test_routine_under_test would have the following tag: "name.TEST_ROOT_CLASS_01.test_routine_under_test".

Example:

grouping key: "name"

  • TEST_A_01
    • test_routine_under_test (name.TEST_A_01.test_routine_under_test)
  • TEST_B_01
    • test_routine_under_test (name.TEST_B_01.test_routine_under_test)
  • MY_TESTS
    • test_1 (name.MY_TESTS.test_1)
    • test_2 (name.MY_TESTS.test_2)
    • test_3 (name.MY_TESTS.test_3)

Note that there is no "others". This is because of implicit tags. Every routine has at least one tag.

Use case 2: Group by routine under test

For this we need a tag "covers" that indicates what is being tested. Test routines not having the grouping key are grouped together under "others".

Example: grouper key: "covers"

  • ROOT_CLASS
    • foo (covers.ROOT_CLASS.foo)
    • foo (covers.ROOT_CLASS.foo)
    • bar (covers.ROOT_CLASS.bar)
  • A
    • a1 (covers.A.a1)
    • a2 (covers.A.a2)
  • others
    • MY_TESTS.test_1 (no covers tag, displayed using "name" tag)
    • MY_TESTS.test_2 (no covers tag, displayed using "name" tag)

Use case 3: Group by any tag

No grouper is defined. View is similar to gmail. Every distinct tag is a root node. Test cases are children of a root node if they contain the tag. Note that test cases may apear under several root nodes, since they might have several tags.

grouper key: ""

  • tag1
    • TEST_CLASS_1.test_routine (tag1)
    • TEST_CLASS_2.test_routine (tag1)
  • tag2
    • TEST_CLASS_2.test_routine (tag2)
    • tag21
      • TEST_CLASS_4.test_routine (tag2.tag21)
  • name
    • TEST_CLASS_1
      • test_routine (name.TEST_CLASS_1.test_routine)
    • TEST_CLASS_2
      • test_routine (name.TEST_CLASS_2.test_routine)

...

  • covers

...


Note that there is no "others". This is because of implicit tags. Every routine has at least one tag.

Use case 4: Group by outcome

Tests should be grouped by their outcome ("pass", "fail", and "unresolved").

grouper key: "covers"

  • pass
    • MY_TESTS
      • test1 (covers.pass)
      • test2 (covers.pass)
    • FOO
      • bar1 (covers.pass)
      • bar2 (covers.pass)
  • fail
    • FOO
      • bar3 (covers.fail)

Note that there is not "unresolved" node because in this example there were no unresolved test cases.

Use case 5: Group by callstack

Tests that were extracted from the same failure should be grouped together.

grouper key: "failure"

  • arg_not_void, 12.1.2007
    • f0
    • f1
    • f2
    • f3
  • v_small_enough, 1.5.2007
    • g0
    • g1
    • g2
    • g3

Note that 'f0' etc and 'g0' etc are the names of the routines for which the test case was extracted.