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

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu phát triển phần mềm hướng hành vi ứng dụng công cụ behat 001 (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/

[8]http://behat.org.

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 thng Kch bn th nht: 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ý"

Kết quả gọi lệnh behat lƣợt thứ nhất

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

Kch bn 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 #

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu phát triển phần mềm hướng hành vi ứng dụng công cụ behat 001 (Trang 100 - 112)

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

(112 trang)