CATEGORII DOCUMENTE |
Bulgara | Ceha slovaca | Croata | Engleza | Estona | Finlandeza | Franceza |
Germana | Italiana | Letona | Lituaniana | Maghiara | Olandeza | Poloneza |
Sarba | Slovena | Spaniola | Suedeza | Turca | Ucraineana |
Test Automation Report
Table of Contents
Introduction 3
Objective 3
Focuses 3
Strategy 4
Unit Test Bed 4
Unit Testing 4
White Box Testing Basis Path Testing of Tree Repository Module 4
Black Box Testing - Equivalence Partitioning 20
System Testing 22
System-Level Testing - Equivalence Partitioning 22
System-Level Testing - Boundary Value Testing 24
System-Level Testing - Performance Testing 27
Problem Reporting 28
Tool Usage 28
Junit 28
Custom Automation Tool 28
eValid 28
Element Tool 29
Experience and Lessons Learned 29
Overall Experience 29
Junit 30
Custom Automation Tool 30
eValid 30
Element Tool 30
Comparison of Manual vs. Automated Testing 31
References 32
This document includes the objective, focuses, and strategy used in our test automation. In addition, it includes the test bed structure and tools used for unit white box testing and the test environment and supporting tools for the system level testing. The results and planning involved in of our automation testing will be compared with the manual testing. The actual code written for the automation and the results themselves will be included in accompanying documentation.
The primary objective for our test automation was to become familiar with the process of automating test cases and generating test data. Through this process, we were able to compare the automation with manual testing. In determining how much automation would be accomplished, we took into account the given period of time as well as the availability of tools to assist in the automation. Since all of the testing had previously been performed manually, there was no need to develop test cases as we were able to reuse the test cases used in manual testing. We kept track of the number of hours spent developing the automated tests for the selected features and in our conclusion, a comparison to the number of hours that we spent to test the same features manually is presented. These time studies will provide two measures that can be used for setting future goals and predicting the percentage of coverage from test automation:
Time to automate per feature
Time to automate as compared to time to manually test
We anticipate however, that subsequent projects would take less time because of experience.
Because none of our team had any experience in developing automation tools, determining a focus for our testing was difficult. We spent some time just deciding what to automate and agreed to perform the following automation:
Perform test data generation
Automate test case execution (using both an existing tool and a using our own routine)
System-level testing using eValid
Problem report generation using an existing tool (Element Tool)
We then had to plan the test automation and determine how we would automate the test cases and generate test case data. The ability to control test data in the test environment is important in both manual and automated testing to ensure the validity of expected results. When tests are automated, it is important to have the ability to reset the data prior to test execution and to simulate feeding the data. We decided to prepare a separate set of data for each test case to ensure that the result of one test case did not impact the result of another. In addition, we decided to use random inputs that were generated using a specific set of rules for each required input. In generating the test case functions, we developed and enforced a set coding standards and naming conventions to promote efficiency so the results of each test case could be easily evaluated.
Our strategy was to provide automated coverage for as many areas as possible where manual testing had already taken place. This allowed us to perform a direct comparison of the two.
This section addresses the tools used to automate the white box testing for the repository portion of the program.
Unit Testing is done at the source or code level for language-specific programming errors such as bad syntax, logic errors, or to test particular functions or code modules. The unit test cases were designed to test the validity of the programs correctness.
In white box testing, the user interface is bypassed. Inputs and outputs are tested directly at the code level and the results are compared against specifications. This form of testing ignores the function of the program under test and will focus only on its code and the structure of that code. The test cases that have been generated shall cause each condition to be executed at least once.
Each function of the binary tree repository is executed independently; therefore, a program flow for each function was derived from the code. Using the program flow graph for each function in our tree repository module, we were be able to determine all of the paths that needed to tested and have developed the corresponding test cases. In order to test the success of each path, we used Junit to create a test suite, which included all of our white box test cases. Any preconditions needed to exercise a path were created upon execution of each test case. The test cases were all executed independently, so the test data was reloaded with each test case.
Upon initialization of the complete suite being run, a random number generator is used to set the input data. It sets the variables according to the rules associated with the respective variable (i.e., root, right child, left child, etc.) We also created a version of the Junit test suite that utilizes the specific values called out in the test cases. Both sets of results are shown in the Test Automation Results. To make the internal test visible in the program, assertion checking was used. If the path executed correctly, the test was set up to return true. The test cases included in the Junit test suite are shown in the following tables.
Insert
Path ID |
Path |
1.1 |
1, 2, 3, 5, 1, 2, 3, 6, 7, 11, 12 |
1.2 |
1, 2, 3, 6, 7, 11, 12 |
1.3 |
1, 2, 4, 8, 10, 11, 12 |
1.4 |
1, 2, 4, 9, 1, 2, 4, 8, 10, 11, 12 |
Test Cases
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-1.1 |
|
Test Case Precondition |
root (28) and left child (27) exist and the key to be inserted is less than 27 |
|
Item(s) to be tested |
||
Repository Module: Insert-Path 1.1 |
||
Specifications |
||
Input |
Expected Output/Result |
|
key 25 inserted: return true |
||
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-1.2 |
|
Test Case Precondition |
root (28) exists and key to be inserted is less than 28 |
|
Item(s) to be tested |
||
Repository Module: Insert-Path 1.2 |
||
Specifications |
||
Input |
Expected Output/Result |
|
key 27 inserted: return true |
||
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-1.3 |
|
Test Case Precondition |
root (28) exists and key to be inserted is greater than 28 |
|
Item(s) to be tested |
||
Repository Module: Insert-Path 1.3 |
||
Specifications |
||
Input |
Expected Output/Result |
|
key 50 inserted: return true |
||
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-1.4 |
|
Test Case Precondition |
root (28) and right child (50) exist and the key to be inserted is greater than 50 |
|
Item(s) to be tested |
||
Repository Module: Insert-Path 1.4 |
||
Specifications |
||
Input |
Expected Output/Result |
|
key 55 inserted: return true |
||
Delete
Path ID |
Path |
2.1 |
1, 2, 3, 4, 5, 7, 17, 18, 19, 21, 22, 24, 25, 35, 36 |
2.2 |
1, 2, 3, 4, 5, 7, 17, 18, 19, 21, 23, 24, 25, 35, 36 |
2.3 |
1, 2, 4, 5, 6, 7, 17, 26, 27, 29, 30, 32, 25, 35, 36 |
2.4 |
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 35, 35 |
2.5 |
1, 2, 3, 4, 5, 6, 7, 8, 9, 13, 14, 16, 35, 36 |
2.6 |
1, 2, 4, 5, 7, 33, 34, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13, 15, 16, 35, 36 |
Test Cases
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-2.1 |
|
Test Case Precondition |
tree contains root (28), left child (27) |
|
Item(s) to be tested |
||
Repository Module: Delete-Path 2.1 |
||
Specifications |
||
Input |
Expected Output/Result |
|
28 deleted - return true |
||
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-2.2 |
|
Test Case Precondition |
tree contains root (28), right child (50) |
|
Item(s) to be tested |
||
Repository Module: Delete-Path 2.2 |
||
Specifications |
||
Input |
Expected Output/Result |
|
28 deleted return true |
||
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-2.3 |
|
Test Case Precondition |
tree contains root (28), right child (50), right child (55) |
|
Item(s) to be tested |
||
Repository Module: Delete-Path 2.3 |
||
Specifications |
||
Input |
Expected Output/Result |
|
28 deleted - return true |
||
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-2.4 |
|
Test Case Precondition |
tree contains root (28) |
|
Item(s) to be tested |
||
Repository Module: Delete-Path 2.4 |
||
Specifications |
||
Input |
Expected Output/Result |
|
return null |
||
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-2.5 |
|
Test Case Precondition |
tree contains root (28), right child (50) |
|
Item(s) to be tested |
||
Repository Module: Delete-Path 2.5 |
||
Specifications |
||
Input |
Expected Output/Result |
|
50 deleted return true |
||
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-2.6 |
|
Test Case Precondition |
tree contains root (28), left child (27) |
|
Item(s) to be tested |
||
Repository Module: Delete-Path 2.6 |
||
Specifications |
||
Input |
Expected Output/Result |
|
27 deleted return true |
||
Search
Path ID |
Path |
3.1 |
1, 2, 3, 10 |
3.2 |
1, 2, 4, 5, 1, 2, 3, 10 |
3.3 |
1, 2, 4, 6, 10 |
3.4 |
1, 2, 7, 8, 10 |
3.5 |
1, 2, 7, 9, 1, 2, 3, 10 |
Test Cases
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-3.1 |
|
Test Case Precondition |
tree contains root (28) |
|
Item(s) to be tested |
||
Repository Module: Search-Path 3.1 |
||
Specifications |
||
Input |
Expected Output/Result |
|
28 found - return true |
||
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-3.2 |
|
Test Case Precondition |
tree contains root (28), left child (27) |
|
Item(s) to be tested |
||
Repository Module: Search-Path 3.2 |
||
Specifications |
||
Input |
Expected Output/Result |
|
27 found - return found true |
||
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-3.3 |
|
Test Case Precondition |
tree contains root (28), left child (27), right child (50) |
|
Item(s) to be tested |
||
Repository Module: Search-Path 3.3 |
||
Specifications |
||
Input |
Expected Output/Result |
|
5 not found - return not found true |
||
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-3.4 |
|
Test Case Precondition |
tree contains root (28), left child (27) right child (50) |
|
Item(s) to be tested |
||
Repository Module: Search-Path 3.4 |
||
Specifications |
||
Input |
Expected Output/Result |
|
60 not found return not found true |
||
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-3.5 |
|
Test Case Precondition |
tree contains root (28), right child (50) |
|
Item(s) to be tested |
||
Repository Module: Search-Path 3.5 |
||
Specifications |
||
Input |
Expected Output/Result |
|
50 found - return found true |
||
List - Ascending
Path ID |
Path |
4.1 |
1, 2, 5 |
4.2 |
1, 2, 3, 1, 2, 5 |
4.3 |
1, 2, 3, 4, 5 |
4.4 |
1, 2, 3, 4, 1, 2, 5 |
Test Cases
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-4.1 |
|
Test Case Precondition |
there are no nodes in the tree |
|
Item(s) to be tested |
||
Repository Module: List Ascending-Path 4.1 |
||
Specifications |
||
Input |
Expected Output/Result |
|
execute ascend passing null root |
return tree traversed true |
|
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-4.2 |
|
Test Case Precondition |
tree contains root (28) |
|
Item(s) to be tested |
||
Repository Module: List Ascending-Path 4.2 |
||
Specifications |
||
Input |
Expected Output/Result |
|
execute ascend, passing root value of 28 |
return tree traversed true |
|
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-4.3 |
|
Test Case Precondition |
tree contains root (28), left child (27), right child (50) |
|
Item(s) to be tested |
||
Repository Module: List Ascending-Path 4.3 |
||
Specifications |
||
Input |
Expected Output/Result |
|
execute ascend, passing root value of 28 |
return tree traversed true |
|
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-4.4 |
|
Test Case Precondition |
tree contains root (28), right child (50) |
|
Item(s) to be tested |
||
Repository Module: List Ascending-Path 4.4 |
||
Specifications |
||
Input |
Expected Output/Result |
|
execute ascend, passing root value of 28 |
return tree traversed true |
|
List - Descending
Path ID |
Path |
5.1 |
1, 2, 5 |
5.2 |
1, 2, 3, 1, 2, 5 |
5.3 |
1, 2, 3, 4, 5 |
5.4 |
1, 2, 3, 4, 1, 2, 5 |
Test Cases
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-5.1 |
|
Test Case Precondition |
there are no node in the tree |
|
Item(s) to be tested |
||
Repository Module: List Descending-Path 5.1 |
||
Specifications |
||
Input |
Expected Output/Result |
|
execute descend passing null root |
return tree traversed true |
|
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-5.2 |
|
Test Case Precondition |
tree contains root (28) |
|
Item(s) to be tested |
||
Repository Module: List Descending-Path 5.2 |
||
Specifications |
||
Input |
Expected Output/Result |
|
execute descend, passing root value of 28 |
return tree traversed true |
|
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-5.3 |
|
Test Case Precondition |
tree contains root (28), left child (27), right child (50) |
|
Item(s) to be tested |
||
Repository Module: List Descending-Path 5.3 |
||
Specifications |
||
Input |
Expected Output/Result |
|
execute descend, passing root value of 28 |
return tree traversed true |
|
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-5.4 |
|
Test Case Precondition |
tree contains root (28), left child (27) |
|
Item(s) to be tested |
||
Repository Module: List Descending-Path 5.4 |
||
Specifications |
||
Input |
Expected Output/Result |
|
execute descend, passing root value of 28 |
return tree traversed true |
|
Read
Path ID |
Path |
6.1 |
1, 2, 6 |
6.2 |
1, 2, 3, 4, 5, 2, 6 |
Test Cases
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-6.1 |
|
Test Case Precondition |
no items in the file |
|
Item(s) to be tested |
||
Repository Module: Read-Path 6.1 |
||
Specifications |
||
Input |
Expected Output/Result |
|
empty file: test.txt |
return file read true |
|
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-6.2 |
|
Test Case Precondition |
2 items in the file |
|
Item(s) to be tested |
||
Repository Module: Read-Path 6.2 |
||
Specifications |
||
Input |
Expected Output/Result |
|
file test.txt containing: |
return file read true |
|
Store
Path ID |
Path |
7.1 |
1, 2, 6 |
7.2 |
1, 2, 3, 4, 1, 2, 6 |
7.3 |
1, 2, 3, 4, 5, 1, 2, 6 |
Test Cases
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-7.1 |
|
Test Case Precondition |
there are no nodes in the tree |
|
Item(s) to be tested |
||
Repository Module: Store-Path 7.1 |
||
Specifications |
||
Input |
Expected Output/Result |
|
execute store passing null root |
return tree traversed true |
|
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-7.2 |
|
Test Case Precondition |
tree contains root (28), left child (27) |
|
Item(s) to be tested |
||
Repository Module: Store-Path 7.2 |
||
Specifications |
||
Input |
Expected Output/Result |
|
execute store, passing root value of 28 |
return tree traversed true |
|
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-7.3 |
|
Test Case Precondition |
tree contains root (28), left child (27), right child (50) |
|
Item(s) to be tested |
||
Repository Module: Store-Path 7.3 |
||
Specifications |
||
Input |
Expected Output/Result |
|
execute store, passing root value of 28 |
return tree traversed true |
|
Write
Path ID |
Path |
8.1 |
1, 2, 3, 4 |
8.2 |
1, 2, 3, 2, 3, 4 |
Test Cases
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-8.1 |
|
Test Case Precondition |
create vector containing 1 integer root (28) |
|
Item(s) to be tested |
||
Repository Module: Write-Path 8.1 |
||
Specifications |
||
Input |
Expected Output/Result |
|
execute write |
return file written true |
|
Test to be Performed By: |
Executed by Junit |
|
Test Type |
White Box Basis Path |
|
Test Case Number |
W-8.2 |
|
Test Case Precondition |
create vector containing 2 integers (28, 50) |
|
Item(s) to be tested |
||
Repository Module: Write-Path 8.2 |
||
Specifications |
||
Input |
Expected Output/Result |
|
execute write |
return file written true |
|
The following table represents the automated equivalence classes, both valid and invalid, for the repository. There are many other equivalence classes at the system level that were not within the scope of this automation.
Input/Output Event |
Valid Equivalence Classes |
Invalid Equivalence Classes |
Input maximum number of allowed values |
|
2: > 25 values |
In addition to testing official test cases, we added some other miscellaneous function testing into this tool. Since a number of values were loaded (25 integers), we decided to test the functionality of the ascending and descending lists functions as well as search, delete, and clear.
Test Cases
Test to be Performed By: |
Custom Tool |
|
Test Type |
Black Box Equivalence Partitioning |
|
Test Case Number |
B-1 |
|
Test Case Precondition |
Tree is empty, input the maximum number of allowed values (25) |
|
Item(s) to be tested |
||
Unit Level Input maximum number of allowed values (Valid Case 9) |
||
Specifications |
||
Input |
Expected Output/Result |
|
Insert 80, 24, 91, 25, 88, 54, 97, 22, 45, 101, 82, 99, 12, 15, 87, 27, 65, 32, 94, 105, 72, 46, 34, 8, 77 |
display message: The tree is full |
|
Procedural Steps |
||
1. Enter unique valid integer and click insert button |
||
2. Repeat 24 times |
||
3. Halt entry and view displayed tree |
||
Test to be Performed By: |
Custom Tool |
|
Test Type |
Black Box Equivalence Partitioning |
|
Test Case Number |
B-2 |
|
Test Case Precondition |
Tree is empty, input greater than maximum number of allowed values (30) |
|
Item(s) to be tested |
||
Unit Level Input maximum number of allowed values (Invalid Case 2) |
||
Specifications |
||
Input |
Expected Output/Result |
|
Insert: 80, 24, 91, 25, 88, 54, 97, 22, 45, 101, 82, 99, 12, 15, 87, 27, 65, 32, 94, 105, 72, 46, 34, 8, 77, 20, 200, 1, 150, 7 |
display message: The tree is full |
|
Procedural Steps |
||
1. Enter unique valid integer and click insert button |
||
2. Repeat 29 times |
||
3. Halt entry and view displayed tree |
||
The goals of system testing are to detect faults that can only be exposed by testing the entire integrated system or some major part of it. Generally, system testing is mainly concerned with areas such as performance, security, validation, load/stress, and configuration sensitivity. We will perform the system-level testing allowed by eValid.
The valid and invalid classes are shown below along with the corresponding valid and invalid test values. By using eValid to test the equivalence classes, we can guarantee that using invalid equivalence class values will not cause any unexpected problems within the applet.
Input/Output Event |
Valid Equivalence Classes |
Invalid Equivalence Classes |
Input integers |
3: Integers between 999 and 999 |
4: Integers > 999 5: Integers < -999 6: Non-integers (characters) 7: Non-integers (decimal values) 8: Non-duplicate integer |
Test Cases
Test to be Performed By: |
eValid |
|
Test Type |
Black Box Equivalence Partitioning |
|
Test Case Number |
B-3 |
|
Test Case Description |
Try to insert integer between 999 and 999 |
|
Item(s) to be tested |
||
System Level Input integers (Valid Case 3) |
||
Specifications |
||
Input |
Expected Output/Result |
|
25 displayed in tree |
||
Test to be Performed By: |
eValid |
|
Test Type |
Black Box Equivalence Partitioning |
|
Test Case Number |
B-4 |
|
Test Case Description |
Try to insert integer between > 999 |
|
Item(s) to be tested |
||
System Level Input integers (Invalid Case 4) |
||
Specifications |
||
Input |
Expected Output/Result |
|
display message: Integer is out of range |
||
Test to be Performed By: |
eValid |
|
Test Type |
Black Box Equivalence Partitioning |
|
Test Case Number |
B-5 |
|
Test Case Description |
Try to insert integer between < -999 |
|
Item(s) to be tested |
||
System Level Input integers (Invalid Case 5) |
||
Specifications |
||
Input |
Expected Output/Result |
|
display message: Integer is out of range |
||
Test to be Performed By: |
eValid |
|
Test Type |
Black Box Equivalence Partitioning |
|
Test Case Number |
B-6 |
|
Test Case Description |
Try to insert non-integer value (character) |
|
Item(s) to be tested |
||
System Level Input integers (Invalid Case 6) |
||
Specifications |
||
Input |
Expected Output/Result |
|
a |
display message: Input error non-integer value |
|
Test to be Performed By: |
eValid |
|
Test Type |
Black Box Equivalence Partitioning |
|
Test Case Number |
B-7 |
|
Test Case Description |
Try to insert non-integer value (decimal) |
|
Item(s) to be tested |
||
System Level Input integers (Invalid Case 7) |
||
Specifications |
||
Input |
Expected Output/Result |
|
display message: Input error non-integer value |
||
Test to be Performed By: |
eValid |
|
Test Type |
Black Box Equivalence Partitioning |
|
Test Case Number |
B-8 |
|
Test Case Description |
Tree contains the value 5 try to reinsert 5 |
|
Item(s) to be tested |
||
System Level Input integers (Invalid Case 8) |
||
Specifications |
||
Input |
Expected Output/Result |
|
display message: The integer has already been inserted |
||
The acceptable range of values for this application was set by the development team. Due to the limitations of the GUI, the developers also limited the size of the input values to three digit integers. The valid and invalid ranges are shown below along with the corresponding valid and invalid boundary test values. By using eValid to test the boundary values, we can guarantee that using values outside of the allowed boundaries will not cause any unexpected problems within the applet.
Acceptable Range: -999 x 999
Valid Boundary Tests:
Boundary1: x = -999
Boundary2: x = 0
Boundary3: x = 999
Invalid Boundary Tests:
Boundary4: x = 1000
Boundary5: x = -1000
Boundary6: x = 999999
Boundary7: x = -999999
Test Cases
Test to be Performed By: |
eValid |
|
Test Type |
Black Box Boundary Value Analysis |
|
Test Case Number |
B-9 |
|
Test Case Description |
Try to insert valid boundary integer value (999) |
|
Item(s) to be tested |
||
System Level Valid Boundary |
||
Specifications |
||
Input |
Expected Output/Result |
|
-999 displayed in tree |
||
Test to be Performed By: |
eValid |
|
Test Type |
Black Box Boundary Value Analysis |
|
Test Case Number |
B-10 |
|
Test Case Description |
Try to insert valid mid-boundary integer value (0) |
|
Item(s) to be tested |
||
System Level Valid Boundary |
||
Specifications |
||
Input |
Expected Output/Result |
|
0 displayed in tree |
||
Test to be Performed By: |
eValid |
|
Test Type |
Black Box Boundary Value Analysis |
|
Test Case Number |
B-11 |
|
Test Case Description |
Try to insert valid boundary integer value (999) |
|
Item(s) to be tested |
||
System Level Valid Boundary |
||
Specifications |
||
Input |
Expected Output/Result |
|
999 displayed in tree |
||
Test to be Performed By: |
eValid |
|
Test Type |
Black Box Equivalence Partitioning |
|
Test Case Number |
B-12 |
|
Test Case Description |
Try to insert invalid boundary integer (1000) |
|
Item(s) to be tested |
||
System Level Invalid Boundary |
||
Specifications |
||
Input |
Expected Output/Result |
|
display message: Integer is out of range |
||
Test to be Performed By: |
eValid |
|
Test Type |
Black Box Equivalence Partitioning |
|
Test Case Number |
B-13 |
|
Test Case Description |
Try to insert invalid boundary integer (-1000) |
|
Item(s) to be tested |
||
System Level Invalid Boundary |
||
Specifications |
||
Input |
Expected Output/Result |
|
display message: Integer is out of range |
||
Test to be Performed By: |
eValid |
|
Test Type |
Black Box Equivalence Partitioning |
|
Test Case Number |
B-14 |
|
Test Case Description |
Try to insert distant invalid boundary integer (999999) |
|
Item(s) to be tested |
||
System Level Invalid Boundary |
||
Specifications |
||
Input |
Expected Output/Result |
|
display message: Integer is out of range |
||
Test to be Performed By: |
eValid |
|
Test Type |
Black Box Equivalence Partitioning |
|
Test Case Number |
B-15 |
|
Test Case Description |
Try to insert distant invalid boundary integer (-999999) |
|
Item(s) to be tested |
||
System Level Invalid Boundary |
||
Specifications |
||
Input |
Expected Output/Result |
|
display message: Integer is out of range |
||
This test will be conducted to evaluate the fulfillment of a system with specified performance requirements. It will be done using the eValid test tool and will be performed on every button/text field in the GUI. eValid will help guarantee that there are not missing links and that all buttons are functioning properly. It will also display the results which will allow us to test the functionality of our system. (All functional specifications are included in the Software Specification).
The online freeware tool, Element Tool, was used for problem reporting. Since all of our bugs had been fixed by the time we did the automated testing, we entered our bug from the manual testing.
We were able to apply tools to all aspect of testing white box, black box, and system-level testing.
Junit was used to perform white-box testing on the Binary Search Tree repository code. We were able to create a test suite that would test every path identified using the Basis-Path Testing approach. We tested a total of 31 of our test cases. We were also able to implement automated test data generation within this tool.
We used our custom automation tool to perform black-box, equivalence partitioning for the Binary Search Tree repository code. In addition, we were able to do some unit-level functional testing to see how each of the separate pieces worked together. We included detailed comments that were both written to a file and displayed to the screen to verify every step in the automation routine.
The eValid tool was used at the system-level to test the functionality of the applet. It can confirm that there are no broken links and that each button is working properly. The advantage to using eValid is that it can record a string of operations that can be performed over and over using the playback feature. This is useful if changes are made to the code since it records the operations.
Element Tool was used for bug tracking. All of the bugs from the manual testing phase were entered into Element Tool for tracking.
Upon completion of our automation project, there were many lessons learned about the automation process as well as some different pros and cons while working within an automation paradigm. One of the biggest challenges of automation is setting up a specific application to integrate within an automation infrastructure. Because all software is different, third party automation software vendors can only make their best predictions on how an application might be structured in order to successfully automate. This can cause problems within any automation project because most software is created differently and will not always use standard objects. In fact, software engineers will sometimes use rather clever methodologies in creating certain modules that a third party vendor never even thought of designing their automation tool around. This problem affected our own binary search application while trying to automate within eValid. It was apparent that eValid could not find a certain class within Java and so it would not allow any automation scripts to run. It took weeks of communication with the vendor before we were given a solution to the problem.
Other problems with automation can sometimes occur while writing the scripts themselves. If a script is not written properly or not robust enough, although it may work correctly, many a time it is only temporary. As a software product evolves over time, scripts that have once worked in the past will cease to work and may either require modification or abortion. This system will create a constant maintenance requirement for all automation scripts produced past, present, and future.
Although automation can be difficult to setup and maintain, there are definitely strong benefits to it. During the manual testing phase of our project, it took many hours to determine requirements, write each black box test cases, and write each white box test case. Furthermore, after the test cases were completed, it took even longer to go through each one and manually test each part of the product. After each test case was modified, this process quickly became effortless. What initially took hours to complete, was done in a matter of seconds. On account of this, these tests could be repeated over and over again. This would be of a great benefit as when the product changes over time, the entire test conglomeration could easily be run as many times as management would require. Furthermore, test generation could be truly random and tested more thoroughly. Overall, difference in time is so significant that testing the legacy areas of a product become faster and easier.
Junit was our favorite tool as it was easy to use and provided just the right features to perform white box testing in an organized, simple manner. Since white box testing can sometimes be difficult to perform, this tool is especially useful. It only took a few minutes to figure out how to apply and the coding of the test cases was very straightforward. It would also be a useful tool if changes were to be made to the code. The complete suite of white box testing can be done in one step. In addition, be implementing the random number generation, all of the test cases could be run using completely different sets of values in a very short time. This provided even more assurance in the correctness of the code.
The custom generated test tool was more of an experiment to see how difficult it would be to develop our own tool. Since the white-box testing was already covered by the Junit tool, we decided to implement this tool for black-box testing. With the idea of how to develop a tool achieved using Junit, the custom tool was not too difficult to create. It turned out to be a great way to not only perform two of the black-box test cases, but also test how all of the functions in the tree repository function together.
The eValid tool turned out to be by far the most frustrating. Not only did we have to convert our application into an applet just to use the tool, we also spent two weeks emailing back and forth with eValid to get the tool to recognize our applet. Then, even after we got the tool to recognize the applet, it was difficult to get the system properly configured so it would operate properly. It would initially not recognize our mouseclicks or text entry and we finally received word from eValid that we had to use the absolute mode for it to record. Because it took so long to get everything worked out with eValid, we ended up using another tool that would allow our application be recognized by eValid. We found a tool called WebCream that converted the applet/application into JSP/HTML pages. Once we did this, we were finally able to actually create and play back a script. Automation tools are only useful if they make testing easier or provide better coverage. This tool really did neither. The documentation was not adequate to solve the problems on our own and relying on the support team resulted in numerous delays in our testing. Now that we have the tool working, future testing would be simplified as we could just playback our recorded series of mouseclicks to retest the whole set of system tests. Unfortunately, were not sure if it was worth all the trouble.
Our team did not feel that there was any value added by using this tool. Since we were only using the freeware version, it did not provide enough detail or flexibility to effectively manage our problem reports. It was however very easy to use and would probably be more worth while if were able to use one of the more robust versions.
Since this was our first experience with test automation, we werent as efficient as we could have been. It took us a while to understand you to use Junit, we had numerous problems with eValid that increased testing time, and we also needed to spend time figuring our where automation could be used. All of these tasks would have taken less time if we had some previous experience. With the automation in place, however, subsequent testing will be much quicker and easier. We could make changes to the software and easily rerun all of the unit tests. We can also change the input data and rerun the test suite. Based on our best estimation, the following timetable was produced to provide a direct comparison. The times below do not reflect the time spent in developing the test cases which took up much more time than the actual testing.
Item Tested |
Time for Manual Testing |
Time for Automated Testing |
Basis-Path Testing - Repository |
6 hours |
4 hours |
Equivalence Partitioning Repository |
30 minutes |
2 hours |
Functional Testing System-Level |
1 hour |
no tool available |
Equivalence Partitioning System-Level |
15 minutes |
15 minutes* |
Boundary Value System-Level |
15 minutes |
15 minutes* |
Performance Testing System-Level |
no tool available |
15 minutes* |
Element Tool |
1 hour |
30 minutes |
* does not include the 20-30 hours spent working out the eValid problems
Pressman, Roger S. Software Engineering - A Practitioner's Approach. Fifth edition. The McGraw-Hill companies, Inc.
Kaner, C., Falk, J., Nguyen, H.-Q. Testing Computer Software. Wiley Computer Publishing, 1999.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1227
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved