Giới thiệu chung
Cho tới nay, hai vấn đề lớn đặt ra cho những người hoạt động trong lĩnh vực Công nghệ phần mềm (CNPM) vẫn là:
- Làm sao có thể rút ngắn được thời gian phát triển sản phẩm mà vẫn thỏa mãn được yêu cầu của khách hàng ?
- Làm sao có thể đáp ứng được sự thay đổi liên tục về yêu cầu phần mềm ?
Giải pháp cho hai vấn đề này có thể xem xét từ hai khía cạnh sau: Công cụ và phương pháp luận. Về mặt công cụ, với sự ra đời của các ngôn ngữ lập trình hướng đối tượng mạnh như Java, C++ và các ngôn ngữ mô hình hóa như UML đã đáp ứng được phần nào nhu cầu của những người phát triển phần mềm. Về mặt phương pháp luận, các tiêu chuẩn chất lượng như ISO9001 hay CMM đã giúp cho các doanh nghiệp phát triển phần mềm, định hướng được việc xây dựng quy trình phát triển phần mềm. Đặc biệt, phương pháp luận RUP (Rational Unified Process) có thể coi là một ví dụ điển hình và cụ thể về quy trình phát triển phần mềm.
Các phương pháp luận này, tuy đã giúp cho các doanh nghiệp phần mềm có được những quy trình phát triển phần mềm có tính dự báo cao và ổn định, nhưng vẫn chưa đáp ứng được hai vấn đề đặt ra ở trên. Từ đầu năm 2000, một cuộc cách mạng mới về phương pháp luận phát triển phần mềm đã bắt đầu với sự ra đời của các phương pháp luận hạng nhẹ (lightweight methods) như eXtreme Programming (XP), Crystal, Adaptive Software Development, ... Các phương pháp này được gọi là hạng nhẹ để tương phản với các phương pháp hạng nặng (heavyweight methods) thiết lập dựa trên các tiêu chuẩn ISO9001, CMM hay RUP. Trong số các phương pháp hạng nhẹ, XP đã nhận được sự quan tâm nhiều nhất vì nó đã đề ra hai mục tiêu rất rõ ràng và cần thiết cho CNPM:
* Phát triển sản phẩm một cách nhanh chóng: Với sự phát triển hiện nay của nền kinh tế dựa trên Công nghệ thông tin, doanh nghiệp nào đưa sản phẩm ra thị trường nhanh nhất sẽ chiếm được thị phần có lợi nhất. Phương pháp XP sẽ giúp cho các nhà phát triển phần mềm rút ngắn thời gian phát triển sản phẩm.
* Phát triển sản phẩm đúng theo yêu cầu của khách hàng: thực tế cho thấy rằng nhiều sản phẩm phần mềm tuy được phát triển một cách công phu nhưng lại không đáp ứng được nhu cầu của người sử dụng. Phương pháp XP đã đưa ra các cơ chế cho phép sản phẩm phát triển luôn phù hợp với yêu cầu của người sử dụng.
Trong phạm vi bài báo này, chúng tôi sẽ giới thiệu một cách tổng quan về phương pháp phát triển phần mềm eXtreme Programming.
Các nguyên tắc cơ bản của XP
XP được thiết lập dựa trên bốn nguyên tắc sau:
Trao đổi (Communication): XP chú trọng việc trao đổi thông tin một cách 'trong suốt' giữa các thành viên trong nhóm phát triển. Đề cao việc trao đổi trực tiếp, giảm việc trao đổi gián tiếp hay hinh thức thông qua các văn bản.
* Với XP, khách hàng tham gia trực tiếp vào việc thực hiện dự án với tư cách là một thành viên chính thức của nhóm phát triển. Khách hàng sẽ giúp nhóm phát triển hiểu và nắm bắt được và kịp thời các yêu cầu của người sử dụng (cũng như sự thay đổi về yêu cầu) trong suốt quá trình thực hiện dự án.
* Tất cả các thành viên đều tham gia vào mọi hoạt động trong quá trình phát triển phần mềm. Điều này sẽ nâng cao tính năng động của toàn bộ nhóm phát triển.
Phản hồi (Feedback): phản hồi sớm và liên tục từ khách hàng cũng như từ nhóm phát triển giúp cho dự án luôn đi theo đúng hướng. XP đều đặn giao sản phẩm cho khách hàng để kiểm tra, theo đó khách hàng có thể 'làm mịn' và hoàn thiện yêu cầu sản phẩm dựa trên các kết quả cụ thể. Với sự trợ giúp của khách hàng, XP xây dựng một tập các phép thử phụ vụ cho việc kiểm định (acceptation test) một cách liên tục trong suốt quá trình phát triển phần mềm.
Đơn giản (Simplicity): XP đảm bảo chỉ phát triển những chức năng mà khách hàng yêu cầu. Phần thiết kế và mã nguồn được thiết lập một cách đơn giản nhất, cho phép có được đặc tính 'mở' cao nhằm đáp ứng với các thay đổi liên tục và luôn duy trì được một tốc độ phát triển nhanh trong suốt quá trình phát triển phần mềm.
Dũng cảm (Courage): XP cho rằng phải có lòng dũng cảm thì mỗi thành viên mới thực hiện được các nguyên tắc kể trên. Tuy XP không chỉ ra một cách rõ ràng, nhưng cũng cần phải nhấn mạnh rằng tính kỷ luật là yêu cầu quan trọng để thực hiện có hiệu quả phương pháp phát triển phần mềm XP.
12 quy cách làm việc của XP
Phương pháp XP đã đề ra 12 quy cách (practices) làm việc để thực hiện các nguyên tắc phát triển phần mềm đã nêu ở trên. Theo các chuyên gia trong CNPM, các quy cách làm việc đề ra bởi XP không có gì là mới. Thực chất, những quy cách này là những kinh nghiệm hay nhất thu được trong quá trình phát triển CNPM, đặc biệt là CNPM với công nghệ hướng đối tượng.
Lập kế hoạch (Planning process)
Với XP, khách hàng tham gia trực tiếp vào quá trình lập kế hoạch phát triển phần mềm. Vai trò của khách hàng và nhóm phát triển được định ra một cách rõ ràng.
Trách nhiệm của khách hàng:
* Mô tả tính năng phần mềm cần phát triển thông qua các ' câu chuyện' (user story). User story có ý nghĩa tương tự như use case trong UML nhưng mức độ mô tả thì không chi tiết bằng.
* Phân loại các user story theo mức độ quan trọng từ quan điểm người sử dụng (dựa trên giá trị kinh doanh-business value). Từ đó sẽ định ra tính năng nào cần phải phát triển và phát triển theo thứ tự như thế nào.
* Định ra thời điểm và chu kỳ bàn giao sản phẩm
Trách nhiệm của nhóm phát triển:
* Ước lượng yêu cầu kỹ thuật (để phát triển) cho từng user story (ước lượng độ phức tạp).
* Ước lượng thời gian, nhân công cũng như giá thành để phát triển từng user story.
Với sự phân công trách nhiệm như vậy, bản kế hoạch sẽ luôn thỏa mãn được yêu cầu của khách hàng cũng như nhóm phát triển.
Bàn giao từng phần (Small releases)
Theo quy cách này, nhóm phát triển sẽ phát triển dần dần phần mềm, từ đơn giản đến phức tạp. Từng phần sẽ được chuyển giao cho khách hàng để có được ngay sự phản hồi của khách hàng. Từ đó sẽ có thể điều chỉnh ngay được sản phẩm cho phù hợp với yêu cầu của khách hàng. Khách hàng cũng có điều kiện để bổ sung hay thay đổi yêu cầu phần mềm.
Tham gia trực tiếp của khách hàng (On-site customer)
Với XP, khách hàng sẽ tham gia cách trực tiếp trong suốt quá trình phát triển phần mềm. Sự tham gia này sẽ giúp cho nhóm phát triển có điều kiện tham khảo trực tiếp ý kiến của khách hàng, trao đổi về hệ thống cần được phát triển, tránh được nhầm lẫn trong cách hiểu về hệ thống cần phát triển. Mục tiêu cuối cùng là sản phẩm làm ra phù hợp với yêu cầu của khách hàng.
Lập trình đôi (Pair programming)
Tất cả các phần chương trình do một hay nhiều nhóm hai người viết. Hai người này sẽ sử dụng chung một máy tính, cùng đồng thời viết chương trình. Quy cách này sẽ giúp cho có được giải pháp lập trình tốt hơn, chương trình sẽ có chất lượng và hiệu quả hơn.
Thiết kế đơn giản (Simple design)
XP khuyến khích tìm kiếm giải pháp đơn giản khi thiết kế phần mềm. Chỉ thiết kế phần mềm thoả mãn yêu cầu hiện tại của khách hàng, không nên tìm kiếm một giải pháp cho một hệ thống tương lai. Theo đó, chỉ cần một thiết kế làm sao cho chương trình chạy được và thỏa mãn yêu cầu của khách hàng.
Tổ chức lại chương trình (Refactoring)
Quan điểm của XP là chất lượng phần mềm được thể hiện bằng chất lượng của mã nguồn (code). Một chương trình được viết rõ ràng, đơn giản thì sẽ dễ bảo dưỡng và thay đổi. XP khuyến khích tổ chức (viết ) lại chương trình một cách đều đặn để nâng cao tính sáng sủa của chương trình, dễ bổ sung các chức năng mới, nâng cao hiệu suất của chương trình.
Kiểm thử (Testing)
XP yêu cầu rất cao trong khâu kiểm thử và kiểm định chương trình. Với mỗi phần của chương trình, lập trình viên phải viết chương trình kiểm thử cho phần đó trước khi thực sự bắt đầu khi viết chương trình (cho phần đó). Khách hàng sẽ chịu trách nhiệm thực hiện kiểm định sản phẩm.
Tích hợp liên tục (Continuous integration)
Việc tích hợp sẽ được tiến hành một cách liên tục. Khi một đoạn chương trình mới được phát triển, đã vượt qua phần kiểm thử, thì sẽ được tích hợp ngay vào hệ thống. Điều này sẽ giúp cho việc phát hiện và sửa lỗi thích hợp nhanh hơn và rẻ hơn. Trong một ngày có thể thực hiện nhiều lần tích hợp hệ thống.
Sở hữu tập thể (Collective ownership)
Tất cả mã nguồn đều thuộc quyền sở hữu của mọi thành viên trong nhóm phát triển. Theo đó, mã nguồn có thể được sửa đổi ngay khi cần. Với cách quản lý thông thường, mỗi phần mã nguồn thường do một người quản lý, nên khi cần sửa đổi thì phải cần sự thông qua chủ sở hữu, đôi khi điều này gây mất nhiều thời gian.
Chuẩn lập trình (Coding standards)
Để chương trình (mã nguồn) có thể hiểu được một cách dễ dàng, nhất là đối với các quy cách lập trình đôi và sở hữu tập thể, nhóm phát triển phải thống nhất cách viết chương trình. Cần phải có một quy định cụ thể, rõ ràng về cách viết (ví dụ, cách đặt tên biến, cách bổ sung chú thích, ..v.v.) để làm sao tất cả đều hiểu được.
Metaphor (Metaphor)
Nhóm phát triển XP dùng chung một hệ thống các thuật ngữ để biểu diễn hệ thống cần phát triển. Các thuật ngữ này sẽ được dùng trong khi trao đổi giữa các thành viên trong nhóm cũng như khi trao đổi với khách hàng.
Không làm việc quá giờ (40 - hour week)
Hiện tượng làm việc quá giờ rất phổ biến trong giới phát triển phần mềm. Thực tế cho thấy khi người lao động làm việc quá giờ thường hay mệt mỏi, dẫn đến làm việc không hiệu quả, chất lượng sản phẩm giảm. XP khuyến cáo không nên làm việc quá giờ, chỉ làm đúng giờ quy định để đảm bảo chất lượng sản phẩm.
Điều kiện để áp dụng XP
Nhóm phát triển nhỏ hơn 10 người. XP có thể áp dụng một cách có hiệu quả trong các nhóm phát triển có số lượng nhỏ hơn 10 người ( quá 10 người thì việc trao đổi giữa các thành viên sẽ rất khó thực hiện được một cách hữu hiệu). XP đặc biệt có hiệu quả trong việc phát triển các phần mềm có yêu cầu luôn thay đổi, khách hàng không định trước được một cách rõ ràng yêu cầu phần mềm.
Đối với các dự án lớn, người ta có thể phân chia công việc cho từng nhóm nhỏ XP. Tuy nhiên, cho đến nay các tác giả của XP chưa đưa ra phương án nào để quản lý, phối hợp hoạt động của các nhóm này. Theo tôi, trong trường hợp này, có thể dựa vào ISO9001 hay CMM để kết lập một quy trình quản lý hoạt động của các nhóm nhỏ XP.
Làm việc theo nhóm
XP đòi hỏi phải có tính năng làm việc tập thể rất cao. Mọi thành viên phải có thái độ hợp tác trong quá trình làm việc bởi vì mọi hoạt động của XP đều mang tính tập thể.
Tính kỷ luật
Mọi thành viên phải tự giác chấp hành các quy định của nhóm phát triển. Ví dụ, tất cả đều phải viết chương trình theo một quy định đã thống nhất. Có như vậy thì chương trình (mã nguồn) mới có thể trong suốt và dễ hiểu với tất cả nhóm, dẫn đến dễ sửa đổi và thêm chức năng mới vào chương trình.
Trình độ thành viên
Với XP, mọi thành viên sẽ tham gia vào mọi hoạt động trong quá trình phát triển phần mềm. Do vậy, các thành viên cần phải được trang bị kiến thức tốt về nhiều mặt và cần có nhiều kinh nghiệm trong nhiều lĩnh vực khác nhau.
Vai trò của khách hàng
Sự tham gia trực tiếp của khách hàng trong suốt quá trình thực hiện dự án phần mềm là một yếu tố không thể thiếu cho sự thành bại của dự án. Khách hàng tham gia với tư cách là một thành viên biên chế của nhóm phát triển sẽ giúp cho nhóm luôn phát triển sản phẩm theo đúng yêu cầu của khách hàng cũng như thỏa mãn được các yêu cầu khách của khách hàng (ví dụ như thời điểm bàn giao sản phẩm, giá thành sản phẩm, ..v.v.)
Thảo luận
Cho đến nay phần lớn các nhà phát triển phần mềm làm việc theo cách 'lập trình-sửa lỗi' (code-and-fix), hay nói một cách khác là phát triển phần mềm không theo một quy trình nào cả. Một số doanh nghiệp chú trọng tới một tương lai lâu dài đã áp dụng các tiêu chuẩn chất lượng như ISO9001 hay CMM để xây dựng các quy trình phát triển phần mềm phù hợp với đặc điểm riêng của mình. Các quy trình này thường có tính ổn định và dự báo cao. Theo đó, mọi hoạt động liên quan tới phát triển phần mềm đều được kế hoạch hóa và định trước. Tuy nhiên các quy trình này cũng hay bị chỉ trích là quá chú trọng tới quản lý, nặng nề về các quy định và soạn thảo tài lịêu khiến cho tốc độ phát triển phần mềm chậm, đặc biệt là không đáp ứng được các thay đổi nhanh về yêu cầu phần mềm.
Extreme Programming cũng như các phương pháp hạng nhẹ (lightweight methods) khác như Crystal, Adaptive Software Development đưa ra các giải pháp mới cho việc thiết lập các quy trình phát triển phần mềm. Khác với các phương pháp hạng nặng (heavyweight methods) xây dựng dựa trên các tiêu chuẩn ISO9001, CMM hay RUP, các phương pháp hạng nhẹ đơn giản, dễ áp dụng và không cần có sự đầu tư lớn về kinh phí cũng như thời gian. Đặc biệt, các phương pháp này thường có tính mềm dẻo và thích ứng cao, rất thích hợp với các doanh nghiệp phát triển phần mềm trong các môi trường không ổn định và yêu cầu phần mềm thay đổi liên tục.
Như đã trình bày ở trên, các quy cách làm việc của XP tương đối đơn giản và rất gần với các hoạt động hàng ngày của các nhóm phát triển phần mềm. Việc áp dụng một số quy cách của XP sẽ không đạt yêu cầu cần phải có một cuộc 'cách mạng' về quy trình sản xuất trong doanh nghiệp. Áp dụng toàn bộ hay một số các quy cách của XP là một câu hỏi đặt ra cho từng nhóm phát triển.
Mặc dù mới ra đời khoảng 5 năm gần đây, XP đã được nhắc tới như một phương pháp phát triển phần mềm mới, đầy triển vọng, nhất là cho các ứng dụng trong thời đại Internet. XP thành công vì mục đích hàng đầu của nó là nhằm thoả mãn yêu cầu của khách hàng. XP được thiết kế để phát triển phần mềm nhanh, đúng theo yêu cầu của khách hàng và bàn giao đúng thời điểm khách hàng muốn.