.4 Các ca kiểm thử sinh ra theo kỹ thuật bảng quyết định

Một phần của tài liệu (LUẬN văn THẠC sĩ) kiểm thử đơn vị cho hệ thống (Trang 40)

Testcase Ngày thực Dữ liều đầu vào EO

hiện Hình thức thực hiện quyền

TC1 24/11/2014 Trả cổ tức bằng tiền mặt 21/11/2014

TC2 27/11/2014 Trả cổ tức bằng tiền mặt 25/11/2014

TC3 24/11/2014 Niêm yết bổ sung 21/11/2014

TC4 25/11/2014 Niêm yết bổ sung 24/11/2014

TC5 27/11/2014 Thay đổi tỷ lệ FreeFloat 27/11/2014

4.1.3. Áp dụng kỹ thuật kiểm thử dòng điều khiển

Áp dụng kỹ thuật kiểm thử dòng điều khiển ta sẽ phân tích bài toán theo mã nguồn và theo tiêu chí phủ rẽ nhánh để kiểm thử dựa vào độ đo kiểm thử cấp 2 tức là

tất cả các điểm quyết định của đồ thị đều được thực hiện ít nhất 1 lần. Bên cạnh đó, ta còn thấy xuất hiện vòng lặp trong mã nguồn, nên việc tiến hành xây dựng kiểm thử dựa trên độ đo là chưa đủ mà ta cần phải xây dựng ca kiểm thử liên quan đến vòng lặp của chương trình. Ở mã nguồn 1, nhận thấy việc xác định vòng lặp tối đa là khó nên ta sẽ chỉ áp dụng sinh kiểm thử cho vòng lặp với bốn trường hợp đầu tiên (theo mục 3.2.1, tr34).

Mã nguồn của bài toán: Mã nguồn 1:

public datetime dtActionDate (datetime dtLastDateMoneyDiv, int

c_intCorporateType) {

DateTime _dtTemp= new DateTime();

Int32 _paramActionDate = -1;//Ngay TH

if(c_intCorporateType==(Int32)Common.CorporateActionType.Money

Dividend) {

//tra co tuc = tien ngay thuc hien = ngay DKCC-2

_dtTemp=_dtLastDateMoneyDiv.SelectedDate.Value.Date;

_dtTemp = _dtTemp.AddDay(_paramActionDate);//

_dtTemp = _dtTemp.AddDay(_paramActionDate);//

}

//truong hop niem yet bo sung = ngay DKCC-1

elseif(c_intCorporateType==(Int32)Common.CorporateActionType.A ddListing)

{

_dtTemp = dtNYDate.SelectedDate.Value.Date;

_dtTemp = _dtTemp.AddDay(_paramActionDate); }

//truong hop ChangeFreeFloat

elseif(c_intCorporateType==(Int32)Common.CorporateActionType.C hangeFreeFloat) { _dtTemp =dtLastDateChangeFF.SelectedDate.Value.Date; } while( checkHoliday(dtTemp)) { dtTemp = _dtTemp.AddDay(-1); } return _dtTemp ; }

Mã nguồn 2:

public datetime dtActionDate (datetime dtLastDateMoneyDiv, int

c_intCorporateType) {

DateTime _dtTemp= new DateTime();

Int32 _paramActionDate = -1;//Ngay TH

if(c_intCorporateType==(Int32)Common.CorporateActionType.Money

Dividend) {

//tra co tuc = tien ngay thuc hien = ngay DKCC-2

_dtTemp=_dtLastDateMoneyDiv.SelectedDate.Value.Date; _dtTemp = _dtTemp.AddDay(_paramActionDate);

_dtTemp = _dtTemp.AddDay(_paramActionDate); }

//truong hop niem yet bo sung

elseif(c_intCorporateType==(Int32)Common.CorporateActionType.A ddListing)

{

_dtTemp = dtNYDate.SelectedDate.Value.Date;

_dtTemp = _dtTemp.AddDay(_paramActionDate); }

//truong hop ChangeFreeFloat

elseif(c_intCorporateType==(Int32)Common.CorporateActionType.C hangeFreeFloat) { _dtTemp =dtLastDateChangeFF.SelectedDate.Value.Date; } if( checkHoliday(dtTemp)) { dtTemp = _dtTemp.AddDay(-1); } return _dtTemp ; }

