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ỹ thuật dòng điều khiển so với kỹ thuật phân lớp tương đương là 6/8. So với kỹ thuật bảng quyết định: 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ử là TC1, TC2, TC4, TC5 và không thỏa mãn được 1 ca kiểm thử TC3. Do đó, độ bao phủ là 4/5.
Kỹ thuật dòng điều khiển áp dụng cho mã nguồn 1và mã nguồn 2 so với kỹ thuật dòng dữ liệu: Các ca kiểm thử sinh ra bởi kỹ thuật này đều thỏa mãn tất cả các ca kiểm thử sinh ra bởi kỹ thuật dòng dữ liệu. Do đó độ bao phủ của kỹ thuật dòng điều khiển so với kỹ thuật dòng dữ liệu là 6/6.
Kỹ thuật dòng dữ liệu:
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 dữ liệu so với hai kỹ thuật phân lớp tương đương và bảng quyết định là 100%.
So với kỹ thuật dòng điều khiển áp dụng cho mã nguồn 1: Các ca kiểm thử sinh ra bởi kỹ thuật này chỉ thỏa mãn được 6 các 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à TC6 và TC8. Do đó độ bao phủ của kỹ thuật dòng dữ liệu so với kỹ thuật dòng điều khiển là 6/8.
So với kỹ thuật dòng điều khiển áp dụng cho mã nguồn 2: Các ca kiểm thử sinh ra bởi kỹ thuật này đều thỏa mãn được 6 các ca kiểm thử sinh ra bởi kỹ thuật dòng điều khiển. Do đó độ bao phủ của kỹ thuật dòng dữ liệu so với kỹ thuật dòng điều khiển là 6/6
Kết luận
Ta nhận thấy đối với việc kiểm thử sinh theo đặc tả yêu cầu bài toán thì việc áp dụng kỹ thuật bảng quyết định chưa xử lý triệt để được các trường hợp phát sinh lỗi với dữ liệu không nằm trong miền đúng, các trường hợp mà việc kiểm tra dữ liệu lặp lại nhiều lần. Do đó, ta sẽ áp dụng kỹ thuật phân lớp tương đương để kiểm thử cho bài toán một.
Việc sinh kiểm thử áp dụng theo đặc tả yêu cầu vẫn chưa đảm bảo việc phát sinh lỗi cho phần mềm, do đối với mỗi lập trình viên thì việc sinh mã lệnh cho các đặc tả là khác nhau. Từ phân tích trên với bài toán 1 áp dụng với hai mã nguồn khác nhau, ta nhận thấy cần kết hợp phương pháp kiểm thử cấu trúc.
Từ hai bảng phân tích (Bảng 10, 11) ta có số lỗi tìm được theo kỹ thuật kiểm thử dòng điều khiển với mã nguồn 1 bao phủ toàn bộ số lỗi tìm được với kỹ thuật kiểm thử phân lớp tương đương. Số lỗi tìm được theo kỹ thuật kiểm thử dòng điều khiển với mã nguồn 2 chỉ bao phủ được 6/8 lỗi so với kỹ thuật phân lớp tương đương. Với kỹ thuật kiểm thử dòng dữ liệu, sẽ không tìm được lỗi phát sinh khi tại vòng lặp, do đó không bao phủ được hết các lỗi so với kỹ thuật phân lớp tương đương. Do đó, ta sẽ chọn kỹ thuật kiểm thử dòng điều khiển để kiểm thử hàm với bài toán 1.
4.2. Bài toán 2
Phát biểu bài toán: Xác định tỷ lệ FreeFloat của chí số theo Bảng áp dụng dải tỷ lệ tính chỉ số.
Mô tả bài toán:Hệ số Free float của chỉ số sẽ được xác định như sau:
Nếu tỷ lệ thực của chỉ số có giá trị <5 thì kết quả là không đủ điều kiện đưa vào các chỉ số HNX.
Nếu tỷ lệ thực của chỉ số có giá trị >=5 và <= 15 thì tỷ lệ free float của chỉ số là tỷ lệ thực của chỉ số.
Nếu tỷ lệ thực của chỉ số có giá trị > 15 và <= 20 thì tỷ lệ free float của chỉ số là 20%.
Nếu tỷ lệ thực của chỉ số có giá trị > 20 và <= 30 thì tỷ lệ free float của chỉ số là 30%.
Nếu tỷ lệ thực của chỉ số có giá trị > 30 và <= 40 thì tỷ lệ free float của chỉ số là 40%.
Nếu tỷ lệ thực của chỉ số có giá trị > 40 và <= 50 thì tỷ lệ free float của chỉ số là 50%.
Nếu tỷ lệ thực của chỉ số có giá trị > 50 và <= 75 thì tỷ lệ free float của chỉ số là 75%.
Nếu tỷ lệ thực của chỉ số có giá trị > 75 và <= 100 thì tỷ lệ free float của chỉ số là 50%.
Bảng 4.14 Bảng hệ số tỷ lệ free float của chỉ số HNXFree float chính Free float chính
xác Dải Hệ số Free float
< 5% Không đủ điều kiện để đưa vào các chỉ số HNX > 5% to 15% Tỷ lệ thực** > 15% to 20% 20% > 20% to 30% 30% > 30% to 40% 40% > 40% to 50% 50% > 50% to 75% 75% > 75% to 100% 100%
Từ mô tả bài toán ta xác định dữ liệu nhƣ sau:
Dữ liệu đầu vào: Tỷ lệ thực tính được của chỉ số.
Dữ liệu đầu ra là: Tỷ lệ Free float của chỉ số tính theo Bảng dải hệ số free float của chỉ số.
Từ phân tích bài toán theo đặc tả yêu cầu ta áp dụng các kỹ thuật kiểm thử để xây dựng ca kiểm thử như sau:
4.2.1. Áp dụng kỹ thuật phân lớp tương đương
Ta sẽ chia các miền dữ liệu theo kỹ thuật tương đương dựa vào các kết quả đầu ra của dữ liệu như sau:
Miền 1 là các dữ liệu đầu vào là tỷ số thực của chỉ số < 5 % hoặc giá trị >100% đều không thỏa mãn điều kiện tính chỉ số.
Miền 2 là các dữ liệu đầu vào là tỷ số thực của chỉ số nằm trong khoảng từ 5 đến 15. Với miền này, ta sẽ có 2 giá trị biên là 5 và 15.
Miền 3 là các dữ liệu đầu vào là tỷ số thực của chỉ số nằm trong khoảng từ 15 đến 20. Với miền này, ta sẽ có 1 giá trị biên là 20.
Miền 4 là các dữ liệu đầu vào là tỷ số thực của chỉ số nằm trong khoảng từ 20 đến 30. Với miền này, ta sẽ có 1 giá trị biên là 30.
Miền 5 là các dữ liệu đầu vào là tỷ số thực của chỉ số nằm trong khoảng từ 30 đến 40. Với miền này, ta sẽ có 1 giá trị biên là 40.
Miền 6 là các dữ liệu đầu vào là tỷ số thực của chỉ số nằm trong khoảng từ 40 đến 50. Với miền này, ta sẽ có 1 giá trị biên là 50.
Miền 7 là các dữ liệu đầu vào là tỷ số thực của chỉ số nằm trong khoảng từ 50 đến 75. Với miền này, ta sẽ có 1 giá trị biên là 75.
Miền 8 là các dữ liệu đầu vào là tỷ số thực của chỉ số nằm trong khoảng từ 75 đến 100. Với miền này, ta sẽ có 1 giá trị biên là 100.
Do đó ta sẽ có 8 miền tương đương và 8 giá trị tại biên với kỹ thuật phân lớp
tương đương.
Bảng 4.15 Các ca kiểm thử sinh ra theo kỹ thuật phân lớp tƣơng đƣơng
Test case Dữ liệu đầu vào (Tỷ lệ thực) EO
TC1 1% Không đủ điều kiện đưa
vào chỉ số TC2 5% 5% TC3 12% 12% TC4 15% 15% TC5 17% 20% TC6 20% 20% TC7 25% 30% TC8 30% 30% TC9 35% 40% TC10 40% 40% TC11 45% 50% TC12 50% 50% TC13 60% 75% TC14 75% 75% TC15 80% 100% TC16 100% 100%
TC17 190% Không đủ điều kiện đưa vào chỉ số
4.2.2. Áp dụng kỹ thuật bảng quyết định
Ta sẽ xây dựng ca kiểm thử dựa trên các mô tả về yêu cầu như sau:
Nếu tỷ lệ thực của chỉ số có giá trị < 5 thì kết quả là không đủ điều kiện đưa vào các chỉ số HNX.
Nếu tỷ lệ thực của chỉ số có giá trị >= 5 và <= 15 thì tỷ lệ free float của chỉ số là tỷ lệ thực của chỉ số.
Nếu tỷ lệ thực của chỉ số có giá trị > 15 và <= 20 thì tỷ lệ free float của chỉ số là 20%.
Nếu tỷ lệ thực của chỉ số có giá trị > 20 và <= 30 thì tỷ lệ free float của chỉ số là 30%.
Nếu tỷ lệ thực của chỉ số có giá trị > 30 và <= 40 thì tỷ lệ free float của chỉ số là 40%.
Nếu tỷ lệ thực của chỉ số có giá trị > 40 và <= 50 thì tỷ lệ free float của chỉ số là 50%.
Nếu tỷ lệ thực của chỉ số có giá trị > 50 và <= 75 thì tỷ lệ free float của chỉ số là 75%.
Nếu tỷ lệ thực của chỉ số có giá trị > 75 và <= 100 thì tỷ lệ free float của chỉ số là 50%.
Nhận thấy với số lượng mô tả như trên, ta sẽ có 8 điều kiện đầu vào, tuy nhiên các điều kiện lại có tính loại trừ lần nhau. Do đó, số quy tắc sinh ra tương ứng với điều kiện đầu đi theo nhánh True – False là 8 quy tắc, cộng với 1 quy tắc mà tại đó các điều kiện đều nhận kết quả False. Do đó, tổng số quy tắc sinh ra tại bảng quyết định sẽ là 9
quy tắc.
Bảng 4.16 Các ca kiểm thử sinh ra theo kỹ thuật bảng quyết định
Test case Dữ liệu đầu vào (Tỷ lệ thực) EO
TC1 1% Không đủ điều kiện đưa
vào chỉ số TC2 15% 15% TC3 20% 20% TC4 30% 30% TC5 40% 40% TC6 50% 50% TC7 75% 75% TC8 100% 100%
TC9 190% Không thỏa mãn điều
kiện nào
4.2.3. Áp dụng kỹ thuật 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 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.
Mã nguồn 1:
public decimal get_FreeFloatRate(decimal rate)
{
Decimal _ FREE_FLOAT_RATE=0;
rate = Math.Round(rate, 2);
//Thuc hien lay can tren - Khong thuoc TH Khong du dk
dua vao chi so va TH Gia tri thuc
if ( rate < 5)
{
_ FREE_FLOAT_RATE=-1;//Gia tri khong xac dinh
}
else if (rate > 5 && rate <= 15) {
_ FREE_FLOAT_RATE = rate; }
else if (rate >15 && rate <= 20) {
_ FREE_FLOAT_RATE = 20; }
else if (rate > 20 && rate <= 30) {
_ FREE_FLOAT_RATE = 30; }
else if (rate > 30 && rate <= 40) {
_ FREE_FLOAT_RATE = 40; }
else if (rate > 40 && rate <=50) {
_ FREE_FLOAT_RATE = 50; }
else if (rate > 50 && rate <= 75) {
_ FREE_FLOAT_RATE = 75; }
else if (rate > 75 && rate <= 100) { _ FREE_FLOAT_RATE = 100; } return _ FREE_FLOAT_RATE; } Mã nguồn 2:
{
Decimal _ FREE_FLOAT_RATE=0;
rate = Math.Round(rate, 2);
//Thuc hien lay can tren - Khong thuoc TH Khong du dk
dua vao chi so va TH Gia tri thuc
if ( rate < 5)
{
_ FREE_FLOAT_RATE=-1;//Gia tri khong xac dinh
}
else if (rate > 5 && rate < 15) {
_ FREE_FLOAT_RATE = rate; }
else if (rate >15 && rate < 20) {
_ FREE_FLOAT_RATE = 20; }
else if (rate > 20 && rate < 30) {
_ FREE_FLOAT_RATE = 30; }
else if (rate > 30 && rate < 40) {
_ FREE_FLOAT_RATE = 40; }
else if (rate > 40 && rate <50) {
_ FREE_FLOAT_RATE = 50; }
else if (rate > 50 && rate < 75) {
_ FREE_FLOAT_RATE = 75; }
else if (rate > 75 && rate < 100) { _ FREE_FLOAT_RATE = 100; } return _ FREE_FLOAT_RATE; } Với mã nguồn 1:
Bảng 4.17 Quy ƣớc các điều kiện, hành động trong sơ đồ CFG của bài toán 2 – mã nguồn 1
STT Điều kiện/ Hành động Quy
ƣớc Hành động
Quy ƣớc
1. rate < 5 C1 _ FREE_FLOAT_RATE =-1; A1
2. rate >= 5 && rate <= 15 C2 _ FREE_FLOAT_RATE = rate; A 2 3. rate > 15 && rate <= 20 C3 _FREE_FLOAT_RATE = 20 ; A 3 4. rate > 20 && rate <= 30 C4 _ FREE_FLOAT_RATE= 30 ; A 4 5. rate > 30 && rate <= 40 C5 _ FREE_FLOAT_RATE= 40 ; A 5 6. rate > 40 && rate <= 50 C 6 _ FREE_FLOAT_RATE= 50 ; A 6 7. rate > 50 && rate <= 75 C 7 _ FREE_FLOAT_RATE= 75 ; A 7 8. rate > 75 && rate <=
100
C 8 _ FREE_FLOAT_RATE= 100 ; A 8