Luận văn thạc sĩ: Tối ưu hóa kiểm thử phần mềm qua sinh mẫu và khoanh vùng lỗi

Luận văn thạc sĩ nghiên cứu máy tính kết hợp các phương pháp sinh mẫu thử tự động và khoanh vùng lỗi để tăng hiệu quả trong quá, khảo sát thực trạng, phân tích nguyên nhân, đề

Trường đại học

Đại học Quốc gia TP. HCM

Chuyên ngành

Khoa học máy tính

Người đăng

Ẩn danh

Thể loại

luận văn thạc sĩ

2014

74
4
0

Phí lưu trữ

30 Point

Tóm tắt

I. Tổng quan về kiểm thử phần mềm

Phần mềm đóng vai trò thiết yếu trong nhiều lĩnh vực, từ kinh tế đến giáo dục. Do đó, việc đảm bảo chất lượng phần mềm là vô cùng quan trọng. Kiểm thử phần mềm (kiểm thử phần mềm) được thực hiện để phát hiện lỗi và đảm bảo phần mềm hoạt động đúng theo yêu cầu. Quy trình này thường bao gồm nhiều giai đoạn như kiểm thử đơn vị, kiểm thử tích hợp, và kiểm thử hệ thống. Tuy nhiên, kiểm thử thủ công thường tốn nhiều thời gian và công sức. Do đó, việc áp dụng các phương pháp tự động hóa trong kiểm thử phần mềm trở nên cần thiết. Việc sử dụng các phương pháp sinh mẫu thử tự động giúp giảm thiểu thời gian và công sức cho quy trình này.

1.1. Quy trình kiểm thử phần mềm

Quy trình kiểm thử phần mềm truyền thống yêu cầu nhân viên kiểm thử tạo ra các mẫu thử. Mỗi mẫu thử bao gồm dữ liệu đầu vào và giá trị đầu ra mong đợi. Nếu giá trị đầu ra không khớp với mong đợi, lỗi được xác định. Tuy nhiên, việc này đòi hỏi một bộ mẫu thử lớn và phức tạp, dẫn đến việc kiểm thử phần mềm chiếm hơn 50% thời gian phát triển phần mềm. Để tối ưu hóa quy trình kiểm thử, nhiều nghiên cứu đã được thực hiện nhằm phát triển các hệ thống tự động hóa sinh mẫu thử, giúp giảm thiểu khối lượng công việc cho nhân viên kiểm thử.

II. Phương pháp sinh mẫu thử tự động

Các phương pháp sinh mẫu thử tự động là một trong những giải pháp quan trọng để nâng cao hiệu quả kiểm thử phần mềm. Những phương pháp này sử dụng các thuật toán để tự động tạo ra các mẫu thử dựa trên đặc tả chức năng hoặc cấu trúc của phần mềm. Các kỹ thuật như tìm kiếm ngẫu nhiên, tìm kiếm bằng giải thuật di truyền hay giải thuật leo đồi được áp dụng để tối ưu hóa quá trình sinh mẫu. Việc sinh mẫu thử tự động không chỉ giúp tiết kiệm thời gian mà còn đảm bảo rằng các mẫu thử được tạo ra là đa dạng và có khả năng phát hiện lỗi cao.

2.1. Kỹ thuật tìm kiếm trong sinh mẫu

Các kỹ thuật tìm kiếm trong sinh mẫu thử tự động bao gồm tìm kiếm ngẫu nhiên, tìm kiếm bằng giải thuật leo đồi đơn giản và tìm kiếm bằng giải thuật di truyền. Mỗi kỹ thuật có những ưu nhược điểm riêng, nhưng đều hướng đến mục tiêu tạo ra các mẫu thử có độ bao phủ cao và khả năng phát hiện lỗi tốt. Việc áp dụng các kỹ thuật này giúp tối ưu hóa quy trình kiểm thử, giảm thiểu thời gian và tăng cường hiệu quả phát hiện lỗi trong phần mềm.

III. Khoanh vùng lỗi trong phần mềm

