12/08/2018, 13:02

Giới thiệu về Agile trong phát triển phần mềm

Cũng giống như tất cả các ngành sản xuất khác, việc thành công của phát triển phần mềm cũng đòi hỏi phải có những phương pháp phát triển hiệu quả. Một trong số đó là Agile, hiện đang rất phổ biến trên thế giới và được áp dụng tại nhiều công ty phần mềm Việt Nam. Vậy Agile là gì ? Agile ...

Cũng giống như tất cả các ngành sản xuất khác, việc thành công của phát triển phần mềm cũng đòi hỏi phải

có những phương pháp phát triển hiệu quả. Một trong số đó là Agile, hiện đang rất phổ biến trên thế giới và

được áp dụng tại nhiều công ty phần mềm Việt Nam.

Vậy Agile là gì ?

Agile (agile software development) hay Phát triển phần mềm linh hoạt là một phương pháp luận, một triết lí

phát triển phần mềm dựa trên nguyên tắc phân đoạn vòng lặp (iterative) và tăng trưởng (incremental).

Theo đó nhu cầu và giải pháp tiến hóa thông qua sự hợp tác giữa các nhóm tự quản lý và liên chức năng. Agile

thường sử dụng cách lập kế hoạch thích ứng (adaptive planning). Việc phát triển và chuyển giao theo hướng

tiến hóa; sử dụng các khung thời gian ngắn và linh hoạt để dễ dàng phản hồi lại với các thay đổi trong quá trình

phát triển.

Tuyên ngôn về Agile:

Năm 2001, sự ra đời của Manifesto for Agile Software Development (Tuyên ngôn về Agile) đã đánh dấu bước

phát triển vượt bậc của Agile, qua đó giúp mọi người có thể dễ nhớ và dễ hiểu hơn về giá trị cốt lõi của nó. Nội

dung của tuyên ngôn như sau:

Tuyên ngôn Phát triển phần mềm linh hoạt

+ Chúng tôi đã phát hiện ra cách phát triển phần mềm tốt hơn bằng cách thực hiện nó và giúp đỡ người khác thực hiện.
+ Qua công việc này, chúng tôi đã đi đến việc đánh giá cao:
+ Cá nhân và sự tương táchơn là quy trình và công cụ;
+ Phần mềm chạy tốt hơn là tài liệu đầy đủ;
+ Cộng tác với khách hàng hơn là đàm phán hợp đồng;
+ Phản hồi với các thay đổi hơn là bám sát kế hoạch.

Mặc dù các điều bên phải vẫn còn giá trị, nhưng chúng tôi đánh giá cao hơn các mục ở bên trái.

Bên cạnh đó, các nhà phát triển còn nhấn mạnh mười hai nguyên lý phía sau Tuyên ngôn Agile để giúp các nhà

phát triển có được gợi ý trong thực hành và vận dụng các phương pháp agile trong thực tiễn. Các nguyên lý

được liệt kê sau đây:

  1. Ưu tiên cao nhất của chúng tôi là thỏa mãn khách hàng thông qua việc chuyển giao sớm và liên tục các

phần mềm có giá trị.

  1. Chào đón việc thay đổi yêu cầu, thậm chí rất muộn trong quá trình phát triển. Các quy trình linh hoạt tận

dụng sự thay đổi cho các lợi thế cạnh tranh của khách hàng.

  1. Thường xuyên chuyển giao phần mềm chạy tốt tới khách hàng, từ vài tuần đến vài tháng, ưu

tiên cho các khoảng thời gian ngắn hơn.

  1. Nhà kinh doanh và nhà phát triển phải làm việc cùng nhau hàng ngày trong suốt dự án.

  2. Xây dựng các dự án xung quanh những cá nhân có động lực. Cung cấp cho họ môi trường và sự hỗ trợ cần

thiết, và tin tưởng họ để

  1. Phương pháp hiệu quả nhất để truyền đạt thông tin tới nhóm phát triển và trong nội bộ nhóm phát triển

