Quản lý dự án phần mềm

**Quản lý dự án phần mềm** việc lên kế hoạch có tính khoa học và nghệ thuật trong quá trình quản lý các dự án phần mềm. Nó chính là quy trình quản lý dự án theo các chính sách được lên kế hoạch, theo dõi và kiểm soát.
## Lịch sử

Các công ty nhanh chóng nhận ra việc sử dụng lập trình phần mềm dễ hơn so với phần cứng vì vậy ngành công nghiệp sản xuất phần mềm nhanh chóng phát triển trong giai đoạn từ thập niên 1970 đến thập niên 1980.
Để quản lý các nỗ lực phát triển mới, các công ty ứng dụng các phương thức quản lý phần mềm, nhưng quá trình thử nghiệm bị chậm theo thực thi, đặc biệt là sự mẫu thuẫn xảy ra trong "vùng xám" giữa các đặc tả người dùng và phần mềm được chuyển giao. Để tránh các vấn đề trên, các phương thức quản lý dự án phần mềm tập trung vào các yêu cầu người dùng trong các sản phẩm phần mềm theo mô hình nổi tiếng đó là mô hình thác nước. Theo tổ chức IEEE, một số nguyên nhân dẫn đến sự thất bại trong việc quản lý dự án như sau:

# Dự án không có tính thực tế và không khớp
# Ước tính không chính xác nguồn lực cần thiết cho dự án
# Xác định yêu cầu hệ thống không đúng
# Báo cáo tình trạng dự án sơ sài
# Không quản lý độ rủi ro
# Việc giao tiếp khách hàng, người sử dụng và người phát triển dự án không tốt
# Sử dụng công nghệ chưa phát triển
# Không có khả năng xử lý độ phức tạp của dự án
# Phát triển thực hành không có hệ thống
# Thiếu kinh nghiệm trong việc quản lý dự án
# Các bên liên quan mang tính chính trị
# Các áp lực mang tính thương mại

## Khái niệm
**Quản lý dự án phần mềm** là tập hợp các công việc được thực hiện bởi một tập thể (có thể có chuyên môn khác nhau, thực hiện công việc khác nhau, thời gian tham gia dự án khác nhau) nhằm đạt được một kết quả như dự kiến, trong thời gian dự kiến, với một kinh phí dự kiến. Trong thuật ngữ của chuyên ngành Công nghệ phần mềm, **Quản lý dự án phần mềm** là các hoạt động trong lập kế hoạch, giám sát và điều khiển tài nguyên dự án (ví dụ như kinh phí, con người), thời gian thực hiện, các rủi ro và quy trình thực hiện dự án nhằm đảm bảo thành công cho dự án. Quản lý dự án phần mềm cần đảm bảo cân bằng giữa ba yếu tố: thời gian, tài nguyên và chất lượng. Ba yếu tố này được gọi là tam giác dự án.

## Quy trình quản lý dự án trong phần mềm
Quy trình quản lý dự án phần mềm là quy trình vận dụng những kiến thức, kỹ năng và kỹ thuật công nghệ vào hoạt động của dự án để đạt được mục tiêu của dự án đặt ra. Những ứng dụng này được đưa vào phần mềm theo một tiêu chuẩn hóa của quản lý dự án theo tiêu chuẩn PMI.

Để đảm bảo dự án thành công, các thành viên dự án phải đảm bảo:
* Lựa chọn quy trình phù hợp để đạt được mục tiêu của dự án
* Tuân theo các yêu cầu để đáp ứng được nhu cầu và mong đợi của các bên liên quan.
* Cân bằng được các yêu cầu (nhân tố) cạnh tranh trong dự án như: phạm vi công việc, ngân sách, tiến độ, chất lượng, rủi ro, thay đổi. Tùy theo quy mô của từng dự án mà các mỗi giai đoạn lại có thể gồm những quy trình nhỏ hơn.

Ngoài các lợi ích chiến lược nêu trên phần mềm còn cung cấp đầy đủ các tính năng hệ thống. Việc bảo mật được tiến hành một cách tuyệt đối nghiêm ngặt. Việc phân quyền được cụ thể đến từng vai trò của người sử dụng.

**1. Khởi tạo dự án (Initiating):** 
Giai đoạn này thực hiện việc định nghĩa một dự án mới hoặc một phát sinh (hoặc trộn lẫn) mới của một dự án có sẵn như: Xác định yêu cầu của dự án, mức độ ưu tiên của dự án, phân tích các yêu cầu đầu tư, phân công trách nhiệm cho các bộ phận triển khai.

**2. Lập kế hoạch dự án (Planning):**
Giai đoạn này yêu cầu thiết lập phạm vi công viêc của dự án, điều chỉnh lại mục tiêu và xác định đường đi tới mục tiêu đó.

**3. Triển khai (Executing):**
Giai đoạn này thực hiện hoàn thành các công việc được xác định trong phần lập kế hoạch để đảm bảo các yêu cầu của dự án.

**4. Giám sát và kiểm soát (Monitoring & Control):**
Giai đoạn này yêu cầu việc theo dõi, rà soát và điều chỉnh lại tiến độ và khả năng thực hiện của dự án. Theo dõi các rủi ro, thay đổi, phát sinh trong quá trình thực hiện và có những đề xuất điều chỉnh kịp thời.

**5. Kết thúc (Closing):**
Giai đoạn này thực hiện để kết thúc tất cả các hoạt động của dự án để chính thức đóng lại dự án.

