Nhận xét và kết luận

Một phần của tài liệu Nghiên cứu phát triển phần mềm hướng hành vi ứng dụng công cụ behat (Trang 100 - 112)

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 hiện hơn . Các đặc

tả 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ó thể cài đặt hệ thống, vừa làm các 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 khi viết mã nguồn giúp cho việc kiểm thử diễn ra thƣờng xuyên, mọi tính năng đều đƣợc kiểm thử ngay trong quá trình cài đặt nó giúp nâng cao độ tin cậy của ứ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 mỗi vòng lặp. Khi có sự bổ sung các tính năng mới, hoặc định nghĩa thêm một kịch bản sử dụng, các bƣớc của chúng dễ dàng đƣợc kiểm thử tự động. Lập trình viên chỉ cần bổ sung các phƣơng thức kiểm thử tƣơng ứng vào lớp ngữ cảnh và có thể tái sử dụng các phƣơng thức đã có. Behat giúp viê ̣c kiểm thƣ̉ hồi quy các tính năng của ứng dụng đƣợc thực hiện thƣờng xuyên , tránh nhà m chán cho kiểm thƣ̉ viên. Trong quá trình phát triển hê ̣ thống, lâ ̣p trình viên có thể sƣ̉ du ̣ng Behat để kiểm tra tra ̣ng thái của tính năng đang phát triển , giúp họ luôn biết đƣợc tình tra ̣ng của hê ̣ 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 khi tất cả các tính năng đều đƣợc kiểm thƣ̉. Sƣ̉ du ̣ng Behat đảm bảo tất cả các tính năng đều đƣợc kiểm tra ít nhất mô ̣t lần. Nhƣ̃ng tính năng quan tro ̣ng thƣờng đƣợc phát triển sớm hơn các tính năng ít quan trọng , do đó các tính năng cơ bản của hê ̣ 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 trong quá trình 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ả năng về ngôn ngƣ̃ PHP để viết chính xác các kiểm thƣ̉ c ủa hệ thống, tuy nhiên công viê ̣c này cũng bớt phức tạp nhờ sự hỗ trợ của các thƣ viện mở rộng , chẳng ha ̣n nhƣ MinkContext. Viê ̣c viết các đi ̣nh nghĩa bƣớc phu ̣ thuô ̣c hoàn toàn vào lâ ̣p trình viên và ở giai đoa ̣n này cũng có thể áp du ̣ng kỹ thuâ ̣t lâ ̣p trình theo că ̣p . Viê ̣c đi ̣nh nghĩa các tính năng có thể thƣ̣c hiê ̣n bởi ngƣời dùng hoă ̣c có sƣ̣ trợ giúp của 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 đều xuất phát từ ngƣời dùng.

Behat là công cụ hỗ trợ BDD để phát triển ứng dụng Web, mục đích chính của nó vẫn là kiểm thử chấp nhận ứng dụng dựa vào các tiêu chí kiểm thử chấp nhận đƣợc định nghĩa trong các tính năng. Các tiêu chí kiểm thử chấp nhận đó có thể đƣợc viết bởi khách hàng hoặc 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 đúng mong muốn của họ. Các yêu cầu đƣợc định nghĩa bằng cách mô tả các hành vi

của ứng dụng. Mỗi một tính năng mô tả một chức năng của ứng dụng. Tính năng có thể có nhiều kịch bản sử dụng, mỗi kịch bản ứng với một trƣờng hợp sử dụng của tính năng với những điều kiện ràng buộc nào đó.

Sử dụng Behat để kiểm tra ứng dụng sau khi đã thực hiện cũng là khía cạnh đƣợc quan tâm bởi các dự án phần mềm lớn, chẳng hạn nhƣ mã nguồn mở Drupal đang tìm cách để tích hợp Behat hỗ trợ kiểm tra các ứng dụng Web phát triển trên nền Drupal. Với những hệ thống lớn, thƣờng xuyên đƣợc cập nhật thì việc lựa chọn BDD để kiểm thử hồi quy và tự động hóa công việc kiểm thử là một lựa chọn sáng suốt. Trong phần này tác giả l ấy một 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 và công cụ Behat để kiểm thử ứng dụng.

KẾT LUẬN

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 là mô ̣t đề tài hay , có thể áp dụng thực tế. Qua quá trình nghiên cƣ́u của mình tôi nhận thấy mình đã đạt đƣợc những kết quả sau đây.

Tìm hiểu các khái niệm về 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 đang đƣợc sƣ̉ du ̣ng phổ biến hiê ̣n nay.

