V cơ ản các ước này dựa trên mô hình ATDD đã ả ở trên. T eo ươ pháp này, l p trình viên luôn luôn yêu c k c à ư vấn ở tất cả c c ước sao cho sản phẩm làm ra thỏa ã đú y c u khách hàng càng sớm càng tốt.
Do ATDD được sinh ra trong ngữ cảnh Agile nên vi c ứng dụng nó trong môi ường Agile là đ u rất tự nhiên [12].
H 1.15 ATDD tron l [12]
1.6.5 C cụ ỗ t ợ
1.6.6 í dụ m ọa
T s ọa ví ụ đố vớ ộ í ă o ố ỗ ợ lịc : T o lịc ể c (Schedule maste ) vớ c c ườ : Them Of Travel, Handle Name, Departing date, Returning date, Countries, Cities. ớ 1 se , s k có q 3 lịc ể ở Open.
ớc 1: C ọ ộ câ c y ườ o v l ể . Câ c y được c ọ là: T o lịc ể c as e sc e le.
ớc 2: Mở ộ c ộc ọ ao ồ c c à v o ự và k c à để đưa a ữ đ k c ấ c o câ c y ườ .
Đưa ra ữ câ ỏ ảo l vớ k c à để ợ a ữ đ k c ấ c o câ c y ườ :
- h ng trư ng thông tin n o b t buộc?
=> Them Of Travel, HandlName, Departing Date, Countries. - h ng trư ng thông tin n o giới h n t ?
=> Them Of Travel (10 t ), HandlName (10 t ). - g tháng phải định d ng như th n o n c th ấ v dụ hông?
=> dd/MM/yyyy
- u turning at trước ng parting dat th ngư i dùng c th t o đư c ịch bi u hông?
hông t o đư c, đưa ra thông báo ng tháng hông h p . - ịch bi u đư c t o ra mặc định ở tr ng thái p n phải hông?
úng v .
- u c uá ịch bi u ở tr ng thái op n th h th ng đưa ra thông báo g ? => n đ c ịch bi u đang ở tr ng thái op n, c o t nhất ịch bi u đ c th t o ịch bi u mới. ằ c c đ a ữ câ ỏ đú , độ ự ắc ở k c à s y cẩ v ữ ườ ợ o l c o ỗ í ă , đưa a và ể õ c c đ k c ấ . C ọ lọc ữ đ k c ế , v ế l vớ ộ đị â .
ước ày y ộc vào f a ewo k c ọ để ự độ óa k ể ử. Độ ự c ọ Specflow ữ g đ k c ấ s được v ế ướ fea e và sce a o ố vớ DD s ày ở ế eo.
ớc 3: Tự độ óa k ể ử c o c c đ k c ấ đã v ế được ở ước . Nế ở ước 2, c ọ ecflow v c ự độ óa ày c ố vớ DD s ày ở ế eo.
ớc 4: ế ã l để c c kịc ả k ể ử ở c o kế q ả đú . a đó cấ úc l ã l để kế q ả của c c kịc ả k ể ử vẫ là đú .
1.6.7 Đánh giá Đ ểm mạnh:
- Do ATDD nhấn m nh vào sự phối hợp giữa khách hàng, l p trình viên, kiểm thử viên, nên ươ ày cải tiế đ kể sự hiểu biết lẫn nhau trong độ ự và hiểu biết v sản phẩm. Sản phẩ là a đ ứng chính xác những gì khách hàng yêu c u.
- Do ATDD nhấn m đến vi c k ể ử tự động, v ế k ể ử ước khi v ế ã, bất cứ lỗ ào s đ u có phản hồi rất nhanh từ ười sử dụng cuối.
- Đây là ấn m đến sự chia sẻ trách nhi m, hiểu biết giữa khách hàng và nhóm phát triển.
- Mọi yêu c ười sử dụ đ được làm rõ ngay từ đ u pha phát triển, l p trình viên luôn t vào đú ững gì khách hàng yêu c , được ư ừa.
- Dự án có thể đo đ c dễ dàng các chỉ tiêu dựa trên tỉ l ATDD thành công và thất b i
Đ ểm yếu
- Do ươ ấn m nh vào sự c n thiết phải có khách hàng tham gia, nên s có k ó k ă k k c à n.
- Khi phải viết k ể ử tự động, l p trình viên s phải làm nhi u vi c ơ truy n thống khi họ chỉ phải viết mã chức ă .
- Có thể thời gian thực hi n dự án bị ch m ở a đo đ u do có công vi c phân tích yêu c u, tự động hóa k ể ử phát sinh.
Ý k ế của độ dự á
ể ử v : lực c v c của s ả ấ ế l v có ể đả ảo oà à ấ cả c c đ k c ấ ước k c yể l ã ồ c o k ể ử. T s k ả là ộ vào ày à ao sả ẩ c o k c à . L v : T e ằ ế độ c v c k c o c ú a có ể v ế ữ đ k c ấ sả ẩ ước.
- í q ả: P ươ ế c ày c ỉ có q ả k có sự a a của k c à vào q ể ự . N ược l q ả của ó k so vớ c í ỏ a để ực . đã có k c à a a, í k ả của ự cao ơ ẳ . T à v o ự l ế đa là , đó ó c o ức a ổ ể. Độ ự là đú v c c là , ồ lực được ố ư cả k â l và k â k ể ử. c ự độ óa k ể ử c ả đ kể c í ự .
- Tí ực ế: Để ụ c c ế c ATDD, độ ự c lấy được x c ừ k c à v k ả ă s sà a a ự . N oà a độ ự c ố ợ vớ à v đả ảo quy trình, đị a a q y cụ ể ồ c c ước õ à . Độ ự c c ứ c o k c à ấy sự a a của k c à có a l q ả íc cực c o sả ẩ là a, c ỉ c o k c à c c c v c cụ ể ọ c là . N ư v y s ú k c à ấy được lợ íc và c ực sự của ọ q a c c c v c cụ ể.
- ả ă ụ vào ực ế: Nế có sự a a của k c à , k ả ă ụ ươ ày là oà oà có ực.
1.7 BDD
1.7.1 L c sử
DD đ được phát minh bởi Dan No vào đ u nhữ ă 2000 ư ột cách dễ ơ để d y và thực à ươ TDD ụng cho mô hình Agile [14].
Trong một hội nghị t Lo o vào 11 ă 2009, Da No đã đưa a định a DD ư là ế h tiếp theo của TDD. a đó Dan North cùn đồng nghi đã o ra công cụ để thực óa ươ DD với tên là JBehave, tiếp theo là RBehave cho Ruby. Ông cùng David Chelimsky, Aslak Hellesoy và nhữ ười khác tiếp tục phát triển RSpec và viết cuố s c T e R ec ook: e av o D ve Development with R ec, C c e , a F e s ướng dẫn cách áp dụng BDD, sau phát triển thành Cucumber bởi Aslak Hellesoy.
C o ă 200 C s Ma s đã ể eo ý ưởng Feature Injection cho phép BDD tham gia vào cả ph n phân tích nghi p vụ và toàn bộ chu trình phát triển ph n m m từ xây dự ý ưở a đ u, l c o đến chuyển giao.
1.7.2 Ý t ở
N ư đã ả ở trên v cách tiếp c n TDD, khi c n l p trình một chức ă , đ u tiên c n phải viết kịch bản kiểm thử và kịch bản này s bị thất b i trong l n ch y đ u tiên o c ưa có ã ồn thỏa mãn kịch bản. Kịch bản kiểm thử s mô tả, chỉ đị c c ường
hợp của chức ă c đ ứng. Tiếp theo l p trình viên c n viết mã nguồn chỉ đủ để cho các kịch bản kiểm thử thành công. Cuối cùng là chuẩn hóa l i mã nguồn để đảm bảo nó dễ bảo trì và tố ư . Ý ưở y đơ ả ư ất hi u quả, úc đẩy l p trình viên viết mã nguồn õ à , được thiết kế tốt, dễ bảo trì, và h n chế tố đa lỗi nghi p vụ [14].
Măc TDD có ất nhi í ă ố ư ất nhi đội dự án vẫ có k ó k ă khi áp dụng nó một cách hi u quả vào dự án thực tế đa ển khai. Một trong những khó k ă ất mà l p trình viên g p phải là họ không biết phải bắ đ u từ đâ , kịch bản kiểm thử nào s được chọn ho c không nên chọ để viết c o ường hợp tiế eo. Đ k TDD làm cho họ t p chung quá chi tiết vào một ph ào đấy của vấ đ mà mấ đ c nhìn rộ ơ v mục đíc của chức ă à n m m s phải cung cấp cho khách hàng.
Để giải quyết những vấ đ ày DD đã a đời với mục đíc là xe x l i, tố ư cách tiếp c TDD, ATDD. No đã đ xuất cách viết kịch bản kiểm thử xoay quanh chức ă o y c u nghi p vụ. BDD đã bổ sung vi c chọn các kịch bản kiểm thử nên được viết sử dụng chuẩn của Agile theo kiểu câ c y ườ với m đ : Với va là a đó, ốn một chức ă ào đó để tôi có thể đ được lợ íc đó (As a [role] I want [feature] so that [benefit]). Các ATDD nên viết theo d ng các kịch bản ưới d ng Given [initial context], when [event occurs], then [ensure some outcomes] dựa trực tiếp trên câ c y ườ . N ư v y các kịch bản kiểm thử có liên h trực tiếp tới yêu c u nghi p vụ. L l , và bắ đ u từ câ c y ườ , nói cách khác nhìn từ hành vi có liên h trực tiếp tới yêu c u của sản phẩm.
Có thể coi BDD ư là sự kết hợp giữa TDD vớ ý ưởng viết kịch bản kiểm thử ước khi viết mã nguồn, và bổ sung cho m t h n chế của TDD bằ ý ưởng của ươ pháp Domain driven- es ơ à c c à v với vai trò khác nhau trong đội dự án ư l p trình viên, kiểm thử viên, khách hàng, nhà ư vấn nghi p vụ [8]… có ể giao tiếp dễ dàng thông qua một ngôn ngữ chung trong dự . N ư v y DD và c c à v ả o DD ư là ột ngôn ngữ chung giao tiếp trong dự án.
1.7.3 Nguyên lý - DD vào c ức ă c cấ c o k c à [8]: Mộ vấ đ ay o ể là k ể c ắc c ắ y c vụ. Để k ắc ục k ó k ă ày DD l y c có sự a a của k c à để ú độ ự ể õ y c ước k ực . N ư v y c c sả ẩ là a s ả đú y c . - Là v c c a để cụ ể óa c c c ức ă [8]: DD ấ vào sự ố ợ c c à v o ự . C c à v ả c c a sẻ k ế ức v vụ c ư ả ực c c y c ày.
- Lo ỏ ọ sự k c ắc c ắ [8]: Độ ự l cố ắ là õ ấ có ể ọ vấ đ , ừ ước ả ớ k oả c c v k ế ức c liê q a đế sả ẩ là a, cố ắ là õ ấ có ể ọ ứ ay ừ đ .
- M ọa c c c ức ă ằ ữ ví ụ cụ ể [8]: Vớ c c ế c xây ự c c kịc ả cụ ể ựa y c , ỏ q a c c ví ụ cụ ể, độ ự s ắ õ ơ v c ức ă c ể . Mộ o ữ c c ễ ả kịc ả là h Given... When ... Then.
í ụ
Scenario: Transferring money to a savings account
Given I have a current account with 1000.00
And I have a savings account with 2000.00
When I transfer 500.00 from my current account to my savings account
Then I should have 500.00 in my current account
And I should have 2500.00 in my savings account
- T ay v v ế c c ca k ể ử ự độ , DD s v ế đ c ả eo có ể c y k ể ử ự độ .
- v ế k ể ử đơ vị à v ế ực ế đ c ả ở ức dùng để k ể ử: N ư v y v c ả y à l .
- C ẩ óa c c đ c ả có ể là k ể ử và ảo ộ lo à l ày c o oà ộ ố .
1.7.4 Quy trình
Q y của DD ư sa [11]:
- T ế l ục của sả ẩ ừ q ả đ ể của à đ ư để ấy được ức a ổ ể của sả ẩ ươ la .
- a c c c ức ă của sả ẩ để ó có ể oà à c c ục của ức a vớ c cụ fea e ec o .
- Đưa k c à , à đ ư a a vào q ể sả ẩ để có được ả ồ sớ và ố ấ có ể.
- Tự độ óa c c ví ụ ày để là c í k ể a l c ức ă s ể , ó là c c đ k để c yể ao.
- ử ụ should (s ) để ả à v của c ức ă để ú là õ c ừ c ức ă o ố .
- ử ụ ensure (đả ảo) k ả c của sả ả o v c đ ứ y c vụ.
- c ưa ể xo c c o le có ể sử ụ ock để k ể a sự íc ợ .
1.7.5 C cụ ỗ t ợ
Curcumber, Specflow, Behat, Kanlan, XBehave, Jasmine, Concordion.
1.7.6 í dụ m ọa
ớc 1: Mở 1 c ộc ọ v y c của ự ao ồ ữ à v sa : N ườ ỗ ợ vụ, ườ , ườ â íc vụ, l v , ườ q ả lý c ấ lượ , k ể ử v , q ả lý ự . Mục của ổ ọ là c a sẻ ữ ể ế v ữ í ă s được ực .
N ữ í ă c ực s được ể ư là ữ câ c y ườ .
í ụ vớ ộ ự v q ả lý lịc , sa c ộc ọ ày, có ể đưa a một số í ă ư sa :
Feature: Register System
As a traveler,
I want to register on travel system
So that I can make schedule and receive the suggestions for my travels.
Feature:View list schedule of other people
As a registered user or visiter,
I want see the list schedules of other traveler
Feature: Create master schedule
As a traveler and registered user
I want to create master schedule for my travelling
So that I can make detail schedule and receive suggestion of supporters who have experience travelling about detail schedule.
ớc 2: ớ ỗ í ă , ả c c kịc ả (sce a o) c o c ú .
a đây là một ví dụ v kịc ả c o í ă o lịc ể c (Master schedule)
Feature: Create master schedule
As a traveler and registered <user>,
I want to create master schedule for my travelling
So that I can make detail schedule and receive suggestion of supporters who have experience travelling about detail schedule.
S TT
Scenario 1
1
Scenario: Create with valid schedule
Given I’ a e s e e < se >
And I have litter than 3 open schedules And I am on the Init page
And I have completed the form with:
Theme of Travel | Handle name | Country(ies) | City(ies) | Departing date | Returning date | Day of stay
D lịc C â Â | o T | A e ca, E la | New yo k, London | 01/05/2015 | 01/06/2015 | 30
When I have clicked on the Create button
Then I see this master schedule in list my schedule a status of it is Open.
2 2
Scenario: Create schedule when exists more than 3 open schedules Given I'm a registered <user>
And I have 3 open master schedules:
Departing date | Returning date | Day of stay
D lịc C â Âu 1 | PhuongBT | America, England | New york, London | 01/05/2015 | 01/06/2015 | 30
D lịc C â Â 2 | o T | A e ca, E la | New yo k, London | 01/05/2015 | 01/06/2015 | 30
D lịc C â Â 3 | o T | A e ca, E la | New york, London | 01/05/2015 | 01/06/2015 | 30
When I create a master schedule with these information:
Theme of Travel | Handle name | Country(ies) | City(ies) | Departing date | Returning date | Day of stay
D lịc C â Â | PhuongBT | America, England | New york, London | 01/05/2015 | 01/06/2015 | 30
Then I ca ’ create this master schedule and see message: "You ca ’ create more than 3 open schedules in the system, please check your current schedule list."
3 3
Scenario: Create with blank Theme of Travel
Given I’ a e s e e < se >
And I have litter than 3 open schedules And I am on the Init page
And I have completed the form with:
Theme of Travel | Handle name | Country(ies) | City(ies) | Departing date | Returning date | Day of stay
| PhuongBT | America, England | New york, London | 01/05/2015 | 01/06/2015 | 30
When I have clicked on the Create button
Then I will get an error message "Theme of Travel is required field."
4 4
Scenario: Create with Theme of Travel exceeds 100 characters
Given I’ a e s e e < se >
And I have litter than 3 open schedules And I am on the Init page
And I have completed the form with:
Theme of Travel | Handle name | Country(ies) | City(ies) | Departing date | Returning date | Day of stay
I am interested in travelling.I'm writing to a travel agency. I'm asking for further information about their coach tours.I want to inform them when I want to take part in their coach tours | PhuongBT | America, England | New york, London | 01/05/2015 | 01/06/2015 | 30
When I have clicked on the Create button
Then I will get an error message "Theme of Travel must be litter than o eq al 100 c a ac e s
5 5
Scenario: Create with blank Handle name
Given I’ a e s e e < se >
And I am on the Init page