1.6 TDD step [15]

Một phần của tài liệu Nghiên cứu và ứng dụng phương pháp đặc tả phần mềm bằng ví dụ trong phát triển phần mềm (Trang 25)

T o c c ước trên ước chuẩn hóa mã nguồ (Refac o ) c í là đ ểm m nh chính của ươ TDD. Nó vừa đảm bảo cho ã ồ oà à đú y c a đ u, l i vừa được cấu trúc l để cải tiến chấ lượng ã theo các chuẩn.

1.5.5 C cụ ỗ t ợ

C c c cụ ỗ ợ TDD có c là XUNIT vớ c c c , ữ l t k c a ư: cppUnit, csUnit (.Net), CUnit, DUnit (Delphi), DBFit, DBUnit, HTMLUnit, HTTPUnit, JMock, JUnit, NDbUnit, NUnit, OUnit, PHPUnit, PyUnit (Python), SimpleTest, TestNG, Test::Unit (Ruby), VBUnit, XTUnit [13].

1.5.6 í dụ m ọa

ể ự eo ươ TDD, c ú a c v ế k ể ử ước k l p trình. Ở đây s lấy ộ ví ụ vớ ộ c ức ă đơ ả của ố ể lịc . T o lịc ể c (Schedule master) vớ ữ : Tên-Mục đíc chuyế đ , ữ đấ ước s đ q a, ững thành phố s đ q a, ngày khởi hành, ngày trở v .

ể ố ày đế sử ụ 3 lớ vớ As . e . v y s sử ụ As . e và ộ f a ewo k k ể ử đã íc ợ s ở s al tudio 2013.

T s ả c v c ả là k ể c c lớ vụ.

ớc 1: Tôi v ế kế c o c ức ă ày. Tôi c o ộ lớ vụ c o c ức ă o c e le: ScheduleBLL. Cô v c đ c là là o k ể ử c o lớ c e le ày.

T o 1 ự leA , 1 o ec c o ao : SimpleApp, 1 poject BussinessLogic Layer, 1 o ec để k ể ử lo c ày là ss essLo cLaye Tes .

