Chương 1 Kiểm thử phần mềm dựa trên các rủi ro Việc xem xét các rủi ro trong kiểm thử phần mềm không phải là mới. Những người kiểm thử phần mềm có kinh nghiệm thường kiểm thử hệ thống dựa trên các rủi ro với những linh cảm riêng. Hiện tại, đã có một vài cách tiếp cận dùng để kiểm thử phần mềm dựa trên các rủi ro. Mục tiêu của chương này là tìm hiểu xem rủi ro trong công nghệ phần mềm là gì và cách phòng ngừa, xử lý các rủi ro.
Tiếp theo là nghiên cứu để biết rõ được kiểm thử phần mềm là gì và có các loại hình kiểm thử nào. Cuối cùng là nghiên cứu tìm hiểu một số phương pháp kiểm thử dựa trên các rủi ro đã phát hiện được khi phân tích.1 Rủi ro Mỗi người đều có một ý niệm nào đó về rủi ro. Hàng ngày, chúng ta có thể gặp phải các rủi ro nào đó. Để có được một cái gì đó người ta thường phải chấp nhận các rủi ro.
Băng qua một đường phố đông đúc để uống một tách cà phê có thể sẽ bị một tai nạn giao thông là một ví dụ về việc chấp nhận rủi ro để có một lợi ích nào đó. Việc mua xổ số là ví dụ khác của việc chấp nhận rủi ro, ta có thể được hoặc có thể mất. Trong thực tế, một số người sẵn sàng chấp nhận rủi ro trong khi những người khác lại rất ghét rủi ro. Theo từ điển Wikipedia thì “Rủi ro là thiệt hại tiềm tàng mà có thể xuất hiện từ quá trình hiện hữu nào đó hoặc từ sự kiện tương lai nào đó”.
Tức là, rủi ro chưa trở thành một vấn đề nhưng nó có thể là một vấn đề nếu không tiến hành những hành động phù hợp. Trong ngữ cảnh một dự án, rủi ro là khả năng xảy ra một sự kiện nào đó và khả năng ảnh hưởng đến những mục tiêu của dự án nếu sự kiện đó xảy ra. Nó chứa đựng khả năng thiệt hại, và khả năng dẫn đến những sai khác so với kết quả mong đợi. 8 Tóm lại, rủi ro gồm hai thành phần: khả năng xảy ra và hậu quả phải gánh chịu nếu nó xảy ra.
Hai thành phần này tạo nên hai đặc trưng của rủi ro: không chắc chắn (rủi ro có thể xảy ra hoặc không) và gây thiệt hại (rủi ro mang đến những hậu quả không mong đợi). Như vậy, rủi ro là nhân tố bất kỳ có thể gây trở ngại cho thành công của dự án. Một rủi ro chưa phải là một vấn đề mà chính xác hơn một rủi ro là một vấn đề có thể xảy ra.1 Độ phơi nhiễm rủi ro Khi xem xét rủi ro, chúng ta phải tính đến những thiệt hại do rủi ro gây ra và khả năng có thể xảy ra rủi ro này. Thiệt hại là những thứ không may bị mất mát như thời gian, chất lượng, tiền bạc, kiểm soát hoặc hiểu biết.
Khả năng mà một sự kiện có thể dẫn đến các thiệt hại nào đó thường được tính như một xác suất có giá trị từ 0 đến 1. Nếu xác suất này bằng 0 thì sự kiện sẽ không bao giờ xảy ra và không được coi là một rủi ro. Một xác suất bằng 1 có nghĩa là sự kiện này sẽ xảy ra trừ khi một vấn đề nào đó được giải quyết hoặc thay đổi. Nếu ta có một số rủi ro có thể xảy ra đối với một vấn đề nào đó thì có thể sẽ rất khó để xác định xem những rủi ro nào cần phải đặc biệt chú ý.
Bởi vậy cần phải có một phương thức để đánh giá mức độ nguy hại của các rủi ro. Một trong những cách thức đó là tính Độ phơi nhiễm rủi ro (Risk Exposure). Đây là một tính toán đơn giản dùng để gán cho mỗi rủi ro một giá trị số cho phép so sánh các rủi ro với nhau. Độ phơi nhiễm rủi ro = Xác suất xảy ra rủi ro * Tổng thiệt hại nếu rủi ro xảy ra 1.2 Xử lý rủi ro Sau khi nhận dạng được các rủi ro, chúng ta sẽ xem xét phải làm gì với chúng.
Trước hết, cần phải xem xét mức độ mà ta có thể thay đổi được các 9 hậu quả của rủi ro. Tức là chúng ta có thể giảm thiểu hoặc ngăn ngừa hậu quả của một rủi ro ở mức độ như thế nào. Các rủi ro có thể được chấp nhận, bị ngăn ngừa hoặc được san sẻ. Nếu rủi ro được chấp nhận thì những thiệt hại do rủi ro này gây ra phải được tính vào chi phí của dự án.
Nếu phải chấp nhận nhiều rủi ro thì cần phải sử dụng độ phơi nhiễm rủi ro khi dự toán chi phí. Cách tính này sẽ cho một dự toán với mức thiệt hại trung bình do các rủi ro gây ra. Ngăn ngừa là cách giảm thiểu thiệt hại hoặc xác suất. Có thể làm được điều đó bằng cách thay đổi điều kiện sao cho sự kiện này sẽ không xảy ra.
Trong công nghệ phần mềm, có thể tiến hành nhiều kiểm thử hơn để giảm thiểu rủi ro. Việc kiểm thử sẽ giảm bớt những gì còn chưa chắc, chưa rõ ràng và có thể phát hiện ra các lỗi quan trọng có thể sửa được. San sẻ thiệt hại có nghĩa là chia những thiệt hại này cho một số bên khác nhau, ví dụ như khách hàng, nhà thầu phụ hoặc một hãng bảo hiểm. Tuy nhiên, việc san sẻ thiệt hại cho khách hàng lại là một rủi ro vì nó sẽ làm giảm uy tín và có thể dẫn đến mất khách hàng và thị phần.3 Quản lý rủi ro Hậu quả do rủi ro gây ra xuất hiện dưới nhiều hình thức khác nhau, có thể là chất lượng của sản phẩm cuối không đáp ứng được yêu cầu của khách hàng, chi phí dự án tăng lên, giao sản phẩm chậm hay không đạt được những mục tiêu đã đặt ra của dự án; và trường hợp xấu nhất là phá hỏng toàn bộ dự án.
Mỗi thay đổi dù nhỏ hay lớn, như thay đổi yêu cầu khách hàng, thay đổi công nghệ phát triển hay thay đổi cơ cấu đội phát triển, đều ảnh hưởng đến tính chất kịp thời và thành công của dự án. Hơn nữa, làm phần mềm là một cuộc chiến giữa nhà quản trị dự án với những lựa chọn khác nhau, chẳng hạn như nên dùng phương pháp và công nghệ phát triển nào, cần khoảng bao nhiêu người phát triển hay chất lượng phần mềm như thế nào 10 là đủ …; và mỗi lựa chọn này có lợi và hại khác nhau đối với dự án. Vì thế nhà quản trị dự án phải cân nhắc giữa cái được và cái mất để đưa ra lựa chọn thích hợp nhất về phương pháp, công cụ, cơ cấu đội phát triển và tiêu chí chất lượng cho từng dự án. Quả thực, rủi ro là vấn đề luôn tiềm ẩn trong phát triển phần mềm và lúc nào cũng nằm chờ sẵn cơ hội để xuất hiện; do đó, quản lý rủi ro trở thành điều kiện cần để dẫn đến thành công của dự án.
Quản lý rủi ro là một chuỗi các hoạt động hay các bước giúp đội phát triển hiểu và quản lý các rủi ro. Hoạt động này diễn ra liên tục xuyên suốt quá trình phát triển phần mềm nhằm tìm kiếm các rủi ro có thể xảy ra, xác định mức độ quan trọng của rủi ro để ưu tiên giải quyết và thực thi các chiến lược đã đề ra để khắc phục hậu quả nếu rủi ro xảy ra. Thực tế, tất cả những người liên quan đến quá trình làm phần mềm, bao gồm: quản trị dự án, kỹ sư phần mềm và khách hàng đều phải tham gia hoạt động quản lý rủi ro; trong đó, quản trị dự án có vai trò và trách nhiệm cao nhất đối với hoạt động này. Kết quả của quản lý rủi ro là một danh sách rủi ro hoàn toàn dựa trên những nghiên cứu của quản trị dự án về đội phát triển, yêu cầu khách hàng, các tiến trình phát triển và các thông tin dự án khác.
Rủi ro được xem xét lặp đi lặp lại trong các giai đoạn phát triển phần mềm để đảm bảo rủi ro được cập nhật liên tục và các kế hoạch quản lý rủi ro đảm bảo tính thực tế.4 Rủi ro trong công nghệ phần mềm Trước đây, rủi ro thường bị bỏ qua trong công nghệ phần mềm. Người ta luôn giả thiết là sẽ có một bản thiết kế tối ưu và không có quĩ dự trữ để đề phòng những rủi ro. Nhưng những gì họ làm lại không thường xuyên như kế hoạch đã định và trong mọi dự án phát triển phần mềm đều có nhiều rủi ro cần phải được xem xét. Vì luôn luôn tồn tại những điều không chắc chắn 11 trong công nghệ phần mềm cho nên công việc xử lý các rủi ro sẽ ảnh hưởng rất lớn đến thành công của dự án.
Những rủi ro có liên quan tới sản phẩm thông thường được phân tích, xử lý riêng rẽ, tách biệt với những rủi ro liên quan đến quá trình dự án. Rủi ro sản phẩm có thể được phát hiện từ việc nhận dạng các nguy cơ và các đe dọa có thể xảy ra đối với hệ thống. Nguy cơ là một sự kiện không mong muốn nhưng vẫn có khả năng xảy ra. Thuật ngữ “nguy cơ” thường được sử dụng trong khi đánh giá độ an toàn của hệ thống.
Tính chất nghiêm trọng của các nguy cơ sẽ phụ thuộc vào bản chất của phần mềm. Trong các hệ thống đòi hỏi độ an toàn cao thì hậu quả của các nguy cơ tất nhiên sẽ cao hơn so với các hệ thống thương mại, nhưng thuật ngữ “nguy cơ” vẫn có thể được sử dụng ở cả hai. Các phần mềm có những lỗi nghiêm trọng sẽ không chỉ có vấn đề ngay tại lúc này mà còn gây ảnh hưởng cho các công việc nghiệp vụ sau này. Nếu khách hàng gặp những vấn đề và thấy thời gian của họ bị lãng phí, thì họ sẽ không quay lại nữa.
Từ lý do đó, một giao diện người dùng tốt cũng là một nhân tố quyết định phần mềm có rủi ro hay không. Đối với các phần mềm thương mại, nguy cơ đáng sợ nhất có thể là mất dữ liệu. Đối với những phần mềm đòi hỏi độ an toàn cao thì ảnh hưởng của lỗi có thể còn lớn hơn. Một nguy cơ có thể dẫn đến các thảm họa.
Trong các hệ thống an ninh và nghiệp vụ quan trọng, việc kiểm soát các rủi ro đóng một vai trò quyết định đối với vìệc giảm thiểu các thiệt hại do lỗi phần mềm gây ra. Bởi vậy trong các hệ thống này, độ tin cậy của phần mềm trở nên rất quan trọng.