## Các hoạt động chính trong quản lý dự án phần mềm
### Xác định các bước thực hiện dự án phần mềm
;Xác định yêu cầu chung
Trước tiên, cần xác định các yêu cầu chức năng (công việc phần mềm thực hiện) cũng như phi chức năng (công nghệ dùng để phát triển phần mềm, sử dụng trong hệ điều hành) của phần mềm. Tiếp theo cần xác định rõ tài nguyên cần thiết để xây dựng phần mềm. Tài nguyên ở đây có thể gồm có nhân tố con người, các thành phần, phần mềm có thể sử dụng lại, các phần cứng hoặc công cụ có sẵn cần dùng đến; trong đó nhân tố con người là quan trọng nhất. Điều cuối cùng là xác định thời gian cần thiết để thực hiện dự án. Trong quá trình này cần phải nắm bắt được bài toán thực tế cần giải quyết cũng như các hoạt động mang tính nghiệp vụ của khách hàng để có thể xác định rõ ràng yêu cầu chung của đề án, xem xét dự án có khả thi hay không.
;Viết đề án
Viết đề án là quá trình xây dựng tài liệu mô tả đề án để xác định phạm vi của dự án, trách nhiệm của những người tham gia dự án; là cam kết giữa người quản lý dự án, người tài trợ dự án và khách hàng. Nội dung của tài liệu mô tả đề án thường có những nội dung sau:  
* Bối cảnh thực hiện dự án: Căn cứ pháp lý để thực hiện dự án, hiện trạng công nghệ thông tin của khách hàng trước khi có dự án, nhu cầu ứng dụng phần mềm của khách hàng, đặc điểm và phạm vi của phần mềm sẽ xây dựng.
* Mục đích và mục tiêu của dự án: xác định mục đích tổng thể, tin học hóa hoạt động nào trong quy trình nghiệp vụ của khách hành, xác định mục tiêu của phần mềm gồm lượng dữ liệu xử lý, lợi ích phần mềm đem lại.
* Phạm vi dự án: Những người liên quan tới dự án, các hoạt động nghiệp vụ cần tin học hóa.
* Nguồn nhân lực tham gia dự án: Cán bộ nghiệp vụ, người phân tích, người thiết kế, người lập trình, người kiểm thử, người cài đặt triển khai dự án cho khách hàng, người hướng dẫn khách hàng sử dụng phần mềm, người bảo trì dự án phần mềm.
* Ràng buộc thời gian thực hiện dự án: Ngày nghiệm thu dự án, ngày bàn giao dự án.
* Ràng buộc kinh phí: Kinh phí trong từng giai đoạn thực hiện dự án.
* Ràng buộc công nghệ phát triển: Công nghệ nào được phép sử dụng để thực hiện dự án.
* Chữ ký các bên liên quan tới dự án.

### Lập kế hoạch thực hiện dự án
Lập kế hoạch thực hiện dự án là hoạt động diễn ra trong suốt quá trình từ khi bắt đầu thực hiện dự án đến khi bàn giao sản phẩm với nhiều loại kế hoạch khác nhau nhằm hỗ trợ kế hoạch chính của dự án phần mềm về lịch trình và ngân sách.

;Các loại kế hoạch thực hiện dự án
* Kế hoạch đảm bảo chất lượng: Mô tả các chuẩn, các quy trình được sử dụng trong dự án.
* Kế hoạch thẩm định: Mô tả các phương pháp, nguồn lực, lịch trình thẩm định hệ thống.
* Kế hoạch quản lý cấu hình: Mô tả các thủ tục, cấu trúc quản lý cấu hình được sử dụng.
* Kế hoạch bảo trì: Dự tính các yêu cầu về hệ thống, chi phí, nỗ lực cần thiết cho bảo trì.
* Kế hoạch phát triển đội ngũ: Mô tả kĩ năng và kinh nghiệm của các thành viên trong nhóm dự án sẽ phát triển như thế nào.

;Quy trình lập kế hoạch thực hiện dự án
* Thiết lập các ràng buộc của dự án: thời gian, nhân lực, ngân sách
* Đánh giá bước đầu về các "tham số" của dự án: quy mô, độ phức tạp, nguồn lực
* Xác định các mốc thời gian trong thực hiện dự án và sản phẩm thu được ứng với mỗi mốc thời gian
* Trong khi dự án chưa hoàn thành hoặc chưa bị hủy bỏ thì thực hiện lặp đi lặp lại các công việc sau:
# Lập lịch thực hiện dự án
# Thực hiện các hoạt động theo lịch trình
# Theo dõi sự tiến triển của dự án, so sánh với lịch trình
# Đánh giá lại các tham số của dự án
# Lập lại lịch thực hiện dự án cho các tham số mới
# Thỏa thuận lại các ràng buộc và sản phẩm bàn giao của mỗi mốc thời gian
# Nếu có vấn đề nảy sinh thì xem xét lại các kĩ thuật khởi đầu đưa ra các biện pháp cần thiết

;Cấu trúc kế hoạch thực hiện dự án
* Tổ chức dự án
* Phân tích các rủi ro 
* Yêu cầu về tài nguyên phần cứng, phần mềm
* Phân công công việc
* Lập lịch dự án
* Cơ chế kiểm soát và báo cáo.

## Tham khảo

## Xem thêm
* Phân tích yêu cầu
* Thiết kế phần mềm
* Công nghệ phần mềm

## Liên kết ngoài

* Software Engineering 6th Edition (presentation) - Ian Summerville
* 
* 
* Tài nguyên quản lý dự án phần mềm, Steve McConnell: http://www.construx.com/Page.aspx?nid=22 
* Tài nguyên quản lý dự án phần mềm, Dan Galorath: http://www.galorath.com/wp/category/project-management