Chương I: TỔNG QUAN VỀ RỦI RO DỰ ÁN PHẦN MỀM Trong một vài thập niên gần đây đặc biệt là cuối thế kỷ 20 đầu thế kỷ 21 đã có sự tăng lên mạnh mẽ của ngành tự động hóa. Các ngành tự động hoá này căn bản lại phụ thuộc vào các phần mềm chức năng, do đó sự phức tạp trong phát triển phần mềm cũng tăng đáng kể trong những năm này. Mac Manus đã nhận định 65% dẫn đến thất bại của dự án là do những vấn đề trong quản lý, 35% là những vấn đề về công nghệ. Vấn đề quản lý bao gồm các vấn đề với cấu trúc của dự án, tài nguyên dự án, quy hoạch phương pháp và quản lý rủi ro chưa đầy đủ.
Các vấn đề kỹ thuật bao gồm thiết kế phần mềm nghèo nàn, không tuân thủ các yêu cầu phần mềm, kỹ thuật đánh giá và phát triển không đúng. Rủi ro là yếu tố luôn tồn tại trong mọi hoạt động sản xuất, kinh doanh và đời sống và dự án phần mềm cũng không 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 các dự án phần mềm là điều không hề đơn giản. Mọi rủi ro đều tạo ra vấn đề, đều gây ảnh hưởng xấu tới các dự án phần mềm, do đó những kỹ sư phần mềm phải có những biện pháp nhận diện rủi ro hiệu quả, thẩm định xác suất xuất hiện, tác động nếu nó xuất hiện và giải quyết nó một cách hiệu quả để đạt được phần mềm tốt theo yêu cầu của khách hàng.1 Quản lý rủi ro 1.1 Khái niệm về rủi ro Thực tế nghiên cứu các tài liệu cho thấy, có rất nhiều định nghĩa về rủi ro và đến nay vẫn chưa có một khái niệm thống nhất nào về rủi ro.
Tùy theo từng quan điểm, các trường phái khác nhau, các tác giả khác nhau lại đưa ra những định nghĩa khác nhau. Nhìn chung có thể chia các khái niệm rủi ro làm hai trường phái là trường phái truyền thống và trường phái hiện đại. Trường phái đầu tiên cho rằng rủi ro là những thiệt hại, mất mát, nguy hiểm hoặc các yếu tố liên quan đến nguy hiểm, khó khăn hoặc điều không chắc chắn (uncertainty) có thể xảy ra cho con người. Trường phái thứ hai quan niệm rủi ro là sự bất trắc có thể đo lường được, vừa mang tính tích cực lẫn tiêu cực.
Rủi ro có thể mang đến sự tổn thất nhưng có thể mang lại nhưng lợi ích, cơ hội. Ví dụ, việc xảy ra rủi ro giúp con người nhận thức được 3 c những rủi ro có thể xảy ra, nghiên cứu rủi ro và tìm ra được những biện pháp để đề phòng chúng xuất hiện. Rủi ro xuất hiện khi tồn tại đồng thời hai yếu tố cơ bản yếu tố gây rủi ro và đối tượng chịu tác động, ảnh hưởng. Phạm vi nghiên cứu về rủi ro cũng khá phong phú và đa dạng, vì vậy ở đây ta chỉ xét đến rủi ro thường xuất hiện ở khía cạnh kỹ thuật trong các dự án phần mềm.
- Rủi ro có hai thuộc tính chủ yếu là xác suất rủi ro sẽ xuất hiện và tác động của rủi ro nếu nó xuất hiện. + Xác suất rủi ro sẽ xuất hiện: Chúng ta có thể dùng tỉ lệ 0 – 8 để mô tả xác suất của rủi ro. Rủi ro có xác suất 0 được gọi là không có cơ hội xuất hiện. Rủi ro có xác suất 8 được gọi là chắc chắn xảy ra.
Xác suất trong khoảng 0 – 8 thì rủi ro có cơ hội xuất hiện. + Tác động của rủi ro nếu nó xuất hiện: Chúng ta có thể dùng thang 0-8 để mô tả tác động của rủi ro. Rủi ro với tác động 0 được gọi là không có tác động. Rủi ro với tác động 8 được gọi là đình chỉ (nguy hiểm nghiêm trọng dẫn đến dự án không thực hiện được).2 Rủi ro phần mềm Sự phát triển và ứng dụng phần mềm đặt cộng đồng vào nhiều mối đe dọa khác nhau: Thứ nhất, sự thất bại của một dự án phần mềm như là công việc kinh doanh của một doanh nghiệp dẫn đến lãng phí của cải và thời gian cũng như bỏ lỡ một cơ hội kinh doanh.
Nguy cơ thất bại như vậy được gọi là rủi ro dự án phần mềm (rủi ro trong phát triển phần mềm, rủi ro dự án CNTT). Thứ hai, đe dọa khác liên quan đến sự an toàn của con người và môi trường. Sự thất bại của một hệ thống phần mềm có thể dẫn đến tai nạn, mà trong trường hợp xấu có thể dẫn đến việc mất đi mạng sống của con người, điều này gọi là rủi ro an toàn phầm mềm. + Sự đe dọa cuối cùng được cụ thể hóa khi một dịch vụ của hệ thống bị hỏng hoặc tài nguyên thông tin của hệ thống bị tổn hại hay thao tác bất lợi dẫn tới tính 4 c toàn vẹn của hệ thống bị vi phạm thông qua tác động chủ ý của người tấn công, đe dọa này gọi là rủi ro bảo mật phần mềm.3 Quản lý rủi ro - Các bộ mô hình tiêu chuẩn nổi tiếng được ứng dụng nhiều trong dự án phần mềm: Trong các dự án công nghệ thông tin, tỉ lệ thành công theo nghĩa đạt được yêu cầu chất lượng, đúng hạn và không vượt chi là rất không cao, nguyên nhân chủ yếu là do không có, hoặc thực hiện không tốt việc phòng ngừa và xử lý các nguy cơ dẫn đến thất bại của một dự án.
Như vậ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ả hai bộ mô hình 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) đề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ột cách hiểu đơn giản, quản lý rủi ro là cách để quản lý các rủi ro, để làm giảm những tác động của những sự kiện không mong muốn phát sinh trong dự án [7,9,11]. -Tầm quan trọng của quản lý rủi ro: Quản lý rủi ro là một nghệ thuật và những nhận biết khoa học, là nhiệm vụ và là sự đối phó rủi ro thông qua hoạt động của dự án và những mục tiêu đòi hỏi quan trọng nhất của dự án.
Quản lý rủi ro thường không được chú ý nhiều trong các dự án, nhưng nó lại giúp cải thiện được sự thành công của dự án trong việc giúp chọn lựa những dự án tốt, xác định phạm vi dự án và phát triển những ước tính có tính thực tế. -Mục đích của quản lý rủi ro trong kỹ nghệ phần mềm: + Quản lý rủi ro giúp cho một dự án tránh khỏi bị thất bại như không hoàn thành dự án như kế hoạch đã định, vượt quá ngân sách và không đáp ứng được sự mong đợi của khách hàng. Quản lý rủi ro tìm kiếm và xem xét từ các góc cạnh khác nhau trong các dự án để đảm bảo rằng những mối đe dọa cho các dự án được xác định và phân tích, tiến hành các chiến lược thích hợp để giảm nhẹ và khống chế rủi 5 c ro. Chức năng chính của quản lý rủi ro là đoán nhận được tất cả những rủi ro có khả năng ảnh hưởng đến một dự án, đánh giá mức độ nghiêm trọng và hậu quả, sau đó xác định các giải pháp tùy theo tính chất của các rủi ro.
Giảm thiểu tối đa các yếu tố bất ngờ và các vấn đề không mong đợi phát sinh trong suốt quá trình thực hiện của dự án, bằng cách thiết lập ra các kế hoạch cho các tình huống có thể xảy ra. Những kế hoạch này sẽ giảm thiểu tối đa những tình huống có thể dẫn tới các sản phẩm lệch lạc hoặc có thể phá hủy toàn bộ dự án. + Quản lý rủi ro làm giảm tối thiểu khả năng rủi ro, trong khi đó tăng tối đa những cơ hội tiềm năng. Quản lý rủi ro đã xuất hiện trong nhiều thập kỷ.
Tuy nhiên chỉ vào khoảng nửa cuối thập kỷ trước nó mới thật sự trở lên quan trọng đối với cộng đồng phần mềm. Trong những năm đầu của thế kỷ trước, các dự án phần mềm chỉ được áp dụng quản lý rủi ro bằng các cách tiếp cận bộc phát, không hề theo một phương pháp hệ thống nào. Tuy nhiên với sự phức tạp đang được tăng lên trong việc phát triển phần mềm, nhiều ngành công nghiệp đã thấy được sự quan trọng của quản lý rủi ro. Trước khi áp dụng bất cứ một quá trình quản lý rủi ro nào, các thành viên trong nhóm thực hiện dự án nên nắm được rõ ràng về các hậu quả sau này của các rủi ro trong dự án của họ như: -Sự mất mát sẽ phát sinh nếu xuất hiện rủi ro: sự mất mát trong dự án phần mềm có thể kể đến như lợi nhuận, thị phần, khách hàng.
-Tính nghiêm trọng của sự mất mát. -Tính lâu dài của các rủi ro. -Những mô hình quản lý rủi ro phần mềm phổ biến: Đã có một vài cách tiếp cận quản lý rủi ro phần mềm được đề xuất trong quá khứ. Hầu hết là đánh giá rủi ro trong tất cả các giai đoạn phát triển phần mềm.
Kết quả là trong những cách tiếp cận đó, các mô hình quản lý rủi ro đã được áp dụng một cách có kỷ luật. Đó là những cách tiếp cận sau [4]: + Mô hình quản lý rủi ro của Boehm (Win-Win). + Mô hình quản lý rủi ro phần mềm của SEI. 6 c Những đóng góp nền tảng của Boehm: Boehm đã đề xuất một mô hình phát triển phần mềm là điều khiển rủi ro.
Điểm mạnh trong mô hình này là đã quy công việc vào thành một mô hình xoắn ốc, nhiều rủi ro được loại bỏ tại những giai đoạn sớm nhất thay vì sẽ gặp phải những rào cản dự án ở những giai đoạn sau. Boehm đã mở rộng mô hình xoắn ốc của ông bằng cách sử dụng lý thuyết mô hình win-win, với mục tiêu đáp ứng các mục đích và mối quan tâm của các bên liên quan. Năm 1991, Boehm cũng đề xuất ra một khung quản lý rủi ro, giúp tìm ra được những nguồn rủi ro chính, phân tích và phân giải chúng. Tiếp cận quản lý rủi ro phần mềm của SEI [11]: SEI đã cung cấp một khuôn khổ quản lý rủi ro toàn diện bao gồm trong ba nhóm: Đánh giá rủi ro phần mềm, quản lý rủi ro liên tục, nhóm quản lý rủi ro.