Description
The attached program helps validate credit card numbers from major credit card vendors such as VISA, MASTERCARD, ...
A credit card number start with a prefix (first 2, 3 or 4 digits) that corresponds to the vendor. Most credit card numbers are also encoded with a check digit. A check digit is a digit added at the end that validates the authenticity of the number. A simple algorithm is applied to the other digits of the number which yields the check digit. The validity of a credit card number can be checked by running the algorithm, and comparing the check digit obtained from the algorithm with the check digit encoded with the credit card number.
The following table outlines the prefix, length and whether a check digit is used for the major credit cards vendors.
CARD TYPE
|
Prefix
|
Length
|
Check digit
|
MASTERCARD
|
51-55
|
16
|
yes
|
VISA
|
4
|
13, 16
|
yes
|
AMEX
|
34 37
|
15
|
yes
|
Diners Club/ Carte Blanche
|
300-305 36 38
|
14
|
yes
|
Discover
|
6011
|
16
|
yes
|
enRoute
|
2014 2149
|
15
|
no
|
JCB
|
3
|
16
|
yes
|
JCB
|
2131 1800
|
15
|
yes
|
The following steps are required to validate the check digit of a credit card number:
Step 1: Double the value of alternate digits of the primary account number beginning with the second digit from the right (the first right--hand digit is the check digit.)
Step 2: Add the individual digits comprising the products obtained in Step 1 to each of the unaffected digits in the original number.
Step 3: The total obtained in Step 2 must be a number ending in zero (30, 40, 50, etc.) for the account number to be validated.
For example, to validate the primary account number 49927398716:
Step 1:
4 9 9 2 7 3 9 8 7 1 6
x2 x2 x2 x2 x2
------------------------------
18 4 6 16 2
Step 2: 4 +(1+8)+ 9 + (4) + 7 + (6) + 9 +(1+6) + 7 + (2) + 6
Step 3: Sum = 70 : Card number is validated
Note: Card is valid because the 70/10 yields no remainder.
The static method CreditCardVendor.validate() is used in the attached program to check credit card numbers. The signature of the method is as follow
/**
* Determine if the credit card number is valid, i.e.
* has good prefix and checkdigit.
*
* @param creditCardNumber number on card.
*
* @return an instance of CreditCardVendor
* if card number is valid or null
*/
publicstatic CreditCardVendor validate(long ccnumber)
Part 1: Junit tests Implementation
Table 1 lists a test suite consisting of a set of test cases defined for methodCreditCardVendor.validate(). Your are asked to provide a JUnit implementation of this test suite.
Test Case Number
|
Test Data
|
Expected results
|
1
|
3999999999999
|
Null
|
2
|
4000000000006
|
VISA
|
3
|
5000000000000
|
Null
|
4
|
36000000000007
|
Null
|
5
|
36000000000008
|
DINERS
|
6
|
38000000000007
|
Null
|
7
|
180000000000001
|
Null
|
8
|
180000000000002
|
JCB
|
9
|
201399999999999
|
Null
|
10
|
214999999999999
|
ENROUTE
|
11
|
215000000000000
|
Null
|
12
|
370000000000000
|
Null
|
13
|
370000000000001
|
Null
|
14
|
370000000000002
|
AMEX
|
15
|
370000000000003
|
Null
|
16
|
4000000000000001
|
Null
|
17
|
4000000000000002
|
VISA
|
18
|
4000000000000003
|
Null
|
19
|
5100000000000007
|
Null
|
20
|
5100000000000008
|
MASTERCARD
|
Table 1: Test Suite for validate
Deliverable
1. Junit code,
2. Execution reports,
3. Discussions and code coverage
4. What is the percentage of branch coverage obtained from the test suite in Table 1? Suggest additional test cases so that 100% branch coverage is obtained. Specify which branches (not currently covered with the test suite in Table 1) are covered by each of your additional test cases.
Part 2
2.1. Provide an analysis of the code coverage results obtained from the test suite in Table 1 with EclEmma. What type of coverage information can be obtained? What indication can you infer about the test suite and the implementation from that information?
2.2. Provide an analysis of the code coverage results obtained from the test suite in Table 1, with CodeCover. What type of coverage information can be obtained? What indication can you infer about the test suite and the implementation from that information?
2.3. Compare EclEmma and CodeCover in term of the coverage information provided. Discuss the advantages/dis-advantages of each tool compared to the other
2.4. What is the percentage of branch coverage obtained from the test suite in Table 1? Suggest additional test cases so that 100% branch coverage is obtained. Specify which branches (not currently covered with the test suite in Table 1) are covered by each of your additional test cases.