Khoanh vùng lỗi là một kỹ thuật quan trọng trong quy trình phát hiện và sửa lỗi phần mềm. Kỹ thuật này dựa trên thông tin thu thập được trong quá trình thực thi các mẫu thử để xác định vị trí lỗi trong mã nguồn. Các phương pháp khoanh vùng lỗi như khoanh vùng dựa trên mô hình, chứng minh và phổ được áp dụng để đưa ra đánh giá về khả năng gây ra lỗi của từng thành phần trong chương trình. Việc áp dụng các kỹ thuật khoanh vùng lỗi giúp lập trình viên nhanh chóng xác định và sửa chữa lỗi, từ đó nâng cao chất lượng phần mềm.

3.1. Kỹ thuật khoanh vùng lỗi

Các kỹ thuật khoanh vùng lỗi dựa trên mô hình và chứng minh giúp lập trình viên xác định vị trí lỗi chính xác hơn. Thông qua việc phân tích kết quả thực thi, các kỹ thuật này có thể đưa ra danh sách các thành phần khả nghi, từ đó giúp lập trình viên tập trung vào những phần cần kiểm tra kỹ lưỡng hơn. Kỹ thuật khoanh vùng lỗi không chỉ hỗ trợ trong việc phát hiện lỗi mà còn giúp cải thiện quy trình phát triển phần mềm tổng thể.

IV. Kết hợp giữa sinh mẫu thử tự động và khoanh vùng lỗi

Việc kết hợp giữa phương pháp sinh mẫu thử tự động và khoanh vùng lỗi là một bước tiến quan trọng trong việc tối ưu hóa quy trình kiểm thử phần mềm. Nghiên cứu cho thấy rằng mẫu thử được sinh ra tự động có thể hỗ trợ tốt cho các phương pháp khoanh vùng lỗi, giúp xác định lỗi nhanh chóng và hiệu quả hơn. Điều này không chỉ nâng cao hiệu quả kiểm thử mà còn giảm thiểu thời gian và công sức cần thiết cho việc sửa lỗi. Việc tạo ra cầu nối giữa hai lĩnh vực này sẽ mở ra nhiều cơ hội mới cho nghiên cứu và ứng dụng trong ngành công nghiệp phần mềm.

4.1. Đánh giá và ứng dụng thực tiễn

Đánh giá khả năng kết hợp giữa sinh mẫu thử tự động và khoanh vùng lỗi cho thấy sự cải thiện rõ rệt trong quy trình phát hiện lỗi. Các phương pháp khoanh vùng lỗi có thể sử dụng các mẫu thử tự động để tăng cường độ chính xác trong việc xác định lỗi. Ứng dụng thực tiễn của nghiên cứu này không chỉ giúp các lập trình viên trong việc sửa lỗi mà còn tạo ra một công cụ hỗ trợ học lập trình hiệu quả cho sinh viên, giúp họ rèn luyện kỹ năng lập trình một cách độc lập.

07/01/2025

Trích đoạn nội dung tài liệu

Chương 1, kiểm thử phần mềm là một bước quan trọng trong quy trình phát triển phần mềm. Trong lĩnh vực kiểm thử phần mềm, các phương pháp kiểm thử thường được chia làm hai loại lớn [2]: • Kiểm thử hộp đen (black box testing): Trong phương pháp kiểm thử hộp đen, kiểm thử viên tiến hành việc xây dựng mẫu thử dựa vào đặc tả về yêu cầu chức năng của chương trình (thường được trình bày dưới dạng ngôn ngữ tự nhiên) chứ không cần dựa vào mã nguồn của chương trình. • Kiểm thử hộp trắng (white box testing): Ngược lại với kiểm thử hộp đen, trong kiểm thử hộp trắng, kiểm thử viên phải dựa vào mã nguồn của chương trình, nghĩa là dựa vào việc chương trình đã được viết như thế nào để xây dựng mẫu thử. Do kiểm thử hộp trắng phải dựa vào mã nguồn của chương trình nên thường đòi hỏi kiểm thử viên phải có kĩ năng về lập trình để có thể hiểu được chương trình đang được kiểm thử.

