Á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
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
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