Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 64 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
64
Dung lượng
1,71 MB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN THỊ HỒNG NHUNG NGHIÊN CỨU SINH MÃ KIỂM THỬ TỰ ĐỘNG DỰA TRÊN KỊCH BẢN KIỂM THỬ HƯỚNG HÀNH VI LUẬN VĂN THẠC SĨ Ngành: Kỹ thuật phần mềm HÀ NỘI- 2018 ĐẠI HỌC QUdỐẫnC dGIAẫn HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN THỊ HỒNG NHUNG NGHIÊN CỨU SINH MÃ KIỂM THỬ TỰ ĐỘNG DỰA TRÊN KỊCH BẢN KIỂM THỬ HƯỚNG HÀNH VI Ngành: Công nghệ thông tin Chuyên ngành: Kỹ thuật phần mềm Mã số: 60480103 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: PGS.TS TRƯƠNG ANH HỒNG HÀ NỘI - 2018 i TĨM TẮT Tóm tắt: Trong lĩnh vực làm phần mềm ngày có nhiều cơng việc tự động hóa Kiểm thử giai đoạn làm phần mềm tốn nhiều chi phí nguồn nhân lực chuyên gia, kỹ sư đảm bảo chất lượng phần mềm, để tự động đơn giản hóa q trình kiểm thử vấn đề quan tâm Luận văn tập trung nghiên cứu kiểm thử tự động hướng hành vi, nghĩa kiểm thử chấp nhận hành vi người dùng Từ việc nghiên cứu sinh mã kiểm thử động công cụ kiểm thử tự động luận văn tìm hiểu việc ứng dụng kĩ thuật kiểm thử tự động kiểm thử dựa kịch kiểm thử hướng hành vi Bằng việc thực nghiệm công cụ kiểm thử với kịch dạng ngơn ngữ tự nhiên có cấu trúc, từ kết kiểm thử tự động, luận văn đưa đánh giá, nhận xét đề xuất phương pháp cải tiến công cụ tự động kiểm thử phần mềm hướng hành vi Từ khóa: kiểm thử, kiểm thử tự động, kiểm thử hướng thành phần, kiểm thử hướng hành vi ii LỜI CẢM ƠN Trước tiên xin dành lời cảm ơn chân thành đến thầy giáo, PGS TS Trương Anh Hoàng – Thầy giúp tơi định hướng q trình nghiên cứu học tập khoa CNTT, đồng thời thầy người hướng dẫn, khích lệ tơi q trình học tập hồn thành luận văn Tơi xin gửi lời cảm ơn tới thầy cô giáo khoa Công nghệ thông tin, trường Đại học Công nghệ, ĐHQGHN đào tạo, cung cấp cho kiến thức tơi suốt q trình học tập, nghiên cứu trường Tôi xin cảm ơn tất người thân u gia đình tơi tồn thể bạn bè, đồng nghiệp khoa CNTT, trường ĐH CNVT người giúp đỡ, động viên, tạo điều kiện thuận lợi cho tơi học tập nghiên cứu chương trình thạc sĩ Đại học Công nghệ, ĐH QGHN Tôi xin chân thành cảm ơn! Học viên thực Nguyễn Thị Hồng Nhung iii LỜI CAM ĐOAN Tôi xin cam đoan đề tài nghiên cứu sinh mã kiểm thử tự động dựa kiểm thử hướng hành vi trình bày luận văn thực hướng dẫn PGS.TS Trương Anh Hồng, khơng chép kết nghiên cứu tác giả khác Nội dung luận văn có tham khảo số tài liệu sử dụng nguồn từ viết, tạp chí nêu đầy đủ mục tài liệu tham khảo Hà Nội, ngày tháng năm 2018 Học viên thực Nguyễn Thị Hồng Nhung iv MỤC LỤC LỜI CẢM ƠN ii LỜI CAM ĐOAN iii MỤC LỤC iv DANH MỤC TỪ VIẾT TẮT vi DANH MỤC BẢNG BIỂU vii DANH MỤC HÌNH VẼ viii CHƯƠNG 1: MỞ ĐẦU 1.1 Khái quát vấn đề 1.2 Giải pháp 1.3 Bố cục luận văn CHƯƠNG 2: MỘT SỐ KIẾN THỨC NỀN TẢNG 2.1 Phát triển phần mềm dựa phương pháp Agile 2.2 Phát triển phần mềm hướng kiểm thử (TDD) 2.3 Phát triển hướng BDD 2.4 Xử lý ngôn ngữ tự nhiên 11 2.5 Khái quát tự động kiểm thử BDD 12 CHƯƠNG 3: MỘT SỐ CÔNG CỤ KIỂM THỬ TỰ ĐỘNG HƯỚNG HÀNH VI 13 3.1 Công cụ kiểm thử Cucumber 13 3.2 Công cụ kiểm thử Jasmine 14 3.3 Công cụ kiểm thử Rspec 19 CHƯƠNG 4: THỰC NGHIỆM FRAMEWORK KIỂM THỬ TỰ ĐỘNG VÀ ĐÁNH GIÁ 21 4.1 Các thành phần Framework kiểm thử sử dụng Cucumber 21 4.1.1 Công nghệ Java 21 4.1.2 Selenium Webdriver 28 4.1.3 Cucumber 31 4.2 Báo cáo kết kiểm thử 38 4.3 Đánh giá Framework kiểm thử 41 v 4.4 Phương pháp sinh mã kiểm thử tự động 42 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 52 TÀI LIỆU THAM KHẢO 54 vi DANH MỤC TỪ VIẾT TẮT Ký hiệu BDD NLP TDD vii DANH MỤC BẢNG BIỂU Bảng 3-1 Ngôn ngữ Gherkin 14 Bảng 4-1 Các câu lệnh thường dùng Selenium Webdriver 30 Bảng 4-3 Thời gian chạy kịch kiểm thử tự động 41 Bảng 4-4 Mô tả phương pháp sinh thân hàm cho kịch đăng nhập trang stackoverflow.com 49 Bảng 4-5 Mô tả phương pháp sinh thân hàm cho kịch đăng nhập vào trang web demo 50 viii DANH Hình 1-1 Hình 2-1 Tiến trình sinh mã Quy trình TDD Hình 2-2 Mơ hình BDD – T Hình 3-1 Kiểm thử với Jasm Hình 3-2 Chạy Kịch kiể Hình 3-3 Chạy ca kiểm thử Hình 3-4 Cấu trúc bước Hình 4-1 Các thành phần Fr Hình 4-2 Tìm kiếm thư viện Hình 4-3 Cài đặt thư viện M Hình 4-5 Hình Cấu trúc dự án M 4-6 Hình 4-7 Kiểm tra cài đặt cá Các Hooks C Hình 4-8 Quy trình kiểm thử Hình 4-9 Các steps sin Hình 4-10 Chạy kịch kiểm thử Hình 4-11 Thực thi ca kịch kiểm thử web Hình 4-12 Cấu trú Hình 4-13 Cấu trú Hình 4-14 Cấu hì Hình 4-15 Báo cá Hình 4-16 Báo cá 40 Hình 4-14 Cấu hình để sinh báo cáo kiểm thử Kết dạng file report.html cho kịch kiểm thử: 41 Hình 4-15 Báo cáo kiểm thử dạng report.html Hình 4-16 Báo cáo kiểm thử dạng html 4.3 Đánh giá Framework kiểm thử Framework kiểm thử tự động với tích hợp nhiều công cụ kiểm thử tự động cách sử dụng phù hợp với kiểm thử ứng dụng web hoàn toàn kiểm thử tự động theo hướng kiểm thử hướng hành vi, tạo thuận lợi cho nhiều bên liên quan mang lại hiệu cao, tiết kiệm thời gian nhân lực Với kịch kiểm thử viết ngôn ngữ tự nhiên, bên liên quan dự án phát triển phần mềm dễ dàng hiểu dự án theo dõi hoàn thiện phần mềm mà cụ thể kiểm thử ứng dụng web Từ kết kiểm thử ca kiểm thử đăng nhập vào trang web hình [4-15] ta thấy thời gian kiểm thử kịch kiểm thử viết feature là: 14s + 76 ms , đồng thời bước kịch kiểm thử sau: Bảng 4-3 Thời gian chạy kịch kiểm thử tự động Bước kiểm thử Given User navigates to stackoverflow website User click on the login buton on homepage User enter valid username User enter valid password User click on the login button User should be taken to the successful login page 42 Từ kết kiểm thử, với thông số chi tiết thời gian tự động chạy kịch kiểm thử nhanh giảm thiểu tối đa thời gian kiểm thử Với đặc trưng kiểm thử chấp nhận tốn nhiều chi phí nguồn nhân lực thời gian kiểm thử sử dụng cơng cụ kiểm thử tự động làm giảm thiểu tối đa chi phí khơng cần thiết kiểm thử Tuy nhiên, phần thân ca kiểm thử tự động sinh có phương thực tên hàm ánh xạ từ kịch kiểm thử hướng hành vi Do vậy, cần sinh nhiều mã thực thi kiểm thử framework trở nên hữu ích đạt mục đích hồn tồn tự động kiểm thử hướng hành vi 4.4 Phương pháp sinh mã kiểm thử tự động Việc tạo mã tự động có tác động sâu sắc đến dự án phần mềm, chi phí phần mềm giảm, chu trình phát triển rút ngắn, chất lượng phần mềm đạt tối ưu Trong phát triển phần mềm hướng hành vi, kịch kiểm thử cung cấp thông tin ban đầu làm sở cho thiết kế phần mềm bên liên quan Tuy nhiên kịch ca kiểm thử mô tả lại theo cấu trúc định để tự động hố sinh ca kiểm thử tự động Vì vậy, nội dung này, luận văn đề xuất phương pháp để sinh thân hàm ca kiểm thử dựa quy trình xử lý ngơn ngữ tự nhiên, bước đầu tự động hoá chi tiết quy trình kiểm thử Có thể thấy ca kiểm thử dựa kịch kiểm thử hướng hành vi theo quy trình sau: Kịch -> Các bước kiểm thử -> Khung ca kiểm thử -> Thực thi Ví dụ: Scenario (Kịch bản): Feature: Login in account Existing account login successful Scenario: Login into account with correct details Step definition (Mô tả bước) Given User navigates to demo website And User click on the button login on website homepage 43 And User enter a valid username And User enter a valid password When User click on the login button Then User should be taken to the successful login page Code skeleton (Khung phương thức) @Given("^User navigates to demo website$") public void user_navigates_to_demo_website() throws Throwable { / Write code here that turns the phrase above into concrete actions throw new PendingException(); } @Given("^User click on the button login on website homepage$") public void user_click_on_the_button_login_on_website_homepage() throws Throwable { / Write code here that turns the phrase above into concrete actions throw new PendingException(); } @Given("^User enter a valid username$") public void user_enter_a_valid_username() throws Throwable { / Write code here that turns the phrase above into concrete actions 44 throw new PendingException(); } @Given("^User enter a valid password$") public void user_enter_a_valid_password() throws Throwable { / Write code here that turns the phrase above into concrete actions throw new PendingException(); } @When("^User click on the login button$") public void user_click_on_the_login_button() throws Throwable { / Write code here that turns the phrase above into concrete actions throw new PendingException(); } @Then("^User should be taken to the successful login page$") public void user_should_be_taken_to_the_successful_login_page() throws Throwable { / Write code here that turns the phrase above into concrete actions throw new PendingException(); } Implementation(Mã thực thi) @When("^User navigates to demo website$") public void user_navigates_to_demo_website() throws Throwable { 45 Write code here that turns the phrase above into / concrete actions driver.get("https://stackoverflow.com"); } @And("^User click on the button login on website homepage$") public void user_click_on_the_button_login_on_website_homepage() throws Throwable { //a[text()='Log In'] Thread.sleep(200); driver.findElement(By.xpath("//a[text()='Log In']")).click(); } @And("^User enter a valid username$") public void user_enter_a_valid_username() throws Throwable { Thread.sleep(200); driver.findElement( By.xpath((".//*[@id='email']"))).sendKeys("autotestudemy@g mail.com"); } @And("^User enter a valid password$") public void user_enter_a_valid_password() throws Throwable { / Write code here that turns the phrase above into concrete actions Thread.sleep(200); 46 driver.findElement(By.xpath(".//*[@id='password']")).s endKeys("Password321!"); } @When("^User click on the login button$") public void user_click_on_the_login_button() throws Throwable { Write code here that turns the phrase above into / concrete actions driver.findElement(By.xpath(".//*[@id='submitbutton']")).click(); } @Then("^User should be taken to the successful login page$") public void user_should_be_taken_to_the_successful_login_page() throws Throwable { / Write code here that turns the phrase above into concrete actions } Với Framework kiểm thử tự động mục trên, từ kịch kiểm thử viết ngôn ngữ tự nhiên - > tự động sinh phương thức kiểm thử (khung kiểm thử) Tuy nhiên với mã thực thi kiểm thử để tự động chạy ca kiểm thử, người phát triển phải tự viết bước kiểm thử dạng ngôn ngữ máy để chạy kịch tự động Vì vậy, luận văn đề xuất phương án để sinh mã kiểm thử tự động từ kịch dạng ngôn ngữ Gherkin, để sinh mã kiểm thử tự động để thực thi chương trình Với ứng dụng xử lý ngôn ngữ tự nhiên áp dụng học máy, cần có liệu đủ lớn để từ kịch ngơn ngữ tự nhiên tự động 47 sinh mã kiểm thử theo dạng ngôn ngữ để framework tự động thực thi lệnh kiểm thử dựa kịch kiểm thử hướng hành vi ngôn ngữ tự nhiên 4.4.1 Phương pháp xử lý ngôn ngữ tự nhiên Stanford parser (Phân tích cú pháp) Stanford parser mã nguồn mở cơng bố nhóm Stanford NLP, phần tích cấu trúc câu ngơn ngữ khác trả cấu trúc (PST) biểu diễn ngữ nghĩa câu PST không tuần hồn với đỉnh gốc biểu diễn câu, chóp biểu diễn cho cấu trúc ngữ pháp.… Trong toán sinh mã kiểm thử tự động, Stanford parser đóng vai trị để xử lý cấu trúc câu mơ tả kịch bản, nhóm từ nhau, phân tích cấu trúc ngữ pháp câu Ví dụ với từ xác định từ chủ thể đối tượng động từ Xác suất phân tích dựa kiến thức ngôn ngữ để tạo khả cao câu mới, phân tích stanford parser cịn số lỗi, nhiên độ xác cao Trình phân tích xem bước đột phá lớn xử lý ngôn ngữ tự nhiên năm 1990 Cấu trúc câu phân tích cú pháp có định dạng sau: Dưới áp dụng phân tích cho câu đơn giản: “When Customer click on the button login” Sử dụng StanFord Parser phân tích câu ta được: (ROOT (SBAR (WHADVP (WRB When)) (S (NP (NN customer) (NN click on)) (VP (VBZ the) (NP (NN button) (NN login)))))) [nsubj(sentence-4, This-1), cop(sentence-4, is-2), det(sentence-4, another3), root(ROOT-0, sentence-4)] 48 Có thể thấy, từ câu gắn phần với ngơn ngữ tự nhiên Có nhóm từ để tạo thành cụm thẻ từ 4.4.2 Tập liệu Với mục đích xây dựng tệp liệu để chạy ca kiểm thử, chương trình tự động sinh thân hàm hàm kiểm thử Nội dung bước mã kiểm thử dùng để tự động chạy kiểm thử gồm hàm liệu kiểm thử Do từ gợi ý có kịch viết ngôn ngữ tự nhiên cần ánh xạ thân hàm, bước kiểm thử kiểm thử web có nội dung trùng lặp trường hợp giống hoàn tồn xử lý với quy trình xử lý ngôn ngữ tự nhiên Các liệu dùng cho kiểm thử có khối lượng lớn tuỳ thuộc vào dự án kiểm thử BDD Luận văn đưa phương án đề xuất xây dựng tập liệu kiểm thử sau (với kịch kiểm thử ca kiểm thử đăng nhập vào trang web stackoverflow.com) 49 Bảng 4-4 Mô tả phương pháp sinh thân hàm cho kịch đăng nhập trang stackoverflow.com Kịch kiểm thử User navigates to stackoverflow website User clicks on the login button on homepage User enters a valid username User enters a valid password User clicks on the login button 50 Với kịch kiểm thử cho ca kịch đăng nhập trang web demo ta có mơ tả sau: Bảng 4-5 Mô tả phương pháp sinh thân hàm cho kịch đăng nhập vào trang web demo Kịch kiểm thử User navigates to demo website User enter a valid username User enter a valid password User click on the login button 51 Từ bảng [4-4] [4-5] thấy, ta áp dụng xây dựng từ điển liệu cho ca kiểm thử nội dung kiểm thử khác Như giúp giảm thiểu đáng kể thời gian xây dựng chương trình để tự động sinh mã kiểm thử từ kịch kiểm thử viết ngôn ngữ Gherkin Tuy nhiên thân hàm sinh cịn nhiều lỗi gợi ý thân hàm kiểm thử, người lập trình cần hồn thiện lại mã thực thi để chương trình kiểm thử tự động chạy 52 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN Kết luận 1 Lý thuyết Luận văn nghiên cứu kiểm thử tự động, quy trình phát triển phần mềm hướng thành phần, cụ thể sâu vào kiểm thử hướng hành vi quy trình phát triển phần mềm theo hướng Agile Những lợi ích, thuận lợi sử dụng kiểm thử hướng hành vi phát triển phần mềm, quy trình xây dựng phần mềm theo hướng kiểm thử hướng hành vi Tìm hiểu đặc trưng kiểm thử tự động hướng hành vi ưu điểm, khuyết điểm đánh giá khả áp dụng kiểm thử tự động hướng hành vi Các phần lý thuyết liên quan xử lý ngôn ngữ tự nhiên sinh mã kiểm thử từ kịch kiểm thử ngôn ngữ tự nhiên, đưa phương pháp sinh hàm mã kiểm thử tự động 1.2 Thực nghiệm Dựa kết hợp công cụ kiểm thử hướng hành vi Cucumber, kết hợp công nghệ Java tảng kiểm thử Web với Selenium, luận văn thực thi kiểm thử hướng hành vi cách tự động ca kiểm thử tự động dựa kịch viết dạng ngôn ngữ tự nhiên ngôn ngữ Gherkin, xây dựng, thu thập, thực nghiệm sinh mã kiểm thử tự động Luận văn thực thi tự động kiểm thử ca kiểm thử web, sinh báo cáo kiểm thử đưa kết quả, đánh tính hiệu công cụ kiểm thử hướng hành vi Kết chạy ca kiểm thử chứng minh tính đắn, khả ứng dụng phát triển tự động kiểm thử theo hướng hành vi tự động cho phần mềm Giảm thiểu thời gian chi phí phát sinh quy trình phát triển phần mềm, tăng tính hiệu quả kiểm thử tự động phát triển phần mềm hướng hành vi 53 Hướng phát triển Trong luận văn tìm hiểu cơng cụ kiểm thử tự động kiểm thử hướng hành vi, đồng thời kết hợp công cụ kiểm thử tự động để xây dựng, triển khai kiểm thử tự động hướng hành vi Dựa tìm hiểu nguyên tắc xây dựng công cụ, vận hành công cụ, phần hiểu cách phát triển sở để làm công cụ kiểm thử tự động kiểm thử tự động hướng hành vi Vì vậy, thời gian tới tiếp tục nghiên cứu để phát triển công cụ kiểm thử tự động với mã kiểm thử tự động kiểm thử hoàn thiện, đầy đủ quy trình phát triển phần mềm hướng hành vi tích hợp cơng cụ kiểm thử cách hiệu xác 54 TÀI LIỆU THAM KHẢO [1] Melanie Diepenbeck, Mathias Soeken, Daniel Große, Rolf Drechsler - “Towards Automatic Scenario Generation from Coverage Information”, 2013 [2] Mathias Soeken, Robert Wille, Rolf Drechsler - “Assisted Behavior Driven Development Using NLP”, 2012 [3] Prerana Pradeepkumar Rane - “Automatic generation of Test Cases for Agile using NLP”, 2017 [4] Https://medium.com/agile-vision/behavior-driven-development-bdd- software- testing-in-agile-environments-d5327c0f9e2d [5] Sunil Kamalakar - “Automatically Generating Tests from Natural Language Descriptions of software Behavior”, 2013 [6] http://toolsqa.com/cucumber/ [7] https://jasmine.github.io [8] https://en.wikipedia.org/wiki/Behavior-driven_development [9] https://www.udemy.com/ [10] https://www.guru99.com/xpath-selenium.html [11] Victor Szalvay, Danube Technologies - “An Introduction to Agile Software Development” ,2004 [12] Lasse Koskela - “Test First model-driven development”, 2008 [13] Dan North - “Introducing BDD” March 2006 [14] David Chelimsky, Dave Astels, Zach Dennis, Aslak Hellesøy, Bryan Helmkamp, Dan North - “The Rspec Book Behavior Driven Development with Rspec, Cucumber and Friends”, 2010 [15] https://techblog.vn/index.php/tong-quan-ve-kiem-thu-tu-dong-tdd-va-bdd- trong-mo-hinh-phat-trien-phan-mem-agile ... mã kiểm thử động công cụ kiểm thử tự động luận văn tìm hiểu vi? ??c ứng dụng kĩ thuật kiểm thử tự động kiểm thử dựa kịch kiểm thử hướng hành vi Bằng vi? ??c thực nghiệm công cụ kiểm thử với kịch dạng... để tự động đơn giản hóa q trình kiểm thử vấn đề quan tâm Luận văn tập trung nghiên cứu kiểm thử tự động hướng hành vi, nghĩa kiểm thử chấp nhận hành vi người dùng Từ vi? ??c nghiên cứu sinh mã kiểm. .. Luận văn tập trung nghiên cứu kiểm thử động hướng hành vi Từ vi? ??c nghiên cứu sinh mã kiểm thử tự động công cụ kiểm thử tự động, luận văn áp dụng ứng dụng công cụ vào kiểm thử tìm hiểu phương