Thứ năm, ngày 1 tháng 5 năm 2008
Công cụ hỗ trợ dự án phần mềm (phần 2)
Quản lý một dự án phần mềm dù lớn hay nhỏ đều không phải là một việc dễ dàng. Bạn sẽ phải lên kế hoạch chi tiết cho từng giai đoạn phát triển của dự án, đảm bảo luồn thông tin giữa các thành viên trong dự án được thông suốt, xây dựng hệ thống quản lý mã và lỗi,… Rất may là hiện nay đã có rất nhiều các công cụ và dịch vụ trực tuyến hỗ trợ quá trình này. Tiếp tục bài viết giới thiệu các công cụ hỗ trợ dự án phát triển phần mềm từ kinh nghiệm của bản thân trong một dự án phát triển dự án ở trường, bài viết này sẽ tiếp tục giới thiệu đến các bạn hệ thống chia sẽ kiến thức sử dụng MediaWiki, hệ thống quản lý lỗi kết hợp giữa Bugzilla và Mylyn trong Eclipse. Ở cuối bài viết, tớ cũng sẽ giới thiệu đến các bạn một dịch vụ miễn phí tích hợp tất cả các tính năng được đề cập đến trong loạt bài viết, giúp cho bạn có thể bắt đầu một dự án một cách nhanh chóng.
Wiki – Hệ thống chia sẽ kiến thức
Các bạn có lẽ đều đã nghe đến hệ thống Wikipedia được ví như là bộ bách thư toàn khoa của loài người. Điều mà tớ trước đây không hề nghĩ đến là nó cũng có thể đóng vai trò như là hệ thống chia sẽ kiến thức cực kỳ hữu ích trong một dự án phát triển phần mềm. Sử dụng MediaWiki (hệ thống đứng đằng sau Wikipedia) cài đặt trên máy chủ riêng, nhóm chúng tớ cài đặt một trang wiki cho riêng mình mà ở đó các thành viên có thể tự do thêm/thay đổi các nội dung liên quan đến dự án (các bạn có thể xem thử trang wiki này ở đây).

