Chương trình Kích thước tệp thực thi Kích thước dữ liệu phổ
GCC ESHS DHS GCC ESHS DHS print_tokens 47 163 167 7357 1440 2078 print_tokens2 43 156 164 7250 1507 2022 schedule 43 150 150 3354 619 867 schedule2 43 150 153 3409 580 790 replace 43 165 273 10803 2257 3903 tcas 34 144 144 1426 175 178 tot_info 41 159 166 573 171 373
Chương 5 Kết luận
Luận văn này đã nghiên cứu các kỹ thuật định vị lỗi hiện nay như: các kỹ thuật truyền thống (Logging, Assertions, BreakPoints, Profiling); các kỹ thuật nâng cao (dựa trên phổ chương trình, dựa trên lát cắt, dựa trên trạng thái, dựa trên mơ hình, dựa trên xác suất, dựa trên học máy, dựa trên khai phá dữ liệu). Luận văn đã đi sâu vào tìm hiểu kỹ thuật định vị lỗi dựa trên phổ chương trình do kỹ thuật này được sử dụng phổ biến và dễ dàng tiếp cận. Luận văn đã bổ sung phổ DHS cho các kỹ thuật định vị lỗi dựa trên phổ và phát triển công cụ định vị lỗi dựa trên phổ chương trình HiFa cho các chương trình C/C++. Hiện tại, cơng cụ HiFa tích hợp sẵn 13 kỹ thuật định vị lỗi dựa trên phổ chương trình: ochiai, tarantula, jaccard, op, barinel, dstar, kulczynski2, mccon, zoltar, wong3, drt, minus và ochiai2. Bên cạnh phổ ESHS (câu lệnh) đã được sử dụng ở các nguyên cứu về kỹ thuật định vị lỗi dựa trên phổ chương trình trước đây, công cụ bổ sung thêm các phổ DHS. Luận văn đưa ra các thử nghiệm thực tế công cụ với các bộ dữ liệu lỗi chuẩn của bộ Siemens, các chương trình grep, sed, space. Các thử nghiệm trên các bộ dữ liệu lỗi được thực hiện để đánh giá khả năng định vị lỗi của kỹ thuật sử dụng phổ DHS và phổ ESHS. Kết quả cho thấy kỹ thuật sử dụng phổ DHS, DHS-def, DHS-use có khả năng định vị lỗi hiệu quả hơn kỹ thuật sử dụng phổ ESHS. Với bộ dữ liệu được thử nghiệm, các kỹ thuật Barinel, Dstar, Jaccard, Ochiai và Tarantula sử dụng các phổ DHS chỉ ra nhiều hơn 10% lỗi so với phổ ESHS khi thực hiện kiểm tra 30% mã của chương trình. Từ kết quả này, ta thấy được công cụ định vị lỗi có tiềm năng và khả năng ứng dụng cao trong quá trình phát triển phần mềm C/C++. Cơng cụ giúp nhà phát triển giảm thiểu chi phí, thời gian cho quá trình gỡ lỗi của hệ thống.
Với các kết quả đạt được, thời gian tiếp theo luận văn sẽ mở rộng khả năng hỗ trợ các ngơn ngữ lập trình khác cho cơng cụ HiFa như Objective-C, Python, Scala, … Cùng với đó cơng cụ HiFa cũng sẽ được áp dụng kỹ thuật định vị nhiều lỗi. Trong thực tế, một chương trình phần mềm khơng chỉ có một lỗi đơn lẻ mà nó có thể có nhiều lỗi đồng thời gây ra kết quả kiểm thử không thành cơng. Q trình gỡ lỗi chương trình thường được thực hiện gỡ từng lỗi đơn lẻ một. Nhà phát triển có thể kiểm tra một trường hợp kiểm thử khơng thành cơng để cố gắng tìm ra câu lệnh lỗi bằng các kỹ thuật gỡ lỗi hiện có hoặc có thể sử dụng tất cả các ca kiểm thử không thành công bằng các kỹ thuật định vị lỗi. Sau khi một lỗi được
tìm thấy và sửa lỗi, chương trình phải được kiểm thử lại với bộ kiểm thử để xác định các ca kiểm thử khơng thành cơng trước đây có thành cơng hay khơng. Nếu lỗi vẫn cịn thì q trình gỡ lỗi sẽ được lặp lại. Để giảm tổng thời gian và chi phí cho q trình gỡ lỗi, có thể có nhiều hơn một nhà phát triển tham gia quá trình gỡ lỗi song song. Để thực hiện điều này cần có một kỹ thuật định vị lỗi có thể phát hiện sự hiện diện của nhiều lỗi và ánh xạ chúng thành các tập hợp thử nghiệm không thành công để chỉ định cho các nhà phát triển khác nhau.
Tài liệu tham khảo Tài liệu tiếng Việt
[2] Phạm Ngọc Hùng, Trương Anh Hồng, Đặng Văn Hưng, Giáo trình kiểm thử phần mềm, Nhà xuất bản Đại học Quốc gia Hà Nội, 2014.
[33] “Tìm hiểu chung về LLVM,” viblo, [Trực tuyến]. Available: https://viblo.asia/p/tim-hieu-chung-ve-llvm-1VgZv6zMZAw.
Tài liệu tiếng Anh
[1] IEEE, Ieee standard glossary of software engineering terminology (ieee std 610.12-1990), 1990.
[3] James A. Jones, Mary Jean Harrold, "Empirical Evaluation of the Tarantula Automatic Fault-Localization Technique," in Proc. Int. Conf. Autom. Softw.
Eng., CA, USA, 2005.
[4] "dblp computer science bibliography," [Online]. Available: https://dblp.uni- trier.de/.
[5] W. Eric Wong, Ruizhi Gao, Yihao Li, Rui Abreu, and Franz Wotawa, "A Survey on Software Fault Localization," IEEE Transactions on Software Engineering, 2016.
[6] M. Weiser, "Program slicing: formal, psychological, and practical investigations of an automatic program abstraction method," Ph.D. dissertation, Univ. Michigan, Ann Arbor, MI, USA, 1979.
[7] J. R. L. a. M. Weiser, "Automatic program bug location by program slicing," in Proc. Int. Conf. Comput. Appl., 1987.
[8] H. Agrawal, J. R. Horgan, "Dynamic program slicing," in Proc. ACM SIGPLAN Conf. Program. Language Des. Implementation, NY, USA, 1990.
[9] X. Zhang, N. Gupta, R. Gupta, Locating faulty code by multiple points slicing, Softw. Practice Experience, 2007.
[10] H. Agrawal, J. R. Horgan, S. London, W. E. Wong, "Fault localization using execution slices and dataflow tests," in Proc. 6th Int. Symp. Softw. Rel. Eng., Toulouse, France, 1995.
[11] H. Agrawal, J. R. Horgan, J. J. Li, S. London, W. E. Wong, S.Ghosh, N. Wilde, "Mining system tests to aid software maintenance," IEEE Comput.,
vol. 31, no. 7, 1998.
[12] W. E. Wong, J. J. Li, "An integrated solution for testing and analyzing java applications in an industrial setting," in Proc. AsiaPacific Softw. Eng. Conf., Taipei, Taiwan, 2005.
[13] Rui Abreu, Peter Zoeteweij, Arjan J. C. van Gemund, "On the accuracy of spectrum-based fault localization," in Proc. Testing: Academic Ind. Conf. Practice Res. Techn., CT, USA, 2007.
[14] Mike Y. Chen, Emre Kiciman, Eugene Fratkin, Armando Fox, Eric Brewer, "Pinpoint: Problem determination in large, dynamic internet services," in
Proceedings of the 42nd Annual IEEE/IFIP International Conference on Dependable Systems and Networks, 2002.
[15] T. Janssen, R. Abreu, and A. J.C. van Germund, "Zoltar: A Spectrum-based Fault Localization Tool," Proc. ESEC/FSE Workshop Softw. Integr. Eval., Amsterdam, The Netherlands, 2009.
[16] Lee Naish, Hua Jie Lee, and Kotagiri Ramamohanarao, "A model for spectra-based software diagnosis," J. ACM Trans. Softw. Eng. Methodol.,
vol. 20, no. 3, 2011.
[17] W. Eric Wong, Vidroha Debroy, Byoungju Choi, "A family of code coverage-based heuristics for effective fault localization," J. Syst. Softw.,
[18] Lee Naish, Hua Jie Lee, Kotagiri Ramamohanarao, "Spectral debugging with weights and incremental ranking," in Proc. Asia-Pacific Softw. Eng. Conf., Batu Ferringhi, Malaysia, 2009.
[19] Jian Xu, Zhenyu Zhang, W. K. Chan, T. H. Tse, and Shanping Li, "A Dynamic Fault Localization Technique with Noise Reduction for Java Programs," in Proc. Int. Conf. Quality Softw., Madrid, Spain, 2011.
[20] R. Abreu, P. Zoeteweij, and A. J. van Gemund, "Spectrum-based multiple fault localization," in Proc. 24th IEEE/ACM Int. Conf. Automated Softw. Eng., CA, USA, 2009.
[21] W. E. Wong, V. Debroy, R. Gao, and Y. Li, "The DStar method for effective software fault localization," IEEE Trans. Rel., vol. 63, no. 1, 2014.
[22] Marcos L. Chaim, José C. Maldonado, Mario Jino, "A debugging strategy based on requirements of testing," in Proceedings of the 7th European Conference on Software Maintenance and Reengineering, CSMR’03, 2003.
[23] B. Liblit, M. Naik, A. X. Zheng, A. Aiken, M. I. Jordan, "Scalable statistical bug isolation," in Proc. ACM SIGPLAN Conf. Programm. Language Design
Implementation, Chicago, IL, USA, 2005.
[24] C. Liu, L. Fei, X. Yan, J. Han, S. P. Midkiff, "Statistical debugging: A hypothesis testing-based approach," IEEE Trans. Softw. Eng., vol. 32, no.
10, 2006.
[25] W. C. T. T. Y. Y. P. H. Zhenyu Zhang, "Non-parametric statistical fault localization," J. Syst. Softw., vol. 84, no. 6, 2011.
[26] W. E. Wong, V. Debroy, D. Xu, "Towards better fault localization: A crosstab-based statistical approach," IEEE Trans. Syst. Man Cybern. C, Appl. Rev., vol. 42, no. 3, 2012.
[27] A. Zeller, R. Hildebrandt, "Simplifying and isolating failure inducing input,"
[28] X. Zhang, N. Gupta, R. Gupta, "Locating Faults Through Automated Predicate Switching," in Proc. Int. Conf. Softw. Eng., Shanghai, China,
2006.
[29] W. E. Wong, Y. Qi, "BP neural network-based effective fault localization,"
Int. J. Softw. Eng. Knowl. Eng., vol. 19, no. 4, 2009.
[30] L. C. Briand, Y. Labiche, X. Liu, "Using machine learning to support debugging with tarantula," in Proc. IEEE Int. Symp. Softw. Rel., Trolhattan, Sweden, 2007.
[31] S. Nessa, M. Abedin, W. Eric Wong, L. Khan, Y. Qi, "Fault localization using N-gram analysis," in Proc. Int. Conf. Wireless Algorithms, Syst. Appl, 2009.
[32] Mary Jean Harrold, Gregg Rothermel, Kent Sayre, Rui Wu, Liu Yi, "An Empirical Investigation of the Relationship Between Spectra Differences and Regression Faults," J. Softw. Testing, Verification Rel., vol. 10, no. 3, 2001.
[33] Jian Xu, Zhenyu Zhang, W. K. Chan, T. H. Tse, Shanping Li, "A general noise-reduction framework for fault localization of java programs," Inf. Softw. Technol., vol. 55, no. 5, 2013.
[34] "The LLVM Compiler Infrastructure," [Online]. Available: https://llvm.org/.
[36] N. S. Foundation, "Software-artifact Infrastructure Repository," [Online]. Available: https://sir.csc.ncsu.edu/portal/usage.php.
[37] Y. K. M. K. Seokhyeon Moon, "Ask the Mutants: Mutating Faulty Programs for Fault Localization," in Proceedings of the 7th IEEE International Conference on Software Testing, Verification and Validation, 2014.