BÀI T ẬP V NHÀ TUẦN 10 – Kiểm thử tích hợp Môn h ọc: Kiểm thử đảm bảo chất lượng phần mềm.. - Phiếu giảm giá được áp dụng cho những người có phiếu giảm giá và không đi theo nhóm, sẽ đượ
Trang 1BÀI T ẬP V NHÀ TUẦN 10 – Kiểm thử tích hợp
Môn h ọc: Kiểm thử đảm bảo chất lượng phần mềm
H ọ và tên: Lê Văn Hùng
Mã s ố HV: 14025012
Gi ảng viên: TS Phạm Ngọc Hùng
Tính tiền vé vào công viên dựa theo các điều kiện sau:
- Công viên chỉ làm việc từ thứ 2 đến thứ 7
- Với người lớn (Tuổi >= 13) giá vé là 1200 Yên/người
- Với trẻ em giá vé là 800 Yên/người
- Nếu đi theo nhóm (Lớn hơn 20 người), với người lớn giá vé là 800
Yên/người, nếu là trẻ em giá vé là 300 yên/người
- Phiếu giảm giá được áp dụng cho những người có phiếu giảm giá và không đi
theo nhóm, sẽ được giảm 25% tổng số tiền vé
- Tiền vé sau khi thu được từ phái khách hàng trích một khoản để nộp thuế
o Nếu số tiền < 10 000 Yên thì không phải nộp
o Nếu số tiền từ 10 000 Yên đến 20000 Yên phải nộp 10% tiền thuế
o Từ 20 000 yên trở lên phải nộp 20% tiên thuế
Dựa trên mô tả bài toán, chương trình sẽ được tổ chức thành 4 modules như sau:
- CheckDay (Module C) – Kiểm tra tính hợp lệ của ngày làm việc
- isCoupon (Module D) – Kiểm tra xem khác hàng có thuộc diện được giảm
giá không
- TicketPrice (Module B) – Tính tiền vé
- TotalMone (Module A) – Tính tổng tiền khách hàng phải trả (có tính thuế)
Sơ đồ chương trình:
Trang 2I Chiến lược kiểm thử Top Down
1 Trường hợp C và D đều chưa hoàn thành, B đã hoàn thành
Giả sử ta cần kiểm thử module B (hàm TicketPrice()), nhưng hàm CheckDay() và isCoupon chưa hoàn thành Ta sẽ viết các Stub tương ứng với các case trong hàm
TicketPrice()
public boolean stub_checkday1(int day ) {
return true; }
public boolean stub_checkday2(int day ) {
return false; }
public boolean stub_isCoupon1(boolean isCoupon , int numOfPerson ) {
return true; }
public boolean stub_isCoupon2(boolean isCoupon , int numOfPerson ) {
return false; }
Với các stub này ta sẽ kiểm thử hàm TicketPrice
Giả sử chọn stub_checkday1() và stub_isCoupon1():
public double TicketPrice(int old , boolean isCoupon , int
numOfPerson ,
int day ) {
if (stub_checkday1( day )) {
if ( numOfPerson >= 20) {
TotalMoney (A)
TicketPrice (B)
CheckDay (C)
isCoupon (D)
Trang 3if ( old >= 13)
price = numOfPerson * 800;
else {
price = numOfPerson * 300;
} } else {
if ( old > 13)
price = numOfPerson * 1200;
else {
price = numOfPerson * 800;
} }
if (stub_isCoupon1( isCoupon , numOfPerson )) {
price -= price * 0.2;
}
return price;
}
return -1;
}
Chọn phương pháp kiểm thử hộp đen với phương pháp kiểm thử giá trị biên để kiểm
thử hàm TotalMoney
{12, true, 20, 4} 4800.0 Pass
{13, true, 20, 4} 10800.0 Pass
{12, true, 19, 4} 12160.0 Pass
{13, true, 20, 4} 19200.0 Fail
Tương tự với các stub còn lại
2 Trường hợp hoàn thành C mà chưa hoàn thành D
Giả lập các stub như sau:
public boolean stub_isCoupon1(boolean isCoupon , int numOfPerson ) {
return true; }
public boolean stub_isCoupon2(boolean isCoupon , int numOfPerson ) {
return false; }
Giả sử chọn stub_isCoupon1():
public double TicketPrice(int old , boolean isCoupon , int
numOfPerson ,
int day ) {
if (checkday( day )) {
if ( numOfPerson >= 20) {
if ( old >= 13)
price = numOfPerson * 800;
Trang 4else {
price = numOfPerson * 300; }
} else {
if ( old > 13)
price = numOfPerson * 1200;
else {
price = numOfPerson * 800; }
}
if (stub_isCoupon1( isCoupon , numOfPerson )) {
price -= price * 0.2;
}
return price;
}
return -1;
}
Áp dụng phương pháp kiểm thử hộp đen ta có:
{12, true, 20, 1} -1.0 Pass
{13, true, 20, 1} -1.0 Pass
{12, true, 19, 1} -1.0 Pass
{13, true, 20, 1} -1.0 Pass
{12, true, 20, 4} 4800.0 Pass
{13, true, 20, 4} 10800.0 Pass
{12, true, 19, 4} 12160.0 Pass
{13, true, 20, 4} 19200.0 Fail
Tương tự đối với stub_isCoupon2():
3 Trường hợp hoàn thành D mà chưa hoàn thành C
Ta viết các stub cho module C
public boolean stub_checkday1(int day ) {
return true; }
public boolean stub_checkday2(int day ) {
return false; }
Với stub_checkday1() Ta có:
Trang 5public double TicketPrice(int old , boolean isCoupon , int
numOfPerson ,
int day ) {
if (stub_checkday1( day )) {
if ( numOfPerson >= 20) {
if ( old > 13) // Chen loi o day, thieu dau =
price = numOfPerson * 800;
else {
price = numOfPerson * 300;
} } else {
if ( old > 13)
price = numOfPerson * 1200;
else {
price = numOfPerson * 800;
} }
if (isCoupon( isCoupon , numOfPerson )) {
price -= price * 0.2; // Lỗi (0.25 chứ không phải 0.2) }
return price;
}
return -1;
}
Áp dụng phương pháp kiểm thử hộp đen ta có:
{13, true, 19, 4} 11400 Fail (12160)
4 Trường hợp A đã hoàn thành, nhưng B chưa hoàn thành
Áp dụng chiến lược kiểm thử hộp đen với phương pháp kiểm thử giá trị biên để
kiểm thử module A, ta sẽ viết các stub trả về các giá trị biên để module A sử dụng:
public double TicketPrice_Stub1(int old, boolean isCoupon,
int numOfPerson, int day) {
return 10000.0;
}
public double TicketPrice_Stub2(int old, boolean isCoupon,
int numOfPerson, int day) {
return 9999.0;
}
Trang 6public double TicketPrice_Stub3(int old, boolean isCoupon,
int numOfPerson, int day) {
return 20000.0;
}
public double TicketPrice_Stub4(int old, boolean isCoupon,
int numOfPerson, int day) {
return 20001.0;
}
public double TicketPrice_Stub5(int old, boolean isCoupon,
int numOfPerson, int day) {
return 19999.0;
}
Với Stub: TicketPrice_Stub3():
public double TotalMoney(int old, boolean isCoupon, int numOfPerson, int day) {
double p = TicketPrice_Stub3((old, isCoupon, numOfPerson, day); //
*
if (p > 10000 && p < 20000) // L ỗi vì p>=10000
p = p - 0.16 * p;
else if (p > 20000) // L ỗi vì p>=20000
p = p - 0.2 * p;
else
p = p - 0;
return p;
}
Kết quả kiểm thử cho hàm TotalMoney():
II Chi n lược kiểm thử Botom up
1 Trường hợp 1: C và D hoàn thành, B chưa hoàn thành
Dựa theo yêu cầu bài toán ở trên, giả sử module C và module D đã hoàn thành, nhưng module B chưa hoàn thành
Hiện tại chúng ta cần kiểm thử tính đúng đắn của 2 modules này:
boolean checkday(int day ) {
if( day >= 2 && day < 7)
return true;
else
return false;
Trang 7}
boolean isCoupon(boolean isCoupon , int numOfPerson ) {
if( isCoupon && numOfPerson < 20)
return true;
return false; }
public double TicketPrice_Driver1(int old , boolean isCoupon , int
numOfPerson ,
int day ) {
if(checkday(7) == true)
return 1;
if(checkday(8) == true)
return 0;
if(checkday(2) == true)
return 1;
if(checkday(1) == false)
return 0;
return 1;
}
Áp dụng phương pháp kiểm thử giá trị biên cho module này:
Áp dụng tương tự với Driver cho module isCoupon()
2 Trường hợp B hoàn thành, A chưa hoàn thành
Ta cần kiểm thử sự đúng đắn của module B
Trang 8public double TicketPrice(int old , boolean isCoupon , int numOfPerson ,
int day ) {
if (checkday( day )) {
if ( numOfPerson >= 20) {
if ( old >= 13)
price = numOfPerson * 800;
else {
price = numOfPerson * 300;
} } else {
if ( old >= 13)
price = numOfPerson * 1200;
else {
price = numOfPerson * 800;
} }
if (isCoupon( isCoupon , numOfPerson )) {
price -= price * 0.2;
}
return price;
}
return -1;
}
Trang 9Testcase để kiểm thử hàm TicketPrice với độ phủ C2:
1-2-3-5-9-11 (10, false, 15, 5) 12000 12000 Pass
1-2-3-5-9-10-11
(10, true, 15, 5) 9600 9000 Pass
1-2-3-6-9-11 (20, false, 15, 5) 12000 12000 Pass
1-2-3-6-9-10-11
(20, true, 15, 5) 14400 13500 Fail
1-2-4-7-9-11 (5, false, 25, 5) 7500 7500 Pass
1-2-4-7-9-10-11
1-2-4-8-9-11 (20, false, 25, 5) 20000 20000 Pass
1-2-4-8-9-10-11
Trang 10Viết các Driver để chạy module B (TicketPrice)
public double TotalMoney_Driver1(int old, boolean isCoupon,
int numOfPerson, int day) {
return TicketPrice(10, true, 20, 1);
}
public double TotalMoney_Driver2(int old, boolean isCoupon,
int numOfPerson, int day) {
return TicketPrice(10, false, 15, 5);
}
public double TotalMoney_Driver3(int old, boolean isCoupon,
int numOfPerson, int day) {
return TicketPrice(10, true, 15, 5);
}
Tương tự cho các Driver khác