a đó tôi o ộ lớ để k ể ử c o lớ c e le LL (Lớ vụ c o c ức ă o sc e le). H 1.8 T lớ ssiness Lớ ày k được o c đị ư sa : using System; using System.Text; using System.Collections.Generic; using System.Linq; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace BussinessLogicLayerTest { ///<summary>

/// Summary description for ScheduleBLLTest ///</summary>

[TestClass]

publicclassScheduleBLLTest

{

public ScheduleBLLTest() {

// TODO: Add constructor logic here }

///<summary>

///Gets or sets the test context which provides

///information about and functionality for the current test run. ///</summary>

publicTestContext TestContext { get { return testContextInstance; } set { testContextInstance = value; } } [TestMethod]

publicvoid TestMethod1() {

// TODO: Add test logic here }

} }

Tôi s v ế k ể ử c o ươ ức sc e le, và ươ ức ày s có 1 a số là 1 schedule.

publicvoid CreateScheduleTest() {

try

{

//Step 1: Call function Create data

String themOftravel = "Du lich 30-04-test";

String ownerId = "4f69707d-00bb-4a76-a907-1d3294846b94"; CreateSchedule dataTest = newCreateSchedule();

dataTest.HandleName = "PhuongBT"; dataTest.ThemeOfTravel = themOftravel;

dataTest.DepartingDate = DateTime.Now.AddDays(3); dataTest.ReturningDate = DateTime.Now.AddDays(7); dataTest.OwnerId = ownerId;

IScheduleBLL scheduleLogic = new

ScheduleBLL(Configs.ConnectionString);

scheduleLogic.Create(dataTest);

var resultSchedule = scheduleLogic.FindByName("Du lich 30-04"); if (resultSchedule != null)

Assert.AreEqual(dataTest.HandleName, resultSchedule.HandleName);

else Assert.Fail("Create Fail"); //Step 3: Delete data test

scheduleLogic.DeleteByThemOfTralve(themOftravel, ownerId); }

catch (Exception ex) {

Assert.Fail("Internal Error"); }

}

v ế đo ã k ể ử ư ế ày, ể ịc s o lỗ , v c ưa ồ lớ c e le LL c ư ươ ức C ea e của ó.

Tôi v ế được ươ ức k ể ử ư v :

Tôi c ộ lớ q ả lý lo c vụ của c e le, v y c 1 lớ c e le LL ở BusinessLogicLayer. T o ày, tôi o ộ e face I c e le LL vớ ươ ức c ea e c e le, sa đó o lớ c e le LL ực e face ày:

Tôi ằ ươ ức ày c 1 a số là 1 sche le được y ừ lớ ao đế lớ vụ. Tôi s c o a 1 lớ là C ea e c e le ở lớ

DataTranferObject

H 1.10 Lớ đố ượ ữ l a A efe e ớ o ec Bussiness layer

ước 2: Ch y kiểm thử và thấy ươ ức kiểm thử mới thất b i. ước 3: T ực v ế ã ồ để ươ ức k ể ử đú .

ước 4: ước sa đó tôi s ố ư ã ồ của để ươ ức k ể ử vẫ đú .

V ế k ể ử ước ư v y, khi tôi o c sửa 1 í ă k c, o c ay đổ cấ úc ữ l …Tôi s ế , v c ay đổ có là ả ưở đế ữ í ă tôi đã v ế ừ ước ay k ằ v c c y l c c ca k ể ử ày.

1.5.7 Đá á Đ ểm mạnh

C c lợ íc c í à ươ TDD đe l k so s vớ ươ y ố ước đây [10]: - Lỗ í : V TDD o a ã ồ được k ể ử đ y đủ nên ườ có í lỗ ơ . - ả ồ ay l ức c o l v : ả ồ ay l ức c o ữ l v o s ố q y của TDD, v v y ọ có ể ả ứ l và ay đổ a c ó . Tấ cả c v c à l v ả là là o ã ồ để c y được ấ cả c c k ể ử đã v ế ừ ước. - Tă sự c y: Mã ồ s là v c đú ư o đợ ế ó được ao ủ oà ộ ở c c ườ ợ k ể ử, l v có ể ưở ơ vào ã ồ của c í ọ.

- Cho cấ úc l : oà ộ c c c đ có ước cấ úc l ã ồ k ực TDD đa o ã ồ à ễ à cấ úc l .

- T ế kế õ à và đơ ả : Mã ồ được o a eo TDD s õ à và đơ ả ơ so vớ eo ữ y ố . Do đó k ực eo TDD, mã nguồn s ễ à ảo và c í ảo ấ .

Đ ểm yếu

- c à k ó đọc được c c ã k ể ử, o c đọc được c k ế được có đú vớ o ố của ọ ay k .

- Đ ỏ c sức, ờ a .

- íc ợ vớ ự ắ , đơ ả , õ à .

- đị a õ à : ắ đ k ể ử ừ đâ , ữ c k ể ử, c ao k ể ử, là ế ào để ể sao ộ k ể ử ấ .

Ý k ế của độ dự á

- í q ả: ươ TDD s q ả k ự có kíc ước lớ , y c c ức ă và c c c ức ă có ể v ế được kịc ả k ể ử ự độ . ớ ữ ự đơ ả o c kíc ước ỏ, TDD s là c o ự ức k c ế .

- Nế o độ ự à c ưa ụ ươ k ể ử ự độ ào ụ TDD, co TDD ư là ộ ước đ để ế ớ DD o c ATDD. TDD ụ ấ ễ dàng, là c o l v v ế ã ồ o s và súc íc ơ , c ỉ v ế a ữ c , ư ừa.

- Do l v k ụ TDD, k ố lượ c v c s ă l o a đo đ , v y c có c ẩ ị v â lý, đào o và ả íc ữ ư đ ể của ươ để ả ứ cực, c ố đố o c là eo c c c ố đố . đó kế q ả s có ứ ược l , vừa ố à y l k có c ụ .

1.6 ATDD

1.6.1 L c sử

Khái ni ATDD đã x ất hi n trong những ngữ cả k c a l q a đến công ngh ph n m m ít nhất là từ cuối nhữ ă 1990. Kent Beck và Ma Fowle đã đ c đến khái ni ày o ă 2000 c dù họ coi nó là rấ k ó để triể k a ưới d ng k ể ử đơ vị o a đ u của dự án [5].

Nă 2002: Kent Beck một l n nữa đã đ c p qua v khái ni m ATDD trong cuốn sách "Test Drive Develo e : y Exa le" ư vẫn k đ cao c c ếp c ATDD và co ó ư là k ực tế trong tiến trình phát triển ph n m m. Lý do vẫn là c ưa x ất hi n bộ công cụ có thể k ể ử tự động lên vi c áp dụng ATDD vẫ được coi là rất khó k ă .

C o k oảng từ ă 2003 tới ă 2004: với sự a đời của bộ công cụ hỗ trợ ATDD Fit/FitNesse, một công cụ hỗ trợ viết k ể ử tự động, ATDD mới d n d được áp dụng trong thực tế.

1.6.2 Ý t ở

TDD đã ú l p trình viên t o ra ã làm vi c và chất lượng cao, có khả ă ễ dàng bảo trì và tin c y.T y đứng v phía khách hàng, họ hiế k q a â đến vi c a ã ồ . Họ muốn ph n m m làm ra giúp họ ă ă s ất, t o ra ti n, dễ bảo trì, có khả ă cải tiến ho động hằng ngày, chiế l h thị ường… Đây c í là

những gì chúng ta c n cung cấp cho khách hàng dựa trên các chức ă của ph n m m.TDD đã k ải quyế được vấ đ , và đây là lý o c í ATDD a đời.

ATDD xuất phát từ c , q a đ ểm của ười dùng ứng dụng, một cái nhìn từ bên ngoài h thống. Họ kiể a c ươ ừ oà ư sự chính xác của đ u ra k đưa ộ đ u vào cụ thể. ATDD là một ph n trong ữ chiế lược kiểm tra tổng thể h thố ước k à ao c o ười dùng cuối.

ATDD được x c định từ sự cộng tác của khách hàng với các nhà phát triển và nhà kiểm thử, và được t o ước khi thực hi n viết mã, ó được dùng trong suốt quá trình phát triể c ư k oà à sản phẩm, kiểm thử tích hợp, kiểm thử h thống. ATDD không phải kiểm thử chấp nh n truy n thống được thực hi n bở ười dùng cuối sau khi hoàn thành sản phẩ , để x c định sản phẩ có đ ứ đ c tả trong hợ đồng hay không. ATDD c k ải kiểm thử h thố được viết bởi kiểm thử viên khi họ đọc yêu c để chắc chắn h thố đã là đú y c u [7].

1.6.3 Nguyên lý

Do được mở rộng và cải tiến từ ươ TDD, ATDD c đ eo c c ếp c n v ế k ể ử ước k v ế ã l . ATDD được t o khi yêu c đã được phân íc xo , và ước khi vi c l được tiến hành. Các kịch bản do ATDD t o ra phản ánh cách hành xử mong muốn của sản phẩm ph n m m. Độ ự s t o ra một ho c nhi u kịch bản k ể ử cho mỗi chức ă ước khi bắ đ u thực hi n chức ă đó. T ường các kịch bản này s được thảo lu và được thống nhất khi làm vi c cùng ười dùng, nhà phân tích nghi p vụ.

T ường các kịch bả ày được viết bằng cách sử dụng các thu t ngữ thống nhất trong độ ể sao cho k c à , l v , và k ể ử v có thể cùng hiểu. N ư v y ATDD và yêu c u nghi p vụ có ánh x trực tiếp với nhau.

Bất cứ yêu c u nghi p vụ nào mà thiếu c c ca k ể ử ươ ứ đ u có thể k được kiểm tra mộ c c đú đắn. N ược l i bất cứ ca k ể ử nào mà không ứng với yêu c u nghi p vụ ào đ u coi là thừa, không c n thiết. Khi chức ă được thực hi xo à c c ca k ể ử k à c co ư y c ươ ứng vớ ca k ể ử đó k được thực hi n mộ c c đú đắn.Bất cứ ca k ể ử nào phát sinh sau quá trình chức ă đã ực hi đ u coi là yêu c u mới.

N ư v y ATDD đã là ăng sự phối hợp trong quá trình t o ra sản phẩm ph n m m. Nó giúp chúng ta t o ra sản phẩm chính xác những gì khách hàng yêu c u ngay từ đ u.

H 1.12 Acceptance - Test Driven Development (ATDD) Cycle [6]

ATDD được sinh ra trong ngữ cảnh Agile, vì v y vi c thực hi n nó chủ yếu trong các dự án theo mô hình Agile.

- Đ ểm xuất phát của ươ ATDD là ừ yêu c ười sử dụng mà trong mô hình Agile gọi là câu c y ườ . Tất cả các yêu c u s được chuyển hóa thành các câ c y ườ , mỗi câ c y ườ s mô tả một cách ngắn gọ ư đ y đủ một chức ă à thống s phải thực hi n.

- ATDD s được thực trên câ c y ườ và ươ ứng với câ c y ườ . N ư v y c ư câ c y ườ , ATDD s là nhữ đ c tả cho những hành vi và chức ă à thống s thực hi n. ATDD s nói cho ta biết, với mỗi câ c y ườ , cách h thống s đ u khiển dựa đ u vào, đ u ki n cụ thể s c o đ a ươ ứng.

- ATDD có các thuộc tính sau:

 Được sở hữu bởi khách hàng.

 Được viết với sự phối hợp giữa khách hàng, l p trình viên và kiểm thử viên.

 Nó diễn tả h thống làm gì (What) chứ không mô tả cách h thống thực hi n (How).

 Được diễ đ t dựa trên ngôn ngữ mi n, o đó có ể dễ à được hiểu bởi tất cả các thành viên dự án.

 Ngôn ngữ mô tả súc íc , c í x c và k ơ ồ.

- Thực hi n ATDD

Một trong nhữ đ c đ ểm chung của ATDD là chúng có thể được thực hi n dựa trên ngôn ngữ khác so với ngôn ngữ cà đ t h thống c n kiểm thử.

Vi c dùng cùng hay khác với ngôn ngữ cà đ t h thống phụ thuộc chủ yếu vào các cộng ngh đa ó và ụ thuộc vào kiến trúc của h thống c n kiểm thử nói chung.

Ví dụ cho t ường hợ ày để dễ hiểu: Rất dễ để viết ATDD cho các ứng dụng web thông qua giao thức HTTP với bất cứ ngôn ngữ phổ biế ào, ư đ u này l i không đú đối với các h thống kiểu nhúng.

Lý do chính khác cho vi c chọn ngôn ngữ triển khai ATDD khác với ngôn ngữ cài đ t h thống là yêu c u cho viế ATDD ường rất khác so với các yêu c u c để thực hi n h thống. Ví dụ một h thống thời gian thực (real-time) có thể rất dễ để l p trình với chỉ ngôn ngữ C trong khi nó l ơ k ó để diễ đ t ATDD bằng ngôn ngữ C sao cho khách hàng, nhà phân tích nghi p vụ có thể hiể và ó. T o ường hợp này các ngôn ngữ ướng kịch bả ay được chọ để sử dụng.

Các ngôn ngữ cho vi c diễn tả ATDD ường s ở d ng khai báo, các cấu trúc bả , được thể hi n ưới d ng chuỗi của c c à độ được diễn tả bằng ngôn ngữ Tiếng Anh. Nếu chúng ta mong muốn khách hàng phối hợp ch t ch với nhà phát triển trong vi c thực hi n ATDD, những ngôn ngữ cấp thấp mang nhi u tính k thu t ư: Java, C, C++, C# s không phải là lựa chọn tốt.

1.6.4 Quy trình

Có rất nhi u cách khác nhau ứng dụ ATDD ư đ c tả thông qua các ví dụ, DD… Dướ đây là ột trong các cách dựa trên ATDD.

C c đơ ản và tự nhiên nhất của ATDD theo mô hình sau:

H 1.13 C kỳ đơ ả của ATDD [12]

Chu kỳ này s được l p dựa trên danh sách các câ c y ườ . Bắ đ u từ vi c lấy một câ c y ườ , viết ca k ể ử cho câ c y ườ này, chuyển ca k ể ử này ch y ở chế độ tự động dựa trên một công cụ ch y k ể ử tự độ . N ư v y ta có mộ ca k ể ử có thể ch y tự động ứng với yêu c u câ c y ườ đã c ọn. Cuối cùng thực hi n v ế ã để thỏa ã ca k ể ử này.

- ước 1: Lấy 1 câ c y ườ (user story) trong product backlog. Vi c chọn câ c y ườ dựa trên mô hình Agile, lấy câ c y ườ thực hi n trong sprint hi n hành.

- ước 2: Viế c c ca k ể ử để thỏa mãn câ c y ườ này. Trong giai đo n này có sự a a của k c à , ười xác nh đ u ki n thỏa mãn câ c y ườ , k ể ử v , và l p trình viên.

- ước 3: Tự độ óa c c ca k ể ử đã v ết ở ước trên: ước này liê q a đến công cụ được chọ để tự động hóa vi c k ể ử.

- ước 4: Thực hi n l p trình chức ă để thỏa ã ca k ể ử. T o ước này l p trình viên bắ đ u v ế ã c o chức ă . ATDD k q y định rõ cách thực hi ước này. Tuy nhiên mục đíc vẫn là ã được viế đủ để thỏa mãn ca k ể ử đã được đị a.

H 1.14 ATDD và TDD [12]

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 ấ

Một phần của tài liệu Nghiên cứu và ứng dụng phương pháp đặc tả phần mềm bằng ví dụ trong phát triển phần mềm (Trang 25)

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

(108 trang)