Rủi ro là yếu tố luôn tồn tại trong mọi hoạt động sản xuất và kinh doanh, và dự án phần mềm cũng không phải ngoại lệ. Tuy nhiên, với đặc thù riêng của mình, nhận diện và kiểm soát rủi ro trong dự án phần mềm là điều không đơn giản. Trong thực tế, nhiều dự án phần mềm đã bỏ qua hoặc kiểm soát rủi ro sơ sài, chiếu lệ dẫn đến kết quả thất bại, khách hàng phàn nàn về chất lượng hoặc lỗ vốn do chi phí tăng cao.
Rủi ro trong các dự án phần mềm
Thông thường, “rủi ro” dùng để chỉ một hay nhiều sự việc chưa hiện diện nhưng có khả năng xảy ra trong tương lai có tác động đến dự án, và khi sự việc đó xảy ra thường sẽ gây ảnh hưởng xấu, thậm chí là “tai nạn” cho dự án, cản trở dự án đạt được mục tiêu của mình. Rủi ro thường được nhận biết dựa vào một số dấu hiệu báo trước, đôi khi dựa vào kinh nghiệm của các dự án tương tự trước đây.
Quản lý rủi ro có vai trò khá quan trọng trong toàn bộ tiến trình quản lý dự án. Trong cả 2 bộ mô hình và tiêu chuẩn nổi tiếng được ứng dụng nhiều trong dự án phần mềm là CMMi (Capability Maturity Model Integration) của viện Công nghệ Phần mềm Hoa Kỳ (SEI) và PMP (Project Management Professional) của viện Quản trị Dự án PMI (Project Management Institude) đều xem quản lý rủi ro là một trong những hoạt động cơ bản nhất của quá trình quản trị dự án.
Mặc dù nhận diện và kiểm soát tốt rủi ro có khả năng ảnh hưởng đến dự án đòi hỏi sự tham gia của nhiều người, tuy nhiên người có vai trò trực tiếp và quan trọng nhất là trưởng dự án. Do đó, một tiêu chí bắt buộc của một trưởng dự án giỏi là khả năng kiểm soát tốt rủi ro.
Quy trình quản lý rủi ro
Nhận diện và kiểm soát tốt rủi ro chỉ bằng kỹ năng và kinh nghiệm cá nhân không chưa đủ, việc kiểm soát rủi ro phải được thực hiện theo một quy trình chặt chẽ và phù hợp với đặc thù, mục tiêu và ngân sách của dự án.
Nhận diện rủi ro
Xác định được chính xác các nguồn có khả năng phát sinh rủi ro là điều không dễ dàng. Thông thường rủi ro xuất hiện từ các nguồn sau:
- Ngân sách/nguồn tài trợ cho dự án
- Thời gian thực hiện dự án
- Thay đổi về phạm vi và yêu cầu dự án
- Khó khăn về kỹ thuật
- Vấn đề liên quan đến nhân lực
- Vi phạm hợp đồng giữa 2 (hoặc nhiều) bên
- Vấn đề dưới khía cạnh kinh doanh
- Môi trường, luật pháp, chính trị, văn hóa…
Để nhận diện được rủi ro, có nhiều kỹ thuật được áp dụng. Các kỹ thuật này giúp cho dự án “khoanh vùng” và xác định dấu hiệu xuất hiện rủi ro, vừa giúp tránh bỏ sót các dấu hiệu, vừa làm tăng kết quả và độ tin cậy của việc nhận diện các rủi ro. Từng kỹ thuật đều có những hạn chế riêng, do đó việc kết hợp các kỹ thuật để có kết quả tốt nhất là cần thiết. Các kỹ thuật được sử dụng rộng rãi bao gồm:
Xem xét tài liệu
Là cách thức xác định rủi ro cơ bản, đơn giản và thông dụng. Phương thức này thường bao gồm việc xem xét các tài liệu của dự án như các kế hoạch, giả định (assumption), cam kết (proposal) với khách hàng, cơ chế thông tin giữa 2 bên, môi trường dự án, thông tin của các dự án khác trong quá khứ..., từ đó nhận diện các yếu tố có khả năng gây ra rủi ro cho dự án.
Tìm hiểu thêm kỹ thuật Fagan mô tả cách thức và quy trình rà soát tài liệu nhằm khoanh vùng, định vị các vấn đề có thể tồn tại từ đầu dự án (thông tin đầu vào), xuyên suốt (tồn đọng) cho đến khi kết thúc dự án:
- Phương pháp kiểm tra Fagan Inspection là gì?
- Differences between software walkthrough, review, and inspection.
Động não (brainstorming)
Đây là kỹ thuật được sử dụng rộng rãi nhất để nhận diện rủi ro và hầu như bất cứ ai trong đời cũng đã từng sử dụng kỹ thuật này cho nhiều vấn đề khác nhau trong cuộc sống. Đó là sự đóng góp ý kiến từ nhiều người khác nhau, từ các chuyên gia đến các thành viên của dự án, hoặc bất cứ ai có liên quan hoặc có kinh nghiệm về các vấn đề xảy ra trong dự án. Từ những ý kiến này (có thể nhiều ý trùng nhau), các rủi ro sẽ được định vị nhanh chóng.
Kỹ thuật Delphi
Tương tự kỹ thuật “Động não”, khác biệt chỉ là các thành viên tham gia không biết nhau, do đó kỹ thuật này thích hợp nếu các thành viên ở xa nhau. Ngày nay kỹ thuật Delphi thực hiện dễ hơn trước đây do sự trợ giúp của email và hệ thống hỗ trợ làm việc từ xa. Do thành viên là “vô danh” nên kỹ thuật này hạn chế nhược điểm của kỹ thuật “Động não” là một vài cá nhân (chẳng hạn sếp) sẽ có ảnh hưởng đến suy nghĩ của các thành viên khác.
Nhóm danh nghĩa (Nominal Group Technique - NGT)
Nhóm làm việc từ 7-10 người, mỗi thành viên sẽ ghi ý kiến riêng của mình (thường là một rủi ro quan trọng nhất) trên 1 mẩu giấy. Các ý kiến sau đó được tập hợp, nhóm sẽ phân tích và đánh giá trên từng ý kiến. Kết quả là rủi ro quan trọng nhất được sắp xếp trên cùng. Kỹ thuật này không chỉ dùng để nhận biết mà còn để đánh giá rủi ro cả định lượng và định tính; không loại bỏ hoàn toàn những người có ảnh hưởng; được thực hiện nhanh và ít tốn kém hơn kỹ thuật Delphi.
Hỏi ý kiến chuyên gia
Thường được dùng để hỏi ý kiến cá nhân của những người có nhiều kinh nghiệm từ các dự án tương tự hoặc các dự án đã hoàn thành trong quá khứ. Công cụ sử dụng thường là bảng câu hỏi có trả lời sẵn để chọn lựa, hoặc để trống cho người được hỏi tự ghi ý kiến hoặc trả lời.
Lưu ý: Kỹ thuật này phải đảm bảo không có lợi ích cá nhân để hạn chế vấn đề thiếu khách quan trong đánh giá, tư vấn... Ví dụ một đơn vị sử dụng phần mềm thuê một chuyên gia cá nhân để giám sát nhà thầu, đương nhiên chuyên gia đó sẽ tư vấn theo hướng ưu tiên "khách hàng phải happy" thay vì đánh giá công tâm.
Sử dụng phiếu kiểm tra hoặc bảng câu hỏi
Phiếu kiểm tra hoặc bảng câu hỏi thường đúc kết kinh nghiệm từ các dự án trong quá khứ và các dự án tương tự, trong đó liệt kê những rủi ro thường hay gặp nhất. Phiếu này giúp cho dự án nhanh chóng xác định rủi ro có thể xảy đến cho dự án.
Kỹ thuật này có thể tham khảo các kinh nghiệm từ bên ngoài, một trong những tham khảo tốt theo cách này là sử dụng bảng phân loại và liệt kê các rủi ro thường gặp của viện Kỹ thuật Phần mềm Hoa Kỳ (SEI Taxonomy-Based Risk Identification) có thể tải về miễn phí tại http://www.sei.cmu.edu/publications/documents/93.reports/93.tr.006.html.
Sử dụng biểu đồ
Sử dụng nhiều dạng biểu đồ khác nhau để phân tích và xác định rủi ro, chẳng hạn biểu đồ xương cá (còn gọi là biểu đồ nhân quả) được sử dụng để chỉ sự liên quan và ảnh hưởng của các yếu tố rủi ro khác nhau, từ đó xác định rủi ro có thể ảnh hưởng đến dự án. Biểu đồ quy trình cho thấy sự nối tiếp trong chuỗi các sự kiện, từ đó xác định các yếu tố có thể gây rủi ro cho dự án.
Phân tích và phân loại rủi ro
Trong thực tế, những rủi ro có thể xảy ra trong một dự án là khá nhiều, và việc giải quyết hết tất cả các rủi ro là không cần thiết, cũng như sẽ làm phá sản ngân sách của dự án.
Thông thường người ta áp dụng nguyên tắc 20/80 để xác định và giải quyết những rủi ro quan trọng, những nguyên nhân gốc có ảnh hưởng lớn nhất đến sự thành công của dự án, trong chừng mực cân nhắc cẩn thận ngân sách dự án cũng như một số yếu tố đặc biệt khác. Điều này dẫn đến việc dự án phải phân tích để chọn ra những rủi ro cần giải quyết đó. Có nhiều kỹ thuật phân tích rủi ro được sử dụng, kỹ thuật thường được sử dụng bao gồm các phân tích chính sau:
Phương pháp định tính phân tích khả năng xuất hiện của rủi ro
Có 4 mức để đo lường khả năng xuất hiện của rủi ro, mỗi mức độ được gán với một giá trị số (tùy dự án) để có thể ước lượng sự quan trọng của nó.
- 6 - Thường xuyên: Khả năng xuất hiện rủi ro rất cao, xuất hiện trong hầu hết dự án
- 4 - Hay xảy ra: Khả năng xuất hiện rủi ro cao, xuất hiện trong nhiều dự án
- 2 - Đôi khi: Khả năng xuất hiện rủi ro trung bình, chỉ xuất hiện ở một số ít dự án
- 1- Hiếm khi: Khả năng xuất hiện thấp, chỉ xuất hiện trong những điều kiện nhất định.
Phương pháp định tính phân tích thời điểm xuất hiện rủi ro
Có 4 mức để ước lượng thời điểm rủi ro xuất hiện, mỗi mức được gán với một giá trị số (tùy dự án) để có thể ước lượng sự tác động của nó.
- 6 - Ngay lập tức: Rủi ro xuất hiện gần như tức khắc
- 4 - Rất gần: Rủi ro sẽ xuất hiện trong thời điểm rất gần thời điểm phân tích
- 2 - Sắp xảy ra: Rủi ro sẽ xuất hiện trong tương lai gần
- 1 - Rất lâu: Rủi ro sẽ xuất hiện trong tương lai xa hoặc chưa định được.
Ghi chú: Các giá trị số cho trên chỉ mang tính tham khảo và minh họa, giá trị của chúng được định tùy tổ chức, tùy dự án.
Ước lượng và phân hạng các rủi ro
Rủi ro sau đó được tính giá trị để ước lượng bằng công thức:
Risk Exposure = Risk Impact * Risk Probability * Time Frame
Tiếp theo rủi ro được phân hạng từ cao đến thấp dựa theo các giá trị Risk Exposure tính toán được. Tùy theo tổ chức và đặc thù từng dự án, trưởng dự án (hoặc người được phân công) sẽ xác định những rủi ro nào cần đưa vào kiểm soát, với các mức ưu tiên khác nhau.
Kiểm soát rủi ro
Kiểm soát rủi ro bắt đầu với việc chọn lựa chiến lược và phương pháp đối phó rủi ro. Có nhiều chiến lược và phương pháp đối phó khác nhau, tùy theo tình huống dự án, môi trường và đặc thù của từng rủi ro. Trong thực tế, các chiến lược phổ biến nhất bao gồm:
- Tránh né: Dùng “đường đi khác” để né tránh rủi ro, đường đi mới có thể không có rủi ro, có rủi ro nhẹ hơn, hoặc chi phí đối phó rủi ro thấp hơn. Chẳng hạn:
- Thay đổi phương pháp, công cụ thực hiện, thay đổi con người
- Thương lượng với khách hàng (hoặc nội bộ) để thay đổi mục tiêu.
- Chuyển giao: Giảm thiểu rủi ro bằng cách chia sẻ tác hại khi chúng xảy ra. Chẳng hạn:
- Đề nghị với khách hàng chấp nhận và chia sẻ rủi ro (tăng thời gian, chi phí…).
- Báo cáo ban lãnh đạo để chấp nhận tác động và chi phí đối phó rủi ro.
- Mua bảo hiểm để chia sẻ chi phí khi rủi ro xảy ra.
- Giảm nhẹ: Thực thi các biện pháp để giảm thiểu khả năng xảy ra rủi ro hoặc giảm thiểu tác động và chi phí khắc phục rủi ro nếu nó xảy ra. Chẳng hạn:
- Cảnh báo và triệt tiêu các yếu tố làm cho rủi ro xuất hiện.
- Điều chỉnh các yếu tố có liên quan theo dây chuyền để rủi ro xảy ra sẽ ít có tác động.
- Chấp nhận: Đành chấp nhận “sống chung” với rủi ro trong trường hợp chi phí loại bỏ, phòng tránh, làm nhẹ rủi ro quá lớn (lớn hơn chi phí khắc phục tác hại), hoặc tác hại của rủi ro nếu xảy ra là nhỏ hay cực kỳ thấp. Kế hoạch đối phó có thể là:
- Thu thập hoặc mua thông tin để có kế hoạch kiểm soát tốt hơn.
- Lập kế hoạch khắc phục tác hại khi rủi ro xảy ra.
Sử dụng cây quyết định
Trong một số trường hợp phức tạp, thường rất khó xác định rủi ro nào nên đặt ưu tiên cao để kiểm soát, hoặc nên chọn chiến lược kiểm soát nào phù hợp nhất nên người ta thường sử dụng kỹ thuật hỗ trợ ra quyết định thông dụng trong quản lý là cây quyết định để tính toán giá trị đạt được hoặc thiệt hại xảy ra khi thực hiện một hành động nào đó.
Cây quyết định là một biểu đồ dạng cây có nhiều nút, mỗi nút có nhiều nhánh rẽ, mỗi nhánh sẽ trả lời câu hỏi “làm” hay “không làm”, hoặc là một khả năng để một tình huống xuất hiện với một xác suất nào đó. Các giá trị cuối cùng của các nhánh sẽ giúp xác định xem nên chọn phương án nào cho giá trị tốt nhất. Hình 5 là một Cây quyết định đơn giản để tính toán giá trị đạt được theo các phương án khác nhau, giúp chọn lựa phương án tốt nhất, theo đó phương án Y cuối cùng đã được chọn do giá trị trả về là lớn nhất.
Giám sát và điều chỉnh
Bao gồm hoạt động giám sát để bảo đảm các chiến lược đối phó rủi ro được lên kế hoạch và thực thi chặt chẽ. Việc giám sát cũng nhằm mục đích điều chỉnh các chiến lược hoặc kế hoạch đối phó nếu chúng tỏ ra không hiệu quả, không khả thi, ngốn quá nhiều ngân sách, hoặc để đáp ứng với rủi ro mới xuất hiện, hoặc sự biến tướng của rủi ro đã được nhận diện trước đó.
Kết quả giám sát có thể được báo cáo định kỳ đến tất cả những người có liên quan, đến quản lý cấp cao, hoặc đến khách hàng nếu cần thiết.
Trong thực tế, do các yếu tố liên quan đến dự án thay đổi liên tục, chu trình quản lý rủi ro không đi theo đường thẳng mà được lặp lại và điều chỉnh liên tục giữa các chặng. Các rủi ro liên tục được điều chỉnh hoặc nhận diện mới, do đó các chiến lược và kế hoạch đối phó cũng luôn được thay đổi để bảo đảm chúng khả thi và có hiệu quả.
Phân loại rủi trong dự án phần mềm
Phát triển phần mềm là hoạt động sử dụng nhiều tiến bộ công nghệ và đòi hỏi kiến thức cao. Do những yếu tố này hoặc một số yếu tố khác mà mọi dự án phát triển phần mềm đều chứa yếu tố không chắc chắn, được gọi là rủi ro dự án. Thành công của một dự án phát triển phần mềm phụ thuộc khá nhiều vào mức độ rủi ro tương ứng với từng hoạt động của dự án. Để thành công trong việc nhận thức được các rủi ro, project manager phải xác định, đánh giá, ưu tiên và quản lý tất cả các rủi ro chính.
5 loại rủi ro chính trong quản lý dự án phần mềm:
- Công nghệ mới, chưa được chứng minh: Phần lớn các dự án phần mềm đòi hỏi phải sử dụng các công nghệ mới nhất, hiện đại nhất (cutting-edge, bleeding-edge), ví dụ nhóm thời kỳ đầu của bình minh công nghệ (Learning Machine, Blockchain...). Các công cụ, kỹ thuật, giao thức, tiêu chuẩn và hệ thống phát triển luôn thay đổi làm tăng khả năng rủi ro công nghệ sẽ xuất hiện trong hầu hết mọi nỗ lực kỹ thuật phần mềm đáng kể. Đào tạo và kiến thức có tầm quan trọng và việc sử dụng công nghệ mới không đúng cách thường dẫn đến thất bại của dự án.
- Yêu cầu về người dùng và chức năng: Yêu cầu phần mềm nắm bắt mọi nhu cầu của người dùng đối với các tính năng, chức năng và chất lượng dịch vụ của hệ thống phần mềm. Các yêu cầu thường thay đổi với các hoạt động khám phá, tạo mẫu và tích hợp liên tục. Thay đổi trong các yêu cầu có thể sẽ lan truyền trong toàn bộ dự án, phải thay đổi lại một loạt chuỗi công việc (prototype, sprint, test case, quality gate...) và việc sửa đổi các yêu cầu của người dùng có thể không thực sự chuyển thành các yêu cầu chức năng. Những gián đoạn này thường dẫn đến một hoặc nhiều thất bại nghiêm trọng của một dự án phát triển phần mềm được lên kế hoạch kém.
- Ứng dụng và kiến trúc hệ thống: Đi sai hướng với một nền tảng, thành phần hoặc kiến trúc có thể gây ra hậu quả tai hại. Cùng với các rủi ro về công nghệ, điều quan trọng là nhóm các chuyên gia hiểu về kiến trúc và có khả năng đưa ra các lựa chọn tốt.
- Hiệu suất: Điều quan trọng là đảm bảo rằng bất kỳ kế hoạch quản lý rủi ro nào cũng bao gồm các kỳ vọng của người dùng và đối tác về hiệu suất. Phải xem xét các tiêu chí và kiểm tra ngưỡng trong toàn dự án để đảm bảo rằng các sản phẩm công việc đang đi đúng hướng.
- Tổ chức: Các vấn đề tổ chức có thể có tác động bất lợi đến kết quả dự án. Quản lý dự án phải lập kế hoạch để thực hiện hiệu quả dự án và tìm sự cân bằng giữa nhu cầu của nhóm phát triển và kỳ vọng của khách hàng. Tất nhiên, việc bố trí nhân sự đầy đủ bao gồm lựa chọn các thành viên trong nhóm với các bộ kỹ năng phù hợp với dự án.
Checklist quản trị rủi ro
- Luôn luôn nghĩ về quản lý rủi ro. Nếu không, nhóm dự án sẽ được điều khiển từ khủng hoảng này sang khủng hoảng khác.
- Sử dụng danh sách kiểm tra và so sánh với các dự án tương tự trước đó.
- Ưu tiên rủi ro, xếp hạng từng mức độ nghiêm trọng.
- Phát triển danh sách rủi ro top 10 hoặc top 20 cho dự án của bạn. Giống như hầu hết các nhà quản lý dự án, bạn có thể có thể sử dụng lại danh sách này trong dự án tiếp theo!
- Theo dõi mạnh mẽ các rủi ro đang nổi lên bằng cách gặp gỡ các bên liên quan chính, đặc biệt là với nhóm tiếp thị và khách hàng.
- Như có thể, chia rủi ro lớn hơn thành rủi ro nhỏ hơn, dễ nhận biết và dễ quản lý.
- Khuyến khích mạnh mẽ các bên liên quan suy nghĩ chủ động và truyền đạt về rủi ro trong toàn bộ dự án.
Kết luận
Rủi ro là một yếu tố tồn tại trong mọi dự án phần mềm. Một người quản trị dự án giỏi phải là người không ngạc nhiên và có khả năng xử lý bất kỳ sự kiện nào xảy ra có thể gây bất lợi cho dự án, điều đó đồng nghĩa với việc các rủi ro ảnh hưởng đến dự án phải được “thấy trước”, cùng với các kế hoạch để giảm thiểu khả năng xuất hiện cũng như tác hại khi chúng xuất hiện. Quy trình kiểm soát chặt chẽ, kinh nghiệm chuyên gia kết hợp với kỹ thuật nhận diện và kiểm soát rủi ro là những yếu tố quan trọng nhất để kiểm soát tốt rủi ro xảy ra trong dự án.
Ngô Văn Toàn
Tài liệu tham khảo:
- Practical Guide to Software Quality Management, Second Edition, by John W. Horch, Artech House © 2003
- CMMISM for Systems Engineering and Software Engineering (CMMI-SE/SW, V1.1)
- Managing Information Technology Projects: Applying Project Management Strategies to Software, Hardware, and Integration Initiatives by James Taylor AMACOM © 2004.