Bảng 4.5 Quy ƣớc các điều kiện, hành động trong sơ đồ CFG của bài toán 1

STT Điều kiện Quy

ƣớc

1. c_intCorporateType ==(Int32)Common.CorporateActionType.MoneyDividend C1

2. c_intCorporateType ==(Int32)Common.CorporateActionType. AddListing C2

3. c_intCorporateType ==(Int32)Common.CorporateActionType.

4. checkHoliday(dtTemp)== true C4 5. _dtTemp = dtLastDateMoneyDiv.SelectedDate.Value.Date; _dtTemp = _dtTemp.AddDay(_paramActionDate);//-2 _dtTemp = _dtTemp.AddDay(_paramActionDate);//-1 A5 6. _dtTemp = dtNYDate.SelectedDate.Value.Date; _dtTemp = _dtTemp.AddDay(_paramActionDate); A6 7. _dtTemp = dtLastDateChangeFF.SelectedDate.Value.Date; A7 8. _dtTemp = _dtTemp.AddDay(-1); A8

Áp dụng kỹ thuật dòng điều khiển ta có sơ đồ CFG như sau:

Với mã nguồn 1:

Hình 4.1Sơ đồ dòng điều khiền cho bài toán 1 – mã nguồn 1

Dựa vào lược đồ ta sẽ xây dựng đường đi đảm bảo điều kiện đi qua tất cả các câu lệnh và các điều kiện T-F đều được thực hiện ít nhất 1 lần.

Đường đi 1: 1-2-3(T)-4-9(T)-10-11 Đường đi 2: 1-2-3(T)-4-9(F)-11 Đường đi 3: 1-2-3(F)-5(T)-6-9(T)-10-9(F)-11 Đường đi 4: 1-2-3(F)-5(T)-6-9(F)-11 Đường đi 5: 1-2-3(F)--5(F)-7(T)-8-9(F)-11 Đường đi 6: 1-2-3(F)--5(F)-7(T)-8-9(T)-10-9(F)-11 Đường đi 7: 1-2-3(F)--5(F)-7(F)-9(T)-10-9(F)-11 Đường đi 8: 1-2-3(F)-5(F)-7(F)-9(F)-11

Do đó ta có 8 đường đi từ sơ đồ CF.

Trong hàm trên có xuất hiện vòng lặp while do đó cần sinh ra ca kiểm thử cho vòng lặp với trường hợp như sau:

Vòng lặp không thực hiện lần nào. Nhận thấy đường đi thứ 2 thỏa mãn điều kiền này.

Vòng lặp thực hiện 1 lần ứng với đường đi thứ 1.

Vòng lặp thực hiện 2 lần. Đường đi 9: 1-2-3(T)-4-9(T)-10-9(T)-10-9(F)-11 Vòng lặp thực hiện k lần (ta chọn k =5). Đường đi 10:

1-2-3(T)-4-9(T)-10-9(T)-10-9(T)-10-9(F)-11. Do đó số đường đi cần thiết là 10.

Ta có tescace được sinh ra từ đường đi như sau:

Bảng 4.6 Các ca kiểm thử sinh ra theo kỹ thuật dòng điều khiển với mã nguồn 1 Testcase Đƣờng đi Testcase Đƣờng đi

Dữ liệu đầu vào Kết quả mong đợi Ngày thực

hiện Hình thức thực hiện quyền

TC1 Đường đi 1 24/11/2014 Trả cổ tức bằng tiền mặt 21/11/2014