Luâ ̣n văn này cũng giúp tôi có cơ hô ̣i tìm hiểu kỹ hơn về phƣơng phát triển phần mềm linh hoa ̣t Agile , nắm đƣợc các nguyên lý cơ 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, đây 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 trình phần mềm này , tôi cũng nắm đƣợc mu ̣c đích và tầm quan trọng của kiểm thử trong các 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 trong các phƣơng pháp phát triển phần mềm hiê ̣n đa ̣i , chẳng ha ̣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 tôi có cơ hô ̣i đƣợc nghiên cƣ́u v ề các kỹ thuật, quy trình, công cu ̣ sƣ̉ du ̣ng trong 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 trong mô ̣t vài năm gần đây, và chƣa đƣợc sƣ̉ du ̣ng phổ biến. Tuy nhiên tôi hi vo ̣ng rằng trong 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 lĩnh vƣ̣c Công nghê ̣ phần mềm, đă ̣c biê ̣t là dùng phƣơng pháp này trong 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 trình ƣ́ng du ̣ng Web đang đƣợc sƣ̉ d ụng phổ biến nhất hiê ̣n nay.

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 các thà nh phần mở rô ̣ng khác giúp tôi có cái nhìn mới mẻ hơn 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 tôi đƣợ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 ở một vài mã nguồn mở nổi tiếng trong mấy tháng gần đây , chẳng ha ̣n nhƣ mã nguồn mở Drupal, áp dụng

thử nghiệm đó đƣợc ngƣời sƣ̉ du ̣ng hƣởng ƣ́ng nhiê ̣t tình . Điều này đ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, tôi 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, do hạn chế về thời gi an cũng nhƣ kiến thƣ́c nên ứng dụng minh họa cho các nghiên cứu của luận văn còn ở quy mô nhỏ, chƣa áp dụng để xây dựng một ứng dụng có ý nghĩa thực tế. Trong thời gian tới , tôi mong muốn sẽ nghiên cƣ́u sâu hơn viê ̣c sƣ̉ du ̣ng Behat để kiểm thƣ̉ chấp nhâ ̣n tƣ̣ đô ̣ng cho các ứng dụng Web và cao hơn nữa là phát triển ứng dụng Web.

Qua tìm hiểu của mình, tôi nhâ ̣n thấy phát triển phần mềm theo hƣớng hành vi là mô ̣t lĩnh vƣ̣c rất hay và có thể áp du ̣ng phổ biến trong các công ty phần mềmcũng nhƣ trong đào ta ̣o sinh viên chuyên ngành Công nghê ̣ thông tin. Trong thời gian tới, tôi hi vo ̣ng rằng sẽ có điều kiê ̣n để tìm hiểu kỹ hơn về lĩnh vƣ̣c này và có thể đ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ác công ty phần mềm , cũng nhƣ bổ sung kiến thức để giúp các em sinh viên ngành Tin học.

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? <http://www.controlchaos.com/about/> 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/

PHỤ LỤC

1. Cài đặt Behat

Khi áp dụng Behat để kiểm thử cho dự án phần mềm, chúng ta cần phải cài đặt Behat cùng các 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 khi cài đă ̣t Behat thành công , ngƣời dùng có thể sƣ̉ du ̣ng màn hình dòng lệnh để viết các lệ nh behat. Công cu ̣ Behat cung cấp khá nhiều thuô ̣c tính và tùy chọn để thực hiện lệnh này . Các thuộc tính cơ bản của lệnh behat đƣợc giới thiê ̣u trong mu ̣c 3.1.1.

2. Phát triển tính năng Đă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 của 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ý"

1 scenario (1 undefined)

9 steps (6 passed, 3 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 các định nghĩa bƣớc còn 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 quả 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()

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()

1 scenario (1 failed)

9 steps (1 passed, 7 skipped, 1 failed) 0m0.048s

Bổ sung mã HTML cho form đăng nhập

<div id="tieu_de">ĐĂNG NHẬP</div> <div id="noi_dung">

<p class="validate_msg">Thông tin nhập vào không hợp lệ</p>

<form name="dangnhap" action="xu_ly_dang_nhap.php" method="post"> <p>

<label for="tendn">Tên đăng nhập</label> <input name="tendn" id="tendn" type="text" /> <span class="val_tendn"></span>

</p> <p>

<label for="matkhau">Mật khẩu</label>

<input type="password" name="matkhau" id="matkhau" /> <span class="val_matkhau"></span>

</p> <p>

<input type="button" value="Đăng nhập" onClick="dang_nhap()" name="login"/>

<input type="reset" value="Reset" /> </p>

<p>

<a href="../thanh_vien/quen_mat_khau.php" title="Quên mật khẩu"> Quên mật khẩu</a>

</p> <p>

<a href="frm_dangky1.php">Đăng ký</a> <p>

</form> </div>

Kết quả kiểm thử lƣợt thứ ba

1 scenario (1 passed) 9 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 quả 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 2 scenarios (1 passed, 1 undefined)

13 steps (12 passed, 1 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();

$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 quả kiểm thử lƣợt thứ hai

2 scenarios (1 passed, 1 failed) 13 steps (12 passed, 1 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 quả kiểm thử lƣợt thứ ba 2 scenarios (2 passed) 13 steps (13 passed) 0m10.642s

Tƣơng tự ta bổ sung các kịch bản khác cho tính năng đăng nhập, tính năng và kết quả kiểm thử tính năng nhƣ sau:

gampt@gampt-Inspiron-N4010:~/Desktop/behattest/MinkExtension- example$ 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 của 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ẩu 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()

@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ẩu 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 khẩu | 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()

5 scenarios (5 passed) 28 steps (28 passed) 0m18.746s

Một phần của tài liệu Nghiên cứu phát triển phần mềm hướng hành vi ứng dụng công cụ behat (Trang 100 - 112)

Tải bản đầy đủ (PDF)

(112 trang)