ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Nguyễn Văn Hiệp Xây dựng công cụ định vị lỗi cho ứng dụng C/C++ LUẬN VĂN THẠC SĨ Ngành: Kỹ thuật phần mềm HÀ NỘI – 2022 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Nguyễn Văn Hiệp Xây dựng công cụ định vị lỗi cho ứng dụng C/C++ Ngành: Kỹ thuật phần mềm Chuyên ngành: Kỹ thuật phần mềm Mã số: 8480103.01 LUẬN VĂN THẠC SĨ Ngành: Kỹ thuật phần mềm NGƯỜI HƯỚNG DẪN KHOA HỌC: TS. Võ Đình Hiếu HÀ NỘI – 2022 LỜI CAM ĐOAN Tôi xin cam đoan rằng luận văn của tôi chưa từng được nộp như một báo cáo luận văn tại trường Đại học Công nghệ - ĐHQGHN hoặc bất kỳ trường đại học khác. Những gì tôi viết ra không sao chép từ các tài liệu, không sử dụng các kết quả nghiên cứu của người khác mà không trích dẫn cụ thể. Nếu sai tôi hoàn toàn chịu trách nhiệm theo quy định của trường Đại học Công nghệ - ĐHQGHN. Hà Nội, ngày 8 tháng 8 năm 2022 Học viên cao học Nguyễn Văn Hiệp LỜI CẢM ƠN Đầu tiên, tôi xin gửi lời cảm ơn trân trọng và sâu sắc tới TS. Võ Đình Hiếu, người thầy đã trực tiếp hướng dẫn tận tình và đưa ra những lời khuyên trong quá trình học tập và nghiên cứu của tôi trong quá trình học tập và làm luận văn. Tôi cũng xin gửi lời cảm ơn các thầy cô trong trường Đại học Công nghệ - ĐHQGHN đã tận tâm truyền đạt kiến thức bổ ích giúp tôi phát triển. Cuối cùng tôi xin cảm ơn gia đình, người thân và bạn bè đã hỗ trợ, tạo động lực giúp tôi hoàn thiện bản thân. Luận văn này được hỗ trợ từ đề tài KHCN cấp ĐHQGHN, Mã số: QG. Mục lục Chương 1 Giới thiệu. 1 Chương 2 Kiến thức nền tảng .1 Khái niệm lỗi: Fault, Error, Failure.2 Kiểm thử phần mềm .4 Các nghiên cứu về định vị lỗi .5 Các kỹ thuật định vị lỗi .1 Các kỹ thuật định vị truyền thống .2 Kỹ thuật định vị lỗi dựa trên lát cắt .3 Kỹ thuật định vị lỗi dựa phổ .4 Kỹ thuật định vị lỗi dựa trên xác suất .5 Kỹ thuật định vị lỗi dựa trên trạng thái .6 Kỹ thuật định vị lỗi dựa trên học máy .7 Kỹ thuật định vị lỗi dựa trên khai phá dữ liệu. 17 Chương 3 Công cụ định vị lỗi HiFa cho các ứng dụng C/C++ .1 Kỹ thuật định vị lỗi cho ứng dụng C/C++ .1 Tổng quan kỹ thuật .2 Ví dụ minh họa .2 Kiến trúc tổng quan công cụ HiFa .3 Quá trình điều chỉnh mã nguồn .1 Tổng quan về LLVM .2 Quá trình điều chỉnh mã của công cụ HiFa .4 Quá trình xử lý dữ liệu phổ . 33 Chương 4 Thử nghiệm và đánh giá .1 Dữ liệu thử nghiệm .2 Chỉ số đánh giá .2 Kết quả và đánh giá . 38 Chương 5 Kết luận . 45 Danh sách hình vẽ Hình 2-1: Mã nguồn hàm mid . 4 Hình 2-2: Đồ thị dòng điều khiển tương ứng độ đo C2 của hàm mid . 5 Hình 2-3: Đồ thị dòng dữ liệu của chương trình mid . 6 Hình 2-4: Số lượng nghiên cứu về định vị lỗi từ 2003 - 2021 . 7 Hình 2-5: Tổng quan thuật toán của predicate switching . 16 Hình 2-6: Thuật toán Định vị lỗi sử dụng phân tích N-gram. 18 Hình 3-1: Tổng quan kỹ thuật sửa lỗi dựa trên phổ . 19 Hình 3-2: Mã nguồn hàm mid . 21 Hình 3-3: Kiến trúc công cụ HiFa . 26 Hình 3-4: LLVM Framework. 28 Hình 3-5: Kiến trúc trình biên dịch LLVM. 29 Hình 3-6: Các LLVM pass . 30 Hình 3-7: Quá trình điều chỉnh mã nguồn . 31 Hình 3-8: Bảng xếp hạng nghi ngờ được tạo ra khi sử dụng HiFa ở giao diện dòng lệnh . 34 Hình 3-9: Giao diện đồ hoạ người dùng của công cụ HiFa . 34 Hình 4-1: Điểm Expense của Barinel và DRT . 38 Hình 4-2: Điểm Expense của Dstar và Jaccard . 39 Hình 4-3: Điểm Expense của Kulczynski2 và Mccon . 39 Hình 4-4: Điểm Expense của Minus và Ochiai. 40 Hình 4-5: Điểm Expense của Op và Tarantula . 40 Hình 4-6: Điểm Expense của Wong3 và Zoltar . 41 Hình 4-7: Hiệu quả định vị lỗi của các kỹ thuật với phổ ESHS . 42 Hình 4-8: Hiệu quả định vị lỗi của các kỹ thuật với phổ DHS . 42 Hình 4-9: Hiệu quả định vị lỗi của các kỹ thuật với phổ DHS-def . 43 Hình 4-10: Hiệu quả định vị lỗi của các kỹ thuật với phổ DHS-use . 43 Danh sách bảng Bảng 2. Ví dụ về phương pháp dựa trên lát cắt chương trình .2: Các chỉ số xếp hạng của các kỹ thuật SFL .1: Bộ kiểm thử của hàm mid.2: Phổ ESHS của hàm mid.3: Phổ DHS của hàm mid .4: Độ nghi ngờ và thứ hạng của từng câu lệnh phiên bản lỗi 1 .5: Độ nghi ngờ và thứ hạng của từng câu lệnh phiên bản lỗi 2 .6: Dữ liệu về các câu lệnh được điều chỉnh.1: Chi tiết về các chương trình trong dữ liệu thử nghiệm .2: Kích thước tệp thực thi của từng chương trình . 44 Danh sách từ viết tắt và thuật ngữ BHS Branch Hit Spectrum BiS Bidirectional Dynamic Slice BP Back Propagation BwS Backward Dynamic Slice CFG Data Flow Graph CPS Complete Path Spectrum DFG Control Flow Graph DHS Data-dependence Hit Spectrum ESHS Executable Statement Hit Spectrum FwS Forward Dynamic Slice IR Intermediate Representation IVMP Interesting Value Mapping Pairs SFL Spectrum-based Fault localization 1 Chương 1 Giới thiệu Trong quá trình phát triển phần mềm, việc gỡ lỗi phần mềm là một quá trình tốn kém và hầu như thủ công. Chương trình phần mềm sẽ được chạy kiểm thử với bộ kiểm thử nhất định. Nếu có xuất hiện lỗi trong các bài kiểm thử, lập trình viên sẽ phải thực hiện kiểm tra lại chương trình để xác định các câu lệnh gây lỗi. Sau đó, họ sẽ sửa các lỗi này. Trong các hoạt động của gỡ lỗi phần mềm này, hoạt động định vị lỗi hay xác định vị trí lỗi là hoạt động tốn kém nhất. Quá trình xác định lỗi trong thực tế thường được thực hiện một cách thủ công và tuần tự. Sau khi hoàn thành quá trình phát triển, các lập trình viên thực hiện chạy kiểm thử với chương trình và quan sát kết quả của chương trình. Nếu có một ca kiểm thử có lỗi, các lập trình viên thực hiện đặt các điểm ngắt tại các vị trí mà họ nghi ngờ có khả năng gây lỗi. Sau đó, họ chạy lại chương trình với ca kiểm thử đã gây lỗi trước đó và quan sát trạng thái của chương trình để xác định lỗi. Lập trình viên sẽ thực hiện lặp đi lặp lại quá trình này cho đến khi ca kiểm thử không cho lỗi nữa. Quá trình trình này gây tốn thời gian và công sức. Do đó, việc áp dụng kỹ thuật và công cụ định vị lỗi có thể giảm đáng kể chi phí gỡ lỗi. Kỹ thuật định vị lỗi tự động đưa ra các đề xuất, gợi ý về vị trí có thể gây lỗi cho các lập trình viên. Từ đó, họ có thể chỉ cần tập trung vào vị trí được đề xuất để kiểm tra, giúp giảm thời gian và công sức để sửa lỗi. Các nhà nghiên cứu đã đưa ra rất nhiều kỹ thuật để thực hiện định vị lỗi. Các kỹ thuật định vị lỗi truyền thống như: hệ thống nhật ký (logging), lệnh khẳng định (assertions), điểm ngắt (breakpoints) và phân tích hồ sơ (profiling). Các kỹ thuật định vị lỗi nâng cao như: dựa trên lát cắt (slide-based), dựa trên phổ (spectrum-based), dựa trên xác suất (statistics-based), dựa trên trạng thái (state-based), dựa trên học máy 2 (machine learning-based), dựa trên khai phá dữ liệu (data mining-based), dựa trên mô hình (model-based), … Kỹ thuật định vị lỗi dựa trên phổ (spectrum-based) là kỹ thuật được sử dụng và nghiên cứu phổ biến nhất. Tuy nhiên, các nghiên cứu không cung cấp công khai công cụ kèm theo hoặc các công cụ chưa hoàn chỉnh, khó tiếp cận và cải tiến cho việc định vị lỗi cho các chương trình C/C++. Mục tiêu của luận văn là nghiên cứu các kỹ thuật định vị lỗi hiện nay, từ đó đã lựa chọn ra kỹ thuật định vị lỗi dựa trên phổ phù hợp với các chương trình C/C++. Dựa trên kỹ thuật này, luận văn xây dựng công cụ hoàn chỉnh, có tên HiFa, định vị lỗi tự động cho các ứng dụng C/C++. HiFa được tích hợp nhiều kỹ thuật SFL để định vị lỗi như: Tarantula, Ochiai, Op2, Dstar, … Bên cạnh phổ theo câu lệnh cơ bản ESHS được sử dụng phổ biến trong các nghiên cứu, luận văn đề xuất thêm các phổ theo cặp def-use DHS cho kỹ thuật định vị lỗi dựa theo phổ. Công cụ HiFa được thử nghiệm với các tập dữ liệu thử nghiệm: dữ liệu lỗi chế tác: bộ Siemens (7 chương trình), chương trình Grep và chương trình Sed; và dữ liệu lỗi thật: chương trình Space. Các phần còn lại của luận văn có nội dung như sau. Chương 2 cung cấp các kiến thức nền tảng về lỗi, kiểm thử phần mềm và các kỹ thuật định vị lỗi. Chương 3 mô tả phương pháp định vị lỗi đề xuất và kiến trúc của công cụ định vị lỗi. Chương 4 trình bày các thử nghiệm, kết quả và đánh giá về khả năng định vị lỗi của công cụ. Cuối cùng, Chương 5 là kết luận luận văn và các công việc cải tiến công cụ trong tương lai. 3 Chương 2 Kiến thức nền tảng Chương này cung cấp các kiến thức nền tảng cho luận văn. Khái niệm lỗi, gỡ lỗi và kiểm thử được giới thiệu tổng quan. Sau đó, hiện trạng nghiên cứu các kỹ thuật định vị lỗi hiện này. Luận văn cung cấp các nguyên tắc cơ bản của các kỹ thuật định vị lỗi, hiệu suất và hiệu quả của chúng.1 Khái niệm lỗi: Fault, Error, Failure IEEE Standard [1] định nghĩa fault, error, failure như sau: Fault là một bước, một quá trình hay một định nghĩa dữ liệu sai trong chương trình máy tính. Một fault được tạo ra khi một nhà phát triển viết chương trình. Error là một trạng thái sai của chương trình khi thực thi có thể gây ra failure. Failure mô tả một chương trình đưa ra kết quả sai lệch so với kết quả mong muốn. Luận văn thực hiện nghiên cứu các phương pháp định vị lỗi khi chương trình có ca kiểm thử thất bại trong quá trình kiểm thử. Nên lỗi được định vị sẽ là loại lỗi Failure. Khi luận văn sử dụng thuật ngữ "Định vị lỗi" tức là định vị câu lệnh hay thành phần chương trình gây ra failure.2 Kiểm thử phần mềm Kiểm thử phần mềm là một bước cơ bản trong quá trình phát triển phần mềm. Thông qua kiểm thử ta có thể biết được phần mềm có hoạt động đúng với yêu cầu đặc tả. Kiểm thử giúp cải thiện chất lượng của phần mềm.
Tổng quan nghiên cứu
Trong lĩnh vực phát triển phần mềm, gỡ lỗi là một công đoạn quan trọng nhưng tốn kém và chủ yếu thực hiện thủ công. Theo báo cáo của ngành, quá trình định vị lỗi chiếm phần lớn thời gian và công sức trong việc sửa lỗi phần mềm. Việc tự động hóa định vị lỗi giúp giảm đáng kể chi phí và tăng hiệu quả phát triển. Mục tiêu của luận văn là xây dựng một công cụ định vị lỗi tự động cho các ứng dụng C/C++ dựa trên kỹ thuật định vị lỗi dựa trên phổ (Spectrum-based Fault Localization - SFL). Nghiên cứu tập trung vào việc phát triển công cụ HiFa, tích hợp nhiều kỹ thuật SFL như Tarantula, Ochiai, Op2, Dstar, đồng thời đề xuất sử dụng phổ DHS (Data-dependence Hit Spectrum) bên cạnh phổ ESHS (Executable Statement Hit Spectrum) truyền thống nhằm nâng cao hiệu quả định vị lỗi. Phạm vi nghiên cứu bao gồm các chương trình C/C++ với dữ liệu thử nghiệm từ bộ Siemens, chương trình Grep, Sed và Space, trong khoảng thời gian đến năm 2022. Việc áp dụng công cụ HiFa có ý nghĩa lớn trong việc giảm thiểu thời gian gỡ lỗi, nâng cao chất lượng phần mềm và hỗ trợ lập trình viên tập trung vào các vị trí nghi ngờ lỗi chính xác hơn.
Cơ sở lý thuyết và phương pháp nghiên cứu
Khung lý thuyết áp dụng
Luận văn dựa trên các lý thuyết và mô hình sau:
- Khái niệm lỗi phần mềm: Theo chuẩn IEEE, lỗi (fault) là sai sót trong mã nguồn, lỗi thực thi (error) là trạng thái sai khi chạy chương trình, và failure là kết quả sai lệch so với mong đợi. Định vị lỗi tập trung vào việc xác định vị trí gây failure trong mã nguồn.
- Kiểm thử phần mềm: Bao gồm kiểm thử hộp đen (dựa trên đặc tả) và kiểm thử hộp trắng (dựa trên cấu trúc mã nguồn). Độ bao phủ kiểm thử (statement, branch, condition) là chỉ số quan trọng đánh giá hiệu quả bộ kiểm thử.
- Kỹ thuật định vị lỗi dựa trên phổ (SFL): Thu thập thông tin thực thi chương trình qua các ca kiểm thử thành công và thất bại, tính toán độ nghi ngờ của từng câu lệnh dựa trên tần suất xuất hiện trong các ca kiểm thử thất bại so với thành công. Các chỉ số xếp hạng như Tarantula, Ochiai, Jaccard, Dstar được sử dụng để đánh giá mức độ nghi ngờ.
- Phổ ESHS và DHS: Phổ ESHS ghi nhận câu lệnh được thực thi, phổ DHS ghi nhận các cặp def-use (định nghĩa-sử dụng biến) được thực thi, giúp đánh giá chính xác hơn mối quan hệ dữ liệu trong chương trình.
- Framework LLVM: Được sử dụng để điều chỉnh mã nguồn (instrumentation) nhằm thu thập dữ liệu phổ trong quá trình thực thi.
Phương pháp nghiên cứu
- Nguồn dữ liệu: Sử dụng bộ dữ liệu thử nghiệm gồm 10 chương trình với tổng cộng hàng trăm phiên bản lỗi, bao gồm bộ Siemens (7 chương trình), Grep, Sed và Space. Mỗi chương trình có số lượng dòng lệnh và ca kiểm thử đa dạng, từ vài trăm đến hơn 13 nghìn dòng lệnh và hàng nghìn ca kiểm thử.
- Phương pháp phân tích:
- Điều chỉnh mã nguồn bằng LLVM để thu thập phổ ESHS và DHS.
- Thực thi chương trình với bộ kiểm thử, thu thập dữ liệu thực thi và kết quả ca kiểm thử (thành công/thất bại).
- Tính toán độ nghi ngờ từng câu lệnh dựa trên các chỉ số xếp hạng SFL.
- So sánh hiệu quả định vị lỗi giữa các loại phổ và kỹ thuật xếp hạng bằng chỉ số Expense (tỷ lệ phần trăm mã cần kiểm tra để tìm lỗi).
- Timeline nghiên cứu: Nghiên cứu được thực hiện trong năm 2022, bao gồm giai đoạn thu thập dữ liệu, phát triển công cụ HiFa, thử nghiệm và đánh giá kết quả.
Kết quả nghiên cứu và thảo luận
Những phát hiện chính
- Hiệu quả của phổ DHS vượt trội so với phổ ESHS: Các phổ DHS, DHS-def và DHS-use cho thấy khả năng định vị lỗi tốt hơn phổ ESHS với hầu hết các chỉ số xếp hạng. Ví dụ, với kỹ thuật Barinel, phổ DHS-use xác định được 83% lỗi khi kiểm tra 30% mã chương trình, trong khi phổ ESHS cần kiểm tra tới 40% mã để đạt hiệu quả tương tự.
- Sự khác biệt giữa các kỹ thuật xếp hạng: Kỹ thuật Barinel và DRT có hiệu quả định vị lỗi cao nhất, trong khi Wong3 có hiệu quả thấp nhất trên phổ ESHS. Tuy nhiên, sự chênh lệch giữa các kỹ thuật trên các phổ khác nhau không quá 10% tổng số lỗi.
- Phổ DHS-use thể hiện hiệu quả nhất trong nhóm phổ DHS: Đường đồ thị điểm Expense của phổ DHS-use luôn nằm trên các đường điểm của DHS và DHS-def, cho thấy khả năng định vị lỗi tốt hơn, đặc biệt khi kiểm tra dưới 50% mã chương trình.
- Công cụ HiFa hoạt động hiệu quả trên các chương trình đa dạng: Thử nghiệm trên các chương trình có kích thước và số lượng ca kiểm thử khác nhau (từ 173 đến hơn 13 nghìn dòng lệnh, từ 370 đến hơn 13 nghìn ca kiểm thử) cho thấy công cụ có khả năng xử lý tốt và cung cấp bảng xếp hạng nghi ngờ chính xác.
Thảo luận kết quả
Nguyên nhân phổ DHS vượt trội là do nó ghi nhận mối quan hệ dữ liệu giữa các câu lệnh thông qua cặp def-use, giúp xác định chính xác hơn các vị trí gây lỗi liên quan đến biến và luồng dữ liệu. So với phổ ESHS chỉ ghi nhận câu lệnh được thực thi, phổ DHS cung cấp thông tin chi tiết hơn về luồng dữ liệu, từ đó nâng cao độ chính xác định vị lỗi.
Kết quả này phù hợp với các nghiên cứu trước đây về việc sử dụng thông tin luồng dữ liệu trong gỡ lỗi tự động. Việc tích hợp phổ DHS vào công cụ HiFa giúp cải thiện đáng kể hiệu quả định vị lỗi, giảm số lượng mã cần kiểm tra, từ đó tiết kiệm thời gian và công sức cho lập trình viên.
Biểu đồ điểm Expense minh họa rõ ràng sự khác biệt hiệu quả giữa các loại phổ và kỹ thuật xếp hạng, giúp người dùng công cụ dễ dàng lựa chọn phương pháp phù hợp với yêu cầu thực tế. Giao diện đồ họa của HiFa hỗ trợ trực quan việc quan sát mức độ nghi ngờ của từng câu lệnh, tăng tính tiện dụng và khả năng áp dụng trong thực tế.
Đề xuất và khuyến nghị
- Áp dụng phổ DHS trong các công cụ định vị lỗi cho C/C++: Khuyến nghị các nhà phát triển công cụ gỡ lỗi tích hợp phổ DHS và các biến thể DHS-def, DHS-use để nâng cao hiệu quả định vị lỗi, đặc biệt trong các dự án phần mềm lớn và phức tạp.
- Phát triển thêm các chỉ số xếp hạng phù hợp với phổ DHS: Nghiên cứu và phát triển các công thức tính độ nghi ngờ mới tận dụng tối đa thông tin từ phổ DHS nhằm cải thiện độ chính xác và giảm thiểu số lượng mã cần kiểm tra.
- Tích hợp công cụ HiFa vào quy trình phát triển phần mềm: Đề xuất sử dụng HiFa trong các giai đoạn kiểm thử và bảo trì phần mềm để hỗ trợ lập trình viên nhanh chóng xác định vị trí lỗi, giảm thời gian gỡ lỗi.
- Mở rộng thử nghiệm trên các ngôn ngữ và môi trường khác: Khuyến khích nghiên cứu mở rộng công cụ và kỹ thuật sang các ngôn ngữ lập trình khác và môi trường phát triển đa nền tảng nhằm tăng tính ứng dụng rộng rãi.
- Đào tạo và hướng dẫn sử dụng công cụ cho lập trình viên: Tổ chức các khóa đào tạo, tài liệu hướng dẫn chi tiết để giúp lập trình viên tận dụng tối đa các tính năng của công cụ HiFa, nâng cao hiệu quả công việc.
Đối tượng nên tham khảo luận văn
- Lập trình viên và kỹ sư phần mềm: Nhóm này sẽ được hỗ trợ trong việc giảm thời gian gỡ lỗi, tập trung kiểm tra các vị trí nghi ngờ lỗi chính xác, nâng cao hiệu quả phát triển và bảo trì phần mềm.
- Nhà nghiên cứu và phát triển công cụ kiểm thử phần mềm: Luận văn cung cấp cơ sở lý thuyết và phương pháp thực nghiệm để phát triển các công cụ định vị lỗi tự động, đặc biệt trong môi trường C/C++.
- Giảng viên và sinh viên ngành kỹ thuật phần mềm: Tài liệu này là nguồn tham khảo quý giá về các kỹ thuật định vị lỗi hiện đại, phương pháp thu thập và xử lý dữ liệu phổ, cũng như ứng dụng LLVM trong điều chỉnh mã nguồn.
- Các tổ chức phát triển phần mềm quy mô lớn: Các doanh nghiệp có quy trình phát triển phần mềm phức tạp có thể áp dụng công cụ và kỹ thuật trong luận văn để nâng cao chất lượng sản phẩm và giảm chi phí bảo trì.
Câu hỏi thường gặp
-
Công cụ HiFa có thể áp dụng cho ngôn ngữ lập trình nào ngoài C/C++ không?
HiFa được thiết kế và thử nghiệm chủ yếu cho các ứng dụng C/C++ do sử dụng LLVM framework. Tuy nhiên, với sự hỗ trợ của LLVM cho nhiều ngôn ngữ, công cụ có thể được mở rộng cho các ngôn ngữ khác trong tương lai. -
Phổ DHS khác gì so với phổ ESHS trong định vị lỗi?
Phổ DHS ghi nhận các cặp def-use (định nghĩa-sử dụng biến) được thực thi, cung cấp thông tin về luồng dữ liệu trong chương trình, giúp xác định lỗi chính xác hơn so với phổ ESHS chỉ ghi nhận câu lệnh được thực thi. -
Chỉ số Expense được tính như thế nào và ý nghĩa ra sao?
Expense là tỷ lệ phần trăm mã nguồn mà lập trình viên phải kiểm tra để tìm ra lỗi đầu tiên. Chỉ số này càng thấp càng tốt, thể hiện hiệu quả định vị lỗi cao, giúp giảm công sức kiểm tra. -
Hiệu quả của các kỹ thuật xếp hạng độ nghi ngờ có sự khác biệt lớn không?
Các kỹ thuật như Barinel, DRT thường cho hiệu quả cao hơn Wong3, đặc biệt trên phổ ESHS. Tuy nhiên, sự khác biệt tổng thể không quá 10% trên các bộ dữ liệu thử nghiệm. -
Công cụ HiFa có giao diện người dùng trực quan không?
HiFa cung cấp giao diện đồ họa cho phép lập trình viên xem mã nguồn cùng mức độ nghi ngờ của từng câu lệnh qua dải màu từ xanh (thấp) đến đỏ (cao), giúp dễ dàng xác định vị trí lỗi.
Kết luận
- Luận văn đã xây dựng thành công công cụ định vị lỗi HiFa cho ứng dụng C/C++ dựa trên kỹ thuật định vị lỗi dựa trên phổ, tích hợp phổ ESHS và phổ DHS.
- Phổ DHS và các biến thể DHS-def, DHS-use cho hiệu quả định vị lỗi vượt trội so với phổ ESHS truyền thống.
- Công cụ HiFa được thử nghiệm trên nhiều chương trình với kích thước và số lượng ca kiểm thử đa dạng, cho kết quả đánh giá tích cực về hiệu quả và tính ứng dụng.
- Các kỹ thuật xếp hạng độ nghi ngờ như Barinel, DRT thể hiện hiệu quả cao nhất trong việc định vị lỗi.
- Đề xuất mở rộng nghiên cứu và ứng dụng công cụ trong thực tế, đồng thời phát triển thêm các kỹ thuật và chỉ số mới để nâng cao hiệu quả định vị lỗi.
Hành động tiếp theo là triển khai công cụ HiFa vào quy trình phát triển phần mềm thực tế, đồng thời nghiên cứu mở rộng sang các ngôn ngữ và môi trường khác nhằm nâng cao tính ứng dụng và hiệu quả của công cụ.