TC2 Đường đi 2 27/11/2014 Trả cổ tức bằng tiền mặt 25/11/2014

TC3 Đường đi 3 03/09/3014 Niêm yết bổ sung 01/09/2014

TC4 Đường đi 4 27/11/2014 Niêm yết bổ sung 26/11/2014

TC5 Đường đi 5 27/11/2014 Thay đổi tỷ lệ FreeFloat 27/11/2014

Đường đi 6

Không thực thi được do ngày thực hiện là ngày đăng ký cuối cùng, mà ngày thực hiện luôn là ngày làm việc (tức là không thuộc ngày nghỉ, lễ tết) nên ngày đăng ký cuối cùng cũng là ngày làm việc

Đường đi 7

Không thực thi được do nếu ngày thực hiện không thuộc hình thức nào, ngày đăng ký cuối cùng sẽ nhận giá trị mặc định của kiểu DateTime là ngày 01/01/1900 là ngày thứ hai nên không thể thỏa mãn điều kiện là ngày nghỉ lể

TC6 Đường đi 8 27/11/2014 Không thuộc hình thức nào Hiển thị thông báo “Không thuộc hình thức thực hiện quyền nào”

TC7 Đường đi 9 25/11/2014 Trả cổ tức bằng tiền mặt 21/11/2014

TC8 Đường đi 10 23/02/2015 - 05/01/2015 âm lịch

Trả cổ tức bằng tiền mặt 16/02/2015

Hình 4.2 Sơ đồ dòng điều khiền cho bài toán 1 – mã nguồn 2

Dựa vào lược đồ (Hình 3.9) ta sẽ xây dựng đường đi đảm bảo điều kiện đi qua tất cả các câu lệnh và các điều kiện T-F đều được thực hiện ít nhất 1 lần.

Đường đi 1: 1-2-3(T)-4-9(T)-10-11 Đường đi 2: 1-2-3(T)-4-9(F)-11

Đường đi 4: 1-2-3(F)-5(T)-6-9(F)-11 Đường đi 5: 1-2-3(F)--5(F)-7(T)-8-9(F)-11 Đường đi 6: 1-2-3(F)--5(F)-7(T)-8-9(T)-10-11 Đường đi 7: 1-2-3(F)--5(F)-7(F)-9(T)-10-11 Đường đi 8: 1-2-3(F)-5(F)-7(F)-9(F)-11 Do đó ta có 8 đường đi từ sơ đồ CF.

Ta có tescace được sinh ra từ đường đi như sau:

Bảng 4.7 Các ca kiểm thử sinh ra theo kỹ thuật dòng điều khiển với mã nguồn 2 Testcase Đƣờng đi Testcase Đƣờng đi

Dữ liệu đầu vào

EO Ngày thực

hiện Hình thức thực hiện quyền

TC1 Đường đi 1 24/11/2014 Trả cổ tức bằng tiền mặt 21/11/2014

TC2 Đường đi 2 27/11/2014 Trả cổ tức bằng tiền mặt 25/11/2014

TC3 Đường đi 3 03/09/2014 Niêm yết bổ sung 01/09/2014

TC4 Đường đi 4 27/11/2014 Niêm yết bổ sung 26/11/2014

TC5 Đường đi 5 27/11/2014 Thay đổi tỷ lệ FreeFloat 27/11/2014

Đường đi 6

Không thực thi được do ngày thực hiện là ngày đăng ký cuối cùng, mà ngày thực hiện luôn là ngày làm việc (tức là không thuộc ngày nghỉ, lễ tết) nên ngày đăng ký cuối cùng cũng là ngày làm việc

Đường đi 7

Không thực thi được do nếu ngày thực hiện không thuộc hình thức nào, ngày đăng ký cuối cùng sẽ nhận giá trị mặc định của kiểu DateTime là ngày 01/01/1900 là ngày thứ hai nên không thể thỏa mãn điều kiện là ngày nghỉ lể