là hội thoại trực tiếp.

  1. Phần mềm chạy tốt là thước đo chính của tiến độ.

  2. Các quy trình linh hoạt thúc đẩy phát triển bền vững. Các nhà tài trợ, nhà phát triển, và người dùng có thể

duy trì một nhịp độ liên tục không giới hạn.

  1. Liên tục quan tâm đến các kĩ thuật và thiết kế tốt để gia tăng sự linh hoạt.

  2. Sự đơn giản – nghệ thuật tối đa hóa lượng công việc chưa xong – là căn bản.

  3. Các kiến trúc tốt nhất, yêu cầu tốt nhất, và thiết kế tốt nhất sẽ được làm ra bởi các nhóm tự tổ chức.

  4. Đội sản xuất sẽ thường xuyên suy nghĩ về việc làm sao để trở nên hiệu quả hơn, sau đó họ sẽ điều chỉnh

và thay đổi các hành vi của mình cho phù hợp.

Các nguyên lý này, cùng với năm điểm cốt lõi trong "Tuyên ngôn Agile" sẽ định hướng cho các nhà thực hành

agile (agile practictioner) vận dụng tốt các phương pháp agile vào thực tiễn.

Các đặc trưng của Agile:

Các đặc trưng sau sẽ giúp chúng ta xác định xem liệu một phương pháp triển triển phần mềm nào đó có phải là

Agile hay không.

  • Tính lặp (Iterative): Dự án sẽ được thực hiện trong các phân đoạn lặp đi lặp lại. Các phân đoạn (được

gọi là Iteration hoặc Sprint) này thường có khung thời gian ngắn (từ một đến bốn tuần). Trong mỗi

phân đoạn này, nhóm phát triển thực hiện đầy đủ các công việc cần thiết như lập kế hoạch, phân tích

yêu cầu, thiết kế, triển khai, kiểm thử (với các mức độ khác nhau) để cho ra các phần nhỏ của sản

phẩm. Các phương pháp agile thường phân rã mục tiêu thành các phần nhỏ với quá trình lập kế hoạch

đơn giản và gọn nhẹ nhất có thể, và không thực hiện việc lập kế hoạch dài hạn.

Hình: Các phân đoạn lặp đi lặp lại trong agile

  • Tính tăng trưởng (Incremental) và tiến hóa (Evolutionary): Cuối các phân đoạn, nhóm phát triển

thường cho ra các phần nhỏ của sản phẩm cuối cùng. Các phần nhỏ này thường là đầy đủ, có khả

năng chạy tốt, được kiểm thử cẩn thận và có thể sử dụng ngay (gọi là potentially shippable product

increment of functionality). Theo thời gian, phân đoạn này tiếp nối phân đoạn kia, các phần chạy

được này sẽ được tích lũy, lớn dần lên cho tới khi toàn bộ yêu cầu của khách hàng được thỏa mãn.

Khác với mô hình phát triển Thác nước – vốn chỉ cho phép nhìn thấy toàn bộ các chức năng tại thời

điểm kết thúc dự án, sản phẩm trong các dự án agile lớn dần lên theo thời gian, tiến hóa cho tới khi

đạt được trạng thái đủ để phát hành.

  • Tính thích nghi (adaptive): Do các phân đoạn chỉ kéo dài trong một khoảng thời gian ngắn, và việc lập

kế hoạch cũng được điều chỉnh liên tục, nên các thay đổi trong quá trình phát triển (yêu cầu thay đổi,

thay đổi công nghệ, thay đổi định hướng về mục tiêu v.v.) đều có thể được đáp ứng theo cách thích

hợp.

  • Nhóm tự tổ chức và liên chức năng: Cấu trúc nhóm agile thường là liên chức năng(cross-

functionality) và tự tổ chức(self-organizing). Theo đó, các nhóm này tự thực hiện lấy việc phân công

