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

Một phần của tài liệu Kiểm thử đơn vị cho hệ thống (Trang 40 - 46)

Á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 (adsbygoogle = window.adsbygoogle || []).push({});

_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

Dữ liệu đầu vào Kết quả mong đợi Ngày thực (adsbygoogle = window.adsbygoogle || []).push({});

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

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 (adsbygoogle = window.adsbygoogle || []).push({});

Đườ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

Một phần của tài liệu Kiểm thử đơn vị cho hệ thống (Trang 40 - 46)