Điều này ngược lại với kiểm thử hộp đen do trong phương pháp này kiểm thử viên chỉ cần dựa vào đặc tả chức năng của chương trình để xây dựng bộ mẫu thử. Bên cạnh đó, do yêu cầu phải hiểu được mã nguồn chương trình nên việc kiểm thử hộp trắng thường mất nhiều thời gian và công sức hơn so với kiểm thử hộp đen (đối với cùng cấp độ kiểm thử). Điều này dẫn đến việc kiểm thử hộp trắng thường chỉ thích hợp cho giai đoạn kiểm thử đơn vị trong quy trình phát triển phần mềm. Trong khi đó phương pháp kiểm thử hộp đen có thể áp dụng cho nhiều cấp độ khác nhau, từ kiểm thử đơn vị đến kiểm thử hệ thống.

Tuy vậy, kiểm thử hộp trắng lại có ưu điểm là việc 9 Chương 2. Sinh mẫu thử tự động 10 kiểm thử được tiến hành kĩ lưỡng hơn và do đó phát hiện được nhiều lỗi hơn so với kiểm thử hộp đen. Các phương pháp kiểm thử hộp trắng lại được chia thành: • Kiểm thử dòng điều khiển (control flow testing): Là kiểm thử giải thuật chức năng của chương trình. Phương pháp này dùng để kiểm tra xem chương trình có thực thi đúng chức năng được đưa ra trong bản đặc tả chương trình hay không.

• Kiểm thử dòng dữ liệu (data flow testing): Là kiểm thử đời sống của từng biến dữ liệu được dùng trong chương trình. Phương pháp này được dùng để kiểm tra xem có lỗi trong quá trình sử dụng biến của chương trình hay không. Các lỗi thường gặp bao gồm: truy xuất biến chưa được khởi tạo, khai báo biến nhưng không sử dụng,. Do mục tiêu của đề tài này muốn khảo sát khả năng kết hợp các giải thuật sinh mẫu thử tự động với các kĩ thuật khoanh vùng lỗi và thực tế là các giải thuật sinh mẫu thử tự động tập trung nhiều vào việc kiểm thử dòng điều khiển trong kiểm thử hộp trắng nên phần tiếp theo sẽ trình bày chi tiết về nội dung này.2 Kiểm thử dòng điều khiển Trong kiểm thử dòng điều khiển có một số khái niệm như sau: • Đồ thị dòng điều khiển (control flow graph): Là một đồ thị có hướng dùng để biểu diễn trực quan cấu trúc của chương trình.

Đồ thị dòng điều khiển bao gồm tập hợp các nút, mỗi nút biểu diễn cho một thành phần và một tập hợp các cạnh nối giữa các nút với nhau, hai nút được nối với nhau nếu như trong chương trình ta có thể chuyển trực tiếp giữa hai thành phần tương ứng. • Đường thực thi (execution path): Là danh sách có thứ tự các lệnh được thi hành ứng với một lần chạy cụ thể của đơn vị phần mềm, bắt đầu từ điểm nhập đến điểm kết thúc của đơn vị phần mềm. Thường mục tiêu lý tưởng trong việc kiểm thử dòng điều khiển là có thể sinh ra bộ mẫu thử đi qua tất cả các đường thực thi của chương trình. Đáng tiếc trong thực tế, chỉ một chương trình nhỏ cũng có thể có số lượng đường thực thi rất lớn nên việc sinh ra bộ mẫu thử lý tưởng như vậy là không thể thực hiện được.

Đó là chưa kể có khả năng đường thực thi quá dài gây khó khăn cho việc kiểm thử. Sinh mẫu thử tự động 11 • Phủ kiểm thử (coverage): Do không thể sinh ra một bộ mẫu thử lý tưởng nên khái niệm phủ kiểm thử được đưa ra để đánh giá chất lượng của một bộ mẫu thử. Phủ kiểm thử là 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 thi hết các mẫu thử. Phủ kiểm thử bao gồm nhiều mức độ khác nhau.

Thông thường, phủ kiểm thử càng lớn thì độ tin cậy càng cao. Các mức độ của phủ kiểm thử bao gồm: • Mức 0 : Bộ mẫu thử được tạo ra để kiểm thử những gì có thể kiểm thử được, những lỗi còn lại sẽ được phát hiện khi người dùng sử dụng chương trình và báo lại. Theo như định nghĩa thì không cần kiểm thử gì cả cũng xem như đạt được phủ kiểm thử mức 0. Vì vậy thật ra đây chỉ là mức đưa ra như một cận dưới của khái niệm phủ kiểm thử.