công việc mà không dựa trên các mô tả cứng về chức danh (title) hay làm việc dựa trên một sự phân

cấp rõ ràng trong tổ chức. Các nhóm này cộng tác với nhau để ra quyết định, theo dõi tiến độ, giải

quyết các vấn đề mà không chờ mệnh lệnh của các cấp quản lý. Họ không làm việc theo cơ chế “mệnh

lệnh và kiểm soát” (command and control). Nhóm tự tổ chức có nghĩa là nó đã đủ các kĩ năng

(competency) cần thiết cho việc phát triển phần mềm, do vậy nó có thể được trao quyền để tự ra

quyết định, tự quản lí và tổ chức lấy công việc của chính mình để đạt được hiệu quả cao nhất.

  • Quản lý tiến trình thực nghiệm (Empirical Process Control): Các nhóm agile ra các quyết định dựa trên

các dữ liệu thực tiễn thay vì tính toán lý thuyết hay các tiền giả định (prescription). Việc phân nhỏ dự

án thành các phân đoạn ngắn góp phần gia tăng các điểm mốc để nhóm phát triển thu thập dữ kiện

cho phép điều chỉnh các chiến lược phát triển của mình. Nói cách khác, Agile rút ngắn vòng đời phản

hồi (short feedback life cycle) để dễ dàng thích nghi và gia tăng tính linh hoạt. Theo thời gian, các

chiến lược này sẽ tiến gần đến trạng thái tối ưu, nhờ đó nhóm có thể kiểm soát được tiến trình, và

nâng cao năng suất lao động.

  • Giao tiếp trực diện (face-to-face communication): Một số mô hình phát triển phần mềm dựa rất nhiều

vào công việc giấy tờ, từ việc thu thập yêu cầu người dùng, viết đặc tả hệ thống, các thiết kế hệ thống

v.v. Agile không phản đối công dụng của công việc tài liệu hóa, nhưng đánh giá cao hơn việc giao tiếp

trực diện thay vì gián tiếp thông qua giấy tờ. Về yêu cầu của khách hàng, agile khuyến khích nhóm

phát triển trực tiếp nói chuyện với khách hàng để hiểu rõ hơn về cái khách hàng thực sự cần, thay vì

phụ thuộc nhiều vào các loại văn bản. Trong giao tiếp giữa nội bộ nhóm phát triển với nhau, thay vì

một lập trình viên (thực hiện việc mã hóa) và một kĩ sư (thực hiện việc thiết kế) giao tiếp với nhau

thông qua bản thiết kế, agile khuyến khích hai người này trực tiếp trao đổi và thống nhất với nhau về

thiết kế của hệ thống và cùng nhau triển khai thành các chức năng theo yêu cầu.

  • Phát triển dựa trên giá trị (value-based development): Một trong các nguyên tắc cơ bản của agile là

“phần mềm chạy tốt chính là thước đo của tiến độ”. Nguyên tắc này giúp nhóm dám loại bỏ đi các

công việc dư thừa không trực tiếp mang lại giá trị cho sản phẩm. Để vận hành được cơ chế “làm việc

dựa trên giá trị”, nhóm agile thường làm việc trực tiếp và thường xuyên với khách hàng (hay đại diện

của khách hàng), cộng tác trực tiếp với họ để biết yêu cầu nào có độ ưu tiên cao hơn, mang lại giá trị

hơn sớm nhất có thể cho dự án. Nhờ đó các dự án agile thường giúp khách hàng tối ưu hóa được giá

trị của dự án. Một cách gần như trực tiếp, agile gia tăng đáng kể độ hài lòng của khách hàng.

Kết luận các nhóm giải pháp theo triết lí Agile đã và đang là xu hướng trong việc phát triển phần mềm, được

nhiều công ty áp dụng. Với sự linh hoạt và hiệu quả nó đang dần thay thế các phương pháp cũ như WaterFall,

Prototype … Trong bài viết tới tôi sẽ đề cập đến Scrum một phương pháp theo Agile.

0