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

Kỹ thuật kiểm thử hồi qui hiệu quả cho phát triển ứng dụng di động trang 1

Trang 1

Kỹ thuật kiểm thử hồi qui hiệu quả cho phát triển ứng dụng di động trang 2

Trang 2

Kỹ thuật kiểm thử hồi qui hiệu quả cho phát triển ứng dụng di động trang 3

Trang 3

Kỹ thuật kiểm thử hồi qui hiệu quả cho phát triển ứng dụng di động trang 4

Trang 4

Kỹ thuật kiểm thử hồi qui hiệu quả cho phát triển ứng dụng di động trang 5

Trang 5

Kỹ thuật kiểm thử hồi qui hiệu quả cho phát triển ứng dụng di động trang 6

Trang 6

Kỹ thuật kiểm thử hồi qui hiệu quả cho phát triển ứng dụng di động trang 7

Trang 7

Kỹ thuật kiểm thử hồi qui hiệu quả cho phát triển ứng dụng di động trang 8

Trang 8

Kỹ thuật kiểm thử hồi qui hiệu quả cho phát triển ứng dụng di động trang 9

Trang 9

Kỹ thuật kiểm thử hồi qui hiệu quả cho phát triển ứng dụng di động trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 11 trang xuanhieu 3320
Bạn đang xem 10 trang mẫu của 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", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

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

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:

  • pdfky_thuat_kiem_thu_hoi_qui_hieu_qua_cho_phat_trien_ung_dung_d.pdf