• Mức 1 : Bộ mẫu thử dùng trong quá trình kiểm thử phải bảo đảm sao cho mỗi câu lệnh của chương trình được thực thi ít nhất một lần. Vì vậy phủ kiểm thử mức 1 còn được gọi là phủ câu lệnh (statement coverage). • Mức 2 : Bộ mẫu thử dùng trong quá trình kiểm thử phải bảo đảm sao cho mỗi điểm quyết định luận lý trong chương trình được thực thi ít nhất một lần cho mỗi trường hợp TRUE và FALSE. Điều này tương đương với việc mỗi nhánh của chương trình đều được kiểm thử nên phủ kiểm thử mức 2 còn được gọi là phủ các nhánh (branch coverage).

Một bộ mẫu thử đạt phủ kiểm thử mức 2 thì cũng đạt phủ kiểm thử mức 1. • Mức 3 : Bộ mẫu thử dùng trong quá trình kiểm thử phải bảo đảm sao cho mỗi điều kiện con trong từng điểm quyết định luận lý trong chương trình đều được thực thi ít nhất một lần cho mỗi trường hợp TRUE và FALSE. Vì yêu cầu này nên phủ kiểm thử mức 3 còn được gọi là phủ các điều kiện con (subcondition coverage). Chú ý là phủ kiểm thử mức 3 và mức 2 không so sánh được với nhau, nghĩa là tồn tại bộ mẫu thử đạt phủ kiểm thử mức 2 nhưng không đạt phủ kiểm thử mức 3 và ngược lại.

• Mức 4 : Bộ mẫu thử dùng trong quá trình kiểm thử phải bảo đảm mỗi điều kiện con trong từng điểm quyết định luận lý trong chương trình được thực thi ít nhất một lần cho mỗi trường hợp TRUE và FALSE và bản thân mỗi điểm quyết định luận lý cũng được thực hiện ít nhất một lần cho mỗi trường hợp TRUE và FALSE. Phủ kiểm thử mức 4 còn được gọi là phủ các nhánh và các điều kiện con (branch and subcondition coverage). Tất nhiên một bộ mẫu thử đạt phủ kiểm thử mức 4 thì cũng đạt phủ kiểm thử mức 2 và mức 3. Sinh mẫu thử tự động 12 Ví dụ 2.

Xét một chương trình như sau (để đơn giản, giả sử chương trình không có short circuit): 1: bool foo(int a, int b) 2: { 3: bool ret = false; 4: if (a > b) { 5: a = a - b; 6: } 7: if (a > 0 && b > 0) { 8: ret = true; 9: } 10: return ret; 11: } Bảng sau tóm tắt lại mức phủ kiểm thử của các bộ mẫu thử khác nhau đối với chương trình trên: Mức phủ kiểm thử Bộ mẫu thử Mức 0 Không có Mức 1 (2, 1) Mức 2 (1, 0); (1, 1) Mức 3 (1, 0); (0, 1) Mức 4 (1, 0); (0, 1); (1, 1) 2.3 Sinh mẫu thử bằng phương pháp tìm kiếm Các kĩ thuật sinh mẫu thử tự động thường hỗ trợ cho việc kiểm thử dòng điều khiển trong kiểm thử hộp trắng. Trong số các kĩ thuật đó, các kĩ thuật dựa trên phương pháp tìm kiếm thường được áp dụng rộng rãi nhất. Để có thể áp dụng phương pháp tìm kiếm vào việc sinh mẫu thử tự động, trước hết cần đáp ứng hai yêu cầu: • Thiết kế không gian tìm kiếm (search space) bao gồm các giải pháp cho vấn đề cần giải quyết. Không gian tìm kiếm phải được thiết kế sao cho việc chuyển từ giải pháp này sang giải pháp khác có thể thực hiện được một cách dễ dàng và hợp lí.

