mở đầu: trình bày tóm lƣợc lý do, mục tiêu, ý nghĩa, phạm vi, phƣơng pháp nghiên cứu cũng nhƣ cấu trúc và tóm tắt của luận văn. - Chƣơng 1: trình bày các lý thuyết về rủi ro, các yếu tố rủi ro trong dự án phần mềm, thành công của dự án phần mềm. Đồng thời chƣơng này cũng trình bày về phƣơng pháp nghiên cứu Delphi đƣợc sử dụng trong luận văn. - Chƣơng 2: giới thiệu về công ty KMS Technology và các dự án đã hoàn thành trong năm 2011 và quý I, II năm 2012.
- Chƣơng 3: trình bày kết quả của nghiên cứu sau quá trình xử lý dữ liệu. - Chƣơng kết luận: đƣa ra các kết luận, và kiến nghị của nghiên cứu. 4 CHƢƠNG 1 – CƠ SỞ LÝ THUYẾT 1.1 Tổng quan Trong 10 năm gần đây, ngành công nghiệp phần mềm phát triển nhanh chóng, cả về các hoạt động cốt lõi và dịch vụ. Tuy nhiên, ngành công nghiệp phần mềm vẫn là ngành có số lƣợng dự án thất bại và chậm trễ rất lớn.
Theo nghiên cứu của Standish Group [49], trên thế giới có 44% dự án phần mềm đƣợc gọi là thách thức (trễ hạn, vƣợt chi phí hay thiếu những tính năng cần thiết), trong khi có 24% dự án thất bại (hủy bỏ trƣớc khi hoàn thành hoặc đƣợc giao và không bao giờ đƣợc sử dụng). Nhƣ vậy, tổng cộng 68% số dự án là không thành công hoặc thách thức, một con số khá lớn. Theo Boehm [7], 15-35% các dự án phần mềm bị hủy bỏ, trong khi các dự án còn lại phải chịu trễ tiến độ hoặc vƣợt chi phí hay không đáp ứng các mục tiêu của dự án. Các dự án phần mềm là tập hợp của các chƣơng trình lớn với các tƣơng tác và phụ thuộc chức năng; liên quan đến việc tạo ra một sản phẩm mà chƣa bao giờ đƣợc tạo ra trƣớc đó.
Kết quả là các dự án phần mềm dễ bị vƣợt chi phí, trễ tiến độ, độ tin cậy kém và không thỏa mãn ngƣời dùng [28]. Hơn nữa rất khó để dự đoán sự thành công của dự án vì phạm vi của dự án thay đổi liên tục tùy thuộc vào thị trƣờng; do đó các nguồn lực phải đƣợc tái phân bổ dẫn đến trễ tiến độ và vƣợt chi phí. Các dự án phần mềm thƣờng liên quan đến nhiều thực thể nhƣ công ty, phòng ban, cá nhân …Và thƣờng có cảm giác không có liên hệ giữa các nhân viên lập trình và quản lý, điều này dẫn đến hiểu lầm và thiếu tin tƣởng [28]. Rõ ràng, sự phát triển dự án phần mềm ẩn chứa nhiều rủi ro.
Vì vậy, quản lý những rủi ro liên quan là quan trọng hàng đầu trong việc phát triển dự án phần mềm, đặc biệt là trong các dự án phần mềm quy mô lớn. Nếu rủi ro không đƣợc kiểm soát ở giai đoạn đầu của dự án, nó sẽ gây ra một sự gia tăng theo cấp số nhân trong chi phí của dự án nhƣ hình dƣới [32] 5 Hình 1-1: Mối liên hệ giữa rủi ro dự án với chi phí/lợi nhuận 1.2 Các khái niệm cơ bản 1.1 Dự án Dự án là một quá trình gồm các công tác, nhiệm vụ có liên quan với nhau, đƣợc thực hiện nhằm đạt đƣợc mục tiêu đã đề ra trong điều kiện ràng buộc về thời gian, nguồn lực và ngân sách [2]. Theo Turner va Muller [52], dự án là nỗ lực tạm thời trong điền kiện nhân lực, tài nguyên và tài chính của tổ chức để thực hiện các yêu cầu kỹ thuật, phạm vi công việc trong mối quan hệ ràng buộc thời gian và chi phí để đạt đƣợc lợi ích, đƣợc xác định bởi mục tiêu số lƣợng và chất lƣợng. Dự án phần mềm là dự án trong đó phạm vi duy nhất của công việc với các thông số kỹ thuật nhất định mà cần phải đƣợc hoàn thành trong một thời gian nhất định tại một chi phí nhất định [1].
Đối tƣợng liên quan chính của một dự án phần mềm là khách hàng, là ngƣời sẽ sử dụng hệ thống cho các mục đích kinh doanh của mình. Đối tƣợng quan trọng thứ hai của một dự án phần mềm là các nhân viên tham gia thực hiện dự án, ngƣời xây dựng hệ thống phần mềm.2 Khái niệm thành công dự án Một dự án đƣợc gọi là thành công khi hoàn thành đúng tiến độ, nằm trong ngân sách đƣợc duyệt, phù hợp với các chỉ tiêu kỹ thuật đã đề ra, và làm thỏa mãn các thành phần hữu quan (stakeholders’ satisfaction). [55] Đánh giá dự án đƣợc gọi là thành công hay thất bại còn phụ thuộc vào sự cảm nhận của các bên liên quan. Cùng kết quả đầu ra của dự án, nhƣng đánh giá thành công của mỗi bên tham gia khác nhau vì mục tiêu và sự ƣu tiên đƣợc xác định khác nhau tƣơng ứng với vai trò của các bên trong dự án [4].
Trong đề tài này, đánh giá thành công của dự án trên quan điểm của các nhân viên tham gia thực hiện dự án, ngƣời xây dựng hệ thống đƣợc sử dụng bởi khách hàng.3 Vòng đời của dự án phần mềm Trƣớc khi tìm hiểu những rủi ro tác động đến sự thành công của các dự án phần mềm, cần thiết phải hiểu đƣợc các giai đoạn của vòng đời phát triển phần mềm. Vòng đời của dự án phát triển phần mềm (Software Development Life Cycle –SDLC) là một khuôn khổ đƣợc sử dụng để hiểu và phát triển các hệ thống thông tin và phần mềm thành công. Đó là một quá trình đƣợc sử dụng bởi hầu nhƣ tất cả các nhân viên lập trình và các công ty phát triển phần mềm nhƣ là tiêu chuẩn trong quá trình phát triển phần mềm. SDLC có nhiều mô hình và mỗi mô hình có những điểm mạnh, điểm yếu của nó, ƣu và nhƣợc điểm riêng.
Các hoạt động tiêu biểu liên quan đến vòng đời phát triển phần mềm bao gồm: Hình 1-2: Vòng đời của dự án phần mềm 7 Thu thập yêu cầu: xác định rõ các yêu cầu là bƣớc đầu tiên trong quá trình phát triển phần mềm. Yêu cầu hệ thống có thể thay đổi tùy thuộc vào các sản phẩm phần mềm sẽ đƣợc phát triển. Vì vậy, cần phải phân tích cẩn thận các yêu cầu cần thiết cho sự phát triển của sản phẩm [45]. Phân tích yêu cầu: bƣớc này nghiên cứu tính khả thi về các yêu cầu thu thập đƣợc trong bƣớc đầu tiên.
Trong giai đoạn này, nhân viên lập trình phải giao tiếp với khách hàng và phân tích các yêu cầu và hệ thống của họ. Trong giai đoạn này cũng cần chuẩn bị kế hoạch hoặc tiến độ của dự án, chi phí ƣớc tính cho việc phát triển và thực hiện hệ thống, ngày giao hàng dự tính cho mỗi giai đoạn của quá trình phát triển hệ thống. Giai đoạn này là nền tảng của quá trình phát triển phần mềm, các bƣớc tiếp theo trong SDLC sẽ dựa trên các phân tích đƣợc thực hiện trong giai đoạn này [45]. Phân tích hệ thống và thiết kế: đây là một giai đoạn quan trọng trong phát triển phần mềm.
Các phân tích đƣợc thực hiện và các thiết kế của hệ thống sẽ đƣợc phát triển nhƣ thiết kế cơ sở dữ liệu, thiết kế đặc tả chức năng, thiết kế tài liệu …. Cần phải chuẩn bị các tài liệu thiết kế bởi vì giai đoạn tiếp theo, cụ thể là giai đoạn phát triển, dựa trên các tài liệu thiết kế này để thực hiện. Khi cấu trúc của tài liệu và các phân tích đƣợc chuẩn bị tốt, nó sẽ làm giảm thời gian thực hiện trong các bƣớc tiếp theo là giai đoạn phát triển và kiểm thử trong SDLC [45]. Giai đoạn phát triển (lập trình): đây là giai đoạn mà phát triển phần mềm thực sự diễn ra.
Giai đoạn này dựa trên các tài liệu thiết kế đƣợc chuẩn bị trong giai đoạn trƣớc đó. Mã đƣợc viết bằng ngôn ngữ lập trình đã chọn. Các mã sẽ đƣợc chuyển đổi thành các file thực thi trong giai đoạn này [45]. Kiểm thử: đây là giai đoạn đảm bảo chất lƣợng của phần mềm, đảm bảo phần mềm đƣợc giao không có lỗi.
Điều này đƣợc xác định bằng cách kiểm tra mã phát triển. Các công cụ và kỹ thuật khác nhau dùng để kiểm tra ở các cấp độ khác nhau nhƣ kiểm tra hồi quy, kiểm tra hiệu suất …. Dựa trên nhu cầu, các phƣơng pháp kiểm thử đƣợc lựa chọn và báo cáo lỗi. Sau quá trình này, các nhân viên lập trình một lần nữa đi vào giai đoạn phát triển để sửa lỗi và kiểm thử một lần nữa.
Quá trình này tiếp tục cho đến khi hệ thống không còn thấy lỗi [45]. 8 Triển khai: đây là một trong những giai đoạn cuối cùng của SDLC. Trong giai đoạn này, tài liệu thiết kế cho bảo trì và nâng cấp đƣợc thực hiện [45]. Hỗ trợ, bảo trì và nâng cấp: đây là giai đoạn cuối của SDLC.
Và là một quá trình không ngừng: khi môi trƣờng thay đổi, các vấn đề mới đƣợc phát hiện và yêu cầu mới đƣợc xác định, tính năng mới cần đƣợc thêm vào các phần mềm hiện có. Tất cả điều này đƣợc thực hiện trong giai đoạn hỗ trợ và bảo trì của SDLC [45]. Toàn bộ vòng đời của dự án phát triển phần mềm liên tục tiếp xúc với cả rủi ro nội bộ và bên ngoài. Những rủi ro có mặt trong tất cả các giai đoạn của SDLC và trách nhiệm của ngƣời quản lý dự án hoặc là loại bỏ hoặc làm giảm tác động của nó đối với dự án.
Các loại rủi ro khác nhau của dự án phần mềm sẽ đƣợc thảo luận dƣới đây.4 Rủi ro Có rất nhiều khái niệm về rủi ro, mỗi tác giả lại đƣa ra một định nghĩa khác nhau về rủi ro. - Rủi ro là sự biến động tiềm ẩn ở những kết quả. Rủi ro là những mất mát, thiệt hại, nguy hiểm, khó khăn hoặc điều không chắc chắn có thể xảy ra [16]. - Rủi ro là bất trắc có thể đo lƣờng đƣợc [21].
Trong dự án phần mềm, rủi ro đƣợc định nghĩa nhƣ sau: - Rủi ro là sự ngẫu nhiên gây ảnh hƣởng nghiêm trọng đến thành công của dự án phần mềm [25]. - Rủi ro là một phần của công việc phát triển, quy trình, môi trƣờng mà nếu bỏ qua, sẽ làm tăng khả năng thất bại của dự án phần mềm [38]. - Rủi ro là bất trắc không lƣờng trƣớc liên quan đến sự thay đổi và bổ sung các yêu cầu kỹ thuật trong giai đoạn phát triển phần mềm [17]. - Rủi ro là tập hợp các yếu tố, điều kiện gây ảnh hƣởng nghiêm trọng đến thành công của dự án phần mềm [54].
Trong luận văn này rủi ro đƣợc giải thích theo định nghĩa này.