1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Nghiên cứu phát triển phần mềm hướng hành vi ứng dụng công cụ behat 002

125 16 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 125
Dung lượng 680,42 KB

Nội dung

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ -o0o - ́ PHAN THI ̣GÂM NGHIÊN CƢU HƢỚNG HÀNH VI VÀƢ́NG DUNG ̣ CÔNG CỤBEHAT LUẬN VĂN THẠC SĨ NGÀNH CÔNG NGHỆTHÔNG TIN HÀ NỘI 12– 2013 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ -o0o - ́ PHAN THI ̣GÂM NGHIÊN CƢU HƢỚNG HÀNH VI VÀƢ́NG DUNG ̣ CƠNG CỤBEHAT Ngành: Cơng nghê ̣thơng tin Chun ngành: Công nghê ̣phần mềm Mã số: 60 48 10 LUẬN VĂN THẠC SĨ NGƢỜI HƢỚNG DẪN KHOA HỌC TS TRƢƠNG ANH HOÀNG HÀ NỘI – 2013 i LỜI CAM ĐOAN Tôi xin cam đoan kết đạt đƣợc luận văn sản phẩm nghiên cứu, tìm hiểu riêng cá nhân tơi Trong tồn nội dung luận văn, điều đƣợc trình bày cá nhân đƣợc tổng hợp từ nhiều nguồn tài liệu Tất tài liệu tham khảo có xuất xứ rõ ràng đƣợc trích dẫn hợp pháp Tơi xin hồn tồn chịu trách nhiệm chịu hình thức kỷ luật theo quy định cho lời cam đoan Học viên thực Phan Thị Gấm ii LỜI CẢM ƠN Tôi xin bày tỏ lòng biết ơn sâu sắc đến tất ngƣời giúp đỡ, hỗ trợ thực luận văn này, xin cảm ơn Khoa Công nghê ̣thông tin , Trƣờng Đaịhọc Công nghê, ̣Đaịhọc Quốc g ia HàNôị cho phép tạo điều kiện để thực luận văn Luận văn khơng thể hồn thành khơng có giúp đỡ bảo tận tình Thầygiáo, Tiến siTrƣơng̃ Anh Hồng , giáo viên hƣớng dẫn Em xin chân thành biết ơn bảo, định hƣớng nghiên cứu, hỗ trợ, tạo điều kiện tốt cho em suốt trình thực đề tài Con xin bày tỏ lòng biết ơn sâu sắc đến nhƣ̃ng ngƣời thân gia đinh̀ đăc ̣ biêṭlàBố, Mẹ, Chồng vàcon gái động viên, ủng hộ lúc khó khăn để có đƣợc nhƣ ngày hơm Xin chân thành cảm ơn tất quý Thầy,Cô Khoa, Trƣờng tận tình bảo, rèn luyện, truyền đạt tri thức, kỹ năng, kinh nghiệm quý báu cho suốt nhƣ̃ng năm học vừa qua Học viên thực Phan Thị Gấm iii MỤC LỤC LỜI CAM ĐOAN i LỜI CẢM ƠN ii ́ ́ DANH MUC ̣ CÁC TƢ̀ VIÊT TĂT v DANH MỤC BẢNG BIỂU vi DANH MUC ̣ HÌNH VE vi ̀ CHƢƠNG – MỞĐÂU CHƢƠNG KIỂM THỬ TRONG PHƢƠNG PHÁP PHÁT TRIỂN PHẦN ̀ MÊM LINH HOAT 1.1 Mơ hình phát triển lặp phƣơng pháp phát triển linh hoạt 1.1.1 Quy trinh̀ Scrum 1.1.2 Lập trình cực hạn 10 1.2 Kiểm thử phƣơng pháp triển linh hoạt 11 1.2.1 Kiểm thử đơn vị 13 1.2.2 Kiểm thử chấp nhận lâp ̣ trinh̀ cƣc ̣ haṇ XP 13 1.3 Đặc tả yêu cầu hệ thống câu chuyện ngƣời dùng 13 1.4 Các ky ̃thuâṭphát triển phần mềm theo hƣớng kiểm thử 16 1.4.1 Phát triển phần mềm theo hƣớng kiểm thử 16 1.4.2 Phát triển phần mềm theo hƣớng kiểm thử chấp nhận 20 1.4.3 Môṭsốvấn đềcủa phát triển phần mềm dƣạ vào kiểm thƣƣ 22 ̀ CHƢƠNG PHÁT TRIỂN PHÂN MỀM HƢỚNG HÀNH VI 24 2.1 Tổng quan về phát triển phần mềm hƣớng hành vi 24 2.2 Nguyên lý hoạt động 25 2.3 Quy trình phát triển phần mềm theo hƣớng hành vi 27 2.3.1 Đặc tả hành vi ƣ́ng dung ̣ 29 2.3.2 Viết kiểm thƣƣ cho bƣớc 30 2.3.3 Lăp ̣ đểcài đăṭƣ́ng dung ̣ 31 2.4 Ngôn ngữ đặc tả ứng dụng 31 CHƢƠNG CÔNG CỤ BEHAT 35 3.1 Giới thiệu công cụ Behat 35 3.1.1 Cơng cụ dịng lệnh Behat 35 3.1.2 Cấu trúc thƣ mục 36 3.2 Cách sử dụng Behat 36 3.2.1 Xác định tính 36 3.2.2 Sử dụng Gherkin để viết tính 37 3.2.3 Xây dƣng ̣ định nghĩa bƣớc 43 3.2.4 Móc nối trình kiểm thử kiện 48 3.2.4.1 Các kiện Behat 48 iv 3.2.4.2 Hooks 49 3.2.5 Kiểm thử tính – lớp FeatureContext 50 3.3 Phát triển ứng dụng Web với Mink 51 3.4 Lớp MinkContext 52 3.5 Cấu hình Behat với behat.yml 55 ̀ ̀ CHƢƠNG ÁP DỤNG PHÁT TRIỂN PHÂN MÊM HƢỚNG HÀNH VI VÀ CÔNG CỤ BEHAT 60 4.1 Giai đoaṇ chuẩn bi ̣ 60 4.2 Tiến trinh̀ thƣc ̣ hiêṇ ƣ́ng dung ̣ 61 4.3 Áp dụng phát triển hƣớng hành vi cơng cụ Behat 63 4.3.1 Tính “Xem trang chủ” 63 4.3.2 Tính “Đăng ký thành viên” 70 4.4 Nhận xét kết luận 92 ́ KÊT LUÂN 95 TÀI LIỆU THAM KHẢO 97 PHỤ LỤC 98 v DANH MUC ̣ CÁC TƢ̀VIẾT TẮT JS CSS HTTP API Ajax DOM XP TDD ATDD BDD JavaScript Cascading Style Sheets Giao thƣ́c HTTP Application Programming Interface Asynchronous Javascript and XML Document Object Model eXtreme Programming Test Driven Development Acceptance Test Driven Development Behaviour Driven Development vi DANH MỤC BẢNG BIỂU Bảng 3-1 Các thuộc tính lệnh behat 35 Bảng 3-2 MinkContext với đinḥ nghiã bƣớc đểtaọ yêu cầu 53 Bảng 3-3 MinkContext đinḥ nghiã với bƣớc tƣơng tác Form 54 Bảng 3-4 MinkContext định nghĩa bƣớc cho DOM 55 Bảng 3-5 MinkContext với bƣớc kiểm tra hồi đáp trang 55 DANH MUC ̣ HÌNH VE Hình 1-1 Mơ hình phát triển lặp Hình 1-2 Quy trinh̀ Scrum Hình 1-3 Vịng đời dự án XP .11 Hình 1-4 Nguyên lýTDD 17 Hình 1-5 Vịng đời phần mềm phát triển theo TDD 18 Hình 1-6 Quy trinh̀ ATDD .21 Hình 2-1 Tiến trinh̀ phát triển phần mềm hƣớng hành vi 28 Hình 3-1 Cấu trúc thƣ muc ̣ làm viêc ̣ Behat 36 Hình 3-2 Cấu trúc chung môṭtinh́ bằng Gherkin 38 Hình 3-3 Mơ tả tính 41 Hình 3-4 Các kiện Hook Behat .49 Hình 3-5 Cấu hinh̀ behat.yml 56 Hình 4-2 Tiến hinh̀ áp dung ̣ BDD vàBehat đểphát triển ƣ́ng dung ̣ 62 Hình 4-3 Tính trang chủ hệ thống 63 Hình 4-4 Sử dụng điều khiển trình duyệt Selenium 80 -1- ̀ CHƢƠNG – MỞ ĐÂU Chất lƣơng ̣ làmôṭtrong nhƣ̃ng yếu tốquan ̣ sản phẩm phần mềm Lỗi phần mềm không chi anh hƣơng đến dƣ liêụ, hoạt động quan tổ chƣc sƣ dung ̣ phần mềm ma anh hƣơng đến tinh maṇ ́́ ́ƣ Nhƣng haṇ chếhay ́̃ thống đo mang laị Đặc biệt, thi ̣trƣơng canḥ tranh chất lƣơng ̣ cao nhƣ hiêṇ ́́ môṭphần mềm nghiêm ̣ tới danh tiếng , thƣơng hiêụ vàuy tin ́ cơng ty sản xuất phần mềm Chính lý đảm bảo chất lƣợng phần mềm vấn đề quan trọng ngày cần đƣơc ̣ quan tâm hàng đầu linh̃ vƣc ̣ phát triển phần mềm Tuy nhiên, môṭphần mềm chất lƣơng ̣ cao cũng cóthểgăp ̣ thất baịtrên thi ̣ trƣờng phần mềm đókhơng đáp ƣ́ng đƣơc ̣ nhu cầu khách hàng Các công ty sản xuất phần mềm cố gắng đƣa hệ thống với tinh ́ đểcanḥ tranh với nhàcung cấp khác Với đa phần ̣thống thƣơng mại, thời điểm bắt đầu dự án , đội phát triển không thu thập đƣợc yêu cầu thƣc ̣ sƣ ̣tƣ khach hang phong đoan va trƣơng hơp ̣ tồi tê ̣cac tinh đo ́ƣ hơp ̣ vơi mong muốn cua khach hang ́́ dụng mơ tả tƣờng minh đ ể u cầu khơng bị sai lệch q trình phát triển phần mềm vấn đề lớn nhàsản xuất Thông qua quátrinh̀ sƣƣ dung ̣ phần mềm , ngƣời sƣƣ dung ̣ se ̃dê ̃hinh ̀ dung hoạt động hệ thống hiểu rõ vềnghiêp ̣ vu ̣ vàmiền ƣ́ng dung ̣ , đókhách hàng dê đ̃ ƣa ýtƣởng cho tinh́ bổ sung chúng Đây hạn chế lớn phƣơng pháp phát triển phần mềm truyền thống , bởi cósƣ ̣bổsung hoăc ̣ t hay đổi yêu cầu phần mềm phát triển dê ̃ phávỡ cấu trúc ̣thống Trong phƣơng pháp phát triển phần mềm truyền thống , khách hàng cũng đƣợc tiếp xúc với phần mềm sau yêu cầu phần mềm đƣơc ̣ cai đăṭhoàn thiện, đo viêc ́̀ -90} If($("span.val_tendn").html() !=””) { validation_holder = 1; } }), Và đọan mã ki ểm tra sƣ ̣tồn taịTên đăng nh ập ̣thống ởtâp ̣ tin process.php if($msg=="") { $sql = "select * from thanh_vien where tendn='$tendn'"; $rs = mysql_query($sql); if( mysql_num_rows($rs) >0) $msg ="tendn_false"; } Sau hoàn thiêṇ phần ma ̃nguồn trên, sƣƣ dung ̣ Behat đểkiểm tra phần ma ̃ vƣ̀a bổsung Kết quảgoịlênḥ behat lần thƣ́ hai nhƣ sau: scenario (1 passed) steps (8 passed) 0m12.051s Kịch bản thứ bảy: Kiểm tra Email: Email tồn ̣thống Tƣơng tƣ ̣nhƣ “Tên đăng nhâp” ̣, ̣thống không cho phép cóhai thành viên đăng kýhê ̣thống bởi cùng môṭemail, kịch cho trƣờng hợp sử dụng nhƣ sau: @javascript Scenario: Kiểm tra Email: Email tồn tại hệ thống When I follow "Đăng ký" And I fill in "Họ tên" with random text And I fill in "Tên đăng nhập" with "admin" And I fill in "Email" with "testbdd@example.com" And I fill in "Mật khẩu" with "1234" And I fill in "Nhắc lại mật khẩu" with "1234" And I fill in "Địa chỉ" with random text And I fill in "Điện thoại" with "0988998989" And I select "June" from "thang" And I select "21" from "ngay" And I select "1984" from "nam" And I press "Đăng ký" And I wait for error box appear Then I should see error message "Email tồn tại hệ thống" And I should see error message for "email" is bounded red Sau bổsung cac kiểm thƣ kicḥ ban Kết qua goịlênḥ behat lần thƣ hai nhƣ sau: ́ƣ -91@javascript Scenario: Kiểm tra Email: Email không hợp lệ # features/dangky.feature:84 When I follow "Đăng ký" # FeatureContext::clickLink() # FeatureContext::iFillInWithRandomText() And I fill in "Tên đăng nhập" with "admin" # FeatureContext::fillField() # FeatureContext::fillField() And I fill in "Mật khẩu" with "1234" # FeatureContext::fillField() And I fill in "Nhắc lại mật khẩu" with "1234" # FeatureContext::fillField() And I fill in "Địa chỉ" with random text # FeatureContext::iFillInWithRandomText() And I fill in "Điện thoại" with "0988998989" # FeatureContext::fillField() # FeatureContext::selectOption() And I select "21" from "ngay" # FeatureContext::selectOption() And I select "1984" from "nam" # FeatureContext::selectOption() And I press "Đăng ký" # FeatureContext::pressButton() And I wait for error box appear # FeatureContext::iWaitForErrorBoxAppear() Then I should see error message "Email tồn tại hệ thống" # FeatureContext::iShouldSeeErrorMessage() And I should see error message for "email" is bounded red # FeatureContext::errorMessageForIsBoundedRed() scenario (1 passed) 16 steps (16 passed) 0m13.366s Kịch bản thứ tám: Kiểm tra Họ tên, Ngày sinh: Họ tên, Ngày sinh không đƣợc để trống Tƣơng tƣ ̣cách thƣc ̣ hiêṇ kicḥ , ta cókicḥ vàkết kiểm thƣƣ kicḥ sau đa ̃viết ma ̃cho ƣ́ng dung ̣ nhƣ sau: @javascript Scenario: Kiểm tra các liệu nhập: Họ tên không để trống # features/dangky.feature:102 When I follow "Đăng ký" # FeatureContext::clickLink() -92And I fill in "Họ tên" with "" # FeatureContext::fillField() And I fill in "Tên đăng nhập" with "admintest" # FeatureContext::fillField() And I fill in "Email" with "testbdd1@example.com" # FeatureContext::fillField() And I fill in "Mật khẩu" with "1234" # FeatureContext::fillField() And I fill in "Nhắc lại mật khẩu" with "1234" # FeatureContext::fillField() And I fill in "Địa chỉ" with random text # FeatureContext::iFillInWithRandomText() And I fill in "Điện thoại" with "0988998989" # FeatureContext::fillField() And I press "Đăng ký" # FeatureContext::pressButton() And I wait for error box appear # FeatureContext::iWaitForErrorBoxAppear() Then I should see error message "Họ tên không rỗng" # FeatureContext::iShouldSeeErrorMessage() And I should see error message for "hoten" is bounded red # FeatureContext::errorMessageForIsBoundedRed() scenario (1 passed) 13 steps (13 passed) 0m12.937s Nhƣ vâỵ, tính đăng ký thành viên có tám kịch sử dụng cho trƣơng hơp ̣ kiểm tra dƣ liêụ khac Kịch tƣơng đối đầy đủ ràng ́̀ buôc ̣ va co sƣ dung ̣ bô ̣điều khiển trinh duyêṭđểkiểm thƣ javascript ́̀ ́́ ƣ trình thực , kicḥ ban lênḥ behat kiểm thƣ kicḥ ban vƣa viết đểnhâṇ cac khung đinḥ nghia bƣơc (nếu ́ƣ có), viết đinḥ nghiã bƣớc (nếu có) bổ sung mã nguồn tƣơng ứng để kiểm thƣƣ thành công Khi sƣƣ dung ̣ Behat , kịch cuối tính , cơng việc đƣợc giảm tải bởi Behat s dụng lại định nghĩa bƣớc đƣợc khai báo cho kịch trƣớc Sau viết xong kicḥ , ta cần sƣƣ dung ̣ Behat để đảm bảo rằng kịch ở trạng thái thất bại chƣa có mã nguồn tƣơng ứng viết chƣơng trình đểtrang ̣ thái kiểm thƣƣ k ịch thành công Viêc ̣ phát triển tinh́ khác thƣc ̣ hiêṇ tƣơng tƣ ̣vàđƣơc ̣ trinh̀ bày phần phụ lục luận văn 4.4 Nhận xét kết luận Kỹ thuật phát triển phần mềm hƣớng hành vi cùng với việc áp dụng công cụ hỗ trợ giúp cho việc phát triển phần mềm trở nên dễ thực Các đặc ́̃ -93tả yêu cầu bằng BDD vừa làm tài liệu thiết kế để lập trình viên cài đặt hệ thống, vừa làm tiêu chí kiểm thử chấp nhâṇ tự động Các phƣơng thức kiểm thử đƣợc viết trƣớc viết mã nguồn giúp cho việc kiểm thử diễn thƣờng xuyên, tính đƣợc kiểm thử q trình cài đặt giúp nâng cao độ tin cậy ứng dụng Behat cũng giúp cho phần mềm liên tục đƣợc kiểm thử hồi quy tự động qua vịng lặp Khi có bổ sung tính mới, định nghĩa thêm kịch sử dụng, bƣớc chúng dễ dàng đƣợc kiểm thử tự động Lập trình viên cần bổ sung phƣơng thức kiểm thử tƣơng ứng vào lớp ngữ cảnh tái sử dụng phƣơng thức có Behat giúp viêc ̣ kiểm thƣƣ hồi quy tính ứng dụng đƣợc thực thƣờng xuyên , tránh nhà m chán cho kiểm thƣ viên Trong qua trinh phat triển ̣thống , lâp ̣ trinh viên co thểsƣ dung ̣ ́ƣ Behat đểkiểm tra trang ̣ thai cua tinh phat triển đƣơc ̣ tinh trang ̣ cua ̣thống ́̀ Behat cung đam bao k iểm thƣ bao phu toan bô ̣cac yêu cầu ngƣơi dung , ́̃ lần thƣc ̣ hiêṇ Behat đoc ̣ tất ca cac têp ̣ tin bƣớc môṭ, tƣ̀ng ngƣ̃cảnh môṭcho đến tất cảcác tinh́ đƣơc ̣ kiểm thƣ Sƣ dung ̣ Behat đam bao tất ca cac tinh đƣơc ̣ kiểm tra it môṭ ́ƣ ƣ lần Nhƣng tinh quan ̣ thƣơng ́̃ quan trọng , lần, thông qua nhiều vong lăp ̣ giup ngăn chăṇ cac lỗi thƣơng găp ̣ qua trinh ́́ phát triển phần mềm Quá trình sử dụng Behat cũng địi hỏi ngƣời phát triển có ngƣ PHP đểviết chinh xac cac kiểm thƣ c ́̃ ́́ cũng bớt phức tạp nhờ hỗ trợ thƣ viện mở rộng MinkContext Viêc ̣ viết cac đinḥ nghia bƣơc phu ̣thuôc ̣ hoan toan vao lâp ̣ trinh viên va giai đoaṇ cung co ́̀ ƣ đinḥ nghia cac tinh co thểthƣc ̣ hiêṇ bơi ngƣơi dung hoăc ̣ co sƣ ̣trơ ̣giup ́̃ kiểm thử viên, đôịphát triển nhằm đảm bảo tiêu chíkiểm thƣƣ chấp nhâṇ xuất phát từ ngƣời dùng Behat công cụ hỗ trợ BDD để phát triển ứng dụng Web, mục đích kiểm thử chấp nhận ứng dụng dựa vào tiêu chí kiểm thử chấp nhận đƣợc định nghĩa tính Các tiêu chí kiểm thử chấp nhận đƣợc viết bởi khách hàng khách hàng cùng viết với đội phát triển, nhằm mục đích lấy yêu cầu từ ngƣời sử dụng để triển khai hệ thống theo mong muốn họ Các yêu cầu đƣợc định nghĩa bằng cách mô tả hành vi ́́ -94của ứng dụng Mỗi tính mơ tả chức ứng dụng Tính có nhiều kịch sử dụng, kịch ứng với trƣờng hợp sử dụng tính với điều kiện ràng buộc Sử dụng Behat để kiểm tra ứng dụng sau thực cũng khía cạnh đƣợc quan tâm bởi dự án phần mềm lớn, chẳng hạn nhƣ mã nguồn mở Drupal tìm cách để tích hợp Behat hỗ trợ kiểm tra ứng dụng Web phát triển Drupal Với hệ thống lớn, thƣờng xuyên đƣợc cập nhật việc lựa chọn BDD để kiểm thử hồi quy tự động hóa cơng việc kiểm thử lựa chọn sáng suốt Trong phần tác giảl ví dụ nhỏ để minh họa cho việc sử dụng phƣơng pháp phát triển hƣớng hành vi công cụ Behat để kiểm thử ứng dụng -95- KẾT LUÂN Nghiên cƣ́u phát triển phần mềm hƣớng hành vi ứng dụng cơng cụ Behat làmơṭđềtài hay , áp dụng thực tế Qua quátrinh̀ nghiên cƣ́u tơi nhận thấy đạt đƣợc kết sau Tìm hiểu khái niệm kiểm thử phần mềm , đăc ̣ biêṭlàkiểm thƣƣ ƣ́ng dụng web, phƣơng pháp kiểm thƣƣ tƣ đ ̣ ông ̣ vàbiết đƣơc ̣ môṭsốcông cu ̣kiểm thƣƣ tƣ đ ̣ ông ̣ đƣơc ̣ sƣƣ dung ̣ phổbiến hiêṇ Lṇ văn cũng giúp tơi cócơ hơịtim̀ hiểu kỹhơn vềphƣơng phát triển phần mềm linh hoaṭAgile , nắm đƣơc ̣ nguyên lýcơ phƣơng pháp này, đăc ̣ biêṭlàvềquy trình Scrum vàlập trình cực hạn XP, làhai quy trinh̀ phát triển phần mềm đƣợc sử dụng phổ biến phƣơng pháp Agile Thông qua viêc ̣ nghiên cƣ́u quy trinh̀ phần mềm , cũng nắm đƣơc ̣ muc ̣ đich́ tầm quan trọng kiểm thử quy trình phát triển lặp, nắm đƣơc ̣ môṭ sốkỹthuâṭ đƣơc ̣ áp dụng phổ biến phƣơng pháp phát triển phần mềm hiêṇ đaị, chẳng haṇ nhƣ phƣơng pháp phát triển phần mềm lấy kiểm thƣƣ làm trọng tâm Thời gian thƣc ̣ hiêṇ lṇ văn cũng giúp tơi cócơ hôịđƣơc ̣ nghiên cƣ́u v ề kỹ thuật , quy trinh,̀ công cu s ̣ ƣƣ dung ̣ phát triển phần mềm hƣớng hành vi Đây làmôṭphƣơng pháp , đƣơc ̣ đƣa vào sƣƣ dung ̣ môṭvài năm gần đây, chƣa đƣơc ̣ sƣƣ dung ̣ phổbiến Tuy nhiên hi vong ̣ rằng tƣơng lai, viêc ̣ áp dung ̣ phát triển phần mềm hƣớng hành vi se ̃đem laịmôṭhiêụ quảmới cho linh̃ vƣc ̣ Công nghê ̣phần mềm, đăc ̣ biêṭlàdùng phƣơng pháp viêc ̣ kiểm thƣƣ chấp nhâṇ tƣ đ ̣ ông ̣ Luâṇ văn cung giơi thiêụ ́̃ cho ngôn ngƣ PHP , môṭngôn ngƣ lâp ̣ trinh ƣng dung ̣ Web đƣơc ̣ sƣ d ́̃ phổbiến hiêṇ Viêc ̣ nghiên cƣ́u phát triển phần mềm hƣớng hành vi vàcông cu ̣Behat cùng với nh phần mởrông ̣ khác giúp cócái nhiǹ mẻhơn phƣơng pháp phát triển ƣ́ng dung ̣ web tâp ̣ trung vào mô tảhành vi ƣ́ng dụng Đócũng làcách giao tiếp giƣ̃a cơng ty phát triển phần mềm vàkhách hàng để giúp nâng cao chất lƣơng ̣ sản phẩm Quá trình tìm hiểu đƣợc biết , phƣơng pháp phát triển phần mềm hƣớng hành vi cùng với công cụ Behat đƣợc áp dụng ở vài mã nguồn mở tiếng tháng gần , chẳng haṇ nhƣ mã nguồn mở Drupal, áp dụng -96thử nghiệm đƣơc ̣ ngƣời sƣƣ dung ̣ hƣởng ƣ́ng nhiêṭtinh̀ Điều đem laịtiń hiêụ vui cho tƣơng lai phát triển phần mềm hƣớng hành vi Trong luâṇ văn này, cũng đa ̃biết cách v ận dụng phƣơng pháp phát triển phần mềm hƣớng hành vi cùng với công cu ̣Behat để xây dƣng ̣ ƣ́ng dung ̣ minh họa Viêc ̣ kiểm thƣƣ chấp nhâṇ cho ƣ́ng dung ̣ đƣợc thƣc ̣ hiêṇ tƣ ̣đông ̣ nhờcông cụ Behat vàcác thành phần hỗ trợ mởrông ̣ khác Tuy nhiên, hạn chế thời gi an cũng nhƣ kiến thƣ́c nên ứng dụng minh họa cho nghiên cứu luận văn cịn ở quy mơ nhỏ, chƣa áp dụng để xây dựng ứng dụng có ý nghĩa thực tế Trong thời gian tới , mong muốn se ̃ nghiên cƣ́u sâu viêc ̣ sƣƣ dung ̣ Behat đểkiểm thƣƣ chấp nhâṇ tƣ ̣đông ̣ cho ứng dụng Web cao phát triển ứng dụng Web Qua tim̀ hiểu minh,̀ nhâṇ thấy phát triển phần mềm theo hƣớng hành vi làmơṭlinh̃ vƣc ̣ hay vàcóthểáp dung ̣ phổbiến công ty phần mềmcũng nhƣ đào taọ sinh viên chuyên ngành Công nghê ̣thông tin Trong thời gian tới, tơi hi vong ̣ rằng se ̃cóđiều kiêṇ đểtim̀ hiểu kỹhơn vềlinh̃ vƣc ̣ đem kiến thức tìm hiể u đƣơc ̣ áp dung ̣ vào viêc ̣ phát triển phần mềm ở công ty phần mềm , cũng nhƣ bổ sung kiến thức để giúp em sinh viên ngành Tin học -97- TÀI LIỆU THAM KHẢO [1]Beck Kent,Extreme Programming Explained: Embrace Change Third Print, 190, AddisonWesley, Reading (MA), 2000 [2]Beck Kent ,Test-Driven Development:By Example 240, Addison-Wesley, 2003 [3]Control Chaos What is Scrum? September 26th, 2006 [4]Larman, Craig (2004) Agile & Iterative Development: A Manager‟s Guide 342, Addison-Wesley [5]John Horn Lopes, Evaluation of Behavior-DrivenDevelopment 2012 [6]http://en.wikipedia.org/wiki/Behavior-driven_development [7]http://dannorth.net/introducing-bdd/ [8]http://behat.org -98- PHỤ LỤC Cài đặt Behat Khi áp dụng Behat để kiểm thử cho dự án phần mềm, cần phải cài đặt Behat cùng thành phần mở rộng tƣơng ứng Behat cung cấp ba phƣơng thức cài đặt làsƣƣ dung ̣ Composer, sƣƣ dung ̣ Phar hay dùng Git [8] Cách đơn giản đểcài đăṭBehat sƣƣ dung ̣ Composer , phƣơng pháp đƣơc ̣ mô tảnhƣ sau: Đầu tiên tạo tập tin composer.json { "require": { "behat/behat": "2.4.*@stable" }, "minimum-stability": "dev", "config": { "bin-dir": "bin/" } } Sau đótải tâp ̣ tin composer.phar vềmáy cánhân vàthƣc ̣ hiêṇ lênḥ cài đăṭ $ curl http://getcomposer.org/installer | php $ php composer.phar install Sau cài đăṭBehat thành cơng , ngƣời dùng cóthểsƣƣ dung ̣ hinh̀ dịng lệnh để viết lệ nh behat Công cu B ̣ ehat cung cấp khánhiều thuôc ̣ tinh́ tùy chọn để thực lệnh Các thuộc tính lệnh behat đƣợc giới thiêụ muc ̣ 3.1.1 Phát triển tính Đăng nhập hệ thống Kịch bản thứ nhất: Form đăng nhập Background: Given I am on homepage Scenario: Kiểm tra các thành phần Form login Then I should see text matching "ĐĂNG NHẬP" And I should see "Tên đăng nhập" And I should see input "tendn" with "text" type And I should see "Mật khẩu" And I should see input "matkhau" with "password" type And I should see button "Login" And I should see link "Quên mật khẩu" And I should see link "Đăng ký" Kết gọi lệnh behat lƣợt thứ -991 scenario (1 undefined) steps (6 passed, undefined) 0m0.054s You can implement step definitions for undefined steps with these snippets: /** * @Given /^I should see "([^"]*)"$/ button */ public function iShouldSeeButton($arg1) { throw new PendingException(); } /** * @Given /^I should see link "([^"]*)"$/ */ public function iShouldSeeLink($arg1) { throw new PendingException(); } Bổ sung định nghĩa bƣớc thiếu với mã nguồn nhƣ sau: /** * @Then /^I should see "([^"]*)" button$/ */ public function iShouldSeeButton($button) { $session = $this->getSession(); // get the mink session $element = $session->getPage()->findButton( $button); if (empty($element)) { $url = $session>getCurrentUrl(); throw new \Exception(sprintf("No button '%s' on the page %s", $button,$url )); } } Kết kiểm thử lƣợt thứ hai # Then I should see text matching "ĐĂNG NHẬP" FeatureContext::assertPageMatchesText() The pattern "ĐĂNG NHẬP" was not found anywhere in the text of the current page # And I should see "Tên đăng nhập" FeatureContext::assertPageContainsText() -100# And I should see input "tendn" with "text" type FeatureContext::iShouldSeeInputWithType() # And I should see "Mật khẩu" FeatureContext::assertPageContainsText() And I should see input "matkhau" with "password" type # FeatureContext::iShouldSeeInputWithType() And I should see "Đăng nhập" button FeatureContext::iShouldSeeButton() And I should see link "Quên mật khẩu" FeatureContext::iShouldSeeLink() And I should see link "Đăng ký" FeatureContext::iShouldSeeLink() scenario (1 failed) steps (1 passed, skipped, failed) 0m0.048s Bổ sung mã HTML cho form đăng nhập ĐĂNG NHẬP