TC6 Đường đi 8 27/11/2014 Không thuộc hình thức

nào

01/01/1900

4.1.4. Áp dụng kỹ thuật kiểm thử dòng dữ liệu

Dựa vào mã nguồn của bài toán và tiêu chí sinh kiểm thử All-p-uses/Some-c-uses để tiến hành sinh các đường đi từ đồ thị dòng dữ liệu sau.

Bảng 4.8 Quy ƣớc ký hiệu của các điều kiện trong sơ đồ DFG của bài toán 1

Điều kiện Điều kiện

là True

Điều kiện là False

c_intCorporateType

==(Int32)Common.CorporateActionType.MoneyDividend

C1 ~C1 c_intCorporateType==(Int32)Common.CorporateActionType.

AddListing

c_intCorporateType ==(Int32)Common.CorporateActionType. ChangeFreeFloat

C3 ~C3 checkHoliday(dtTemp)== true C4 ~C4

Hình 4.3 Sơ đồ dòng dữ liệu cho bài toán 1 – mã nguồn 1

Từ sơ đồ ta có số đường đi như sau: Path1: 1-2-3-8-9-8-10 Path2: 1-2-3-8-10 Path 3: 1-2-4-6-8-9-8-10 Path 4: 1-2-4-6-8-10 Path 5: 1-2-4-5-8-9-8-10 Path 6: 1-2-4-5-8-10 Path 7: 1-2-4-6-7-8-9-8-10 Path 8: 1-2-4-6-7-8-10 Tổng số đường đi là 8 .

Bảng 4.9 Các ca kiểm thử sinh ra theo kỹ thuật dòng dữ liệu với mã nguồn 1 Testcase Đƣờng đi Testcase Đƣờng đi

Dữ liệu đầu vào

Kết quả Ngày thực

hiện

Hình thức thực hiện quyền

TC1 Đường đi 1 24/11/2014 Trả cổ tức bằng tiền mặt 21/11/2014

TC2 Đường đi 2 27/11/2014 Trả cổ tức bằng tiền mặt 25/11/2014

Đường đi 3

Không thực thi được do nếu ngày thực hiện không thuộc hình thức nào, ngày đăng ký cuối cùng sẽ nhận giá trị mặc định của kiểu DateTime là ngày 01/01/1900 là ngày thứ hai nên không thể thỏa mãn điều kiện là ngày nghỉ lể

TC3 Đường đi 4 27/11/2014 Không thuộc hình thức

thực hiện quyền nào

01/01/1900

TC4 Đường đi 5 03/09/2014 Niêm yết bổ sung 01/09/2014

TC5 Đường đi 6 27/11/2014 Niêm yết bổ sung 26/11/2014

Đường đi 7

Không thực thi được do ngày thực hiện là ngày đăng ký cuối cùng, mà ngày thực hiện luôn là ngày làm việc (tức là không thuộc ngày nghỉ, lễ tết) nên ngày đăng ký cuối cùng cũng là ngày làm việc

TC6 Đường đi 8 27/11/2014 Thay đổi tỷ lệ FreeFloat 27/11/2014

Hình 4.4 Sơ đồ dòng dữ liệu cho bài toán 1 – mã nguồn 2

Từ sơ đồ ta có số đường đi như sau: Path1: 1-2-3-8-9-10 Path2: 1-2-3-8-10 Path 3: 1-2-4-6-8-9-10 Path 4: 1-2-4-6-8-10 Path 5: 1-2-4-5-8-9-10 Path 6: 1-2-4-5-8-10 Path 7: 1-2-4-6-7-8-9-10 Path 8: 1-2-4-6-7-8-10 Tổng số đường đi là 8 .

Ta có tescace được sinh ra từ đường đi như sau:

Bảng 4.10 Các ca kiểm thử sinh ra theo kỹ thuật dòng dữ liệu với mã nguồn 2 Testcase Đƣờng đi Testcase Đƣờng đi

