Kỹ thuật kiểm thử hồi qui hiệu quả cho phát triển ứng dụng di động
Kiểm thử hồi qui của các ứng dụng di động là một loại thử nghiệm nhằm kiểm tra xem các hành động như cải tiến, các bản vá lỗi hoặc thay đổi cấu hình đã không mang lại hồi qui mới, hoặc lỗi, trong cả chức năng và phi chức năng của một hệ thống ứng dụng di động. Trong quá trình cải tiến ứng dụng di động của các nhà phát triển, các lỗi mới sẽ phát sinh trong miền chức năng và phi chức năng của hệ thống. Kiểm thử hồi qui được sử dụng để đảm bảo rằng chất lượng của ứng dụng di động vẫn được đảm bảo sau khi có bất kỳ thay đổi trong môi trường phần mềm. Tuy nhiên, kiểm thử hồi qui được cho là tốn kém thời gian và chi phí nhưng không được phép bỏ qua hoạt động kiểm thử này. Do đó, vấn đề lựa chọn các bộ kiểm thử (test suite), lựa chọn ca kiểm thử (test-Cases), xác định mức độ ưu tiên lựa chọn ca kiểm thử và tự động hóa kỹ thuật lựa chọn ca kiểm thử được xem là các giải pháp nâng cao hiệu quả của kiểm thử hồi qui. Trong nghiên cứu này, chúng tôi đề xuất một kỹ thuật kết hợp lựa chọn ca kiểm thử, xác định mức độ ưu tiên và tối thiểu hóa số lượng ca kiểm thử bao phủ được mã nguồn sửa đổi của chương trình. Kỹ thuật xác lập ưu tiên và giảm thiểu ca kiểm thử được đề xuất trong nghiên cứu này cùng với qui trình thực hiện kiểm thử hồi qui cho ứng dụng di động trong môi trường phát triển linh hoạt mang lại hiệu quả cao cho hoạt động kiểm thử hồi qui về mặt chi phí và thời gian
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Trang 9
Trang 10
Tải về để xem bản đầy đủ
Tóm tắt nội dung tài liệu: Kỹ thuật kiểm thử hồi qui hiệu quả cho phát triển ứng dụng di động
án và các bước tiến hành kiểm thử hồi qui ở mục III được triển khai thực nghiệm cho phát triển các ứng dụng di động Android, môi trường phát triển Eclipse Android Development Tool với plug-in ―Source Code Visualizer‖ do Dr. Garbage phát triển [35] để hỗ trợ bước sinh biểu đồ cấu trúc điều khiển CFG cho chương trình hoặc môđun P, ngôn ngữ phát triển và thử nghiệm là Java. Một plugin được phát triển để phục vụ cho việc sinh CFG, tập ca kiểm thử T, và tìm T’ như trình bày trong thuật toán RTS trình bày trong mục III.D. Kết quả triển khai được minh họa bởi chương trình tìm max của 3 số nguyên cho trước ở Hình 5 và đồ thị CFG của mã lệnh thể hiện ở Hình 6a), nốt dòng lệnh được chỉnh sửa ở Hình 6b). Hình 5. Mã lệnh của chương trình tìm max của ba số nguyên Tập các ca kiểm thử cơ bản phủ được mã lệnh của chương trình T, gồm: {T1 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 11; T2= 1, 2, 3, 4, 6, 7, 8, 9, 11; T3= 1, 2, 3, 4, 6, 8, 9, 11}, trong đó nốt 1 là START và 11 là EXIT. Các nốt dòng lệnh được sửa đổi M = {4,6} (nốt 4 và 6 trong Hình 6a). Kết quả thực thi của thuật toán trên, tìm được T’ = {}, điều này có nghĩa T = T’, thực hiện kiểm thử hồi qui cho toàn bộ các ca kiểm thử có trong T. Dễ thấy rằng, nốt 4 và 6 chứa dòng lệnh điều kiện if, do đó nếu thay đổi mã ở đây sẽ ảnh hưởng đến các khối lệnh của nó. Nếu nốt có dòng lệnh được sửa đổi M = {5,7} (nốt 5 và 7 trong Hình 6b). Kết quả thực thi thuật toán trên sẽ cho ra T’ = T1. Điều này có nghĩa là chỉ cần dùng T1 để thực hiện kiểm thử hồi qui và có thể kết luận chương trình đảm bảo được tính đúng đắn như khi thực hiện Huỳnh Quyết Thắng, Nguyễn Đức Mận, Nguyễn Thị Bảo Trang, Nguyễn Thị Anh Đào 263 với bộ T cho P’. Các nốt này không đồng nhất với thứ tự dòng lệnh trong chương trình; việc thay đổi mã lệnh không làm thay đổi CFG của chương trình (đảm bảo tập T ban đầu không thay đổi). Hình 6. CFG của chương trình a) trước khi thay đổi mã nguồn, b) sau khi thay đổi mã nguồn Qua thực nghiệm với 8 chương trình (môđun) khác nhau thu được kết quả như Bảng 2 dưới đây. Bảng 2. Kết quả thử nghiệm thuật toán RTS với các bài toán khác nhau Chƣơng trình P Số dòng Tập T Tập M Tập T’ Tỷ lệ Ghi chú lệnh tối ƣu MaxOf2Integer 10 T={T1,T2,T3} {5,7} T’={T1} 66.7% Dùng If đơn {4,6} T’={} 0% LoopWhile 11 T={T1,T2,T3,T4 } {2,5,8} T’={T3,T4} 50% While If {2,6,7,8} T’={T2,T3,T4 25% else, break, } continue Triangle 30 T={T1,T2,T3,T4,T5} {5,8,14,16 T’={T3} 80% If-else ,20} {5,8,9,10, T’={T4} 22} SquareEquation 38 T ={T1 – T10} {6,10,15,1 T’={T2,T5,T7, 60% If-else 6,21,22,29 T8} ,30} Gameloop.run() 28 T = {T1- T41} M bất kỳ T’=’’ 0% Unlimited Loop, Try- Catch, jump LoopFor 25 T={T1,T2,T3,T4,T5,T6} {7,9,12,15 T’={T2} 83.3% If-Else, For } Calculator 40 T={T1,T2,T3,T4,T5,T6,T {5,8,9,12, T’={T2,T6,T7 66.7% Switch-Case, 7,T8,T9} 20,21,22} } If-Else ExRegression 100 T={T1,T2,T3,T4,T5,T6 {2, 6, 10, T’ = {T3, T4, 55,56%. If, for, ,T7,T8,T9} 15, 20, T6, T7} 21, 22, 29, 31} Với số liệu thử nghiệm và kết quả thể hiện ở Bảng 2, chúng tôi nhận thấy rằng việc sửa đổi các mã lệnh (M) tại các dòng điều kiện, rẽ nhánh thì tỷ lệ tối ưu thấp hoặc T’ = T. Hay nói cách khác, tỷ lệ tối ưu phụ thuộc vào tập các dòng lệnh được thay đổi M. Nếu việc thay đổi hay loại bỏ các mã lệnh tầm thường, ít tác động đến cấu trúc CFG hay không làm thay đổi đồ thị CFG thì mức độ tối ưu lựa chọn các ca kiểm thử để thực hiện hồi qui là khá hiệu quả. Đối với mã lệnh chứa vòng lặp vô hạn luôn đúng (while (true){..}), đường đi ngắn (đồ thị không sâu nhưng rộng), số trường hợp phủ các giá trị điều kiện đầu vào của bài toán lớn thì hiệu quả của tối ưu ca kiểm thử không cao và có thể là 0% như ở thử nghiệm GamLoop.run(). Kỹ thuật RTS trong nghiên cứu này sẽ giúp bổ sung cho các kỹ thuật RTS, TCP [7,8,30] đã được nghiên cứu. Không có một giải pháp kỹ thuật tốt cho tất cả các trường hợp hay mọi điều kiện mà phụ 264 KỸ THUẬT KIỂM THỬ HỒI QUI HIỆU QUẢ CHO PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG thuộc rất nhiều vào từng yêu cầu điều kiện, ràng buộc cụ thể. Giải pháp tốt là sự kết hợp hiệu quả của nhiều phương pháp và kỹ thuật để mang lại lợi ích, hiệu quả cao nhất cho kiểm thử hồi qui. V. KẾT LUẬN Kiểm thử hồi qui là hoạt động kiểm thử rất quan trọng trong bất kỳ dự án phát triển phần mềm nào. Kiểm thử hồi qui là hoạt động tốn kém về mặt thời gian và chi phí cho dự án nhưng không thể không thực hiện. Do sự quan trọng và chi phí của hoạt động kiểm thử hồi qui mà cho đến nay có rất nhiều nghiên cứu liên quan nhằm giúp cho các dự án phần mềm, đặc biệt là các dự án phát triển ứng dụng di động theo phương pháp linh hoạt tiết kiệm được chi phí và thời gian, mang lại hiệu quả cho dự án. Việc kết hợp phương pháp lựa chọn ca kiểm thử với phương pháp giảm thiểu hóa số lượng ca kiểm thử và thực hiện ưu tiên hóa ca kiểm thử sẽ mang lại hiệu quả cao cho kiểm thử hồi qui. Đồng thời với đó là chiến lược thực hiện, quy trình thực hiện kiểm thử để nâng cao hiệu quả cho kiểm thử hồi qui của dự án phần mềm ứng dụng di động trong môi trường phát triển linh hoạt. Thuật toán được đề xuất sẽ cải tiến việc tối ưu lựa chọn ca kiểm thử (tối thiểu hóa) và ưu tiên chọn ca kiểm thử cho kiểm thử hồi qui của phiên bản sửa đổi mã nguồn một chương trình mà cho phép thực thi với ít ca kiểm thử hơn và phát hiện lỗi sớm hơn ngay ở giai đoạn lập trình (mức đơn vị, theo phương pháp TDD). Việc phát hiện lỗi sớm hơn trong thử nghiệm hồi qui sẽ cung cấp thông tin phản hồi sớm về hệ thống được kiểm thử và do đó hoạt động gỡ lỗi có thể bắt đầu sớm hơn, tiết kiệm chi phí nhiều hơn. Hạn chế của nghiên cứu này là chưa thực nghiệm được một cách đầy đủ quy trình và các bước giải pháp đề xuất để đánh giá hiệu quả của phương pháp. Bên cạnh đó, việc thực nghiệm và đánh giá thuật toán trên các hàm, thủ tục, môđun đơn lẻ. Định hướng phát triển trong thời gian tới là xây dựng thành các plugin cho các IDE phát triển ứng dụng di động hoặc công cụ độc lập để hỗ trợ kỹ sư phần mềm, nhóm dự án Scrum thực hiện có hiệu quả hoạt động kiểm thử hồi qui cho phát triển các dự án phần mềm ứng dụng di động ở mức đơn vi (unit) và tích hợp (CI). Ngoài ra, phương pháp và thuật toán này cũng có thể mở rộng và điều chỉnh để áp dụng cho tất cả các loại ứng dụng PC, hay ứng dụng web và đồng thời kết hợp triển khai các kỹ thuật RTS, TCP của các nghiên cứu [7,8,30] để có được công cụ hỗ trợ đa dạng, mang tính tổng quát và bao phủ rộng nhằm mang lại hiệu quả và nâng cao chất lượng cho phần mềm. TÀI LIỆU THAM KHẢO [1] Jiantao Pan, Software Testing, Carnegie Mellon University, 1999, https://users.ece.cmu.edu/~koopman/des_s99/sw_testing/ [2] Leitner, A., Ciupa, I., Oriol, M., Meyer, B., Fiva, A., "Contract Driven Development = Test Driven Development – Writing Test Cases", Proceedings of the 6th joint meeting of the European software engineering conference and the ACM SIGSOFT sympo- sium on The foundations of software engineering, ESEC-FSE '07, pp. 425-434, 2007. [3] Jerry Gao et al, "Mobile Application Testing: a Tutorial", Computer, Vol.47, No. 2, pp.46-55, Feb.2014, doi:10.1109/MC.2013.445. [4] Parvez, A. W. M. M., ―An Efficient Model for Mobile Application Regression Test for Agile Scrum Software Development‖, Advances in Computer Science and its Applications, 2(2), 339-344, 2012. [5] Dehlinger, Josh, and Jeremy Dixon, "Mobile application software engineering: Challenges and research directions", Workshop on Mobile Software Engineering, Vol. 2, 2011. [6] Mansour, Nashat, and Khalid El-Fakih, "Simulated annealing and genetic algorithms for optimal regression testing", Journal of Software Maintenance 11.1, pp.19-34, 1999. [7] Duggal, G., & Suri, B., ― Understanding regression testing techniques‖, In Proceedings of 2nd National Conference on Challenges and Opportunities in Information Technology, 2008. [8] Beena, R., and S. Sarala, "Code coverage based test case selection and prioritization", arXiv preprint arXiv:1312.2083 ,2013 [9] Yogita Garg, Arun P. Agrawal, ―Implementation of Test Case Prioritization Technique Using Static Path‖, International Journal of Advanced Research in Computer Science and Software Engineering, ISSN: 2277 128X, Volume 3, Issue 8, August 2013, Available online at: www.ijarcsse.com [10] Spillner, Andreas, Tilo Linz, and Hans Schaefer, Software testing foundations: a study guide for the certified tester exam, Rocky Nook, Inc., 2014. [11] Nguyễn Đức Mận, Huỳnh Quyết Thắng, Trần Xuân Hoàng, ―Một số kỹ thuật áp dụng trong mô hình kiểm thử mã nguồn cho các phương thức của lớp trong Java‖, Kỷ yếu Hội thảo quốc gia lần thứ XVII: Một số vấn đề chọn lọc của Công nghệ thông tin và truyền thông-Đắk Lắk,30-31/10/2014, trang 167-174, ISBN 978-604-67-0426-3,2014. [12] M. J. Harrold, R. Gupta, and M. L. Soffa, ―A methodology for controlling the size of the test suite‖, ACM Transaction on Software Engineering and Methodology, Volume 2, Issue 3, pp. 270-285, July 1993. [13] Meenakshi and Rajvir Singh, ―Regression Testcase Selection in Agile Environment‖, International Journal for Scientific Research & Development, ISSN (online): 2321-0613, Vol. 3, Issue 05, pp. 570-576, 2015. [14] Arora, A., & Chauhan, N., ―A regression test selection technique by optimizing user stories in an agile environment‖, Proceedings of Advance Computing Conference (IACC), 2014 IEEE International, pp. 1454-1458, 2014. Huỳnh Quyết Thắng, Nguyễn Đức Mận, Nguyễn Thị Bảo Trang, Nguyễn Thị Anh Đào 265 [15] Sebastian Elbaum, Praveen Kallakuri, Alexey G. Malishevsky, Gregg Rothermel, Satya Kanduri, ―Understanding the Effects of Changes on the Cost-Effectiveness of Regression Testing Techniques‖, Journal of Software Testing, Verification, and Reliability, 13(2) pp. 65-83, June 2003. [16] H. Leung and L. White, ―Insights into regression testing‖, Proceedings of the Conference on Software Maintenance, ICSM '89, pp. 60-69, Oct. 1989. [17] Srinivasan Desikan, Software Testing: Principles and Practice, Pearson Education India, 2007. [18] Y. Chen, D. Rosenblum, and K. Vo. TestTube, ―A system for selective regression testing‖, Proceedings of the 16th International Conference on Software Engineering, pp. 211-222, May 1994. [19] Swarnendu Biswas and Rajib Mall, at el, ―Regression Test Selection Techniques: A Survey‖, Informatica 35(3) pp. 289–321, 2011. [20] R. Gupta, M. J. Harrold and M. Soffa, ―An approach to regression testing using slicing‖, Proceedings of the Conference on Software Maintenance, ICSM '92, pp. 299-308, Nov. 1992. [21] G. Rothermel, R.H. Untch, C. Chu, and M.J. Harrold, ―Prioritizing Test Cases for Regression Testing‖, IEEE Trans. Software Eng., Vol. 27, No. 10, pp. 929-948, Oct. 2001. [22] H. Agrawal, J. R. Horgan and E. W. Krauser, ―Incremental regression testing‖, Proceedings of the Conference on Software Maintenance, ICSM '93, pp. 348-357,1993. [23] Sebastian Elbaum, Alexey G. Malishevsky, and Gregg Rothermel, ―Test case prioritization: A family of empirical studies‖, IEEE Transactions on Software Engineering, Vol. 28, No.2, pp. 159-182, Feb. 2002. [24] Zheng Li, Mark Harman, and Robert M. Hierons, ―Search algorithms for regression test case prioritization‖, IEEE Trans. On Software Engineering, Vol. 33, No.4, pp. 225-237, April 2007. [25] Ajay Kumar Jha, ―A Risk Catalog of Mobile Applications‖, Florida Institute of Technology Theses, 2007. (truy cập ngày 10/5/2016) [26] K. K. Aggrawal, Yogesh Singh, A. Kaur, ― Code coverage based technique for prioritizing test cases for regression testing‖, ACM SIGSOFT Software Engineering Notes, Vol. 29 Issue 5, September 2004. [27] W. E. Wong, J. R. Horgan, S. London and H.Agrawal, ―A study of effective regression testing in practice‖, In Proceedings of the 8th IEEE International Symposium on Software Reliability Engineering (ISSRE' 97), pages 264-274, November 1997. [28] Yogesh Singh, Arvinder Kaur, Bharti Suri, ―A new technique for version-specific test case selection and prioritization for regression testing‖, Journal of the CSI, Vol. 36 No.4, pp. 23-32, October-December 2006. [29] Mishra, K. K., Kumar, A., & Misra, A. K., ―A novel approach for minimizing and prioritizing test suite‖, Engineering Science Letters, Vol 2014 (2014), Article ID 1. [30] Badhera, U., Purohit, G. N., & Biswas, D., ―Test case prioritization algorithm based upon modified code coverage in regression testing‖. Int. J. Soft. Eng. Applic, 3, pp. 29-37, 2012. [31] Todd l. Graves, Mary Jean Harrold, at el, ―An Empirical Study of Regression Test Selection Techniques‖, ACM Transactions on Software Engineering and Methodology, Vol. 10, No. 2, Pages 184 –208, April 2001. [32] Cibulski, H., & Yehudai, A., ―Regression test selection techniques for test-driven development‖, Proceedings of Fourth International Conference on Software Testing, Verification and Validation Workshops, ICSTW 2011, pp. 115-124. [33] Beginners Guide to Regression Testing for QA Engineers, (truy cập ngày 17/4/2016). [34] Mobile testing tools, (truy cập ngày 17/4/2016). [35] Sourcecode Visualizer, AN EFFECTIVE REGRESSION TESTING TECHNIQUE FOR MOBILE APPLICATION DEVELOPMENT Huynh Quyet Thang, Nguyen Duc Man, Nguyen Thi Bao Trang, Nguyen Thi Anh Dao ABSTRACT— Regression testing of mobile applications is a kind of test to check whether the action as improvements, patches or configuration change did not bring a new regression, or errors, in both functional and non-functionality of a mobile application system. Many mobile applications are widely used in industries like games, banking, retail, tourism, healthcare, health, sports, news, and so on. Therefore, before releasing a mobile application we need to make sure that it works correctly without errors. During the time of improvement mobile application (enhancements, patches or configuration changes...) the new errors will arise in functional and non-functional features of the system. Regression testing is used to ensure that the quality of mobile applications is still guaranteed after any changes in the software. Therefore, regression testing is part of the testing life cycle and is an important test types. However, regression testing is costly for the time and effort but is not allowed to ignore. The problems of choosing the test (test suite), test-cases selection, test case prioritization and how to automatic test-case selection are the solution to improve the efficiency of regression testing. In this paper, we propose a technique that combines selected test cases, identify priorities and to minimize the number of test cases that coverage modified source code of a program. The proposed technique is apllied for mobile applications regression testing in agile process. Experimental results show efficiency for regression testing on cost and time.
File đính kèm:
- ky_thuat_kiem_thu_hoi_qui_hieu_qua_cho_phat_trien_ung_dung_d.pdf