kiểm thử
Độ bao phủ là độ đo kiểm thử của một chương trình của một tập ca kiểm thử. Mức độ bao phủ của một bộ kiểm thử (tập các ca kiểm thử) được đo bằng tỷ lệ các thành phần thực sự được kiểm thử so với tổng thể sau khi đã thực hiện các ca kiểm thử. Độ bao phủ càng lớn thì độ tin cậy của bộ các ca kiểm thử càng cao. Độ đo này giúp kiểm soát và quản lý quá trình kiểm thử tốt hơn, với mục tiêu của quá trình kiểm thử là số ca kiểm thử tối thiểu nhưng đạt được độ bao phủ tối đa. Trong luận án có sử dụng độ bao phủ tương tranh và độ bao phủ lặp để sinh các kịch bản và dữ liệu kiểm thử tương ứng theo các độ bao phủ này. Ngồi ra, độ phân tích đột biến cũng được sử dụng để đo khả năng tìm lỗi của các kịch bản kiểm thử được sinh ra.
2.4.1 Độ bao phủ tương tranh
Sinh các kịch bản kiểm thử là bước tiên quyết trước khi sinh các ca kiểm thử. Việc sinh ra tất cả các đường dẫn kiểm thử là không thể cũng như không thể kiểm thử được tất cả các trường hợp với mọi dữ liệu kiểm thử vì nguồn lực kiểm thử có giới hạn. Vì vậy, các tiêu chuẩn bao phủ được đưa ra. Trong tính chất tương tranh của các ứng dụng, được thể hiện bởi toán tử song song, tuần tự yếu và các thông điệp bất đồng bộ trong biểu đồ tuần tự UML, có ba tiêu chuẩn bao phủ tương tranh [95, 93] như sau:
Bao phủ tương tranh yếu: các ca kiểm thử được sinh ra bao phủ chỉ một tuần tự khả thi của các tiến trình song song với khơng có sự đan xen giữa các thơng điệp trong các tiến trình song song đó.
Bao phủ tương tranh trung bình: các ca kiểm thử được sinh ra bao phủ tất cả các tuần tự khả thi của các tiến trình song song với khơng có sự đan
xen giữa các thơng điệp trong các tiến trình song song đó.
Bao phủ tương tranh mạnh: các ca kiểm thử được sinh ra bao phủ tất cả các tuần tự khả thi của các tiến trình song song có sự đan xen giữa các thơng điệp trong các tiến trình song song đó.
Rõ ràng, các tiêu chuẩn bao phủ tương tranh yêu cầu các kịch bản kiểm thử được sinh ra bao phủ ít nhất một tiến trình song song. Cả tiêu chuẩn bao phủ yếu và trung bình đều kiểm thử các thơng điệp và luồng điều khiển trong tiến trình song song theo cách tuần tự. Tiêu chuẩn bao phủ tương tranh mạnh có sự đan xen giữa các thông điệp trong các luồng điều khiển của các tiến trình song song, do vậy số lượng các kịch bản kiểm thử có thể rất lớn và khơng thực tiễn.
2.4.2 Độ bao phủ trong kiểm thử vòng lặp
Phương pháp sinh kiểm thử trong đồ thị dịng điều khiển khơng thể kiểm thử hết các vịng lặp xuất hiện trong các mơ hình. Lý do là các đường đi kiểm thử sinh ra từ đồ thị dòng điều khiển khơng thể chứa hết các vịng lặp. Trong thực tế, lỗi hay xảy ra ở các vịng lặp. Vì lý do này, chúng ta cần sinh các ca kiểm thử cho các vịng lặp nhằm giảm tỷ lệ lỗi của các mơ hình. Với mỗi mơ hình có vịng lặp, độ bao phủ trong kiểm thử vịng lặp có ba trường hợp sau:
Lặp đơn giản: việc sinh kiểm thử từ mơ hình mà các đường dẫn kiểm thử chỉ chứa đúng một vòng lặp (thân của vịng lặp khơng chứa vịng lặp khác).
Lặp liền kề: việc sinh kiểm thử từ mơ hình mà các đường dẫn kiểm thử chứa các lần lặp kế tiếp nhau.
Lặp lồng nhau: việc sinh kiểm thử từ mơ hình gồm các vịng lặp chứa các vòng lặp khác.
Trong nhiều cách tiếp cận [72, 65], việc sinh các đường dẫn kiểm thử chỉ được thực hiện tối đa một lần lặp nên rất khó để phát hiện các lỗi tiềm ẩn bên trong vịng lặp này. Các lỗi có thể xảy ra khi vịng lặp được thực hiện nhiều lần lặp. Để giải vấn đề này, chúng ta cần sinh thêm các ca kiểm thử tương ứng như sau:
Vòng lặp thực hiện 1 lần.
Vòng lặp thực hiện 2 lần.
Vòng lặp thực hiện k lần, 2< k < n−1, với n là số lần lặp tối đa.
Vòng lặp thực hiện n−1 lần.
Vòng lặp thực hiện n lần.
Vòng lặp thực hiện n+ 1 lần.
Trong một số trường hợp có thể khơng xác định được số lần lặp tối đa của các vòng lặp. Trong trường hợp này, chúng ta chỉ cần sinh bốn trường hợp kiểm thử đầu tiên. Tương tự, đa số các trường hợp chúng ta không thể sinh ca kiểm thử để vịng lặp thực hiện n+ 1 lần, vì số lần lặp tối đa là n. Với các mơ hình có các
vịng lặp liền kề, chúng ta tiến hành kiểm thử tuần tự từ trên xuống. Mỗi vòng lặp được kiểm thử bằng bảy ca kiểm thử như vịng lặp đơn giản (như đã mơ tả ở trên). Trong trường hợp các vòng lặp lồng nhau, chúng ta tiến hành kiểm thử tuần tự các vòng lặp theo thứ tự từ trong ra ngồi (mỗi vịng lặp cũng dùng bảy ca kiểm thử như trên). Như vậy, với các trường hợp tương ứng thì trong Phần 4.3.3 thuật toán sinh dữ liệu kiểm thử đối với vịng lặp sẽ được đưa ra.
2.4.3 Độ phân tích đột biến
Độ phân tích đột biến để đánh giá sự hiệu quả của các kỹ thuật kiểm thử phần mềm khác nhau [94]. Kiểm thử đột biến là kỹ thuật kiểm thử dựa trên lỗi khi giả thiết chắc chắn các loại lỗi cấy vào chương trình và sau đó thiết kế các ca kiểm thử với mục đích phát hiện các lỗi đó. Các lỗi được đưa vào chương trình bởi việc tạo một tập các phiên bản lỗi gọi là các đột biến. Những đột biến này được tạo ra từ chương trình gốc bởi việc áp dụng các tốn tử đột biến, mơ tả sự thay đổi vào chương trình gốc. Ca kiểm thử được sử dụng để thực thi những đột biến với mục đích gây nên những đột biến tạo ra kết quả đầu ra khơng chính xác. Độ đo đột biến (Mutation Score – MS) để đo chất lượng của một tập các ca kiểm thử theo công thức sau:
M S(p, t) = Nk
Từ cơng thức (2.1), trong đó: p là chương trình sẽ được cấy đột biến; t là bộ kiểm thử; Nk là số lượng các đột biến bị diệt; Nm là tổng số đột biến; Ne là số đột biến tương đương (đột biến tương đương là đột biến của chương trình, hoạt động hồn tồn giống chương trình gốc và cho ra kết quả giống với chương trình gốc trong mọi trường hợp kiểm thử). Toán tử đột biến là một luật được áp dụng vào chương trình để tạo ra các đột biến. Các tốn tử này được xác định bởi ngơn ngữ của chương trình và hệ thống đột biến được dùng để kiểm thử. Quy trình kiểm thử đột biến: Kiểm thử đột biến là một quy trình được lặp đi lặp lại để cải tiến dữ liệu kiểm thử đối với một chương trình và được chia thành các bước cơ bản [28] như sau:
Bước 1: Sinh đột biến (dùng công cụ sinh tự động hoặc sinh thủ cơng) từ chương trình.
Bước 2: Sinh các dữ liệu kiểm thử.
Bước 3: Thực hiện từng dữ liệu kiểm thử với chương trình gốc. Nếu kết quả đúng thì thực hiện bước tiếp theo. Trong trường hợp ngược lại thì phải chỉnh sửa lại chương trình và tiến hành kiểm thử lại.
Bước 4: Thực hiện từng dữ liệu kiểm thử với từng đột biến còn sống. Trường hợp đột biến bị diệt nếu kết quả ra khơng giống với chương trình gốc, hồn thành kiểm thử. Ngược lại, phân tích các đột biến nếu các đột biến sống sót được qua kiểm thử. Có hai khả năng: trường hợp đột biến không thể bị diệt nếu các đột biến là tương đương; trường hợp cịn lại có thể diệt các đột biến được nhưng các dữ liệu kiểm thử không đủ mạnh để diệt đột biến. Do đó, thực hiện với các dữ liệu kiểm thử khác và lặp lại Bước 1.
Vậy độ đo MS càng cao thì khả năng tìm lỗi càng lớn. MS để đo tính hiệu quả của các kỹ thuật kiểm thử. Trong cách tiếp cận này dùng MS đo các kịch bản kiểm thử và đánh giá phương pháp sinh các ca kiểm thử được đề xuất.