Dữ liệu đầu vào

EO Ngày thực

hiện Hình thức thực hiện quyền

TC1 Đường đi 1 24/11/2014 Trả cổ tức bằng tiền mặt 21/11/2014

TC2 Đường đi 2 27/11/2014 Trả cổ tức bằng tiền mặt 25/11/2014

Đường đi 3

Không thực thi được do nếu ngày thực hiện không thuộc hình thức nào, ngày đăng ký cuối cùng sẽ nhận giá trị mặc định của kiểu DateTime là ngày

01/01/1900 là ngày thứ hai nên không thể thỏa mãn điều kiện là ngày nghỉ lể

TC3 Đường đi 4 27/11/2014 Không thuộc hình thức thực hiện quyền nào 01/01/1900

TC4 Đường đi 5 03/09/2014 Niêm yết bổ sung 01/09/2014

TC5 Đường đi 6 27/11/2014 Niêm yết bổ sung 26/11/2014

Đường đi 7

Không thực thi được do ngày thực hiện là ngày đăng ký cuối cùng, mà ngày thực hiện luôn là ngày làm việc (tức là không thuộc ngày nghỉ, lễ tết) nên ngày đăng ký cuối cùng cũng là ngày làm việc

TC6 Đường đi 8 27/11/2014 Thay đổi tỷ lệ FreeFloat 27/11/2014

4.1.5. Kết luận

Bảng 4.11 So sánh độ bao phủ của các kỹ thuật kiểm thử với mã nguồn 1 Kỹ thuật Phân lớp tƣơng Kỹ thuật Phân lớp tƣơng

đƣơng

Bảng quyết định

Dòng dữ liệu Dòng điều khiển

đƣơng Bảng quyết định 5/8 N/A 5/6 5/8 Dòng dữ liệu 100% 100% N/A 6/8 Dòng điều khiển 100% 100% 6/6 N/A

Bảng 4.12 So sánh độ bao phủ của các kỹ thuật kiểm thử với mã nguồn 2 Kỹ thuật Phân lớp tƣơng Kỹ thuật Phân lớp tƣơng

đƣơng Bảng quyết định Dòng dữ liệu Dòng điều khiển Phân lớp tƣơng đƣơng N/A 5/5 6/6 5/5 Bảng quyết định 5/8 N/A 5/6 4/6 Dòng dữ liệu 100% 100% N/A 6/6 Dòng điều khiển 6/8 4/5 6/6 N/A

Bảng 4.13 Thống kê số lỗi phát hiện đƣợc khi thực thi hai mã nguồn – bài toán 1 Kỹ thuật Mã nguồn Phân lớp tƣơng đƣơng Bảng quyết định Dòng dữ liệu Dòng điều khiển

Mã nguồn1 (đúng) 0 (lỗi) 0 (lỗi) 1 (lỗi) 1 (lỗi)

Mã nguồn 2 (sai) 2 (lỗi) 1 (lỗi) 1 (lỗi) 1 (lỗi)

Test case sinh lỗi TC6, TC7 TC3 TC6 TC3

Kết quả thực tế

(với trường hợp lỗi) 22/11/2014 22/11/2014 01/01/1900 01/01/1900

Nhận xét:

Kỹ thuật phân lớp tƣơng đƣơng:

So với kỹ thuật bảng quyết định: Từ các ca kiểm thử sinh ra bởi hai kỹ thuật này ta nhận thấy tất cả các ca kiểm thử sinh ra theo kỹ thuật phân lớp tương đương điều thỏa mãn các ca kiểm thử sinh ra theo kỹ thuật bảng quyết định . Do đó độ bao phủ của kỹ thuật này so với kỹ thuật bảng quyết định là: 5 / 5 .