Trong dự án này tớ được phân công là Kiến trúc sư hệ thống (”System Architect”) – chịu trách nhiệm thiết kế cấu trúc mã của hệ thống thoả mãn các yêu cầu của dự án (ví dụ như khả năng mở rộng về sau, hỗ trợ đa ngôn ngữ, đa giao diện, xây dựng các thành phần kiến trúc hỗ trợ việc xây dựng các tính năng của hệ thống (như cấu trúc hỗ trợ hệ thống Cơ Sở Dữ Liệu qua lớp Database Abstract Layer, hệ thống Caching, một mô hình Model-View-Control riêng trong Java) cũng như thực hiện quá trình “refactoring”, đảm bảo mã của các thành viên thống nhất với thiết kế hệ thống. Công việc này đòi hỏi tớ phải ghi lại tất cả những chi tiết trong thiết kế kiến trúc của hệ thống để các thành viên khác có thể tham khảo trong quá trình phát triển, đồng thời cho phép các thành viên khác trao đổi về những điểm mà họ chưa hiểu. Những tính năng quan trọng mà wiki cung cấp thoả mãn yêu cầu đó:
- Cho phép tất cả các thành viên thay đổi bất kỳ nổi dung nào trên trang
- Hệ thống lưu giữ tất cả các phiên bản, cho phép phục hồi lại các phiên bản trước đó trong trường hợp cần thiết
Điểm bất tiện duy nhất của hệ thống này là để có nó bạn sẽ cần phải có máy chủ của mình để cài đặt nó, và ngay cả khi bạn có máy chủ của mình thì việc cài đặt hệ thống này cũng không phải là một chuyện đơn giản. Một giải pháp là bạn có thể sử dụng hệ thống wiki cung cấp bởi các dịch vụ khác như Google Code – tuy nhiên khi đó thì bạn lại không có khả năng tuỳ biến theo ý của mình.
Bugzilla – Hệ thống quản lý lỗi
Như đã đề cập ở đầu bài viết, mặc dù đã biết đến Bugzilla từ rất lâu, tớ chưa từng sử dụng nó. Lý do đơn giản là với một dự án nhỏ với một hoặc hai người phát triển thì việc khai báo và mô tả một lỗi đôi khi có thể chiếm nhiều thời gian hơn là sửa trực tiếp nó. Tuy nhiên, trong dự án lần này, đặc biệt là trong 4 tháng cuối của dự án khi mà khối lượng mã lên đến vài chục ngàn dòng mã, số lượng lỗi tiềm ẩn phát sinh ngày càng nhiều và trong nhiều trường hợp vì một người không thể biết hết được tất cả các khía cạnh trong số lượng mã đồ sộ đó thì việc sửa lỗi ngay khi phát hiện nó là điều không thể. Ngoài ra, việc sửa một lỗi mà không tìm hiểu kỹ về nguyên nhân của nó (rất tốn thời gian do độ phức tạp của hệ thống) rất có thể sẽ dẫn đến những lỗi hệ luỵ khác. Nhìn thấy trước được thực tế này, một thành viên trong nhóm đã đề nghị sử dụng Bugzilla ngay khi bắt đầu giai đoạn 2 của dự án và quyết định này đã chứng tỏ cực kỳ hữu ích.
Bugzilla là một phần mềm máy chủ cho phép quản lý các lỗi phát sinh trong quá trình phát triển dự án phần mềm được phát triển bởi tổ chức Mozzila (cũng là tổ chức phát triển Firefox có tiền thân là từ công ty Netscape). Như tên gọi của nó, tính năng cơ bản của nó là:
- Cho phép khai báo các lỗi mới phát hiện
- Phân loại các lỗi theo thành phần hệ thống, độ phức tạp, mức độ ưu tiên
- Hệ thống quản lý cho phép một người khai báo lỗi và giao trách nhiệm sửa lỗi cho một người khác (người này sau đó có thể chấp nhận công việc được giao hoặc chuyển giao cho thành viên khác).
Việc có khả năng báo lỗi mà không cần phải sửa ngay lập tức đã chứng tỏ có nhiều lợi thế trong việc nâng cao chất lượng của sản phẩm:
- Thông thường, khi phát hiện lỗi bạn thường nghĩ rằng mình sẽ nhớ và sửa nó sau, để rồi sau đó lại quên mất. Sử dụng hệ thống báo lỗi, vì bạn không nhất thiết phải sửa lỗi ngay lập tức, khi có lỗi, bạn có xu hướng báo lỗi đó và tiếp tục công việc mà mình đang làm.
- Tại bất kỳ thời điểm nào, bạn cũng có thể biết được những lỗi đã được phát hiện mà chưa được sửa. Dựa vào đó, nhóm có thể quyết định sẽ tiếp tục phát triển tính năng mới hay dành thời gian khắc phục những lỗi đã có. Danh sách những lỗi còn tồn tại cũng được sử dụng làm tiêu chí để chính thức đưa ra sản phẩm ở mỗi thời điểm.
Tất nhiên, việc báo lỗi sẽ kém hấp dẫn hơn nếu bạn không có cách nào để nhanh chóng báo lỗi. Bugzilla cho phép bạn báo lỗi qua giao diện web nhưng cách này đòi hỏi bạn phải rời khỏi cửa sổ làm việc. Tuy nhiên, nếu bạn đang phát triển sử dụng Eclipse thì có một giải pháp tuyệt vời là MyLyn tích hợp sẵn với Eclipse từ phiên bản 3.2 trở lên (trước đó bạn sẽ phải cài đặt plugin riêng cho Eclipse để sử dụng nó) cho phép bạn kết nối trực tiếp đến các hệ thống quản lý lỗi khác nhau, trong đó có Bugzilla.
Một vài tính năng đặc biệt hấp dẫn của MyLyn mà một khi bạn đã quen với việc sử dụng nó sẽ thật khó để làm bất kỳ tác vụ gì mà thiếu nó:
- Kết nối trực tiếp đến nhiều hệ thống quản lý lỗi khác nhau – Bugzilla, Trac,… Cho phép bạn tương tác với các hệ thống này trực tiếp trong Eclipse mà không cần phải mở cửa sổ trình duyệt.
- Tự động “đếm” lượng thời gian bạn dành ra để sửa mỗi lỗi. Bắt đầu bằng việc bạn duyệt qua tất cả những lỗi đang cần sửa, chọn lỗi mà bạn muốn sửa và nhấn nút kích hoạt để báo cho hệ thống biết là bạn đang sửa lỗi đó. MyLyn sẽ tự động bắt đầu đếm thời gian bạn dành ra để sửa lỗi đó, cũng như những file mà bạn đã thay đổi trong quá trình sửa. Nếu như bạn không thể sửa một lỗi trong một phiên làm việc, bạn có thể nhấn nút tạm ngưng và lần kế tiếp bạn kích hoạt nó, MyLyn sẽ ghi nhớ và tự động mở tất cả các file liên quan mà bạn sử dụng trong phiên sửa lỗi trước đó. Đây là một tính năng cực kỳ quan trọng và tiện lợi, bởi thường thì khi làm việc để sửa một lỗi bạn muốn biết những file liên quan đến lỗi đó.
Sau một thời gian sử dụng hệ thống báo lỗi, giờ đây tớ đã phụ thuộc vào nó nhiều đến mức sẽ thật khó tưởng tượng để bắt đầu bất kỳ dự án nào mà thiếu nó – ngay cả với những phần mềm đơn giản cá nhân (trái ngược với suy nghĩ trước đó rằng nó chỉ tốn thời gian). Cũng giống như với hệ thống Wiki, điểm bất tiện của Bugzilla là ở chỗ bạn cần phải có máy chủ để cài đặt nó (và quá trình cài đặt tương đối phức tạp, đòi hỏi bạn phải có kiến thức về cài đặt các gói phần mềm khác nhau trên Linux). Rất đáng tiếc là tớ không tìm được một dịch vụ nào có hỗ trợ Bugzilla, nhưng có tìm được một dịch vụ khác hỗ trợ Trac – một hệ thống tương tự như Bugzilla mà tớ sẽ giới thiệu tiếp theo đây.
Quản lý dự án miễn phí
Điểm qua lại những công cụ/dịch vụ hỗ trợ mà tớ đã giới thiệu trong bài, có lẽ bạn dù rất thích cũng “giật mình” vì mức độ phức tạp để chuẩn bị cho một dự án:
- Cài đặt một máy chủ Subversion của riêng mình. Nếu bạn đang sử dụng một dịch vụ chứa trang web (”hosting”) có hỗ trợ sẵn subversion như Dreamhost thì vấn đề xem như đã được giải quyết, nhưng trong trường hợp ngược lại thì sẽ tốn tiền (trừ khi dự án của bạn là mã mở và không lo việc người khác có thể xem được mã của mình, hoặc dự án của bạn đủ nhỏ để có thể sử dụng các dịch vụ miễn phí).
- Thuê dịch vụ quản lý dự án (Basecamp). Bạn có thể sử dụng dịch vụ Basecamp miễn phí nhưng sẽ chỉ quản lý được 1 dự án cùng một lúc và không có tính năng quản lý file.
- Cài đặt hệ thống wiki. Cái này không thật sự cần thiết nếu bạn chỉ phát triển dự án cá nhân, nhưng sẽ là không thể thiếu nếu nhóm phát triển từ 4-5 người trở lên.
- Cài đặt hệ thống quản lý lỗi. Cho dù là Bugzilla hay Trac thì quá trình cài đặt trên máy chủ (cho dù là máy chủ của riêng bạn – “dedicate server”) cũng rất phức tạp.

Liệu có một giải pháp nào miễn phí mà tích hợp tất cả các tính năng trên? Một mơ ước tưởng như không thể, vậy mà tớ vô tình đã tìm được một công ty cung cấp dịch vụ như vậy. Giới thiệu đến các bạn Assembla với tất cả những tính năng mà bạn cần cho dự án của mình (không giới hạn số thành viên):
- 500 MB Miễn phí (với $12.5/tháng bạn sẽ có được 5GB)
- Hệ thống quản lý mã Subversion, Git1 hoặc Mercurial
- Hệ thống quản lý lỗi Trac cài đặt sẵn (mặc dù nó đòi bạn phải tự cấu hình nó để tích hợp với MyLyn trong Eclipse)
- Hệ thống tích hợp Wiki, diễn đàn, quản lý tác vụ
- Hệ thống quản lý file riêng
Tớ tin chắc rằng sẽ không có bất kỳ dịch vụ nào khác có thể so sánh với Assembla về những gì nó cung cấp, và từ những gì tớ thấy thì bạn có thể yên tâm rằng Assembla sẽ không biến mất một sớm một chiều như những dịch vụ miễn phí khác.
Lời kết
Tớ tin rằng rất nhiều bạn cũng sẽ giống như tớ ở giai đoạn đầu rất coi thường tầm quan trọng của những công cụ hỗ trợ quá trình phát triển phần mềm, cho rằng việc viết một thông báo, ghi lại những chi tiết trong thiết kế hệ thống, khai báo lỗi,… là những việc làm vô ích tốn thời gian. Điều đó có thể đúng với những dự án nhỏ mà bạn là người duy nhất phát triển nó. Tuy nhiên, một khi bắt đầu tham gia vào những dự án lớn với nhiều thành viên, cách làm việc cũ sẽ không còn hiệu quả. Thiếu những công cụ hỗ trợ, việc quản lý những dự án như vậy sẽ trở nên cực kỳ khó khăn, nếu không muốn nói là không thể. Hi vọng hai bài viết vừa qua giúp bạn có được cái nhìn tổng quát cũng như biết được một vài giải pháp có sẵn để áp dụng cho dự án của mình.
[[757]]
Chú thích trong bài:
- Fast Version Control System [↩]



nguoiaolam
Ngày 5/1/2008 lúc 06h17
Hi Tiên.
Đối với IT anh là dân ngoại đạo nên không thể có nhận xét gì nhiều về vấn đề "quản lý dự án phần mềm" cũng như các hệ thống mà em giới thiệu.
Tuy vậy điểm chung mà anh quan tâm nhất và cũng chính là điểm chính yếu của tất cả các hệ thống trên chính là sự "thông suốt thông tin". Thông tin thông suốt là một vấn đề của bất kỳ một dự án một công ty nào dù nhỏ hay lớn.
Việc quản lý nguồn thông tin này là điều không hề dễ dàng. Đối với các cty lớn họ sử dụng các hệ thống phần mềm ERP như SAP.
Dựa trên một cơ sở dữ liệu chung các user thoải mái truy cập và sử dụng các thông tin chung này cho các mục đích khác nhau phù hợp với công việc đặc thù của mỗi người.
Việc triển khai và sử dụng các công cụ quản lý phần mềm quản lý dự án không hề dễ dàng vì nó phụ thuộc rất nhiều vào các yếu tố khác nhau
1. Trình độ người dùng
2. Thói quen người dùng
3. Đặc thù của dự án hoặc cty
4. Nền tảng kỹ thuật (các công cụ phần mềm cho trước)
5. Hệ thống chứng từ, pháp luật (đối với các cty)
…
Một ví dụ điển hình trong việc thất bại trong triển khai hệ thống quản lý này là ngân hàng Á Châu (ACB). Theo anh biết thì hình như ACB đã thuê viết riêng một hệ thống với giá khoảng 2 triệu USD nhưng không đưa vào sử dụng được.
Hiện nay ở VN vấn đề này đang là vấn đề nóng và các kỹ sư IT làm công việc triển khai SAP có lương khoảng 1000USD.
Nguyên Minh
Ngày 7/21/2008 lúc 19h27
Cái này đúng là rất hữu ít. Ở VN các trường ít khi dạy và nói về những công cụ này. Đến khi đi làm thì đòi hỏi cần thiết rất nhiều nhất là teamwork. Bạn có thể nói viết thêm bài sử dụng subversion trong Dreamhost được không vì mình có dreamhost nhưng chẳng biết sử dụng hehe.
Thanh
Ngày 12/15/2008 lúc 21h46
Xin chao !
lam on giup dum em hoac huong dan em cai dat chuong trinh "Bugzilla" bang tieng viet di, bun qua em khong biet gi ve chuong trinh cua lap trinh het vay ma o cong ty bang em phai cai dat vao server va huong dan cho nhung nguoi trong cong ty su dung oaoa, co ai khong cuu em voi !!! Em la nhan vien ky thuat bao tri va sua chua may huhu. Thanks
dzung
Ngày 7/6/2009 lúc 00h28
Mình cũng là dân ngoại đạo,hôm nay mới đọc đến bài này của bạn. Nhưng mình cũng đang có nhiệm vụ nghiên cứu subversion, đọc bài của bạn viết tuy là rất chung chung nhưng cũng làm cho mình có thêm nhiều cơ sở để tiếp tục nghiên cứu của mình. Cảm ơn bạn!
Binh
Ngày 10/27/2009 lúc 08h50
Bạn ơi, hình như đến nay dịch vụ này nó không cho free nữa rồi, muốn free thì phải open source. Mà đâu phải project nào cũng open source được đâu. Bạn còn biết dịch vụ nào khác tốt như thế không? :)
linh
Ngày 11/24/2009 lúc 10h25
cám ơn bài viết của anh Tiên. Em đang cần một cái nhìn tổng quát như thế này