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 ấ