Với mã nguồn 1:Thì các ca kiểm thử sinh ra theo kỹ thuật này đáp ứng được 8 ca kiểm thử sinh ra theo kỹ thuật kiểm thử dòng điều khiển. Do đó độ bao phủ của kỹ thuật này so với kỹ thuật dòng điều khiển là 8/8.

Với mã nguồn 2:Thì các ca kiểm thử sinh ra theo kỹ thuật này đáp ứng được 6 ca kiểm thử sinh ra theo kỹ thuật kiểm thử dòng điều khiển. Do đó độ bao phủ của kỹ thuật này so với kỹ thuật dòng điều khiển là 6/6.

So với kỹ thuật dòng dữ liệu: Ta có các ca kiểm thử sinh ra theo sơ đồ dòng dữ liệu cho mã nguồn 1 và mã nguồn 2 là như nhau. Do đó, các ca kiểm thử sinh ra theo kỹ thuật này đều bao gồm các ca kiểm thử sinh ra theo kỹ thuật dòng dữ liệu. Vậy, độ bao phủ là 6/6.

Kỹ thuật bảng quyết định:

So với kỹ thuật phân lớp tương đương: Ta có các ca kiểm thử sinh ra bởi kỹ thuật này chỉ thỏa mãn được 5 ca kiểm thử sinh ra bởi kỹ thuật phân lớp tương đương, mà không thỏa mãn được các ca kiểm thử TC1, TC6, TC8 . Do đó độ bao phủ của kỹ thuật này so với kỹ thuật phân lớp tương đương là: 5/8.

So với kỹ thuật dòng điều khiển:

Với mã nguồn 1: Ta có các ca kiểm thử sinh ra bởi kỹ thuật này thỏa mãn được 5 ca kiểm thử sinh ra bởi kỹ thuật dòng điều khiển, mà không thỏa mãn được 3 ca kiểm thử TC3, TC5 và TC8. Do đó bộ bao phủ của kỹ thuật này so với kỹ thuật dòng điều khiển là 5/8.

Với mã nguồn 2: Ta có các ca kiểm thử sinh ra bởi kỹ thuật này thỏa mãn được 4 ca kiểm thử sinh ra bởi kỹ thuật dòng điều khiển, mà không thỏa mãn được 2 ca kiểm thử là TC3 và TC6. Do đó bộ bao phủ của kỹ thuật này so với kỹ thuật dòng điều khiển là 4/6.

So với kỹ thuật dòng dữ liệu: Ta có các ca kiểm thử sinh ra bởi kỹ thuật này chỉ thỏa mãn 5 ca kiểm thử sinh ra theo kỹ thuật dòng dữ liệu, mà không thỏa mãn ca kiểm thử TC3. Do đó độ bao phủ của kỹ thuật bảng quyết định so với kỹ thuật dòng dữ liệu là 5/6.

Kỹ thuật dòng điều khiển:

Kỹ thuật dòng điều khiển áp dụng cho mã nguồn 1 so với kỹ thuật phân lớp tương đương và bảng quyết định: Ta có các ca kiểm thử sinh ra bởi kỹ thuật này đều thỏa mãn được tất cả các ca kiểm thử sinh ra bởi hai kỹ thuật phân lớp tương đương và bảng quyết định. Do đó độ bao phủ của kỹ thuật dòng điều khiển so với hai kỹ thuật phân lớp tương đương và bảng quyết định là 100%.

Kỹ thuật dòng điều khiển áp dụng cho mã nguồn 2 so với kỹ thuật phân lớp tương đương: Ta có các ca kiểm thử sinh ra bởi kỹ thuật này thỏa mãn được 6 ca kiểm thử sinh ra bởi hai kỹ thuật phân lớp tương đương gồm TC1, TC2, TC3, TC4, TC5, TC8 và không thỏa mãn được 2 test case là TC6, TC7. Do đó độ bao phủ của kỹ

Một phần của tài liệu (LUẬN văn THẠC sĩ) kiểm thử đơn vị cho hệ thống (Trang 40)