CHƯƠNG 2. PHÁT TRIỂN PHẦN MỀM HƯỚNG HÀNH VI
2.4. Ngôn ngữ đặc tả ứng dụng
Khách hàng là một nhân tố quan trọng đảm bảo sự thành công của các sản phẩm, đó là những đối tượng sẽ trực tiếp sử du ̣ng hê ̣ thống , họ am hiểu các yêu cầu nghiê ̣p vu ̣ mà hê ̣ thống cần cài đă ̣t . Vì đa số khách hàng không am hiểu ngôn ngữ kỹ thuâ ̣t nên t rong các phương pháp phát triển phần mềm truyền thống, yêu cầu hê ̣ thống thường được mô tả bằng ngôn ngữ tự nhiên. Quá trình chuyển đă ̣c tả yêu cầu tƣ̀ ngôn ngƣ̃ tƣ̣ nhiên vào mã nguồn đôi khi có sƣ̣ sai lê ̣ch do lỗi của quá trình phân tích , thiết kế làm cho hê ̣ thống sau khi hoàn thiện không đáp ƣ́n g đúng yêu cầu của khách hàng . Đối với các dự án áp dụng kỹ thuâ ̣t phát triển phần mềm hướng hành vi , khách hàng là người trực tiếp mô tả các yêu cầu nghiệp vụ của hệ thống . Các yêu cầu này kh ông nhƣ̃ng làm tài liê ̣u đă ̣c tả, mà chúng còn làm tài liệu thiết kế và chƣ́a các tiêu chí để kiểm thƣ̉ chấp nhâ ̣n tự đô ̣ng , chính vì thế cần phải có phương pháp để mô tả yêu cầu cho phù
hợp.
Ngôn ngữ đă ̣c tả miền ứng du ̣n g được hiểu là ngôn ngữ cho phép khách hàng viết các quy tắc phần mềm mà không cần đến lập trình viên . Nó là ngôn ngữ thể hiê ̣n nghiê ̣p vu ̣ và có miền ngữ nghĩa xác đi ̣nh giúp cho người đo ̣c không am hiểu kỹ thuâ ̣t vẫn có thể hiểu được. Đồng thời tài liệu được viết bằng ngôn ngữ miền ứng du ̣ng có thể được hiểu bởi các công cu ̣ hoă ̣c máy tính . Các ngôn ngữ đă ̣c tả miền ứng du ̣ng thường sử du ̣ng ngôn ngữ mô hình hoă ̣c ngôn ngƣ̃ tƣ̣ nhiên có cấu trúc.
Kỹ thuâ ̣t phát triển phần mềm hướng hành vi thường sử du ̣ng ngôn ngữ đă ̣c
tâ ̣p các tƣ̀ vƣ̣ng c hỉ ra mô ̣t dãyhoạt động vàcách chúng sẽ đƣợc xử lý trong các giai đoạn phát triển tiếp theo. Các yêu cầu hệ thống đƣợc đặc tả một cách dễ hiểu cho cả người sử dụng phần mềm lẫnđội phát triển.Phần mềm được cài đă ̣t thông qua các vòng lă ̣p , viê ̣c lƣ̣a cho ̣n tính năng đƣa vào mỗi vòng lă ̣p dƣ̣ a trên đô ̣ ƣu tiên,các tính năng quan trọng sẽ đƣợc thực hiện sớm vì thế chúng sẽ đƣợc kiểm thƣ̉ nhiều lần trong suốt quá trình phát triển phần mềm.
Sƣ̉ du ̣ng ngôn ngƣ̃ đă ̣c tả miền ƣ́ng du ̣ng để viết các tính năng còn cải thiê ̣n quá trình giao tiếp giữa khách hàng với đội phát triển . Khách hàng có thể tự viết yêu cầu của mình bằng mô ̣t ngôn ngữ dễ hiểu, và tài liệu yêu cầu này được dùng làm tài liệu để cài đặt ứng dụng, cũng nhƣ làm tiêu chí để kiểm thƣ̉ chấp nhâ ̣n . Toàn bộ các thành viên liên quan đến dự án cùng làm việc chung trên tài liệu đặc tả này, giúp giảm thiểu sự hiểu lầm yêu cầu nghiê ̣p vu ̣.
Trong kỹ thuật phát triển phần mềm hướng hành vi ở giai đoạn thu thập yêu cầu, đại diện khách hàng làm việc với một người phân tích nghiệp vụ để xác định các yêu cầu nghiệp vụ. Trong phương pháp phát triển linh hoạt Agile thì phần yêu cầu này được hiểu là một câu chuyện người dùng và thường được mô tả bằng ngôn ngữ miền ứng dụng theo cấu trúc nhƣ sau[6]:
As a [X]
I want [Y]
So that [Z]
Trong đó Y đƣợc hiểu là một chức năng của hệ thống. Z là giá trị hay lợi ích mà Y đem lại, X là nhóm người hay bộ phận sẽ hưởng lợi từ Z.
Quá trình xác định và mô tả yêu cầu người dùng với các dự án áp dụng BDD là rất quan tro ̣ng để quyết đi ̣nh chất lượng sản phẩm . Mô ̣t câu chuyê ̣n người dùng nên tâ ̣p trung vào viê ̣c mô tả hành vi hê ̣ thống để đạt giá trị nghiệp vụ. Hành vi ở đây đƣợc hiểu đơn giản là các tiêu chí kiểm thử chấp nhận. Trong trường hợp hệ thống đáp ứng được tất cả các tiêu chí kiểm thử chấp nhận đó thì hệ thống có chất lượng , ngược lại hệ thống không đạt yêu cầu của người dùng [6].
Trong phần giới thiệu về phát triển phần mềm hướng hành vi – BDD,Dan North đã đƣa ra đi ̣nh da ̣ng để mô tả các tiêu chí kiểm thử chấp nhận của một câu chuyê ̣n người dùng[7]có dạng như sau:
Given:ngữ cảnh,
When:một sự kiện xảy ra, Then:Đảm bảo một số kết quả.
Ví dụ với tính năng quản lý thông tin người dùng
Feature: Testing sample REST services
In order to maintain user information through the services As a service user
I want to see if the services work as expected
Mỗicâu chuyện người dùng thường có một số kịch bản sử dụng , mỗi ki ̣ch bản tương ứng với một trường hợp sử dụng nào đó . Ví dụ với tính năng quản lý thông tin người dùng ở trên gồm các kịch bản nhập thông tin cho một nhân viên mới, tìm kiếm thông tin hoặc cập nhật thông tin cho nhân viên đã tồn tại trên hệ thống, … . Mỗi kịch bản thường có nhiều lê ̣nh hay còn go ̣i là bước, chúng mô tả ngữ cảnh, hoạt động hay kết quả của kịch bản đó. Mỗi bước nằm trên một dòng với các từ khóa cụ thểđứng đầu mỗi dòng.
Scenario: Creating a New Employee
Given that I want to add a new employee
And that employee ID of the employee is "007"
And that name of the employee is "James Bond"
And that age of the employee is "27"
When I request "/employee"
Then the response status code should be 200 And the response is JSON
And the response should be "true"
Scenario: Finding an Existing Employee Given that I want to find an employee When I request "/employee/007"
Then the response status code should be 200 And the response is JSON
And in the response name of the employee is "James Bond"
And in the response age of the employee is "27"
And in the response there is no field called "gender"
Scenario: Updating an Existing Employee Given that I want to update an employee
And that employee ID of the employee is "007"
And I'm changing age of the employee to "38"
When I request "/employee"
Then the response status code should be 200 And the response is JSON
And the response should be "true"
BDD đƣợc sử dụng để đặc tả và thiết kế phần mềm, nhƣng lợi ích lớn nhất mà BDD mang lại chính là việc mô tả các tiêu chí kiểm thử chấp nhận đến từ người sử dụng bằng ngôn ngữ tựa tự nhiên. Các tiêu chí này có thể dễ dàng được chuyển thành các phương thức kiểm thử nhờ vào các công cụ hỗ trợ BDD. BDD thường đi kèm với một ngôn ngữ mô tả miền ứng dụng để mô tả các hành vi của
ứng dụng, việc mô tả này giúp cho việc giao tiếp giữa các bên liên quan đến dự án phần mềm diễn ra dễ dàng hơn nhờ việc dùng chung một tài liệu đặc tả duy nhất mà các bên tham gia đều có thể hiểu đƣợc.
Kỹ thuật phát triển phần mềm hướng hành vi ngoài việc hỗ trợ kiểm thử chấp nhâ ̣n tự đô ̣ng , còn đảm bảo kiểm thử bao phủ mọi yêu cầu. BDD được áp dụng cùng với các phương pháp phát triển phần mềm theo nguyên lý lặp , mỗi vòng lặp tích hợp hoặc cải tiến mô ̣t số tính năng của hê ̣ thống. Các tính năng có đô ̣ ưu tiên cao thường được phát triển sớm hơn cá c tính năng có đô ̣ ưu tiên thấp giúp cho việc kiểm thử chấp nhận diễn ra thường xuyên , liên tu ̣c sau mỗi vòng lă ̣p.Tính năng càng quan tro ̣ng thì được kiểm thử càng nhiều lần . Nếu trong vòng lặp đó xuất hiện kiểm thử ở trạn g thái thất ba ̣i thì ngay lâ ̣p tƣ́c đô ̣i phát triển phải tìm nguyên nhân lỗi và cải thiê ̣n hê ̣ thống ở vòng lă ̣p tiếp theo cho đến khi tất cả các kiểm thƣ̉ đều thành công. Hê ̣ thống phát triển bằng kỹ thuâ ̣t phát triển phần mề m hướng hành vi đáp ứng mo ̣i tiêu chí kiểm thử chấp nhâ ̣n của người dùng, do đó chất lượng sản phẩm được nâng lên rõ rê ̣t.
Tuy nhiên, BDD chỉ làm viê ̣c hiê ̣u quả khi có công cu ̣ hỗ trợ , đó là các hê ̣ thống được sử du ̣ng để đo ̣c tài liê ̣u mô tả tính năng và lần lượt kiểm thử cho từng tính năng. Viê ̣c lựa cho ̣n công cu ̣ tùy thuô ̣c vào môi trường lâ ̣p trình và sở
thích của đội phát triển . Tuy nhiên, do BDD là một kỹ thuật khá mới mẻ , chƣa được áp du ̣ng phổ bi ến và chưa có nhiều tài liê ̣u tham khảo nên số lượng các công cu ̣ hỗ trợ còn khá ha ̣n chế so với các kỹ thuâ ̣t khác . Mô ̣t số công cu ̣ hỗ trợ
BDD được chính tác giả Dan North cùng với cô ̣ng đồng những người sử du ̣ng BDD xây dƣ̣ng nhƣ công cu ̣ Rspec cho ngôn ngƣ̃ Ruby, SpecFlow cho các ngôn ngƣ̃ .Net, …
Thời gian gần đây , các hệ thống trên nền web phát triển vƣợt bậc dần dần thay thế cho các ƣ́ ng du ̣ng Windows truyền thống, sƣ̣ di ̣ch chuyển này phần lớn nhờ vào các mã nguồn mở dành cho ƣ́ng du ̣ng web . Theo thống kê , hiê ̣n các trang web được viết bằng ngôn ngữ PHP chiếm tỷ lê ̣ cao. Chính vì thế nhu cầu kiểm thƣ̉ các ƣ́ng du ̣ng web nói chung và ƣ́ng du ̣ng web viết bằng PHP nói riêng là rất cần thiết . Qua tìm hiểu các công cu ̣ BDD thì số lượng các công cu ̣ hỗ trợ
ngôn ngƣ̃ PHP không nhiều, chỉ có hai công cụ nổi bật là PHPSpec và Behat , cơ chế hoa ̣t đô ̣ng của hai công cu ̣ này tương tự nhau , nhưng Behat được đa phần người dùng đánh giá tốt hơn. Trong chương tiếp theo của luâ ̣n văn , tác giả sẽ giới thiê ̣u về công cu ̣ Behat.