Đăng ký Đăng nhập
Trang chủ Phân tích các yêu cầu của một công cụ phần mềm kiểm thử và thiết kế các giao diệ...

Tài liệu Phân tích các yêu cầu của một công cụ phần mềm kiểm thử và thiết kế các giao diện và cơ sở dữ liệu của phần mềm kiểm thử

.PDF
71
129
56

Mô tả:

LỜI CẢM ƠN Trước tiên, tôi muốn gửi lời cảm ơn đến thầy giáo TS. Bùi Thế Hồng, người đã trực tiếp hướng dẫn tôi thực hiện luận văn này. Tôi cũng muốn bày tỏ lòng biết ơn đến các thầy giáo Viện Công nghệ thông tin và Khoa Công nghệ thông tin - Đại học Thái Nguyên đã tận tình dạy dỗ và tạo mọi điều kiện học tập thuận lợi cho tôi trong suốt khoá học qua. Tôi xin cảm ơn lãnh đạo Bệnh viện Y học cổ truyền Thái Nguyên, các anh chị đồng nghiệp đã tạo điều kiện cho tôi tham gia và hoàn thành khoá học. Tôi cũng xin cảm ơn các bạn của tôi, những người luôn bên cạnh động viên, giúp đỡ, và đã đóng góp nhiều ý kiến thiết thực trong quá trình học tập và thực hiện luận văn. Cuối cùng, tôi muốn gửi lời cảm ơn đến gia đình, đặc biệt là bố mẹ, chồng và con tôi - những người luôn hết mình yêu thương, dìu dắt và ủng hộ tôi trong cuộc sống./. Thái Nguyên, tháng 11 năm 2008 Sinh viên thực hiện Trần Thị Ngọc Liên Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn MỤC LỤC Danh sách bảng....................................................................................1 Danh sách hình vẽ ................................................................................2 Ký hiệu viết tắt ......................................................................................3 Lời nói đầu ............................................................................................4 Cấu trúc luận văn..................................................................................6 1.1 Rủi ro .................................................................................................. 7 1.1.1 Độ phơi nhiễm rủi ro ............................................................................ 8 1.1.2 Xử lý rủi ro ........................................................................................... 8 1.1.3 Quản lý rủi ro ....................................................................................... 9 1.1.4 Rủi ro trong công nghệ phần mềm .................................................... 10 1.2 Kiểm thử phần mềm ......................................................................... 12 1.2.1 Kiểm thử và các ca kiểm thử ............................................................. 12 1.2.2 Kiểm thử hộp đen và hộp trắng ......................................................... 13 1.2.3 Quá trình kiểm thử ............................................................................. 14 1.3 Kiểm thử dựa trên các rủi ro ............................................................ 16 1.3.1 Phân tích sơ bộ các mối nguy hiểm (PHA) ........................................ 17 1.3.2 Phân tích các kiểu lỗi và hậu quả (FMEA) ......................................... 17 1.3.3 Phân tích lỗi tiềm ẩn và khả năng thực hiện (HazOp) ....................... 18 1.3.4 Kiểm thử dựa trên rủi ro theo kinh nghiệm ........................................ 19 1.3.5 Ngăn ngừa các mối nguy hiểm .......................................................... 22 Tóm tắt Chương 1 .................................................................................. 24 Chương 2 Phân loại ưu tiên các kiểm thử .........................................26 2.1 Các nhân tố gây ra thiệt hại ............................................................. 26 2.2 Các hành động phát sinh sai sót trong quá trình phát triển ............. 28 2.3 Phát sinh lỗi trong khi lập trình ......................................................... 29 2.4 Kiểm thử hệ thống theo độ phơi nhiễm rủi ro ................................... 30 2.5 Lập thứ tự kiểm thử ưu tiên trước khi hết kỳ hạn ............................ 32 2.6 So sách các cách tiếp cận khác nhau .............................................. 33 Tóm tắt Chương 2 .................................................................................. 35 Chương 3 Một phương pháp kiểm thử mới .......................................36 3.1 Sắp thứ tự ưu tiên các rủi ro và tạo lập các kiểm thử và các rào cản có liên quan ............................................................................................ 36 3.2 Sắp thứ tự ưu tiên kiểm thử cho các modules trong hệ thống ......... 40 3.3 Lập danh sách ưu tiên kiểm thử ....................................................... 44 Tóm tắt Chương 3 .................................................................................. 47 Chương 4. Đặc tả các yêu cầu cho công cụ kiểm thử.......................48 4.1 Các yêu cầu chức năng.................................................................... 48 4.1.1 Dự án................................................................................................. 48 4.1.2 Loại rủi ro........................................................................................... 48 Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn 4.1.3 Module ............................................................................................... 49 4.1.4 Nguy cơ ............................................................................................. 50 4.1.5 Kiểm thử ............................................................................................ 50 4.1.6 Rào cản ............................................................................................. 51 4.2 Các yêu cầu không chức năng......................................................... 51 4.2.1 Chất lượng ........................................................................................ 52 4.2.1 Công nghệ ......................................................................................... 52 4.3. Thiết kế công cụ phần mềm kiểm thử ............................................. 52 4.3.1 Ngôn ngữ thực hiện........................................................................... 52 4.3.2 Mô hình dữ liệu.................................................................................. 53 4.4 Giao diện .......................................................................................... 55 4.4.2 Tạo ra một dự án mới ........................................................................ 57 4.4.3 Lựa chọn và trọng số các loại rủi ro .................................................. 58 4.4.4 Danh sách module ............................................................................. 59 4.4.5 Giá trị những module ......................................................................... 60 4.4.6 Tạo một kiểm thử mới ....................................................................... 61 4.4.7 Danh sách kiểm thử .......................................................................... 62 4.4.8 Danh sách những rủi ro ..................................................................... 63 4.4.9 Danh sách những rào cản ................................................................. 64 Tóm tắt chương 4 ................................................................................... 66 Kết luận ...............................................................................................67 Tài liệu tham khảo ..............................................................................68 Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn 1 Danh sách bảng Tên bảng Trang Bảng 1.1 Bảng PHA …………………………………………………. 17 Bảng 1.2 Cấu trúc của bảng FMEA …………………………………. 18 Bảng 1.3: Bảng HazOp ……………………………………………… 18 Bảng 1.4: Danh sách rủi ro tổng quát ………………………………... 20 Bảng 1.5: Danh sách rủi ro cho việc cài đặt …………………………. 20 Bảng 1.6: Ma trận rủi ro của các thành phần ………………………… 22 Bảng 2.1: Độ phơi nhiễm rủi ro đối với chức năng “Đóng tài khoản” ……………………………………………………………………….. 32 Bảng 2.2: Ví dụ về tính toán rủi ro ………………………………….. 33 Bảng 3.1: Các thông tin cần biết từ việc phân tích lỗi ………………. 36 Bảng 3.2: Ma trận rủi ro cho độ phơi nhiễm ………………………… 38 Bảng 3.3: Bảng với các thông tin nhận được từ phân tích rủi ro ……. 39 Bảng 3.4: Các nhóm rủi ro và các nhân tố rủi ro được sử dụng trong phân tích rủi ro ……………………………………………………….. 40 Bảng 3.5: Tính toán chi phí (bằng số) ………………………………. 42 Bảng 3.6: Tính các số xác suất ……………………………………... 43 Bảng 3.7: Quá trình tính các số chi phí và các số xác suất ………….. 43 Bảng 3.8: Thiệt hại tiềm ẩn đã được tính toán ………………………. 34 Bảng 3.9: Ma trận rủi ro được sử dụng trong lập thứ tự ưu tiên cuối cùng ………………………………………………………………….. 45 Bảng 3.10: Danh sách các kiểm thử được phân loại ưu tiên ………. 46 2 Danh sách hình vẽ Tên hình vẽ Trang Hình 1.1 Vùng ALAPR………………………………………………. 23 Hình 4.1: Sơ đồ lớp UML thể hiện mô hình dữ liệu cho công cụ phần mềm …………………………………………………… 54 Hình 4.2: Màn hình của trang Xuatphat.asp ………………………… 56 Hình 4.3: Màn hình trang ThemDuan.aspx………………………….. 57 Hình 4.4: Màn hình trang LoaiRuiro.aspx ……………………………. 58 Hình 4.5: Màn hình trang Modules.aspx ……………………………... 59 Hình 4.6: Màn hình trang GiatriModules.aspx………………………... 60 Hình 4.7: Màn hình trang Taokiemthu.aspx…………………………....61 Hình 4.8: Màn hình trang Trangchu.aspx ……………………………...62 Hình 4.9: Màn hình trang Ruiro.aspx ………………………………….63 Hình 4.10: Màn hình trang Raocan.aspx ……………………………… 64 3 Ký hiệu viết tắt PM Phần mềm KTPM Kiểm thử phần mềm PTPM Phát triển phần mềm PHA Phân tích lỗi sơ bộ HazOp Phân tích lỗi và khả năng thực hiện FMEA Phân tích các kiểu lỗi và hậu quả FMEA 4 Lời nói đầu Kiểm thử phần mềm là một công việc đòi hỏi rất nhiều thời gian trong qui trình phát triển phần mềm. Thế nhưng, kiểm thử phần mềm lại thường được thực hiện vào pha gần cuối của vòng đời phát triển hệ thống khi tiền bạc và thời gian không còn dư rả nữa. Những người quản lý đều rất mong muốn sớm có được một phiên bản của sản phẩm và thường thúc ép những người kiểm thử phải hoàn thành công việc trong một khoảng thời gian không dễ dàng có thể thực hiện được. Nhưng cho dù thế nào thì những người kiểm thử vẫn phải làm công việc của họ, và vì vậy có thể họ không thể kiểm thử tất cả những thứ cần phải kiểm thử. Do đó, họ chỉ kiểm thử những thứ mà họ cho là quan trọng nhất. Mục tiêu của luận văn là nghiên cứu các cách tiếp cận kiểm thử khác nhau và tìm cách đề xuất một phương pháp kiểm thử hệ thống dựa trên các rủi ro đã phân tích được. Những rủi ro có thể có đối với hệ thống sẽ được phân tích cho từng ca sử dụng. Việc đánh giá những rủi ro này sẽ được sử dụng để tìm ra bản chất của rủi ro cho từng ca sử dụng. Các ca kiểm thử sẽ được thiết lập từ những ca sử dụng này và các ca kiểm thử có rủi ro cao nhất sẽ được chọn để thực hiện. Ngoài ra, trong luận văn sẽ xác định thêm những yêu cầu cần thiết cho việc xây dựng một công cụ phần mềm hỗ trợ cho phương pháp kiểm thử này và đề xuất một mô hình thử nghiệm. Kinh nghiệm cho thấy khi gặp một vấn đề nào đó trong cuộc sống, con người thường giải quyết bằng cách nhớ lại những vấn đề họ đã gặp trước đây để tìm ra vấn đề tương tự, rồi lục lại trí nhớ để tìm lại cách giải quyết của vấn đề tương tự này, và cuối cùng điều chỉnh cách giải quyết vừa tìm thấy nếu cần thiết để đưa ra cách giải quyết hợp lý cho vấn đề hiện tại của mình. Trong phân tích và quản lý rủi ro cũng vậy, khi tiếp nhận một dự án, những người 5 quản trị dự án bao giờ cũng nhớ lại những dự án trong quá khứ mà họ đã quản lý để tìm ra một số dự án tương tự, sau đó tìm lại danh sách rủi ro của các dự án tương tự này, và cuối cùng hiệu chỉnh trên các danh sách rủi ro vừa tìm thấy cho phù hợp với ngữ cảnh hiện tại để đưa ra dự đoán danh sách rủi ro cho dự án đang phát triển. Thực tế, các dự án luôn luôn có một độ tương tự nhất định tùy theo hướng nhìn nhận của người quản trị dự án và rủi ro phần mềm là một vấn đề phức tạp không nằm trong tầm kiểm soát của người quản trị dự án. Mục tiêu của mô hình là đảm bảo tự động hóa một phần quá trình phân tích và quản lý rủi ro. Dựa trên những thông tin về phân tích và quản lý rủi ro của các dự án phần mềm đã hoàn thành, mô hình đưa ra một dự đoán danh sách rủi ro cho dự án hiện tại, và mỗi rủi ro trong danh sách này là một trong những rủi ro đã được dự đoán trong quá khứ. Vì vậy khi sử dụng mô hình này, các nhà quản trị dự án có thể tận dụng và trau dồi những kinh nghiệm phân tích và quản lý rủi ro mà họ đã trải qua trong quá khứ, và họ có thể tự bổ sung kinh nghiệm bằng cách thêm những rủi ro mới xuất hiện và kế hoạch quản lý rủi ro tương ứng vào danh sách rủi ro của dự án hiện tại. Ngoài ra, do đặc điểm của lý thuyết, mô hình thử nghiệm được đề xuất trong luận văn chỉ áp dụng trong một ngữ cảnh hẹp, chẳng hạn một công ty phần mềm. Hiện nay, các công ty phần mềm có xu hướng phát triển phần mềm trong một số lĩnh vực nhất định, đáp ứng nhu cầu của một số đối tượng khách hàng nhất định, sử dụng một số công nghệ phát triển nhất định, … nên xây dựng mô hình trong một ngữ cảnh hẹp là hoàn toàn hợp lý. 6 Cấu trúc luận văn Luận văn gồm 4 chương, nội dung của mỗi chương được tóm tắt như sau: Chương 1: Trình bày những khái niệm cơ bản về kiểm thử nói chung và kiểm thử dựa trên các rủi ro. Chương 2: Trình bày các phương pháp phân loại ưu tiên các kiểm thử rủi ro và so sánh các phương pháp kiểm thử dựa trên rủi ro. Chương 3: Đề xuất một phương pháp kiểm thử dựa trên rủi ro mới. Chương 4: Phân tích các yêu cầu của một công cụ phần mềm kiểm thử và thiết kế các giao diện và cơ sở dữ liệu của phần mềm kiểm thử. 7 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.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.1.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.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. 1.1.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ế. 1.1.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. Nhưng những phần mềm có độ tin cậy cao vẫn không đảm bảo là sẽ vận hành an toàn, do vậy nó cần phải đáng tin cậy. Rủi ro quá trình liên quan đến quá trình phát triển phần mềm được thực hiện như thế nào. Rủi ro quá trình xuất hiện từ quá trình phát triển phần mềm 12 không hoàn chỉnh có thể sẽ gây ra các lỗi làm cho độ tin cậy và độ an toàn có thể bị suy giảm. Bởi vậy, cả hai kiểu rủi ro gồm rủi ro sản phẩm và rủi ro quá trình đều cần phải được xem xét kỹ lưỡng. 1.2 Kiểm thử phần mềm Kiểm thử trong công nghệ phần mềm là “Một quá trình được sử dụng để nhận biết sự đúng đắn, hoàn chỉnh và chất lượng của một phần mềm máy tính đã được phát triển”. Trên thực tế, kiểm thử không bao giờ có thể chứng minh được tính đúng đắn của một phần mềm máy tính, mà điều này chỉ có thể thực hiện được bằng việc thẩm tra chính thức (và chỉ khi không có lỗi trong quá trình thẩm tra chính thức). Nó có thể chỉ tìm thấy những thiếu sót, chứ không đảm bảo rằng sẽ không có thiếu sót. Mục đích của kiểm thử là phát hiện lỗi trong hệ thống và tạo ra sự tin tưởng của khách hàng vào việc hệ thống có thể cung cấp những chức năng đã được xác định trong các yêu cầu và không gây ra những thiệt hại cho khách hàng. Cả hai điều này đều quan trọng. Ngoài ra, còn có thể có thêm hai mục tiêu nữa: “Cung cấp một bằng chứng là những lợi thế về nghiệp vụ đòi hỏi hệ thống phải đáp ứng luôn luôn sẵn sàng” và “Cung cấp dữ liệu về các rủi ro của phiên bản hệ thống đang được kiểm thử.” 1.2.1 Kiểm thử và các ca kiểm thử Hiện tại vẫn chưa có một định nghĩa chung cho ca kiểm thử (test case). Viện kỹ thuật điện và điện tử (IEEE) định nghĩa một kiểm thử là một tập hợp một hoặc nhiều ca kiểm thử. Một ca kiểm thử là “Một tình huống cần phải được kiểm thử bao gồm nhận dạng riêng của nó và phản ứng kỳ vọng”. Có thể mô tả một ca kiểm thử như một câu hỏi để hỏi chương trình nhằm thu được thông tin. Vả lại, một ca kiểm thử cũng không có gì quá đặc biệt, chẳng qua nó cũng chỉ là một ý định sẽ 13 kiểm thử cái gì trong chương trình. Điều quan trọng là các ca kiểm thử phải có khả năng khám phá thông tin. Chúng không cần thiết phải được thiết kế để phát hiện một khiếm khuyết nào đó. Vì vậy, có thể định nghĩa một ca kiểm thử như một tập các câu lệnh được thiết kế để phát hiện ra một lớp đặc biệt các khiếm khuyết có thể gây ra lỗi. Một ca kiểm thử bao gồm các mục kiểm thử, đặc tả đầu vào, đầu ra và các nhu cầu về môi trường. 1.2.2 Kiểm thử hộp đen và hộp trắng Hầu hết các kiểm thử dựa vào rủi ro đều là kiểm thử hộp đen. Kỹ thuật này cũng được gọi là kiểm thử chức năng hoặc kiểm thử dựa vào đặc tả yêu cầu. Kiểm thử hộp đen chỉ chú trọng đến chức năng của chương trình. Nó không quan tâm đến cấu trúc bên trong, chỉ khảo sát chức năng của chương trình theo yêu cầu kỹ thuật, cung cấp cho hệ thống các số liệu vào và quan sát các kết qủa ra. Kiểm thử hộp đen kiểm tra xem các kết quả của một chương trình với các số liệu vào đã cho có phù hợp với đặc tả chức năng của chương trình không. Thuật ngữ hộp đen có nghĩa là người kiểm thử không xem xét đến việc thực hiện bên trong của chương trình được thực thi như thế nào. Vì thế, kiểm thử hộp đen không cần phải do người lập trình thực hiện. Trong đa số các hãng công nghệ lớn trên thế giới đều có một nhóm làm công việc thiết kế trong khi một nhóm khác thì làm kiểm thử. Kiểm thử hệ thống dựa trên các rủi ro nên được dùng cùng với các kỹ thuật khác. Kiểm tra và kiểm thử mã chương trình trong khi thực thi kiểm thử cũng rất quan trọng. Cách kiểm thử này được gọi là kiểm thử hộp trắng và nó kiểm thử các kết quả ra của một chương trình với các số liệu đầu vào nhất định xem có phù hợp với thiết kế trong và sự thực thi của chương trình không. Thuật ngữ “hộp trắng” chỉ ra rằng người kiểm thử phải xem xét thật kỹ lưỡng việc thực thi bên trong chương trình được kiểm thử. 14 Thông thường, hầu hết các sai sót đều được phát hiện trong những pha kiểm thử đầu tiên này và rất dễ sửa chữa. Tuy nhiên, kiểm thử hộp đen mới là yếu tố căn bản đảm ảo cho chất lượng của hệ thống trước khi được chuyển giao. 1.2.3 Quá trình kiểm thử Chúng ta đã nói đến hai cách kiểm thử: Kiểm thử hộp đen và Kiểm thử hộp trắng. Việc kiểm thử được thực hiện như thế nào là tùy thuộc vào quá trình phát triển và bản chất của phần mềm được phát triển. Điều quan trọng là phải nghĩ ngay đến việc kiểm thử ngay khi dự án bắt đầu. Tức là ngay khi một ai đó đưa ra một yêu cầu thì phải có một người nào đó chịu trách nhiệm kiểm thử cho nó. Một yêu cầu không được kiểm thử sẽ bị bỏ qua và bị quên lãng. Kiểm thử là một công việc tương đối tỷ mẩn, mất nhiều thời gian và tiền của. Vì thế cần phải tiến hành lập kế hoạch cho quá trình kiểm thử sao cho đạt được kết quả tốt nhất. Kiểm thử được thực hiện trong tất cả các pha của quá trình phát triển nhưng các hoạt động lại thay đổi. Ở các giai đoạn ban đầu, việc kiểm thử do người lập trình thực hiện và bao gồm kiểm tra và kiểm thử đơn vị. Có hai cách tiếp cận có thể áp dụng cho qui trình kiểm thử: kiểm thử từ dưới lên (bottom-up) và kiểm thử từ trên xuống (top-down). Bottom-up tích hợp một số module sau khi được kiểm thử đơn vị thành các thành phần và các thành phần này sẽ được kiểm thử cho đến khi chúng ổn định. Sau đó, một số module nữa tiếp tục được thêm vào và hệ thống lại được kiểm thử lần nữa. Việc này được làm cho đến khi tất cả các module được tích hợp vào hệ thống. Kiểm thử bottom-up có thể được thực hiện ngay khi một số module hoàn thành và cần ghép với nhau. Tuy nhiên cách tiếp cận này tương đối chậm và người ta có cảm giác là đang kiểm thử trên bản mô phỏng chứ không phải 15 trên một hệ thống thật. Ngoài ra, không có một hệ thống thực nào lại hành động đúng như hệ thống mô phỏng. Cách tiếp cận top-down rất thích hợp trong trường hợp cần phải tích hợp nhiều hệ thống thành một hệ thống càng nhanh càng tốt. Sau đó, nếu có thể thì sẽ kiểm thử hệ thống từ giao diện người dùng. Cách tiếp cận top-down sẽ bắt đầu với những pha tích hợp. Điều đó đòi hỏi tất cả các module đều làm việc và qua được kiểm thử đơn vị. Sau đó, sẽ kiểm thử hệ thống như một tổng thể hoàn chỉnh. Các phương pháp kiểm thử trình bày trong luận văn này được phát triển cho cách tiếp cận top-down. 1.2.4 Kiểm thử và rủi ro Trong thực tế, công việc kiểm thử thường được tiến hành rất muộn khi dự án không còn nhiều thời gian và tiền bạc. Rút ngắn thời gian để nhanh chóng đưa sản phẩm ra thị trường và giảm giá thành là hai yếu tố rất quan trọng đối với các hãng phát triển phần mềm và do đó các hãng này sẽ không bao giờ có đủ tài nguyên để đáp ứng các yêu cầu này. Nếu hệ thống phải được chuyển giao đúng hạn thì rất nhiều thứ sẽ không được kiểm thử. Các nhà quản lý thường lựa chọn chuyển giao hệ thống đúng hạn thay vì chuyển giao một hệ thống hoàn chỉnh. Việc kiểm thử rất tốn kém và thường được dự toán rất thấp. Những thống kê gần đây cho thấy trong nhiều tổ chức phát triển phần mềm, việc chi phí cho kiểm thử phần mềm chiếm từ 30 tới 50% chi phí phát triển phần mềm. Tuy chi phí cao như vậy rồi mà nhiều người vẫn còn cho là phần mềm vẫn chưa được kiểm thử cẩn thận trước khi phân phối. Nếu dự toán chi phí một cách hợp lý thì nó sẽ ngốn phần lớn các nguồn lực từ phần còn lại của qui trình phát triển. Kết cục là các phần mềm đã không được kiểm thử một cách toàn diện và được chuyển giao trong tình trạng không đầy đủ chức năng. 16 Do các phần mềm ngày nay thường rất phức tạp và có kích thước lớn nên trong quá trình phát triển hệ thống không thể tránh khỏi các sai sót. Myers [6] đã đưa ra một ví dụ về một chương trình chỉ gồm có 20 dòng mã mà có thể có đến hơn hàng tỉ trạng thái khác nhau để kiểm thử. Kiểm thử được tất cả các trạng thái là một nhiệm vụ bất khả thi đối với một người kiểm thử. Một chương trình đơn giản đã khó như vậy thì những ứng dụng thương mại với hàng trăm nghìn dòng mã sẽ có bao nhiêu điều không chắc chắn. Sẽ luôn luôn tồn tại nhiều khiếm khuyết không bao giờ được nhận dạng và do đó sẽ tiềm ẩn rất nhiều rủi ro. Mặt khác, nhiều khiếm khuyết trong số này sẽ không bao giờ xuất hiện. Adam [1] đã công bố một số liệu chứng minh rằng chỉ một phần trăm nhỏ của những khiếm khuyết này gây ra hầu hết các vấn đề. Việc tìm thấy những lỗi này sẽ quan trọng hơn rất nhiều so với việc tìm thấy những lỗi khác. Những việc này tạo ra nhiều sức ép cho người kiểm thử. Bằng cách nhận dạng và phân loại các mối nguy hiểm và các chỉ số rủi ro, chúng ta có thể đảm bảo rằng với một khoảng thời gian và một lượng tài nguyên có hạn có thể giữ được mức rủi ro ở mức càng thấp càng tốt. 1.3 Kiểm thử dựa trên các rủi ro Việc phân tích rủi ro nhằm mục đích nhận dạng và đánh giá các chỉ số gây nguy hại tới độ an toàn của hệ thống. Phần này sẽ giới thiệu sơ lược về một số cách phân tích rủi ro: Phân tích sơ bộ các mối hiểm nguy (PHA – Preliminary Hazard Analysis), Phân tích các kiểu lỗi và hậu quả (FMEA – Failure Modes and Effect Analysis), Phân tích rủi ro và khả năng thực hiện (HazOp), và Phân tích theo kinh nghiệm. Sau đó sẽ xem xét có thể phòng ngừa những nguy hiểm này như thế nào. 17 1.3.1 Phân tích sơ bộ các mối nguy hiểm (PHA) Mọi phân tích rủi ro đều bắt đầu bằng việc nhận dạng các chướng ngại và các mối nguy hiểm. Việc này cần được thực hiện một cách có hệ thống. PHA được thực hiện ngay từ pha thiết kế. PHA sẽ cố tìm ra các mối nguy hiểm tiềm ẩn trong dự án để có thể loại trừ, giảm thiểu hoặc kiểm soát chúng trước khi quá muộn. Mỗi lỗi tiềm ẩn có thể có nhiều nguyên nhân và ảnh hưởng, và mỗi một nguyên nhân lại có thể có nhiều cách phòng ngừa. Ưu điểm của PHA là nó không đòi hỏi quá nhiều thông tin để thực hiện. Bảng 1.1 là một ví dụ về một bảng PHA. Nguy cơ Tìm thấy các chẩn đoán sai Nguyên nhân Ảnh hưởng chính Hành động phòng ngừa Các chẩn đoán sai đã được thêm vào Làm chết hoặc làm đau bệnh nhân Kiểm tra hai lần tất cả những thông tin về bệnh nhân đã được chèn vào Bảng 1.1 Bảng PHA 1.3.2 Phân tích các kiểu lỗi và hậu quả (FMEA) FMEA thường được thực hiện trong quá trình xây dựng phần mềm với mục đích nhận ra các thành phần của hệ thống cần được nâng cấp để đáp ứng được các yêu cầu về an toàn và tin cậy của hệ thống. FMEA chủ yếu là phân tích chất lượng, trừ những trường hợp nghiêm trọng mà có thể chỉ ra nhờ xác suất. Bước đầu tiên là tìm xem một đơn vị có thể mắc lỗi như thế nào và xác định ảnh hưởng của lỗi. Bước thứ hai là đánh giá mức độ nghiêm trọng của loại lỗi này. FMEA là một phương pháp dễ thực hiện nhưng nó đòi hỏi một kiến thức vững vàng về hệ thống. Một vấn đề khác nữa là nó chỉ hoạt động được nếu các lỗi này độc lập với nhau. Bảng 1.2 là một ví dụ về cấu trúc của một bảng FMEA.
- Xem thêm -

Tài liệu liên quan