Trong bài toán sinh mẫu thử tự động, không gian tìm kiếm chính là tập hợp tất cả các mẫu thử có thể sinh ra và giải pháp ở đây chính là từng mẫu thử đơn lẻ. Sinh mẫu thử tự động 13 • Phải có một hàm lượng giá (objective function) để so sánh độ tốt của giải pháp này với giải pháp khác trong quá trình tìm kiếm. Thông thường, hàm lượng giá sẽ nhận đầu vào là giải pháp cần lượng giá và trả về kết quả là một con số phản ánh độ tốt của giải pháp ứng với bài toán đang được xét đến. Nguyên tắc của việc dùng kĩ thuật tìm kiếm để sinh mẫu thử tự động được thực hiện qua các bước như sau [8]: • Bước 1 : Xây dựng đồ thị dòng điều khiển của chương trình.

Dựa vào đồ thị dòng điều khiển vừa được xây dựng, ta có thể liệt kê tất cả đường thực thi của chương trình. • Bước 2 : Chọn trên đồ thị này một đường thực thi theo tiêu chí độ bao phủ được đưa ra. • Bước 3 : Tìm kiếm trong không gian các mẫu thử để chọn ra mẫu thử phù hợp với đường thực thi được chọn. Để đánh giá mức độ phù hợp của mẫu thử đang xét đối với đường thực thi được chọn, ta cần sử dụng hàm lượng giá.

Ở đây, hàm lượng giá sẽ được xây dựng dựa trên việc mẫu thử được xét có tạo ra được đường thực thi này hay không và nếu có sai lệch thì sự sai lệch là bao nhiêu. • Bước 4 : Tiếp tục quay lại bước 2 và chọn một đường thực thi khác cho đến khi có được bộ mẫu thử thỏa mãn tiêu chí độ bao phủ được đề ra.4 Các kỹ thuật tìm kiếm Khâu quan trọng trong kĩ thuật sinh mẫu thử tự động là tìm kiếm trong không gian mẫu thử để chọn ra mẫu thử phù hợp. Các kĩ thuật tìm kiếm mẫu thử trong không gian mẫu thử được khảo sát trong luận văn này bao gồm [9]: • Tìm kiếm ngẫu nhiên (random search). • Tìm kiếm bằng giải thuật leo đồi đơn giản (simple hill climbing search).

• Tìm kiếm bằng giải thuật leo đồi dốc nhất (steepest hill climbing search). • Tìm kiếm bằng giải thuật tôi luyện mô phỏng (simulated annealing search).

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ

Luận văn thạc sĩ với tiêu đề "Tối ưu hóa kiểm thử phần mềm qua sinh mẫu và khoanh vùng lỗi" của tác giả Phạm Hồng Long, được thực hiện dưới sự hướng dẫn của PGS. Quản Thành Thơ và các giảng viên khác tại Đại học Quốc gia TP. HCM, tập trung vào việc kết hợp các phương pháp sinh mẫu thử tự động và khoanh vùng lỗi trong kiểm thử phần mềm. Bài viết này không chỉ đề cập đến các kỹ thuật kiểm thử hiện đại mà còn nhấn mạnh tầm quan trọng của việc tối ưu hóa quy trình kiểm thử, giúp nâng cao chất lượng phần mềm và giảm thiểu thời gian phát triển. Độc giả sẽ tìm thấy giá trị trong việc áp dụng các phương pháp này để cải thiện hiệu quả kiểm thử trong các dự án phần mềm của mình.

Nếu bạn quan tâm đến các khía cạnh khác trong lĩnh vực kiểm thử phần mềm và ứng dụng công nghệ thông tin, bạn có thể tham khảo thêm các bài viết liên quan như "Các Kỹ Thuật Kiểm Thử Dòng Dữ Liệu Tĩnh Trong Luận Văn Thạc Sĩ Kỹ Thuật Phần Mềm""Nghiên cứu ứng dụng mô hình ngôn ngữ lớn trong gỡ lỗi phần mềm". Những bài viết này sẽ cung cấp cho bạn cái nhìn sâu sắc hơn về các phương pháp và công nghệ hiện đại trong lĩnh vực kiểm thử phần mềm.