Phần này đề cập đến các chiến lƣợc giúp cải thiện về mức độ thời gian cũng nhƣ độ phức tạp trong quá trình áp dụng kiểm thử miền với các bài toán thực tế.
Các chiến lƣợc áp dụng cho kiểm thử miền đƣợc đƣa ra là khá hoàn thiện và giúp ngƣời kiểm thử có thể dễ dàng kiểm soát các trƣờng hợp có khả năng phát sinh lỗi trong một chƣơng trình. Tuy nhiên, có một đặc điểm là kiểm thử miền sẽ phụ thuộc vào số lƣợng các biến quan hệ trong chƣơng trình để xét miền đầu vào đặt trong một hệ tọa độ không gian tƣơng ứng 2 chiều, 3 chiều hay 4 chiều...
Vấn đề đặt ra ở đây là, khi số lƣợng biến đầu vào của chƣơng trình ở mức thấp từ 3 biến trờ xuống thì việc xác định các miền con của chƣơng trình chƣa phức tạp lắm. Tuy nhiên nếu số lƣợng biến lớn hơn thì đòi hòi ngƣời lập trình cần phân tích các miền cho dữ liệu đầu vào trong hệ tọa độ 4 chiều, 5 chiều... Điều này là vô cùng khó khăn và có vẻ không khả thi cho lắm. Do đó ta cần tìm một số phƣơng pháp để kết hợp với kiểm thử miền nhằm đem lại hiệu suất cao nhất cho quá trình kiểm thử phần mềm.
Kỹ thuật nhóm biến:
Ý tƣởng của kỹ thuật:
- Các biến đầu vào đƣợc phân loại và nhóm lại với nhau sao cho các biến có quan hệ với nhau vào chung một nhóm.
- Trƣờng hợp mọi biến đều có quan hệ với nhau có thể cân nhắc lựa chọn tách biến đơn giản nhất (thực hiện ít các phép toán và có miền đầu vào đơn giản nhất) ra để đơn giản hóa chƣơng trình.
- Tiến hành kiểm thử cho từng nhóm một.
- Danh sách các ca kiểm thử chung cho cả chƣơng trình là tổ hợp các ca kiểm thử của các nhóm con.
Để kiểm tra tính thuận tiện của việc áp dụng phƣơng pháp cải tiến này và việc đảm bảo độ phủ của bộ ca kiểm thử sinh ra so với phƣơng pháp kiểm thử miền cơ bản. Ta đi xét một ví dụ đơn giản sau:
*) Ví dụ 06: Xây dựng một mô-đun xét trúng tuyển cấp 3 cho học sinh. Nguyên tắc
chung nhƣ sau:
- Điểm thi bao gồm hai môn Toán và Văn, trong đó điểm Toán lấy hệ số 3, điểm Văn lấy hệ số 2;
- Điểm thi nhập vào là số nguyên ≤ 10, điểm liệt ≤ 2;
- Mỗi học sinh đƣợc cộng điểm từ kết quả thi nghề tốt nghiệp cấp 2. Điểm thi nghề đạt loại giỏi (8-10) đƣợc cộng 1 điểm;
- Điểm trung bình ≥ 6 đƣợc đỗ trúng tuyển cấp 3.
Từ yêu cầu bài toán ta xây dựng đƣợc mã nguồn cho chƣơng trình theo ngôn ngữ C# nhƣ sau:
Bảng 2.1: Chương trình mô tả Ví dụ 06
public string xettuyen(float toan, float van)
{ string tb = ""; float x = toan; float y = van; float z = diemnghe; if (x < 0 || x > 10) { tb = "Điểm toán không hợp lệ"; }
else{
if (y < 0 || y > 10) { tb = "Điểm văn không hợp lệ"; } else {
if (x <= 2) { tb = "Điểm toán bị liệt"; } else
{
if (y <= 2) { tb = "Điểm văn bị liệt"; } else { if (z > 2 && z < 8) { if (((3 * x + 2 * y) / 5) >= 6) tb = "Đủ điểm trúng tuyển"; else {
tb = "chƣa đủ điểm trúng tuyển"; } } else { if (((3 * x + 2 * y) / 5) + 1 >= 6) tb = "Đủ điểm trúng tuyển"; else {
tb = "chƣa đủ điểm trúng tuyển"; } } } } } } return tb; }
+) Tạo các ca kiểm thử theo phương pháp cũ của kiểm thử miền:
Theo định hƣớng của phƣơng pháp cũ ta sẽ xây dựng một biểu đồ dòng điều khiển của chƣơng trình trên, từ đó sẽ xây dựng đƣợc các miền không gian
Từ Hình 2.9 ta xây dựng đƣợc các miền dữ liệu đầu vào tƣơng ứng trong không gian 3 chiều (có 3 biến đầu vào là z, y, z) nhƣ Hình 2.10:
Hình 2.10: Các miền đầu vào của chương trình trong Ví dụ 06 khi điểm nghề <8.
Chú ý: Để dễ hình dung ta sẽ chỉ xét trong phạm vi khi học sinh có điểm nghề <8. Theo Hình 2.10, các miền đầu vào cho kết quả ”Đủ điểm trúng tuyển” trong trƣờng hợp này sẽ tƣơng ứng với khối ABCDA’B’C’D’. Trong không gian ba chiều ta sẽ tƣơng tự xét các mặt biên của khối đó. Với khối ABCD ta có các ca kiểm thử tƣơng ứng nhƣ trong Bảng 2.2.
Bảng 2.2: Các ca kiểm thử cho kết quả tốt nghiệp trong trường hợp điểm nghề <8.
STT Ca kiểm thử
1 A(X2,Y1,Z1) 2 B(X2,Y1,Z2) 3 C(X2,Y2,Z2)
4 D(X2,Y2,Z1) 5 E(X2,Y3,Z3)
Từ hình 2.10 ta thấy việc phân tích để tiến hành kiểm thử trên các miền đầu vào bây giờ sẽ đƣợc tiến hành trong không gian 3 chiều trở nên rất phức tạp đòi hỏi tốn một chi phí về thời gian rất lớn và yêu cầu chuyên gia có tƣ duy trừu tƣợng tốt mới có thể dể dàng thực hiện đƣợc.
+) Tạo các ca kiểm thử theo phƣơng pháp cải tiến:
Bƣớc 1: Xây dựng bảng quan hệ tƣơng tác giữa các biến thông qua các lệnh trong chƣơng trình
Bảng 2.3: Quan hệ tương tác giữa các biến của chương trình.
Toán(X) Văn(Y) Nghề(Z) X<0 || X>10 có Y<0 || Y>10 có X<=2 có Y<=2 có Z<8 có ((3 * x + 2 * y) / 5) >= 6 có có ((3 * x + 2 * y) / 5) +1 >= 6 có có
Từ Bảng 2.3 ta thấy có biến Z (điểm nghề) là không có mối quan hệ tƣơng tác trực tiếp với hai biến X (Toán) và Y (Văn). Vậy ta tách riêng để kiểm thử hai nhóm: Nhóm 1 gồm biến X, biến Y và các lệnh tƣơng tác với chúng. Nhóm 2 gồm biến Z và các lệnh tƣơng tác với nó.
Bƣớc 2: Tiến hành xây dựng các ca kiểm thử cho hai nhóm biến:
Nhóm 1: Biến X, Y
Với biến X và Y ta cũng chi ra làm hai trƣờng hợp, tuy nhiên theo tinh thần chung từ đầu ta sẽ chỉ xét trƣờng hợp thỏa mãn với điểm nghề <8. Ta có đồ thì mô tả miền dữ liệu đầu vào tƣơng ứng trong không gian hai chiều cho biến X và Y nhƣ trong Hình 2.11:
Hình 2.11: Các miền đầu vào của chương trình xét với hai biến X và Y trong Ví dụ 06 khi điểm nghề <8.
Xét với biên AB ta sẽ có đƣợc 3 ca kiểm thử nhƣ trong Bảng 2.4:
Bảng 2.4: Các ca kiểm thử cho kết quả tốt nghiệp trong trường hợp điểm nghề <8 với hai biến X và Y. STT Ca kiểm thử 1 A(X2,Y1) 2 B(X2,Y2) 3 E(X2,Y3) Nhóm 2: Biến Z:
Hình 2.12: Các miền đầu vào của chương trình xét với biến Z trong Ví dụ 06 khi điểm nghề <8.
Khi đó ta sẽ có đƣợc danh sách các ca kiểm thử nhƣ trong Bảng 2.5:
Bảng 2.5: Các ca kiểm thử cho kết quả tốt nghiệp trong trường hợp điểm nghề <8 với biến Z.
STT Ca kiểm thử
1 A(Z1) 2 B(Z2) 3 C(Z3)
Bƣớc 3: Tổ hợp hai nhóm các ca kiểm thử để có danh sách các ca kiểm thử cho chƣơng trình với trƣờng hợp biên AB khi điểm nghề <8:
Bảng 2.6: Các ca kiểm thử cho kết quả tốt nghiệp trong trường hợp điểm nghề <8 với phương pháp mới. STT Ca kiểm thử 1 A(X2,Y1,Z1) 2 B(X2,Y2,Z1) 3 C(X2,Y3,Z1) 4 D(X2,Y1,Z2) 5 E(X2,Y2,Z2) 6 F(X2,Y3,Z2) 7 G(X2,Y1,Z3) 8 H(X2,Y2,Z3) 9 I(X2,Y3,Z3)
So sánh Bảng 2.2 và Bảng 2.6 ta thấy các ca kiểm thử bôi đậm trong Bảng 2.6 trùng với các ca kiểm thử sinh ra theo phƣơng pháp cũ trong Bảng 2.2. Vậy các ca kiểm thử mới sinh ra theo phƣơng pháp này hoàn toàn bao phủ đƣợc các ca kiểm thử sinh ra theo phƣơng pháp cũ của kiểm thử miền.
+) Kết luận:
Với phƣơng pháp mới ta có các ƣu điểm và nhƣợc điểm nhƣ sau:
Ƣu điểm: Dễ dàng trong khâu phân tích, không đòi hỏi ngƣời phân tích phải là chuyên gia và có tƣ duy trừu tƣợng tốt.
Nhƣợc điểm: Số lƣợng các ca kiểm thử sinh ra nhiều hơn so với phƣơng pháp cũ. Do đó cần cải tiến hơn nữa để việc phân tích nhóm các biến là tốt nhất.
Chƣơng 3: THỰC NGHIỆM KIỂM THỬ MIỀN
Dựa vào các kết quả đã nghiên cứu trong các chƣơng trƣớc. Trong Chƣơng 3 tiến hành thực nghiệm với một chƣơng trình mô tả đơn giản. Từ đặc tả ban đầu xây dựng một đoạn code (có chứa lỗi chƣơng trình). Sau đó dựa trên đoạn code ban đầu này ta tiến hành xây dựng các ca kiểm thử theo phƣơng pháp kiểm thử miền và phƣơng pháp kiểm thử dòng điều khiển, kết hợp với các đặc tả chƣơng trình để đƣa ra các kết quả dự kiến cho các ca kiểm thử và tiến hành kiểm thử với chƣơng trình đƣợc xây dựng từ đoạn code trên để so sánh hai Kết quả đầu ra dự kiến và Kết quả đầu ra thực tế. Từ đó đánh giá đƣợc khả năng phát hiện lỗi của các ca kiểm thử theo hai phƣơng pháp.