ĐẠ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 z ĐẠ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 z i LỜI CAM ĐOAN Tôi xin cam đoan kết quả đạt đƣợc trong luận văn là sản phẩm nghiên cứu, tìm hiểu của riêng cá nhân tôi. Trong toàn bộ nội dung của luận văn, những điều đƣợc trình bày hoặc là của cá nhân tôi hoặc là đƣợc tổng hợp từ nhiều nguồn tài liệu. Tất cả các tài liệu tham khảo đều có xuất xứ rõ ràng và đƣợc trích dẫn hợp pháp.
Tôi xin hoàn toàn chịu trách nhiệm và chịu mọi hình thức kỷ luật theo quy định cho lời cam đoan của mình. Học viên thực hiện Phan Thị Gấm z ii LỜI CẢM ƠN Tôi xin bày tỏ lòng biết ơn sâu sắc đến tất cả mọi ngƣời đã giúp đỡ, hỗ trợ thực hiện 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 và tạo điều kiện để tôi thực hiện luận văn này. Luận văn này sẽ không thể hoàn thành nếu không có sự giúp đỡ và chỉ bảo tận tình của Thầygiáo, Tiế n siT ̃ rƣơng Anh Hoàng , giáo viên hƣớng dẫn của tôi. Em xin chân thành biết ơn về những chỉ bảo, định hƣớng nghiên cứu, hỗ trợ, tạo những điều kiện tốt nhất cho em trong suốt quá trình thực hiện đề tài.
Con xin bày tỏ lòng biết ơn sâu sắc đến nhƣ̃ng ngƣời thân trong gia đình đă ̣c biê ̣t là Bố , Mẹ, Chồng và con gái đã động viên, ủng hộ trong những lúc khó khăn để con có đƣợc nhƣ ngày hôm nay. Xin chân thành cảm ơn tất cả quý Thầy,Cô trong Khoa, Trƣờng đã tận tình chỉ bảo, rèn luyện, truyền đạt những tri thức, kỹ năng, kinh nghiệm quý báu cho tôi trong suốt nhƣ̃ng năm học vừa qua. Học viên thực hiện Phan Thị Gấm z iii MỤC LỤC LỜI CAM ĐOAN. 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. KIỂM THỬ TRONG PHƢƠNG PHÁP PHÁT TRIỂN PHẦN MỀM LINH HOA ̣T.
Mô hình phát triển lặp trong phƣơng pháp phát triển linh hoạt. Quy trình Scrum. Lập trình cực hạn. Kiểm thử trong phƣơng pháp triển linh hoạt.
Kiểm thử đơn vị. Kiểm thử chấp nhận trong lâ ̣p trình cƣ̣c ha ̣n XP. Đặc tả yêu cầu hệ thống bằng câu chuyện ngƣời dùng. Các kỹ thuâ ̣t phát triển phần mềm theo hƣớng kiểm thử.
Phát triển phần mềm theo hƣớng kiểm thử. Phát triển phần mềm theo hƣớng kiểm thử chấp nhận. Mô ̣t số vấ n đề của phát triể n phầ n mề m dƣ̣a vào kiể m thƣ̉. PHÁT TRIỂN PHẦN MỀM HƢỚNG HÀNH VI.
Tổng quan về phát triển phần mềm hƣớng hành vi. Nguyên lý hoạt động. Quy trình phát triển phần mềm theo hƣớng hành vi. Đặc tả hành vi của ƣ́ng du ̣ng.
Viế t kiể m thƣ̉ cho các bƣớc. Lă ̣p để cài đă ̣t ƣ́ng du ̣ng. Ngôn ngữ đặc tả ứng dụng. CÔNG CỤ BEHAT.
Giới thiệu công cụ Behat. Công cụ dòng lệnh của Behat. Cấu trúc thƣ mục. Cách sử dụng Behat.
Xác định các tính năng. Sử dụng Gherkin để viết các tính năng. Xây dƣ̣ng các định nghĩa bƣớc. Móc nối quá trình kiểm thử và các sự kiện.
Các sự kiện trong Behat. Kiểm thử các tính năng – lớp FeatureContext. Phát triển ứng dụng Web với Mink. Cấu hình Behat với behat.
ÁP DỤNG PHÁT TRIỂN PHẦN MỀM HƢỚNG HÀNH VI VÀ CÔNG CỤ BEHAT. Giai đoa ̣n chuẩ n bi. Tiế n trin ̀ h thƣ̣c hiêṇ ƣ́ng du ̣ng. Áp dụng phát triển hƣớng hành vi và công cụ Behat.
Tính năng “Xem trang chủ”. Tính năng “Đăng ký thành viên”. Nhận xét và kết luận. 92 KẾT LUẬN 95 TÀI LIỆU THAM KHẢO.
98 z v DANH MỤC CÁC TƢ̀ VIẾT TẮT JS JavaScript CSS Cascading Style Sheets HTTP Giao thƣ́c HTTP API Application Programming Interface Ajax Asynchronous Javascript and XML DOM Document Object Model XP eXtreme Programming TDD Test Driven Development ATDD Acceptance Test Driven Development BDD Behaviour Driven Development z vi DANH MỤC BẢNG BIỂU Bảng 3-1. Các thuộc tính của 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 đinḥ nghiã với bƣớc tƣơng tác Form.
54 Bảng 3-4 MinkContext định nghĩa các bƣớc cho DOM. 55 Bảng 3-5 MinkContext với các 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.
Quy trin ̀ h Scrum. Vòng đời của dự án XP. Nguyên lý TDD. Vòng đời của phần mềm phát triển theo TDD.
Quy trin ̀ h ATDD. 21 Hình 2-1 Tiế n triǹ h phát triể n phầ n mề m hƣớng hành vi. Cấ u trúc thƣ mu ̣c làm viê ̣c của Behat. Cấ u trúc chung của mô ̣t tính năng bằ ng Gherkin.
Mô tả các tính năng. Các sự kiện Hook của Behat. 49 Hình 3-5 Cấ u hiǹ h behat. 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 năng trang chủ hệ thống. Sử dụng bộ điều khiển trình duyệt Selenium. 80 z -1- CHƢƠNG – MỞ ĐẦU Chấ t lƣơ ̣ng là mô ̣t trong 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 của cơ quan tổ chƣ́c sƣ̉ du ̣ng phầ n mề m mà đôi khi còn ảnh hƣởng đế n tính ma ̣n g con ngƣờ i.
Nhƣ̃ng ha ̣n chế hay lỗi phầ n mề m sẽ che lấ p các tiń h năng và tiê ̣n ić h mà hê ̣ thố ng đó mang la ̣i. Đặc biệt, trong thi ̣trƣờng ca ̣nh tranh chấ t lƣơ ̣ng cao nhƣ hiê ̣n nay mô ̣t phầ n mề m phát sinh lỗi trong 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 vì lý do đó đảm bảo chất lƣợng phần mềm là một vấn đề quan trọng và ngày càng cầ n đƣơ ̣c quan tâm hàng đầ u trong 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 trên thi ̣ trƣờng nế u phầ n mề m đó không đáp ƣ́ng đƣơ ̣c nhu cầ u của khách hàng.
Các công ty sản xuấ t phầ n mề m luôn cố gắ ng đƣa ra các hệ thố ng với các tính năng mới để ca ̣nh tranh với các nhà cung cấ p khác. Với đa phầ n các hê ̣ thố ng thƣơng mại, tại thời điểm bắt đầu dự án , có thể đội phát triển không thu thập đƣợc cá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 trên các tiń h năng phỏng đoán và trong trƣờng hơ ̣p tồ i tê ̣ các tiń h năng đó có thể 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 và sử dụng các mô tả tƣờng minh đ ể yêu cầu đó không bị sai lệch trong quá trình phát triể n phầ n mề m là 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 ra các hoạt động của hệ thống và hiể u rõ hơn về nghiê ̣p vu ̣ và miề n ƣ́ng du ̣ng , khi đó khách hàng dễ đƣa ra các ý tƣởng cho tiń h năng mới và bổ sung chúng.
Đây là hạn chế lớn nhất của các phƣơng pháp phát triển phần mềm truyền thống , bởi khi có sƣ̣ bổ sung hoă ̣c t hay đổ i yêu cầ u phầ n mề m đang phát triển sẽ dễ phá vỡ cấ u trúc hê ̣ 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 chỉ đƣợc tiếp xúc với phần mềm sau khi các yêu cầu phần mềm đã đƣơc̣ cài đă ̣t hoàn thiện, do đó viê ̣c phát hiê ̣n sai sót hoă ̣c cài đă ̣t hê ̣ thố ng không đúng với yêu cầ u khách hàng rấ t dễ xảy ra. 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 cơ bản trong các quy trình lặp hiê ̣n đa ̣i là 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 năng tƣơng đố i đô ̣c lâ ̣p để đƣa ra một phần mềm nhỏ có thể dùng đƣợc.
Sau mỗ i vòng lă ̣p , khách hàng có thể dùng thử phần mềm để đƣa ra các phản hồi về hệ thống và dƣ̣a vào các phản hồi đó đội phát triển sẽ bổ sung các tính năng hữu ích hoặc cải thiện các tính năng đã đƣợc phát triển theo hƣ ớng tốt hơn cho khách hàng. Viê ̣c cho ̣n các z -2- tính năng để đƣa vào mỗi vòng lặp thƣờng căn cứ vào độ ƣu tiên của chúng , do đó các tính năng 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 hê ̣ thố ng sớm hơn 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 , các quy trình phát triể n phầ n mề m theo phƣơng pháp lă ̣p cũng ta ̣o ra nhƣ̃ng thách thƣ́c mới cho giai đoa ̣n kiể m thƣ̉ phầ n mề m .