Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 112 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
112
Dung lượng
2,85 MB
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 PHÁ T TRIỂN PHẦN MỀM HƢỚNG HÀ NH VI VÀ Ƣ́NG DỤNG 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 PHÁ T TRIỂN PHẦN MỀM HƢỚNG HÀ NH VI VÀ Ƣ́NG DỤNG CÔNG CỤ BEHAT Ngành: Công nghê ̣thông tin Chuyên 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 Trong toà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 hoàn toà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 ̣i học Công nghê ̣, Đa ̣i học Quốc g ia Hà Nô ̣i cho phép tạo điều kiện để thực luận văn Luận văn hoàn thành giúp đỡ bảo tận tình Thầygiáo, Tiế n siT ̃ rƣơng Anh Hoà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 đình đă ̣c biê ̣t là Bố , Mẹ, Chồng và 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 MỤC CÁC TƢ̀ VIẾT TẮT v DANH MỤC BẢNG BIỂU vi DANH MỤC HÌNH VẼ vi CHƢƠNG – MỞ ĐẦU CHƢƠNG KIỂM THỬ TRONG PHƢƠNG PHÁP PHÁT TRIỂN PHẦN MỀM LINH HOA ̣T 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 trình 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 trình cƣ̣c ̣n 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 kỹ thuâ ̣t 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ô ̣t số vấ n đề của phát triể n phầ n mề m dƣ̣a 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 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 của ƣ́ng du ̣ng 29 2.3.2 Viế t kiể m thƣ̉ cho các bƣớc 30 2.3.3 Lă ̣p để cài đă ̣t ƣ́ng du ̣ng 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 các đị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 ̣n chuẩ n bi 60 ̣ 4.2 Tiế n trin ̀ h thƣ̣c hiêṇ ƣ́ng du ̣ng 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 MỤC 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 các đinh ̣ nghiã bƣớc để ta ̣o yêu cầ u 53 Bảng 3-3 MinkContext các đinh ̣ 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 MỤC HÌ NH VẼ Hình 1-1 Mô hình phát triển lặp Hình 1-2 Quy trin ̀ h 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 trin ̀ h ATDD 21 Hình 2-1 Tiế n trin ̀ h phát triể n phầ n mề m hƣớng hành vi 28 Hình 3-1 Cấ u trúc thƣ mu ̣c làm viê ̣c của Behat 36 Hình 3-2 Cấ u trúc chung của mô ̣t tính 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 hin ̀ h behat.yml 56 Hình 4-2 Tiế n hình áp du ̣ng BDD và Behat để phát triể n ƣ́ng du ̣ng 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ô ̣t nhƣ̃ng yế u tố quan tro ̣ng nhấ t của sản phẩ m phầ n mề m Lỗi phầ n mề m không chỉ ảnh hƣởng đế n dƣ̃ liê ̣u, hoạt động quan tổ chƣ́c sƣ̉ du ̣ng phầ n mề m mà còn ảnh hƣởng đế n tính ma ̣n g ngƣờ i Nhƣ̃ng ̣n chế hay lỗi phầ n mề m sẽ che lấ p các tiń h và tiê ̣n ić h mà ̣ thố ng đó mang la ̣i Đặc biệt, thi ̣trƣờng ca ̣nh tranh chấ t lƣơ ̣ng cao nhƣ hiê ̣n mô ̣t phầ n mề m phát sinh lỗi quá triǹ h sƣ̉ du ̣ng sẽ là m ảnh hƣởng nghiêm tro ̣ng tới danh tiế ng , thƣơng hiê ̣u và uy tiń của 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 liñ h vƣ̣c phát triển phần mềm Tuy nhiên, mô ̣t phầ n mề m chấ t lƣơ ̣ng cao cũng có thể gă ̣p thấ t ba ̣i thi ̣ trƣờng nế u 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 các tính mới để ca ̣nh tranh với các nhà cung cấ p khác Với đa phầ n các ̣ 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ƣ̀ khách hàng , phầ n mề m sẽ đƣơ ̣c phát triể n dƣ̣a các tiń h phỏng đoán và trƣờng hơ ̣p tồ i tê ̣ các tiń h đó không phù hơ ̣p với mong muố n của khách hàng Viê ̣c thu thâ ̣p yêu cầ u khách hàng sử dụng mô tả tƣờng minh đ ể yêu cầu không bị sai lệch trình phát triể n phầ n mề m vấn đề lớn của các nhà sản xuấ t Thông qua quá trình sƣ̉ du ̣ng phầ n mề m , ngƣời sƣ̉ du ̣ng sẽ dễ hình dung hoạt động hệ thống hiể u rõ về nghiê ̣p vu ̣ và miề n ƣ́ng du ̣ng , đó khách hàng dễ đƣa các ý tƣởng cho tiń h mới 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̣ cài đă ̣t hoàn thiện, đó viê ̣c phát hiê ̣n sai sót hoă ̣c cài đă ̣t ̣ thố ng không đúng với yêu cầ u khách hàng rấ t dễ xảy Quy triǹ h phát triể n phầ n mề m lă ̣p hiê ̣n đa ̣i đƣơ ̣c coi là mô ̣t giải pháp khắ c phu ̣c vấ n đề thay đổ i yêu cầ u củ a ngƣời sƣ̉ du ̣ng Ý tƣởng quy trình lặp hiê ̣n đa ̣i phần mềm đƣợc sản xuấ t theo tƣ̀ng bƣớc, mỗi bƣớc chỉ thƣ̣c hiê ̣n mô ̣t số tính tƣơng đố i đô ̣c lâ ̣p để đƣa phần mềm nhỏ dùng đƣợc Sau mỗ i vòng lă ̣p , khách hàng dùng thử phần mềm để đƣa phản hồi hệ thống dƣ̣a vào các phản hồi đội phát triển bổ sung tính hữu ích cải thiện tính đƣợc phát triển theo hƣ ớng tốt cho khách hàng Viê ̣c cho ̣n các -2tính để đƣa vào vòng lặp thƣờng vào độ ƣu tiên chúng , đó các tính quan tro ̣ng thƣờng đƣơ c̣ cho ̣n để phát triể n trƣớc Điề u này cho phép khách hàng sử dụ ng ̣ thố ng sớm các phƣơng pháp phát triể n phầ n mề m truyề n thố ng Bên ca ̣nh nhƣ̃ng lơ ̣i ích đáp ƣ́ng sƣ̣ thay đổ i yêu cầ u , quy trình phát triể n phầ n mề m theo phƣơng pháp lă ̣p cũng ta ̣o nhƣ̃ng thách thƣ́c mới cho giai đoa ̣n kiể m thƣ̉ phầ n mề m Ở quy triǹ h phát triể n truyề n thố ng , kiể m thƣ̉ là mô ̣t pha đƣơ ̣c thƣ̣c hiê ̣n và o cuố i dƣ̣ án , ̣ thố ng đã đƣơ ̣c cài đă ̣t hoàn thiện, nhƣngvới các ̣ thố ng sƣ̉ du ̣ng phƣơng pháp lă ̣p , phầ n mề m sẽ đƣơ ̣c kiể m tra mỗi vòng lă ̣p Khách hàng thƣờng xuyên đƣợc sử dụng phiên bản nhỏ hệ thống , nên lỗi phầ n mề m hoă ̣c các tính sai sót sẽ sớm đƣơ ̣c phát hiê ̣n và giải quyế t trƣớc sản phẩ m chiń h thƣ́c đƣơ ̣c bàn giao cho khách hàng Trong điề u kiê ̣n lý tƣởng , sau mỗi vòng lă ̣p khách hàng nhận đƣợc mô ̣t sản phẩ m có chất lƣợng cao, phù hợp với yêu cầu Trong phƣơng pháp phát triể n phầ n mề m linh hoa ̣t , nhu cầ u kiể m thƣ̉ đƣơ ̣c hiể u là c ác quy tắc hay hoạt động đƣợc sử dụng để đảm bảo chất lƣợng phần mề m Quá trình phát triển phần mềm thƣờng sử dụng kỹ thuật công cụ hỗ trơ ̣ để mã nguồn viết cho tính hoạt động , chẳ ng ̣n nhƣ các kỹ thuâ ̣t lâ ̣p trình theo că ̣p , kỹ thuật phát triển hệ thống lấy kiểm thử làm trọng tâm hay kỹ thuật kiể m thƣ̉ trƣớc, Tuy nhiên, mô ̣t tính đúngchƣa hẳ n đã phù hơ ̣p yêu cầu khách hàng, để kiểm tra điều cầ n mô ̣t phƣơng pháp kiể m thƣ̉ ở mƣ́c đô ̣ cao , đó là kiể m thƣ̉ chấ p nhâ ̣n hay kiể m thƣ̉ của khách hàng Yêu cầ u của khác h hàng là yế u tố quan tro ̣ng nhấ t để xác đinh ̣ các trƣờng hơ ̣p kiể m thƣ̉ , viê ̣c kiể m thƣ̉ nhằ m đảm bảo phầ n mề m làm đáp ƣ́ng nhu cầ u của khách hàng Trong quy trin ̀ h lă ̣p , phầ n mề m đƣơ ̣c phát triể n qua các vòng lă ̣p và có sƣ̣ thay đổ i liên tu ̣c sẽ có lơ ̣i cho viê ̣c kiể m tra các tiń h Mỗi tiń h đƣơ ̣c kiể m thƣ̉ ít nhấ t m ột lần, thâ ̣m chí nhƣ̃ng tính quan tro ̣ng đƣơ ̣c kiể m thƣ̉ nhiề u lầ n thông qua các vòng lă ̣p bổ sung các tính mới Chính thế ,kiể m thƣ̉ hồ i quy trở nên n hàm chán khó thực ; gần cuối chu trình phát triể n phầ n mề m , viê ̣c kiể m thƣ̉ các tiń h ban đầ u quan tro ̣ng nhấ t dễ bi ̣ tiế n hành lỏng lẻo tâm lý chủ quan kiểm thử viên Trái lại, tić h hơ ̣p thêm các tin ́ h mới, rấ t dễ phát sinh các lỗi ảnh hƣởng tới toàn hệ thống lỗi phát muộn t hì chi phí sữa lỗi cao Đặc biệt nhƣ̃ng vòng lặp cuối khó để thực , lúc kiểm thử tự động trở thành giải pháp hữu hiệu để giải vấn đề tr ên Kiể m thƣ̉ tƣ̣ đô ̣ng là viê ̣c sƣ̉ du ̣ng -90} If($("span.val_tendn").html() !=””) { validation_holder = 1; } }), Và đọan mã ki ểm tra sƣ̣ tồ n ta ̣i 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ê ̣n phầ n mã nguồ n trên, sƣ̉ du ̣ng Behat để kiể m tra phầ n mã vƣ̀a bổ sung Kế t quả go ̣i lê ̣nh 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ý ̣ thố ng bởi cùng mô ̣t email, kịch cho trƣờng hợp sử dụng nhƣ sau: @javascript Scenario: Kiểm tra Email: Email tồn 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 hệ thống" And I should see error message for "email" is bounded red Sau bổ sung các đoa ̣n mã chƣơng triǹ h thić h hơ ̣p , gọi lệnh behat để kiể m thƣ̉ kich ̣ bản Kế t quả go ̣i lê ̣nh 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() And I fill in "Họ tên" with random text # FeatureContext::iFillInWithRandomText() And I fill in "Tên đăng nhập" with "admin" # FeatureContext::fillField() And I fill in "Email" with "testbdd@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 select "June" from "thang" # 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 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ê ̣n các kich ̣ bản , ta có kich ̣ bản và kế t quả kiể m thƣ̉ kich ̣ bản này sau đã viế t mã cho ƣ́ng du ̣ng 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â ̣y, 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ê ̣u khác Kịch tƣơng đối đầy đủ ràng buô ̣c và có sƣ̉ du ̣ng bô ̣ điề u khiể n triǹ h duyê ̣t để kiể m thƣ̉ javascript Trong quá trình thực , mỗi kich ̣ bản đề u qua bố n giai đoa ̣n chiń h : Viế t kich ̣ bản , gọi lê ̣nh behat kiể m thƣ̉ kich ̣ bản vƣ̀a viế t để nhâ ̣n các khung đinh ̣ nghiã bƣớc (nế u có), viế t các đinh ̣ nghiã bƣớc (nế u có ) bổ sung mã nguồn tƣơng ứng để kiể m thƣ̉ thành công Khi sƣ̉ du ̣ng Behat , kịch cuối tính , công việc đƣợc giảm tả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 kich ̣ bản , ta cần sƣ̉ du ̣ng 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 để tra ̣ng thái kiể m thƣ̉ k ịch thành công Viê ̣c phát triể n các tin ́ h khác đề u thƣ̣c hiê ̣n tƣơng tƣ̣ và đƣơ ̣c triǹ h 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â ̣n 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ử 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 các 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 quá trin ̀ h phát triể n ̣ thố ng , lâ ̣p triǹ h viên có thể sƣ̉ du ̣ng Behat để kiể m tra tra ̣ng thái của tiń h phát triể n , giúp họ biết đƣơ ̣c tin ̀ h tra ̣ng của ̣ thố ng Behat cũng đảm bảo k iể m thƣ̉ bao phủ toàn bô ̣ các yêu cầ u ngƣời dùng , mỗi lầ n thƣ̣c hiê ̣n Behat đo ̣c tấ t cả các tê ̣p tin feature và thƣ̣c hiê ̣n lầ n lƣơ ̣t tƣ̀ng bƣớc mô ̣t, tƣ̀ng ngƣ̃ cảnh mô ̣t cho đế n tấ t cả các tiń h đề u đƣơ ̣c kiể m thƣ̉ Sƣ̉ du ṇ g Behat đảm bảo tấ t cả các tiń h đề u đƣơ ̣c kiể m tra it́ nhấ t mô ̣t lầ n Nhƣ̃ng tính quan tro ̣ng thƣờng đƣơ ̣c phát triể n sớm các tính quan trọng , đó các tính bản của ̣ thố ng sẽ đƣơ ̣c kiể m tra nhi ều lầ n, thông qua nhiề u vòng lă ̣p giúp ngăn chă ̣n các lỗi thƣờng gă ̣p quá triǹ h 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ó khả ngôn ngƣ̃ PHP để viế t chin ́ h xác các kiể m thƣ̉ c hệ thống, nhiên công viê ̣c này cũng bớt phức tạp nhờ hỗ trợ thƣ viện mở rộng , chẳ ng ̣n nhƣ MinkContext Viê ̣c viế t các đinh ̣ nghiã bƣớc phu ̣ thuô ̣c hoàn toàn vào lâ ̣p triǹ h viên và ở giai đoa ̣n này cũng có thể áp du ̣ng kỹ thuâ ̣t lâ ̣p triǹ h theo că ̣p Viê ̣c đinh ̣ nghiã các tính có thể thƣ̣c hiê ̣n bởi ngƣời dùng hoă ̣c có sƣ̣ trơ ̣ giúp kiểm thử viên, đô ̣i phát triể n nhằ m đảm bảo các tiêu chí kiể m thƣ̉ chấ p nhâ ̣n 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 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 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 đề tài hay , áp dụng thực tế Qua quá trình nghiên cƣ́u của 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ê ̣t là kiể m thƣ̉ ƣ́ng dụng web, phƣơng pháp kiể m thƣ̉ tƣ̣ đô ̣ng và biế t đƣơ ̣c mô ̣t số công cu ̣ kiể m thƣ̉ tƣ̣ đô ̣ng đƣơ ̣c sƣ̉ du ̣ng phổ biế n hiê ̣n Luâ ̣n văn này cũng giúp có hô ̣i tim ̀ hiể u kỹ về phƣơng phát triể n phầ n mề m linh hoa ̣t Agile , nắ m đƣơ ̣c các nguyên lý bản của phƣơng pháp này, đă ̣c biê ̣t là về quy trình Scrum và lập trình cực hạn XP, là hai quy trình phát triển phần mềm đƣợc sử dụng phổ biến nhấ t của phƣơng pháp Agile Thông qua viê ̣c nghiên cƣ́u các quy triǹ h phầ n mề m này , cũng nắ m đƣơ ̣c mu ̣c đić h tầm quan trọng kiểm thử quy trình phát triển lặp, nắ m đƣơ ̣c mô ̣t số kỹ thuâ ̣t đƣơ ̣c áp dụng phổ biến phƣơng pháp phát triển phần mềm hiê ̣n đa ̣i , chẳ ng ̣n 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ê ̣n luâ ̣n văn cũng giúp có hô ̣i đƣơ ̣c nghiên cƣ́u v ề kỹ thuật, quy trình, công cu ̣ sƣ̉ du ̣ng phát triể n phầ n mề m hƣớng hành vi Đây là mô ̣t phƣơng pháp mới , đƣơ ̣c đƣa vào sƣ̉ du ̣ng mô ̣t vài năm gầ n đây, chƣa đƣơ ̣c sƣ̉ du ̣ng phổ biế n Tuy nhiên hi vo ̣ng rằ ng tƣơng lai, viê ̣c áp du ̣ng phát triể n phầ n mề m hƣớng hành vi sẽ đem la ̣i mô ̣t hiê ̣u quả mới cho liñ h vƣ̣c Công nghê ̣ phầ n mề m, đă ̣c biê ̣t là dùng phƣơng pháp này viê ̣c kiể m thƣ̉ chấ p nhâ ̣n tƣ̣ đô ̣ng Luâ ̣n văn cũng giới thiê ̣u về công cu ̣ Behat , mô ̣t nề n tảng mã nguồ n mở cho ngôn ngƣ̃ PHP , mô ̣t ngôn ngƣ̃ lâ ̣p triǹ h ƣ́ng du ̣ng Web đƣơ ̣c sƣ̉ d ụng phổ biế n nhấ t hiê ̣n 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ới mẻ về phƣơng pháp phát triể n ƣ́ng du ̣ng web tâ ̣p trung vào mô tả hành vi của ƣ́ng dụng Đó cũng là cách giao tiế p giƣ̃a các 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 mấ y tháng gầ n , chẳ ng ̣n nhƣ mã nguồn mở Drupal, áp dụng -96thử nghiệm đƣơ ̣c ngƣời sƣ̉ du ̣ng hƣởng ƣ́ng nhiê ̣t tình Điề u đem la ̣i tín hiê ̣u vui cho tƣơng lai của phát triể n phầ n mề m hƣớng hành vi Trong luâ ̣n văn này , cũng đã 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 du ̣ng minh họa Viê ̣c kiể m thƣ̉ chấ p nhâ ̣n cho ƣ́ng du ̣ng đƣợc thƣ̣c hiê ̣n 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 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 sẽ nghiên cƣ́u sâu viê ̣c sƣ̉ du ̣ng Behat để kiể m thƣ̉ chấ p nhâ ̣n tƣ̣ đô ̣ng cho các ứng dụng Web cao phát triển ứng dụng Web Qua tim ̀ hiể u của ̀ h, nhâ ̣n thấ y phát triể n phầ n mề m theo hƣớng hành vi là mô ̣t liñ h vƣ̣c rấ t hay và có thể áp du ̣ng phổ biế n các công ty phầ n mề mcũng nhƣ đào ta ̣o sinh viên chuyên ngành Công nghê ̣ thông tin Trong thời gian tới, hi vo ̣ng rằ ng sẽ có điề u kiê ̣n để tim ̀ hiể u kỹ về liñ h vƣ̣c này đem kiến thức tìm hiể u đƣơ ̣c áp du ̣ng 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ƣ̉ du ̣ng Composer, sƣ̉ du ̣ng Phar hay dùng Git [8] Cách đơn giản nhấ t để cài đă ̣t Behat là sƣ̉ du ̣ng Composer , phƣơng pháp này đƣơ ̣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ê ̣n lê ̣nh cài đă ̣t $ curl http://getcomposer.org/installer | php $ php composer.phar install Sau cài đă ̣t Behat thành công , ngƣời dùng có thể sƣ̉ du ̣ng màn hin ̀ h dòng lệnh để viết lệ nh behat Công cu ̣ Behat cung cấ p khá nhiề u thuô ̣c tính tùy chọn để thực lệnh Các thuộc tính lệnh behat đƣợc giới thiê ̣u mu ̣c 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() -100And 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 scenario (1 passed) steps (9 passed) 0m0.058s 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: # features/login.feature:6 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 | 123456 | 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 # # # # # # # # # # # [...]... phƣơng pháp phát triển linh hoạt; Mục đích, tầm quan trọng, các loại hình kiểm thử trong phƣơng pháp phát triể n linh hoạt Chƣơng 2 – Phát triển phần mềm theo hƣớng hành vi – BDD: Trình bày khái niệm, quy trình và một số kiến thức liên quan đến phát triển phần mềm hƣớng hành vi Chƣơng 3 – Công cụ Behat: Giới thiệu công cụ Behat và các thành phần liên quan Chƣơng 4 - Áp dụng phát triển phần mề... Cùng với các công cụ hỗ trợ kiểm thử tự động và các nền tảng tự động sinh kiểm thử v à mã nguồn, TDD cũng là kỹ thuâ ̣t đƣơ ̣c sƣ̉ dụng phổ biến trong các quy trình phát triển phần mềm theo phƣơng pháp linh hoạt Agile -24- CHƢƠNG 2 PHÁT TRIỂN PHẦN MỀM HƢỚNG HÀNH VI 2.1 Tổng quan về phát triển phần mềm hƣớng hành vi Phát triển phần mềm hƣớng hành vi (Behaviour driven development , vi ́ t tắ t... hành vi và công cu ̣ Behat: Vâ ̣n du ̣ngphát triển phần mềm hƣớng hành vi và sử dụng công cụ Behat để xây dựng ứng dụng minh họa -5- CHƢƠNG 1 KIỂM THỬ TRONG PHƢƠNG PHÁP PHÁT TRIỂN PHẦN MỀM LINH HOA ̣T 1.1 Mô hình phát triển lặp trong phƣơng pháp phát triển linh hoạt Phƣơng pháp phát triển phần mềm theo nguyên lý lặp đã xuất hiện nhiều năm nay [1], biểu hiện trong mô hình xoắn ốc hay mô hình phát. .. dụng để đạt đƣơ ̣c giá trị nghiệp vụ BDD thƣờng sử dụng phƣơng pháp phát triển dựa trên vi c lặp” và “vòng lặp phát hành ngắn” để cấp phát hành vi của ứng dụng và kiểm thử phần mềm 2.2 Nguyên lý hoạt động Mục đích chính BDD là cung cấp một kỹ thuật để phát triển phần mềm theo đúng mong muốn của khách hàng, vi c áp dụng phát triển phần mềm hƣớng hành vi dựa trên ba nguyên lý cơ bản[7]: Đủ là đủ (enough... dụng đối với phần mềm dựa vào vi c mô tả hành vi của ứng dụng. BDD hiê ̣n thu hút đƣơ ̣c khá nhiề u sƣ̣ quan tâm của cô ̣ng đồ ng phát triển phần mềm BDD có thể áp dụng cho các dự án ở bất cứ quy mô nào, tuy nhiênBDD cũng mở rộng lâ ̣p triǹ h cƣ̣c ha ̣n XPnên rấ t thić h hơ ̣p cho vi ̣c phát triển các dự án lớn[6] BDD tập trungviê ̣c phát tri ển vào các ho ạt động mô tả hành vi của ứng dụng. .. những ngƣời trả tiền để phát triển phần mềm, mà bao gồm tất cả các nhân tố đƣợc hƣởng lợi từ vi c sử dụng phần mềm Trong quá trình phát triể n phần mềm, chỉ chú trọng đến những công vi c mang lại lợi ích vàcầ n sớm loa ̣i bỏ các công vi c không mang lại lợi ích hoặc không cải thiện đƣợc lợi ích cho ngƣời dùng -26 Tập trung vào hành vi: BDD tập trung mô tả hành vi của ứng dụng ở tất cả các cấp... đƣợc tiến hành đầy đủ các pha nhƣ lập kế hoạch, phân tích, thiết kế, cài đặt, kiểm thử và 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 là phƣơng pháp phát triển phần mềm hiện đại nhất và đƣợc áp dụng rộng rãi trong các công ty phần mềm hiện nay Nhân tố chính của phƣơng pháp phát triển linh hoạt là “lặp”, mặc dù không có định nghĩa cụ thể cho... mục đích của các quy trình phần mềm theo Agile là phát triển phần mềm có chất lƣợng cao trong giới hạn tài nguyên cho phép Phƣơng pháp phát triể n phầ n mề m linh hoạt Agile đảm bảo phần mềm thành công bằng vi c đƣa nhân tố ngƣời sử dụng tham gia -6vào dự án để phần mềm sau khi hoàn thiện đáp ứng đúng các tiêu chí kiểm thử chấp nhận Có nhiều quy trình phát triển phần mềm dựa trên các nguyên lý... phát triển phần mềm hƣớng hành vi và công cụ Behat để xây dựng ứng dụng minh họa: giới thiê ̣u công cu ̣ và kỹ thuâ ̣t hỗ trơ;̣ mô tả ƣ́ng du ̣ng và các bƣớc xây dƣ̣ng ƣ́ng du ̣ng ; tổ ng kế t, đánh giá vi ̣c áp dụng Cấ u trúc của luâ ̣n văn gồ m bố n phầ n nhƣ sau: Chƣơng 1 –Kiểm thử phần mềm trong Agile:Trình bày các khái niệm cơ bản , một số quy trình phát triển phần mềm theo... h phát triển phần mềm theo phƣơng pháp linh hoa ̣t thì thời gian gần đây có rất nhiều công cụ hỗ trợ chẳ ng hạn nhƣ PHPUnit, Selenium, TestPro, … Nghiên cứu và tìm hiểu mô ̣t kỹ thuật phát triển phần mềm, có thể đặc tả những tiêu chí kiểm thử chấp nhận từ ngƣời sử dụng và tái sử dụng các tiêu chí đó cho vi c tự động hóa kiểm thử chấp nhậnlà rất cần thiết Chính vì lí do đó tôi chọn đề tài Nghiên cứu ... 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â ̣n du ̣ngphát triển phần mềm hƣớng hành vi sử dụng công cụ Behat để xây dựng ứng dụng minh... Phát triển phần mềm theo hƣớng hành vi – BDD: Trình bày khái niệm, quy trình số kiến thức liên quan đến phát triển phần mềm hƣớng hành vi Chƣơng – Công cụ Behat: Giới thiệu công cụ Behat thành... dụng phổ biến quy trình phát triển phần mềm theo phƣơng pháp linh hoạt Agile -24- CHƢƠNG PHÁT TRIỂN PHẦN MỀM HƢỚNG HÀNH VI 2.1 Tổng quan phát triển phần mềm hƣớng hành vi Phát triển phần mềm