Thông tin nhập vào không hợp lệ

Tên đăng nhập

Mật khẩu

Quên mật khẩu

Đăng ký

-101Kết kiểm thử lƣợt thứ ba 0m0.058s scenario (1 passed) steps (9 passed) Kịch bản thứ hai:Tên đăng nhập không hợp lệ @javascript Scenario: Tên đăng nhập không hợp lệ When I fill in "tendn" with "" And I press "Đăng nhập" Then the field "Tên đăng nhập" should be outlined in red Gọi lệnh behat lần thử nhất, kết là: @javascript Scenario: Tên đăng nhập không hợp lệ features/login.feature:19 When I fill in "tendn" with "" FeatureContext::fillField() And I press "Đăng nhập" FeatureContext::pressButton() Then the field "Tên đăng nhập" should be outlined in red scenarios (1 passed, undefined) 13 steps (12 passed, undefined) 0m5.496s You can implement step definitions for undefined steps with these snippets: /** * @Then /^the field "([^"]*)" should be outlined in red$/ */ public function theFieldShouldBeOutlinedInRed($arg1) { throw new PendingException(); } Bổ sung định nghĩa bƣớc /** * @Then /^the field "([^"]*)" should be outlined in red$/ */ public function theFieldShouldBeOutlinedInRed($field) { $session = $this->getSession()>wait(5000,"$('#validate_msg').children().length> 0"); $page = $this->getSession()->getPage(); // get the object of the field -102$formField = $page->findField($field); if (empty($formField)) { throw new Exception('The page does not have the field with label "' $field '"'); } / get the 'class' attribute of the field $class = $formField->getAttribute("class"); $class = explode(" ", $class); / if the field has 'error' class, then the field will be outlined with red if (!in_array("error", $class)) { throw new Exception('The field "' $field '" is not outlined with red'); } Kết kiểm thử lƣợt thứ hai scenarios (1 passed, failed) 13 steps (12 passed, failed) 0m10.85s Bổ sung mã cho form đăng nhập function check_login() { var check=0; var tendn = $("#tendn").val(); if(tendn =="") { $("input#tendn").addClass("error"); check =1; } else if($("input#tendn").hasClass("error")) { $("input#tendn").removeClass("error"); } if(check==1) { $("p.validate_msg").slideDown("fast"); return false; } $("form#frm_login").submit(); } Kết kiểm thử lƣợt thứ ba scenarios (2 passed) 13 steps (13 passed) 0m10.642s Tƣơng tự ta bổ sung kịch khác cho tính đăng nhập, tính kết kiểm thử tính nhƣ sau: -103gampt@gampt-Inspiron-N4010:~/Desktop/behattest/MinkExtensionexample$ bin/behat features/login.feature Feature: Homepage In order to log in system As a visitor I want to use log in form Background: Given I am on homepage # FeatureContext::iAmOnHomepage() Scenario: Kiểm tra các thành phần Form login features/login.feature:8 Then I should see text matching "ĐĂNG NHẬP" FeatureContext::assertPageMatchesText() And I should see "Tên đăng nhập" FeatureContext::assertPageContainsText() And I should see input "tendn" with "text" type FeatureContext::iShouldSeeInputWithType() And I should see "Mật khẩu" FeatureContext::assertPageContainsText() And I should see input "matkhau" with "password" type # FeatureContext::iShouldSeeInputWithType() And I should see "Đăng nhập" button FeatureContext::iShouldSeeButton() And I should see link "Quên mật khẩu" FeatureContext::iShouldSeeLink() And I should see link "Đăng ký" FeatureContext::iShouldSeeLink() @javascript Scenario: Tên đăng nhập không hợp lệ features/login.feature:19 When I fill in "Tên đăng nhập" with "" FeatureContext::fillField() And I press "Đăng nhập" FeatureContext::pressButton() Then the field "Tên đăng nhập" should be outlined in red # FeatureContext::theFieldShouldBeOutlinedInRed() @javascript Scenario: Mật không hợp lệ features/login.feature:25 When I fill in "Mật khẩu" with "" FeatureContext::fillField() And I press "Đăng nhập" FeatureContext::pressButton() Then the field "Mật khẩu" should be outlined in red FeatureContext::theFieldShouldBeOutlinedInRed() # # # # -104- @javascript Scenario: Đăng nhập không thành công features/login.feature:30 When I fill in "Tên đăng nhập" with random text FeatureContext::iFillInWithRandomText() When I fill in "Mật khẩu" with random text FeatureContext::iFillInWithRandomText() And I press "Đăng nhập" FeatureContext::pressButton() Then I should see "Tên đăng nhập/Mật không hợp lệ" FeatureContext::assertPageContainsText() @javascript Scenario: Đăng nhập thành công features/login.feature:36 When I fill in the following: FeatureContext::fillFields() | Tên đăng nhập | admin | | Mật And I press "Đăng nhập" FeatureContext::pressButton() Then I should be on homepage FeatureContext::iShouldBeOnHomepage() And I should see "Hi, admin" FeatureContext::assertPageContainsText() And I should see the link "Đăng xuất" in the "right" FeatureContext::assertLinkRegion() scenarios (5 passed) 28 steps (28 passed) 0m18.746s ... cụ Behat: Giới thiệu công cụ Behat thành phần liên quan  Chƣơng - Áp dụng phát triển phần mề m hƣớng hành vi v? ?công cu ̣ Behat: Vâṇ dungpháṭ triển phần mềm hƣớng hành vi sử dụng công cụ Behat. .. lặp phát hành ngắn” để cấp phát hành vi ứng dụng kiểm thử phần mềm 2.2 Nguyên lý hoạt động Mục đích BDD cung cấp kỹ thuật để phát triển phần mềm theo mong muốn khách hàng, vi? ??c áp dụng phát triển. .. kiểm thử triển khai nhƣ Hình 1-1 Hình 1-1 Mơ hình phát triển lặp Phƣơng pháp phát triển phần mềm linh hoạt Agile phƣơng pháp phát triển phần mềm đại đƣợc áp dụng rộng rãi công ty phần mềm Nhân

Ngày đăng: 11/11/2020, 22:02

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w