Phương pháp nghiên cứu Chúng tôi sử dụng các phương pháp nghiên cứu sau khi thực hiện luận án: Phương pháp nghiên cứu mô hình hóa: dựa trên các giả thiết thực tế và nghiên cứu đã có,
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
LUẬN ÁN TIẾN SĨ KỸ THUẬT PHẦN MỀM
NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS.TS HUỲNH QUYẾT THẮNG
Hà Nội - 2015
Trang 2
LỜI CAM ĐOAN
Tôi xin cam đoan tất cả các nội dung trong luận án "Mô hình đánh giá độ tin cậy hệ thống phần mềm" là công trình nghiên cứu của riêng tôi Các số liệu, kết quả trong luận án là trung thực, trích dẫn đầy đủ và chưa từng được ai công bố trong bất kỳ công trình nào khác
Người hướng dẫn khoa học
PGS.TS Huỳnh Quyết Thắng
Hà Nội, ngày 24 tháng 10 năm 2015
Tác giả luận án
Nguyễn Hùng Cường
Trang 3LỜI CẢM ƠN
Lời đầu tiên, em xin chân thành cảm ơn Thầy hướng dẫn PGS.TS Huỳnh Quyết Thắng Thầy là người đã định hướng, chỉ đạo, giúp đỡ em trong toàn bộ quá trình thực hiện luận án này Là người đã hướng dẫn em từ khi học Cao học, biết được những lợi thế cũng như những hạn chế của học viên, Thầy đã hướng dẫn em trong việc lựa chọn hướng đi, tạo dựng cơ hội để em có thể học tập, nghiên cứu nhằm khẳng định bản thân thông qua việc hoàn thành được luận án này
Em xin gửi lời cảm ơn đến các thầy cô phản biện, các thầy cô trong hội đồng các cấp cũng như những nhà khoa học độc lập đã có những đóng góp, góp ý giúp đỡ cho quá trình làm việc của em
Em xin chân thành cảm ơn các thầy cô, anh chị là lãnh đạo và cán bộ giảng viên tại Viện Công nghệ Thông tin và Truyền thông, đặc biệt là tại Bộ môn Công nghệ phần mềm; Viện Đào tạo Sau Đại học thuộc Trường Đại học Bách Khoa Hà Nội đã giúp đỡ em trong quá trình thực hiện luận án Sự hỗ trợ của mọi người thực
sự đã giúp quá trình học tập và nghiên cứu của em được nhiều thuận lợi
Tôi xin gửi lời cảm ơn đến Ban Giám hiệu, tập thể trường Đại học Hùng Vương; lãnh đạo và tập thể đồng nghiệp khoa Toán - Công nghệ Nhà trường và khoa đã hỗ trợ, tạo điều kiện cho tôi trong quá trình làm việc cũng như học tập để tôi có thể đạt được những kết quả ngày hôm nay
Cuối cùng, con xin gửi lời cảm ơn đến gia đình, những người thân yêu và bạn bè đã đồng hành, chia sẻ và giúp đỡ rất nhiều về tình cảm, vật chất trong quá trình học tập, lao động và trưởng thành của bản thân
Mặc dù có nhiều cố gắng và nỗ lực trong quá trình làm việc nhưng do thời gian và kiến thức còn nhiều hạn chế, luận án có thể còn nhiều thiếu sót Tác giả rất mong nhận được sự đóng góp và góp ý quý giá của mọi người để hoàn thiện nội dung khoa học của luận án cũng như những hướng đi mở rộng sau này trong con đường học tập và làm việc tiếp theo
Trang 4MỤC LỤC
LỜI CAM ĐOAN II LỜI CẢM ƠN III MỤC LỤC IV DANH MỤC CÁC BẢNG X DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ XI DANH MỤC THUẬT NGỮ TIẾNG ANH XIII
MỞ ĐẦU XIV
1 Lý do chọn đề tài xiv
2 Mục tiêu nghiên cứu của luận án xiv
3 Đối tượng và phạm vi nghiên cứu xv
4 Phương pháp nghiên cứu xv
5 Nội dung luận án xv
6 Kết quả nghiên cứu, đóng góp khoa học của luận án xvii
CHƯƠNG 1 TỔNG QUAN 1
1.1 Các kiến thức toán học cơ sở sử dụng trong mô hình độ tin cậy 1
1.1.1.Phương pháp hợp lý cực đại ước lượng tham số 1
1.1.2.Tiến trình Markov 2
1.1.3.Hệ phương trình vi phân chủ Chapman-Kolmogorov 2
1.1.3.1.Hệ phương trình Chapman-Kolmogorov 2
1.1.3.2.Hệ phương trình vi phân chủ Chapman-Kolmogorov 3
1.1.4.Tiến trình Poisson 4
1.2 Độ tin cậy phần mềm 5
1.2.1.Khái niệm 5
1.2.2.Lịch sử quá trình nghiên cứu về mô hình độ tin cậy phần mềm 6
1.2.3.Một số khái niệm liên quan trong mô hình độ tin cậy phần mềm 7
1.2.4.Phân nhóm các mô hình đánh giá độ tin cậy phần mềm 8
1.2.4.1.Phương pháp phân nhóm của Phạm Hoàng 8
1.2.4.2.Phương pháp phân nhóm của Lyu 9
1.2.4.3.Phương pháp phân nhóm của Chengjie 9
1.2.4.4.Phương pháp phân nhóm theo mô hình cây phân cấp 9
Trang 51.3 Các hướng tiếp cận đánh giá độ tin cậy hệ thống phần mềm 10
1.3.1.Nhóm mô hình đánh giá độ tin cậy dựa trên phân tích tài nguyên dự án phát triển phần mềm 11
1.3.1.1.Độ đo Halstead 11
1.3.1.2.Độ đo độ phức tạp xoay vòng của McCabe 12
1.3.2.Nhóm mô hình đánh giá độ tin cậy dựa trên phân tích đặc tính của quá trình phát hiện lỗi trong quá trình phát triển phần mềm 13
1.3.2.1.Mô hình hạt giống lỗi của Mills 14
1.3.2.2.Mô hình Cai 14
1.3.2.3.Mô hình Tohma 16
1.4 Tổng hợp các nghiên cứu liên quan hiện có 19
1.4.1.Tiến trình Markov mô hình tiến trình gỡ lỗi phần mềm 19
1.4.1.1.Giả thiết chung của các mô hình 20
1.4.1.2.Mô hình Jelinski-Moranda 20
1.4.1.3.Mô hình Schick-Wolverton 21
1.4.1.4.Mô hình Schick-Wolverton cải tiến 22
1.4.1.5.Mô hình Goel-Okumoto Markov 22
1.4.1.6.Mô hình tỉ lệ xác định của Moranda 22
1.4.1.7.Đánh giá nhận xét các kết quả nghiên cứu 23
1.4.2.Tiến trình Poisson không đồng nhất mô hình độ tin cậy phần mềm 23
1.4.2.1.Xây dựng hệ phương trình hợp lý ước lượng tham số của mô hình 24
1.4.2.2.Nhóm mô hình tỉ lệ 26
1.4.2.3.Nhóm mô hình sử dụng hàm hình dạng S 29
1.4.2.4.Nhóm mô hình có chữa lỗi mang tính không hoàn hảo 31
1.4.2.5.Nhóm mô hình chữa lỗi mang tính không hoàn hảo hình dạng S 32
1.4.2.6.Đánh giá nhận xét các kết quả nghiên cứu 35
1.5 Các nhiệm vụ nghiên cứu trong luận án 35
CHƯƠNG 2 MÔ HÌNH HÓA ĐỘ TIN CẬY PHẦN MỀM DỰA TRÊN TIẾN TRÌNH MARKOV 37
2.1 Tiến trình Markov mô hình hóa tiến trình hoạt động của phần mềm 37
2.1.1.Kịch bản sử dụng tiến trình Markov đánh giá độ tin cậy 37
Trang 62.1.1.1.Nguyên lý áp dụng tiến trình Markov 37
2.1.1.2.Quy trình đánh giá độ tin cậy 38
2.1.2.Cài đặt thực nghiệm 39
2.1.2.1.Cài đặt thử nghiệm 1 39
2.1.2.2.Cài đặt thử nghiệm 2 41
2.1.2.3.Cài đặt thử nghiệm 3 43
2.2 Tiến trình Markov mô hình hóa tiến trình trẻ hóa của phần mềm 44
2.2.1.Sự trẻ hóa của hệ thống phần mềm 44
2.2.2.Phương thức đánh giá độ tin cậy, độ sẵn sàng và độ an toàn của hệ thống phần mềm trẻ hóa 45
2.2.2.1.Mô hình hóa hệ thống 45
2.2.2.2.Các độ đo chất lượng của hệ thống phần mềm 47
2.2.3.Tính toán các tham số của mô hình 48
2.2.3.1.Tính toán với điều khoản I 48
2.2.3.2.Tính toán với điều khoản II 50
2.2.4.Cài đặt thực nghiệm 52
2.2.4.1.Kết quả mô phỏng 1 52
2.2.4.2.Kết quả mô phỏng 2 56
2.2.4.3.Kết quả thực nghiệm trên hệ thống thi lập trình trực tuyến BKOJ 58
2.3 Kết chương 62
CHƯƠNG 3 MÔ HÌNH HÓA ĐỘ TIN CẬY PHẦN MỀM DỰA TRÊN TIẾN TRÌNH POISSON KHÔNG ĐỒNG NHẤT 64
3.1 Xây dựng phương thức so sánh các mô hình thuộc nhóm sử dụng tiến trình Poisson không đồng nhất và thử nghiệm 64
3.1.1.Các hàm độ đo tiêu chuẩn để so sánh 64
3.1.2.Phương thức tính toán độ đo tổng quát 65
3.1.2.1.Tính toán các giá trị của mỗi độ đo tiêu chuẩn cho các mô hình 66
3.1.2.2.Tính toán trọng số cho mỗi độ đo tiêu chuẩn 66
3.1.2.3.Tính giá trị đã được tính đến trọng số cho mỗi độ đo tiêu chuẩn 67
3.1.2.4.Tính giá trị độ đo tổng hợp 67
3.1.3.Cài đặt thực nghiệm 67
3.1.3.1.Các mô hình được thực nghiệm 68
Trang 73.1.3.2.Thực nghiệm trên dữ liệu phần mềm chiến thuật hải quân Hoa Kì 68
3.1.3.3.Thực nghiệm trên dữ liệu về hệ thống thao tác dữ liệu của IBM 69
3.1.3.4.Sự khác biệt giữa xếp hạng mô hình theo khả năng dự đoán và theo độ đo tổng hợp 69
3.2 Đánh giá khả năng áp dụng hàm hình dạng S tổng quát cho mô hình độ tin cậy phần mềm dựa trên tiến trình Poisson không đồng nhất 71
3.2.1.Hàm hình dạng S và ứng dụng trong mô hình hóa độ tin cậy phần mềm dựa trên tiến trình Poisson không đồng nhất 71
3.2.1.1.Các mô hình độ tin cậy phần mềm dựa trên tiến trình Poisson không đồng nhất có hàm tỉ lệ phát hiện lỗi hình dạng S 71
3.2.1.2.Đề xuất hàm tỷ lệ phát hiện lỗi có hình dạng S tổng quát 72
3.2.2.Những tồn tại của các độ tin cậy phần mềm dựa trên tiến trình Poisson không đồng nhất có hàm tỉ lệ phát hiện lỗi hình dạng S 73
3.2.2.1.Tính tăng của các hàm biểu diễn tổng số lỗi của các mô hình sử dụng hàm tỉ lệ phát hiện lỗi hình dạng S 73
3.2.2.2.Khó khăn tính toán toán học sơ cấp khi xây dựng mô hình mới 74
3.2.3.Tính toán toán học cho mô hình độ tin cậy phần mềm NHPP cải tiến 75
3.2.3.1.Các tính toán tổng quát 75
3.2.3.2.Hàm biểu diễn tổng số lỗi là hằng số 76
3.2.3.3.Hàm biểu diễn tổng số lỗi theo thời gian 77
3.2.4.Các tính toán vi phân của hai mô hình 78
3.2.4.1.Mô hình thứ nhất 78
3.2.4.2.Mô hình thứ hai 79
3.2.5.Cài đặt thực nghiệm 80
3.2.5.1.Môi trường cài đặt thực nghiệm 80
3.2.5.2.Cài đặt tính toán hai mô hình trên ngôn ngữ Matlab 80
3.2.5.3.Kết quả thực nghiệm ước lượng tham số mô hình thứ nhất 81
3.2.5.4.Kết quả thực nghiệm ước lượng tham số mô hình thứ hai 81
3.3 Kết chương 82
CHƯƠNG 4 MỘT SỐ ỨNG DỤNG THỰC TẾ LIÊN QUAN TỚI MÔ HÌNH ĐỘ TIN CẬY PHẦN MỀM 84
4.1 Xây dựng một số công cụ phần mềm hỗ trợ mô hình hóa độ tin cậy 85
Trang 84.1.1.Phần mềm dự đoán độ tin cậy theo mô hình PNZ cho phần mềm xây dựng
theo kiến trúc hướng thành phần 85
4.1.1.1.Kịch bản dự đoán độ tin cậy của hệ thống được xây dựng theo kiến trúc hướng thành phần 85
4.1.1.2.Cấu trúc phần mềm 86
4.1.1.3.Hướng dẫn sử dụng phần mềm 87
4.1.1.4.Một vài trường hợp thử nghiệm 88
4.1.2.Phần mềm cài đặt các mô hình thuộc các nhóm dựa trên tiến trình Markov và tiến trình Poisson không đồng nhất 91
4.1.2.1.Biểu đồ lớp và giao diện chương trình 92
4.1.2.2.Cách thức sử dụng phần mềm 93
4.1.3.Các địa chỉ công bố các phần mềm đã xây dựng 94
4.2 Ứng dụng độ tin cậy trong chính sách phát hành phần mềm tối ưu 94
4.2.1.Tính toán chi phí phát hành sử dụng yếu tố rủi ro dựa trên mô hình PNZ 94 4.2.1.1.Mô hình PNZ và tham số của mô hình dựa trên dữ liệu NTDS 94
4.2.1.2.Chi phí phát hành sử dụng yếu tố rủi ro dựa trên mô hình PNZ 95
4.2.2.Cài đặt thực nghiệm 96
4.2.2.1.Tính toán chi phí phát hành tối ưu với chi phí thực tại Hoa Kì 96
4.2.2.2.Tính toán chi phí phát hành tối ưu với chi phí thực tại Việt Nam 97
4.2.2.3.Đánh giá ảnh hưởng của các tham số lên giá trị của 𝐓 ∗ 99
4.3 Kỹ thuật tối ưu mã nguồn áp dụng tập luật trên cây cú pháp trừu tượng và đánh giá ảnh hưởng đến độ tin cậy phần mềm 102
4.3.1.Các kĩ thuật cơ bản trong phát triển ứng dụng Java 102
4.3.1.1.Tối ưu mã nguồn 102
4.3.1.2.Lập trình an toàn 103
4.3.1.3.Cây cú pháp trừu tượng 103
4.3.2.Luật và việc áp dụng trên cây cú pháp trừu tượng 104
4.3.2.1.Xây dựng các luật 105
4.3.2.2.Sử dụng luật phát hiện các thành phần tiềm năng trong mã nguồn 105 4.3.2.3.Sử dụng các luật để thay đổi mã nguồn 105
4.3.3.Cài đặt thực nghiệm 106
4.3.3.1.Mô tả môi trường 106
Trang 94.3.3.2.Mô tả cấu trúc của Eclipse plug-in 106
4.3.3.3.Kết quả thực nghiệm 107
4.4 Kết chương 109
KẾT LUẬN VÀ KIẾN NGHỊ 111
Kết luận 111
Đóng góp khoa học của luận án 112
Định hướng phát triển 113
TÀI LIỆU THAM KHẢO 114
DANH MỤC CÁC CÔNG TRÌNH ĐÃ CÔNG BỐ CỦA LUẬN ÁN 123
PHỤ LỤC 124
Phụ lục A Cài đặt tính toán hai mô hình trên ngôn ngữ Matlab 124
A.1 Mô hình thứ nhất 124
A.2 Mô hình thứ hai 126
Phụ lục B Các tập dữ liệu được dùng để phân tích các mô hình thuộc nhóm dựa trên tiến trình Poisson không đồng nhất 130
B.1 Gói dữ liệu kiểm thử online của Ohba (#1) 130
B.2 Hệ thống truyền thông online của Phạm Hoàng (#2) 130
B.3 Tập dữ liệu của Misra (#3) 131
B.4 Hệ thống dữ liệu chiến thuật Hải quân Hoa Kỳ của Goel (#4) 131
B.5 Dữ liệu về dự án phần mềm của công ty Tandem (#5) 132
B.6 Gói dữ liệu phần mềm online phát triển bởi IBM (#6) 133
B.7 Dự án hệ thống T của AT&T của Ehrlich (#7) 133
B.8 Dữ liệu từ hệ thống điều khiển thời gian thực của Tohma (#8) 133
B.9 Dữ liệu từ hệ thống điều khiển thời gian thực của Lyu (#9) 135
B.10.Dữ liệu điều khiển và ra lệnh thời gian thực của Musa (#10) 136
B.11.Dữ liệu kiểm thử hệ thống truyền thông của Zhang (#11) 136
Trang 10DANH MỤC CÁC BẢNG
Bảng 0.1 Cấu trúc luận án xvi
Bảng 1.1 Độ phức tạp McCabe của một số cấu trúc cơ bản 12
Bảng 1.2 Các kí hiệu sử dụng trong nhóm mô hình Poisson 24
Bảng 2.1 Thông tin về cuộc thi ảo triển khai trên BKOJ 60
Bảng 3.1 Tham số của các mô hình với dữ liệu NTDS 68
Bảng 3.2 Giá trị độ đo tiêu chuẩn của 6 mô hình với dữ liệu NTDS 68
Bảng 3.3 Giá trị độ đo tổng hợp của 6 mô hình với dữ liệu NTDS 69
Bảng 3.4 Tham số các mô hình với dữ liệu của Ohba 69
Bảng 3.5 Xếp hạng khả năng dự đoán của các mô hình 70
Bảng 4.1 Các kí hiệu trong mô hình tính toán chi phí phát hành tối ưu 95
Bảng 4.2 Thời gian chạy của các phương thức của BKProfile 109
Bảng B.1 Gói dữ liệu kiểm thử online của Ohba (1980) (#1) 130
Bảng B.2 Hệ thống truyền thông online của Pham (2000) (#2) 131
Bảng B.3 Tập dữ liệu của Misra (1983) (#3) 131
Bảng B.4 Hệ thống dữ liệu chiến thuật Hải quân Hoa Kỳ của Goel (1979) (#4) 132 Bảng B.5 Dữ liệu về dự án phần mềm của công ti Tandem (1996) (#5) 132
Bảng B.6 Gói dữ liệu phần mềm online phát triển bởi IBM (1984)(#6) 133
Bảng B.7 Dự án hệ thống T của AT&T của Ehrlich (1993) (#7) 133
Bảng B.8 Dữ liệu từ hệ thống điều khiển thời gian thực của Tohma (1991) (#8) 134 Bảng B.9 Dữ liệu từ hệ thống điều khiển thời gian thực của Lyu (1996) (#9) 135
Bảng B.10 Dữ liệu điều khiển và ra lệnh thời gian thực của Musa (1987)(#10) 136 Bảng B.11 Dữ liệu kiểm thử hệ thống truyền thông của Zhang (2002) (#11) 136
Trang 11DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ
Hình 1.1 Phân loại các mô hình độ tin cậy phần mềm theo cây phân cấp 10
Hình 1.2 Tiến trình Markov của mô hình Jelinski Moranda 20
Hình 1.3 Đồ thị hàm sigmoid (hàm logistic chuẩn) 30
Hình 2.1 Tiến trình Markov của thử nghiệm 1 40
Hình 2.2 Mô hình hóa hệ thống của thử nghiệm 2 41
Hình 2.3 Tiến trình Markov của thử nghiệm 2 42
Hình 2.4 Tiến trình Markov của thử nghiệm 3 43
Hình 2.5 Mô hình trạng thái của hệ thống trẻ hóa 45
Hình 2.6 Các trạng thái khi thực hiện trẻ hóa 46
Hình 2.7 Tiến trình Markov với 𝑡 ≤ 𝛿 49
Hình 2.8 Tiến trình Markov với 𝑡 > 𝛿 51
Hình 2.9 Độ sẵn sàng dưới điều khoản I 53
Hình 2.10 Độ sẵn sàng dưới điều khoản II 53
Hình 2.11 Độ an toàn dưới điều khoản I với 𝛾𝑟 = 0.55 54
Hình 2.12 Độ an toàn dưới điều khoản I khi 𝛾𝑟 thay đổi 54
Hình 2.13 Độ an toàn dưới điều khoản II khi 𝛾𝑟 thay đổi 55
Hình 2.14 Độ tin cậy dưới điều khoản I và II khi 𝛾𝑟 = 0.55 55
Hình 2.15 Độ sẵn sàng dưới hai điều khoản khi 𝛼 thay đổi 56
Hình 2.16 Độ an toàn dưới hai điều khoản khi 𝛼 thay đổi 57
Hình 2.17 Độ tin cậy dưới hai điều khoản khi 𝛼 thay đổi 58
Hình 2.18 Sơ đồ khối của hệ thống BKOJ 59
Hình 2.19 Triển khai BKOJ trên hệ thống BKCloud 59
Hình 2.20 Độ sẵn sàng của BKOJ dưới điều khoản I 61
Hình 2.21 Độ an toàn của BKOJ dưới điều khoản I 61
Hình 2.22 Độ tin cậy của BKOJ dưới điều khoản I 61
Hình 3.1 Hình dạng của hàm hình dạng S tổng quát với 𝑚 = 0.05 và 𝑚 = 0.7 72
Hình 3.2 Tính tăng của một số hàm biểu diễn tổng số lỗi của hệ thống 74
Hình 4.1 Kịch bản dự đoán độ tin cậy phần mềm 86
Hình 4.2 Biểu đồ lớp của phần mềm dự đoán độ tin cậy 87
Hình 4.3 Giao diện sử dụng của phần mềm 88
Hình 4.4 Kiểm tra tính xác thực của file đầu vào WebScan.xml 88
Hình 4.5 Kiểm tra tính không xác thực của file đầu vào WebScan.xml 89
Trang 12Hình 4.6 Tính toán giá trị dự đoán độ tin cậy hệ thống WebScan 89
Hình 4.7 Kiểm tra tính xác thực của file đầu vào ReportingService.xml 90
Hình 4.8 Kiểm tra tính không xác thực của file đầu vào ReportingService.xml 90
Hình 4.9 Tính toán giá trị dự đoán độ tin cậy hệ thống ReportingService 91
Hình 4.10 Biểu đồ lớp của phần mềm Software Reliability Evaluator 92
Hình 4.11 Giao diện phần mềm Software Reliability Evaluator 93
Hình 4.12 Giá trị của 𝐸[𝑇] theo 𝑇 với bộ tham số 1# bắt đầu từ ngày thứ 1 97
Hình 4.13 Giá trị của 𝐸[𝑇] theo 𝑇 với bộ tham số 1# trong các ngày 145-165 97
Hình 4.14 Giá trị của 𝐸[𝑇] theo 𝑇 với bộ tham số 2# bắt đầu từ ngày thứ 1 98
Hình 4.15 Giá trị của 𝐸[𝑇] theo 𝑇 với bộ tham số 2# trong các ngày 178-188 99
Hình 4.16 Giá trị của 𝑇 ∗ và 𝐸[𝑇] với bộ tham số 4#, 𝑘2 thay đổi 99
Hình 4.17 Giá trị của 𝑇 ∗ và 𝐸[𝑇] với bộ tham số 5#, 𝑘3 thay đổi 100
Hình 4.18 Giá trị của 𝑇 ∗ và 𝐸[𝑇] với bộ tham số 6#, 𝜇𝑌 thay đổi 101
Hình 4.19 Giá trị của 𝑇 ∗ và 𝐸[𝑇] với bộ tham số 7#, 𝑥 thay đổi 101
Hình 4.20 Cây cú pháp trừu tượng của hàm cài đặt thuật toán Euclide 104
Hình 4.21 Biểu đồ luồng dữ liệu của công cụ Eclipse plug-in 107
Hình 4.22 Kết quả thực nghiệm sử dụng CPU 108
Hình 4.23 Kết quả thực nghiệm sử dụng bộ nhớ 108
Trang 13DANH MỤC THUẬT NGỮ TIẾNG ANH
English word in thesis
Chapman-Kolmogorov Maximum Likehood Estimation MLE Phương pháp ước lượng
hợp lý cực đại
Non-homogeneous Poisson Process NHPP Tiến trình Poisson
không đồng nhất Ordinary Differential Equation ODE Phương trình vi phân thường
Remote Method Invocation RMI
Remote Procedure Call RPC
Software Reliability Modeling SRM Mô hình độ tin cậy phần mềm
Trang 14MỞ ĐẦU
1 Lý do chọn đề tài
Đề tài luận án được lựa chọn với những lý do sau:
Thứ nhất, độ tin cậy là một thuộc tính quan trọng để đánh giá phần mềm Theo tiêu chuẩn ISO/IEC 25010 năm 2011 về công nghệ hệ thống và phần mềm, độ tin cậy là một trong tám thuộc tính chính của chất lượng phần mềm Giá trị độ đo độ tin cậy phần mềm là một thông số quan trọng được sử dụng trong nhiều pha khác nhau của quá trình phát triển sản phẩm phần mềm: lập trình, gỡ lỗi, phát hành và bảo trì Việc sử dụng thông số này giúp gia tăng chất lượng cũng như hỗ trợ các thao tác ra quyết định trong các pha đó
Thứ hai, thao tác đánh giá sẽ đưa ra độ đo độ tin cậy phần mềm để người phân tích có thể sử dụng trong thực tế Hiện tại có hai hướng tiếp cận chính trong đo lường và xác định độ tin cậy phần mềm:
Dự đoán độ tin cậy phần mềm: từ các thông số của hệ thống hoặc dự án phát triển sản phẩm phần mềm, dựa vào các kĩ thuật dự đoán nhằm ước tính giá trị
độ đo độ tin cậy phần mềm
Đánh giá độ tin cậy phần mềm: từ các dữ liệu thực nghiệm của các pha trong quá trình phát triển sản phẩm phần mềm, dựa vào các kĩ thuật đánh giá nhằm tính toán giá trị độ đo độ tin cậy phần mềm
Các nghiên cứu trong luận án chủ yếu tập trung vào hướng tiếp cận đánh giá
độ tin cậy
Thứ ba, mô hình hóa là phương thức dùng để đánh giá độ tin cậy của phần mềm Các nghiên cứu tập trung vào lĩnh vực mô hình hóa độ tin cậy phần mềm đã được triển khai từ thập niên 1970 đến nay, sử dụng các kĩ thuật và lý thuyết toán học khác nhau Các nghiên cứu đó giải quyết hai vấn đề chính:
Xây dựng mô hình toán học nhằm mô hình hóa độ tin cậy phần mềm
Xây dựng kịch bản nhằm áp dụng các mô hình, kĩ thuật để đo lường, xác định
2 Mục tiêu nghiên cứu của luận án
Từ ứng dụng thực tế của độ tin cậy phần mềm, luận án tập trung vào các mục tiêu:
Xây dựng các mô hình toán học sử dụng để tính toán độ tin cậy phần mềm, gồm cách thức xây dựng mô hình và các tính toán lý thuyết toán học
Đề xuất các kịch bản nhằm áp dụng các mô hình toán học độ tin cậy phần mềm
Trang 15 Đề xuất và xây dựng các phương thức nhằm ứng dụng độ tin cậy phần mềm trong thực tế
3 Đối tượng và phạm vi nghiên cứu
Các nghiên cứu trong luận án tập trung vào các đối tượng và phạm vi nghiên cứu sau nằm trong các lĩnh vực sau:
Đối tượng nghiên cứu:
- Mô hình toán học lý thuyết độ tin cậy phần mềm
- Cách thức áp dụng mô hình độ tin cậy phần mềm
- Ứng dụng của mô hình độ tin cậy phần mềm
4 Phương pháp nghiên cứu
Chúng tôi sử dụng các phương pháp nghiên cứu sau khi thực hiện luận án:
Phương pháp nghiên cứu mô hình hóa: dựa trên các giả thiết thực tế và
nghiên cứu đã có, chúng tôi đề xuất việc áp dụng những hàm toán học mới trong xây dựng các mô hình độ tin cậy hệ thống phần mềm
Phương pháp nghiên cứu giả thuyết: từ các suy luận, phỏng đoán, xây dựng
nên các mô hình mới và đánh giá giá trị của những mô hình đó thông qua cài
đặt thực nghiệm
Phương pháp nghiên cứu thực nghiệm: cài đặt thực tế các mô hình, phương
thức được đề xuất
Phương pháp nghiên cứu tham khảo ý kiến chuyên gia:
- Đánh giá tính khả thi của các mô hình mới
- Sử dụng sự hỗ trợ của Matlab giải hệ phương trình hợp lý khi giải mô hình
- Triển khai ý tưởng, cài đặt thực nghiệm và hoàn thiện công bố khoa học
5 Nội dung luận án
Nội dung của luận án bao gồm 8 phần chính, trong đó có 4 chương nhằm trình bày cụ thể các nội dung nghiên cứu, bao gồm:
Chương 1: Nêu các khái niệm cơ bản, làm nền tảng cho các nội dung nghiên
cứu trong các chương sau Trình bày hiện trạng và các nghiên cứu đã có về lĩnh vực
độ tin cậy phần mềm, cũng chính là cơ sở cho công việc nghiên cứu của luận án Từ
đó cung cấp cái nhìn tổng quan ban đầu cho việc thực hiện nghiên cứu của luận án
Trang 16Chương 2: Trình bày cách tiếp cận sử dụng tiến trình Markov trong mô hình
hóa độ tin cậy phần mềm Tiến trình Markov là tiến trình phi kí ức được sử dụng để
mô hình hóa các trạng thái của hệ thống, do đó luận án giới thiệu hai cách tiếp cận
mô hình hóa khác nhau: (1) Tiến trình Markov mô hình hóa trạng thái hoạt động đơn thuần của hệ thống; (2) Tiến trình Markov mô hình hóa trạng thái hoạt động trong quá trình trẻ lại của hệ thống
Chương 3: Trình bày cách tiếp cận sử dụng tiến trình Poisson không đồng
nhất trong mô hình hóa độ tin cậy phần mềm Chương 3 trình bày các nghiên cứu hiện có về những mô hình thuộc nhóm sử dụng tiến trình Poisson không đồng nhất,
từ đó so sánh các mô hình Trọng tâm của chương cũng như là trọng tâm của luận
án là việc đánh giá khả năng ứng dụng hàm hình dạng S tổng quát trong mô hình
hóa độ tin cậy phần mềm dựa trên tiến trình Poisson không đồng nhất
Chương 4: Trình bày các vấn đề liên quan đến ứng dụng độ tin cậy phần
mềm trong thực tế, bao gồm những nội dung sau: (1) Cung cấp một số công cụ trong xác định và dự đoán độ đo độ tin cậy phần mềm; (2) Sử dụng độ đo độ tin cậy trong xây dựng mô hình tính toán chi phí phát hành tối ưu; (3) Phân tích các kĩ thuật tối ưu hóa mã nguồn và lập trình an toàn trong Java
Bảng 0.1 Cấu trúc luận án
Nội dung
Các tài liệu tham khảo chính sử dụng
Công bố khoa học liên quan
Đóng góp khoa học liên quan Chương 1 Tổng quan
1.1 Các kiến thức toán học cơ sở
sử dụng trong mô hình độ tin cậy [59], [13]
1.4 Tổng hợp các nghiên cứu liên
quan hiện có
[6], [7], [2], [24], [26], [28], [29], [51], [55], [53], [60], [61], [69], [71], [80], [81], [98], [100]
1.5 Các nhiệm vụ nghiên cứu trong
luận án
Chương 2 Mô hình hóa độ tin cậy phần mềm dựa trên tiến trình Markov
2.1 Tiến trình Markov mô hình hóa
tiến trình hoạt động của phần mềm [51], [55], [97] Số 2 Đóng góp
khoa học thứ nhất
2.2 Tiến trình Markov mô hình hóa
tiến trình trẻ hóa của phần mềm
[18], [48], [54], [78], [83], [94], [96]
Số 3
Chương 3 Mô hình hóa độ tin cậy phần mềm dựa trên tiến trình Poisson
không đồng nhất
3.1 Xây dựng phương thức so sánh [6], [26], [37], Số 5 Đóng góp
Trang 17các mô hình thuộc nhóm sử dụng tiến
hình dạng S tổng quát cho mô hình độ
tin cậy phần mềm dựa trên tiến trình
Poisson không đồng nhất
[26], [28], [29], [53], [60], [61] Số 6
Chương 4 Một số ứng dụng thực tế liên quan tới mô hình độ tin cậy phần mềm
4.1 Xây dựng một số công cụ phần
Đóng góp khoa học thứ ba
4.2 Ứng dụng độ tin cậy trong chính
sách phát hành phần mềm tối ưu
[1], [10], [14], [15] , [26], [29], [47]
Số 4
4.3 Kỹ thuật tối ưu mã nguồn áp
dụng tập luật trên cây cú pháp trừu
tượng và đánh giá ảnh hưởng đến độ
tin cậy phần mềm
[3], [16], [26], [33], [34], [72], [79], [87]
Số 1
Trong Bảng 0.1 trình bày cấu trúc của luận án, bao gồm tài liệu tham khảo chính, sử dụng trong các nội dung nghiên cứu, các công bố khoa học trực tiếp liên quan đến từng nội dung và các đóng góp khoa học trong luận án
6 Kết quả nghiên cứu, đóng góp khoa học của luận án
Trong quá trình nghiên cứu và hoàn thành luận án, chúng tôi đã công bố 6 bài báo và kỷ yếu tại các tạp chí và hội nghị chuyên ngành trong nước và quốc tế Kết quả nghiên cứu của luận án đã góp phần phát triển lĩnh vực mô hình độ tin cậy
hệ thống phần mềm Chúng tôi liệt kê những đóng góp khoa học chính của luận án như sau:
Thứ nhất: Việc nghiên cứu các hướng tiếp cận sử dụng tiến trình Markov trong mô
hình hóa độ tin cậy phần mềm, bao gồm:
(1) Xây dựng quy trình hoàn chỉnh đánh giá độ tin cậy phần mềm dựa trên tiến trình Markov khi mô hình quá trình hoạt động của phần mềm: tiến trình hoạt động của phần mềm, xác định được trạng thái hoạt động bình thường của phần mềm, sử dụng các tính toán toán học để xác định được xác suất phần mềm ở trạng thái hoạt động bình thường từ đó xây dựng mô hình: (i) Các trạng thái hoạt động của phần mềm, bao gồm các trạng thái trong quá trình hoạt động, trạng thái hoạt động bình thường và trạng thái thất bại (ii) Các phép chuyển trạng thái; Từ đó thay vào các công thức đã có sẽ thu được giá trị độ đo độ tin cậy cần tính toán Tiến hành thực nghiệm đánh giá trên các bộ dữ liệu cơ bản đã cung cấp những kết quả hoàn toàn phù hợp
(2) Áp dụng mô hình quá trình trẻ hóa phần mềm dựa trên tiến trình Markov, phân
chia thành hai trường hợp và mô hình hóa toán học dưới hai điều khoản khác nhau Khai triển cụ thể việc giải phương trình Chapman-Kolmogorov, từ đó tính toán được các công thức cho các tham số liên quan tới chất lượng phần mềm và các tính
Trang 18toán về lý thuyết cho các trường hợp tham số nhận các giá trị khác nhau Tiến hành thực nghiệm trên hệ thống thực BKOJ để đánh giá phương pháp đề xuất
Thứ hai: Việc nghiên cứu các hướng tiếp cận sử dụng tiến trình Poisson không
đồng nhất trong mô hình hóa độ tin cậy phần mềm, bao gồm:
(1) Đánh giá sự khác biệt khi sử dụng độ đo tổng hợp và khả năng dự đoán trong đánh giá các mô hình độ tin cậy hệ thống phần mềm dựa trên tiến trình Poisson không đồng nhất: các mô hình trong nhóm mô hình độ tin cậy dựa trên phân phối Poisson không đồng nhất khác nhau ở các giả thiết khi xây dựng mô hình, phản ánh thông qua cặp hàm 𝑎(𝑡), 𝑏(𝑡) và hàm đặc trưng 𝑚(𝑡) Xây dựng độ đo tổng quát dựa trên các hàm toán học Tiến hành thực nghiệm trên 9 bộ dữ liệu chuẩn Các kết quả thực nghiệm cho thấy sự khác biệt trong xếp hạng mô hình khi sử dụng độ đo tổng quát này và khả năng dự đoán của mô hình về thời điểm thất bại tiếp theo
(2) Đánh giá việc áp dụng hàm hình dạng S với 4 tham số trong xây dựng mô hình
độ tin cậy hệ thống phần mềm dựa trên tiến trình Poisson không đồng nhất: phát triển từ một hàm hình dạng S đơn giản hơn với 3 tham số, chúng tôi đề xuất hàm hình dạng S tổng quát hơn với 4 tham số Dựa trên hàm hình dạng S tổng quát này, chúng tôi đã xây dựng 2 mô hình mới thuộc nhóm các mô hình dựa trên tiến trình Poisson không đồng nhất Các kết quả thực nghiệm cho thấy, với một số bộ dữ liệu,
cả 2 mô hình đều hội tụ về mô hình cơ bản nhất Goel-Okumoto
Thứ ba: Việc xây dựng một số công cụ phần mềm cài đặt các mô hình độ tin cậy
Xây dựng các kịch bản, phương thức trong dự đoán, đánh giá cũng như ứng dụng thực tế độ tin cậy phần mềm: (1) Sử dụng độ tin cậy trong mô hình tính toán chi phí phát hành tối ưu có tính đến yếu tố rủi ro (2) Kỹ thuật tối ưu mã nguồn áp dụng tập luật trên cây cú pháp trừu tượng và đánh giá ảnh hưởng đến độ tin cậy phần mềm
Trang 19CHƯƠNG 1 TỔNG QUAN
Chương 1 giới thiệu các kiến thức nền tảng được chúng tôi tìm hiểu và sử dụng trong quá trình thực hiện nghiên cứu của luận án Mục 1.1 cung cấp các kiến thức toán học được sử dụng trong việc mô hình độ tin cậy phần mềm Mục 1.2 giới thiệu khái niệm độ tin cậy phần mềm và các khái niệm liên quan Mục 1.3 giới thiệu các nghiên cứu hiện có liên quan đến mô hình độ tin cậy phần mềm Mục 1.4 đánh giá các nghiên cứu hiện có, từ đó chúng tôi đề xuất các nhiệm vụ nghiên cứu của luận án trong mục 1.5
1.1 Các kiến thức toán học cơ sở sử dụng trong mô hình độ tin cậy
1.1.1 Phương pháp hợp lý cực đại ước lượng tham số
Phương pháp "hợp lý cực đại (maximum likelihood estimation - MLE)" là
một trong những kỹ thuật hữu ích nhất nhằm ước lượng tham số của một mô hình xác suất do Fisher đề xuất năm 1912 [59] Trong phương pháp này, phép ước lượng tham số dựa trên việc xác định hàm hợp lý của mô hình được định nghĩa như sau
Định nghĩa Hàm hợp lý (likehood)
Cho 𝑋1, 𝑋2, ⋯ , 𝑋𝑛 là mẫu ngẫu nhiên của quần thể 𝑋 với hàm mật độ xác suất (hoặc hàm khối xác suất) 𝑓𝑋(𝑥, 𝜃) phụ thuộc vào tham số chưa biết 𝜃 Khi đó hàm hợp lý của mẫu là:
𝐿(𝜃) = ∏ 𝑓𝑋(𝑋𝑘, 𝜃)
𝑛
𝑘=1
(1.1)
Ngoài ra, để thuận tiện khi thực hiện các tính toán toán học, chúng ta có thể
sử dụng hàm "loga-hợp lý (log-likehood)" log 𝐿(𝜃), chính là hàm loga của hàm hợp
lý Khi có được hàm hợp lý với tham số 𝜃, chúng ta có phương pháp hợp lý cực đại nhằm ước lượng tham số này
Định nghĩa Ước lượng hợp lý cực đại
Ước lượng hợp lý cực đại, 𝜃ML, của tham số 𝜃 là giá trị của 𝜃 để hàm hợp lý đạt giá trị cực đại
Việc tìm giá trị 𝜃ML được thực hiện bằng các kĩ thuật giải tích sơ cấp đơn giản trong khảo sát hàm số Chúng ta có thể xét phương trình hợp lý thu được bằng
cách xét vi phân hàm L theo biến 𝜃 bằng 0, tức phương trình 𝜕𝐿
𝜕𝜃= 0 Nếu tham số
𝜃 = {𝜃1, 𝜃2, … , 𝜃𝑘} là một vector 𝑘 chiều các tham số, ước lượng của 𝜃 có thể thu được bằng cách giải hệ phương trình hợp lý bao gồm các phép xét vi phân của 𝐿 theo từng biến 𝜃𝑖 bằng 0 Phương pháp hợp lý cực đại là một trong những phương pháp ước lượng tham số phổ biến nhất với nhiều ứng dụng trong hàng loạt lĩnh vực thực tế khác nhau Trong luận án này, chúng tôi sử dụng phương pháp hợp lý cực đại nhằm ước lượng tham số cho mô hình xác suất sử dụng phân phối mũ và phân phối Poisson tương ứng tại các chương 2 và chương 3
Trang 201.1.2 Tiến trình Markov
Tiến trình Markov là một tiến trình có tính chất "phi kí ức" (memoryless)
[59] Nói cách khác, xác suất xảy ra một trạng thái trong tương lai của tiến trình chỉ phụ thuộc vào trạng thái hiện tại mà không phụ thuộc vào các trạng thái khác trong quá khứ Chúng ta có định nghĩa sau
Định nghĩa Tiến trình Markov
Tiến trình Markov là tiến trình ngẫu nhiên có các tính chất sau:
Số khả năng đầu ra của mỗi trạng thái là hữu hạn
Đầu ra của mỗi trạng thái chỉ phụ thuộc vào đầu ra của trạng thái kề trước:
Pr(𝑋𝑛 = 𝑥𝑛|𝑋𝑛−1 = 𝑥𝑛−1, 𝑋𝑛−2 = 𝑥𝑛−2, ⋯ , 𝑋0 = 𝑥0)
= Pr(𝑋𝑛 = 𝑥𝑛|𝑋𝑛−1 = 𝑥𝑛−1) (1.2)
Các xác suất chuyển trạng thái của mô hình là hằng số theo thời gian
Một tiến trình Markov được đặc trưng bởi các thành phần:
- Tập hợp các trạng thái 𝑆 = {𝑆1, 𝑆2, … , 𝑆𝑛}
- Ma trận xác suất chuyển trạng thái 𝑀𝑛×𝑛 = {𝑚𝑖𝑗|𝑚𝑖𝑗 = Pr(𝑆𝑖 → 𝑆𝑗)}
Với tính liên tục và rời rạc cho hai chiều thời gian và trạng thái, chúng ta có một số tiến trình Markov sau [59]:
Không gian trạng thái hữu hạn
hoặc đếm được Không gian trạng thái liên tục
Một số tiến trình liên tục có tính chất Markov,
ví dụ tiến trình Wiener Một trong những tiến trình ngẫu nhiên thời gian rời rạc được biết đến nhiều
nhất là "xích Markov (Markov chain)" Trong luận án, chúng tôi thực hiện các
nghiên cứu trong đó sử dụng tiến trình Markov để mô hình quá trình hoạt động bình thường và quá trình trẻ hóa của phần mềm thuộc chương 2
1.1.3 Hệ phương trình vi phân chủ Chapman-Kolmogorov
Hệ phương trình chủ Chapman-Kolmogorov là hệ phương trình vi phân mô
tả sự thay đổi của xác suất các trạng thái của tiến trình Markov trạng thái rời rạc
thời gian liên tục [13] Ở đây chúng tôi sử dụng cụm từ “chủ Chapman-Kolmogorov”
vì hệ phương trình chủ “master equations” được xây dựng như là một trường hợp
đặc biệt cho hệ phương trình Chapman-Kolmogorov khi thời gian của tiến trình Markov là liên tục
1.1.3.1 Hệ phương trình Chapman-Kolmogorov
Xét tiến trình Markov thời gian rời rạc 𝑡 ∈ 𝑇 = {𝑡1, 𝑡2, … } với tập trạng thái rời rạc 𝑛 ∈ 𝑆 = {1,2, … } Gọi 𝑝𝑛(𝑡𝑖) là xác suất hệ thống ở trạng thái 𝑛 tại thời
Trang 21điểm 𝑡𝑖 Gọi 𝑃𝑖𝑗(𝑡2|𝑡1) là xác suất có điều kiện hệ thống ở trạng thái 𝑖 ở thời điểm 𝑡2nếu hệ thống ở trạng thái 𝑗 ở thời điểm 𝑡1 Ta có xác suất hệ thống ở trạng thái 𝑛:
𝑝𝑛(𝑡2) = ∑ 𝑃𝑛𝑚(𝑡2|𝑡1) × 𝑝𝑚(𝑡1)
Hệ các phương trình có dạng (1.3), mỗi phương trình tương ứng với một trạng thái 𝑛 ∈ 𝑆 được gọi là hệ phương trình Chapman-Kolmogorov
1.1.3.2 Hệ phương trình vi phân chủ Chapman-Kolmogorov
Xét tiến trình Markov thời gian liên tục, trạng thái rời rạc với tập trạng thái
(1.4) trong đó:
Số hạng đầu tiên là xác suất hệ thống ở trạng thái 𝑛 tại thời điểm 𝑡 và không chuyển trạng thái trong khoảng thời gian ∆𝑡
Số hạng thứ hai là xác suất hệ thống ở một trạng thái 𝑘 nào đó tại thời điểm 𝑡
và chuyển sang trạng thái 𝑛 trong khoảng thời gian ∆𝑡
Số hạng thứ hai là xác suất hệ thống ở trạng thái 𝑛 tại thời điểm 𝑡 và chuyển sang trạng thái 𝑘 nào đó trong khoảng thời gian ∆𝑡
Biến đổi công thức (1.4) ta có:
𝑝𝑛(𝑡 + ∆𝑡) − 𝑝𝑛(𝑡)
∆𝑡 = ∑ 𝑃𝑘𝑛× 𝑝𝑘(𝑡)
𝑘≠𝑛
− ∑ 𝑃𝑛𝑘 × 𝑝𝑛(𝑡)𝑘≠𝑛
(1.5) Cho ∆𝑡 → 0, ta có phương trình vi phân:
𝜕𝑝𝑛(𝑡)
𝜕𝑡 = ∑ 𝑃𝑘𝑛× 𝑝𝑘(𝑡)
𝑘≠𝑛
− ∑ 𝑃𝑛𝑘 × 𝑝𝑛(𝑡)𝑘≠𝑛
(1.6)
Khi đó, hệ phương trình vi phân chủ Chapman-Kolmogorov là hệ 𝑘 phương trình có dạng như (1.6), trong đó mỗi phương trình liên quan đến một trạng thái của
hệ thống Bằng việc giải hệ phương trình này, chúng ta sẽ thu được các hàm 𝑝𝑠(𝑡)
là xác suất hệ thống ở trạng thái 𝑠 tại thời điểm 𝑡 Tuy nhiên trong thực tế, việc giải
hệ phương trình vi phân này là rất khó khăn Chúng ta có thể sử dụng các công cụ
để thực hiện giải gần đúng hệ này với điều kiện đầu cho trước:
Sử dụng phép biến đổi Laplace
Sử dụng hàm ODE(Ordinary Differential Equations) trong Matlab để giải gần đúng
Trong luận án, chúng tôi sử dụng hệ phương trình vi phân chủ Kolmogorov trong mô hình hóa tiến trình Markov tại mục 2.2
Trang 22Chapman-1.1.4 Tiến trình Poisson
Trước hết, chúng ta có khái niệm "tiến trình đếm (counting process)" [59]
Định nghĩa Tiến trình đếm
Tiến trình ngẫu nhiên {𝑁(𝑡), 𝑡 ≥ 0} được gọi là tiến trình đếm nếu 𝑁(𝑡) biểu diễn
số lần một sự kiện nào đó xảy ra đến thời điểm t và thỏa mãn các đặc điểm:
𝑁(𝑡) nhận giá trị nguyên
𝑁(𝑡) không giảm: nếu 𝑡1 < 𝑡2 thì 𝑁(𝑡1) ≤ 𝑁(𝑡2)
Xét các thời điểm 𝑡1 < 𝑡2, khi đó 𝑁(𝑡2) − 𝑁(𝑡1) biểu diễn số lần sự kiện xảy
ra trong khoảng thời gian (𝑡1, 𝑡2]
Từ khái niệm về tiến trình đếm, chúng ta có khái niệm tiến trình Poisson:
Định nghĩa Tiến trình Poisson
Tiến trình Poisson với tỉ lệ 𝜆 là tiến trình đếm {𝑁(𝑡), 𝑡 ≥ 0} nếu
Tổng các tiến trình Poisson cũng là một tiến trình Poisson
Hiệu hai tiến trình Poisson không phải là một tiến trình Poisson
Từ đó ta có khái niệm tiếp theo về tiến trình Poisson không đồng nhất [59]:
Định nghĩa Tiến trình Poisson không đồng nhất (non-homogeneous Poisson process)
Tiến trình Poisson không đồng nhất là một tiến trình Poisson trong đó tham số 𝜆 là một hàm của thời gian: 𝜆 = 𝜆(𝑡)
Từ đó có công thức cho xác suất số lượng sự kiện tới thời điểm 𝑡 là 𝑘 thông qua hàm 𝑚(𝑡) = 𝜆(𝑢)𝑑𝑢:
Trang 23hiện các nghiên cứu sử dụng tiến trình Poisson không đồng nhất để mô hình quá trình chữa lỗi của hệ thống phần mềm thuộc chương 3 và chương 4
1.2 Độ tin cậy phần mềm
Bên cạnh các công cụ toán học được sử dụng, vấn đề đặt ra khi thực hiện nghiên cứu là định nghĩa bài toán cần giải quyết Trong luận án, chúng tôi tập trung vào bài toán đánh giá và ứng dụng độ tin cậy phần mềm Trong mục này, chúng tôi giới thiệu một cách tổng quát về độ tin cậy phần mềm, bao gồm khái niệm về độ tin cậy phần mềm và một số khái niệm liên quan được sử dụng ở các nội dung nghiên cứu cụ thể sau Theo tiêu chuẩn chất lượng quốc tế về chất lượng phần mềm ISO/IEC 25010 [32], độ tin cậy là một trong những đặc tính chất lượng chính Độ tin cậy có những ứng dụng nhất định trong các pha khác nhau của vòng đời phần mềm: thiết kế, lập trình, kiểm thử và triển khai
1.2.1 Khái niệm
Lịch sử nghiên cứu độ tin cậy phần mềm cho thấy đã có nhiều nhà nghiên cứu đưa ra các khái niệm khác nhau về độ tin cậy phần mềm Mỗi khái niệm phản ánh một góc nhìn độc lập của người đề xuất Tuy nhiên, tất cả đều phản ánh việc hệ thống hoạt động bình thường Chúng tôi sẽ trình bày lại các khái niệm đó nhằm giải thích cho việc các nhà nghiên cứu đề xuất các công thức toán học cho độ đo độ tin cậy được trình bày tại mục 1.3
Trước hết là khái niệm của Phạm Hoàng [26]: Độ tin cậy là xác suất hoạt động thành công của hệ thống, nói cách khác là xác suất mà hệ thống sẽ thực hiện chức năng dự định của mình theo những giới hạn thiết kế đặc thù nào đó
Tiếp theo là khái niệm của Chengjie [62]: Độ tin cậy là xác suất phần mềm hoạt động không lỗi ở điều kiện cho trước trong một khoảng thời gian xác định
Và khái niệm của Lyu [66]: Độ tin cậy là xác suất một phần mềm không có lỗi hoạt động trong một khoảng thời gian xác định ở điều kiện xác định
Với các hệ thống máy tính, khái niệm cơ bản về độ tin cậy có thể được diễn
tả bằng một số hình thức cụ thể như "độ tin cậy phần mềm", "độ tin cậy hệ thống",
"độ tin cậy dịch vụ", "độ sẵn sàng hệ thống", v.v cho các mục đích khác nhau
Rõ ràng, khái niệm độ tin cậy phần mềm liên quan đến việc hệ thống "hoạt động", tức là hệ thống không gặp phải một sự cố quá lớn dẫn đến tình trạng buộc phải dừng lại Ví dụ cho tình huống này là một chiếc máy chủ website, khi một thanh RAM gặp sự cố, thì thiết kế của nó vẫn cho phép hoạt động bình thường với khối lượng bộ nhớ còn lại Điều này thực sự quan trọng khi định nghĩa bài toán liên quan đến độ tin cậy, từ đó hỗ trợ việc thu thập dữ liệu thực tế cho các mô hình Mục tiêu của việc kiểm tra và giám sát độ tin cậy nhằm giảm thiểu và loại trừ các sự cố của phần mềm như: không hoạt động, hoạt động lỗi, v.v Độ tin cậy là một trong những đặc tính đầu tiên được quan tâm đến khi đánh giá chất lượng một phần mềm
Tuy nhiên, độ tin cậy phần mềm chỉ là một độ đo của chương trình phần mềm Để đánh giá các hệ thống máy tính chứa nhiều chương trình phần mềm và các thành phần phần cứng, chúng ta thường sử dụng khái niệm độ tin cậy hệ thống [88] Khái niệm này liên quan đến xác suất mà toàn bộ hệ thống hoàn thành tất cả các
Trang 24nhiệm vụ mong muốn Rõ ràng, với những kiến trúc chịu lỗi thì công việc của một thành phần gặp sự cố có thể được giải quyết bởi các thành phần khác, giúp hệ thống vẫn đảm bảo chức năng của mình Các chương trình phần mềm có thể được bố trí theo cơ chế song song, nối tiếp và thậm chí theo bất kỳ cơ cấu phân phối nào Do đó,
độ tin cậy hệ thống cần phải được tính toán theo những cách khác nhau tùy theo cấu trúc hệ thống
1.2.2 Lịch sử quá trình nghiên cứu về mô hình độ tin cậy phần mềm
Các nhà nghiên cứu đã tập trung đánh giá và định nghĩa một số khái niệm liên quan tới độ tin cậy phần mềm từ những thập niên 50 của thế kỉ trước, tức là ngay từ khi xuất hiện các hệ thống máy tính và phần mềm
Trước năm 1970: các nghiên cứu trong giai đoạn này như của Weiss [31], Corcoran [91], Sauter [43], Rubey [77], Lloyd [17], vv chủ yếu tập trung đưa ra các khái niệm và bước đầu tìm kiếm ứng dụng Toán học trong các lý thuyết về mô hình hóa và định lượng hóa Tuy không thực sự nổi bật nhưng một loạt các khái niệm được giới thiệu trong giai đoạn này đã xuất hiện trong các công bố khoa học ở các giai đoạn kế tiếp Ngoài ra, do đặc điểm thời đại, khi công nghệ phần cứng vẫn thực sự chiếm ưu thế rõ ràng so với công nghệ phần mềm, các nhà nghiên cứu đã cố gắng áp dụng các mô hình lý thuyết của phần cứng cho phần mềm Có thể nói, đây là giai đoạn bản lề cho sự bùng nổ của các giai đoạn sau này
Giai đoạn 1970 - 1979: sự phát triển của lý thuyết độ tin cậy đã đạt được những bước nhảy đáng kể trong giai đoạn này với các nghiên cứu của Akiyama [22], Jelinski [100], Littlewood [8], Schick [24], Thayer [84], Brown [44], Dickson [35], Cook [64], Yourdon [20], Coutinho [39], Schneidewind [68], Shooman [65], Trivedi [5], Kamat [82], Wall [42], Forman [21], Goel [6], Sukert [2], Schick [24], Mills [25], Moranda [69], McCabe [85], Một loạt các
mô hình được giới thiệu và tìm hiểu, trong đó có một số mô hình sau này đã được đánh giá rất cao Các tác giả sử dụng đồng thời các phương thức đánh giá tĩnh cổ điển và các kĩ thuật liên quan đến lý thuyết xác suất thống kê Đây
có thể coi là thời điểm khởi thủy của các mô hình tổng quát ứng dụng các nền tảng về chuỗi Markov hoặc phân phối Poisson
Giai đoạn 1980 - 1989: bước đầu xuất hiện góc nhìn phân biệt khái niệm độ tin cậy và tính đúng đắn của hệ thống, các nghiên cứu của Daniels [9], Walsh [86], Shanthikumar [40], Govil [49], Musa [37][38][36], Thompson [90], Ramamoorthy [12], Cheung [75], Higgins [41], Ottenstein [52], Duran [45], Martz [30], Castillo [93], Dale [11], Goel [7], Ohba [60][61], Misra [70], Yamada [81], Kumar [88], chuyển dịch sang giai đoạn đánh giá phương diện xác suất và thống kê của tiến trình chuỗi các thất bại của hệ thống Một số mô hình đã được cài đặt thực tế trên một số dữ liệu thực và đánh giá các nhược điểm, thiếu sót
Giai đoạn 1990 - 1999: các mô hình lần lượt được mở rộng, khai thác sâu và phát triển mạnh trên phương diện tính toán toán học, dựa trên các kĩ thuật mở rộng vấn đề khác nhau của Cai[50], Reussner [76], Woit [19], Wood [4], Phạm Hoàng [28][29], Ehrlich [89], Nakagawa [98], Tohma [99] Từ những
Trang 25giả thiết hoặc những đặc điểm khác nhau của hệ thống, các tác giả đề xuất những ràng buộc hoặc công thức toán học, sau đó thực hiện tính toán thực tế
và đánh giá trên các dữ liệu thực nghiệm nhằm tìm ra ưu, nhược điểm cũng như các môi trường thích hợp của từng mô hình
Giai đoạn 2000 - nay Các mô hình đã được nghiên cứu và tìm hiểu một cách tổng quát, toàn diện và có hệ thống bởi các nhà nghiên cứu như Goseva-Popstojanova [46], Wang [92], Abbas [67], Brosch [23], Larsson [58], Roshandel [74], Chengjie [94], Phạm Hoàng [27], Cheung [51], Singh [55], Phạm Loan [53], Anjum [56], Zhang [95], Kwon [97] Để thích nghi với sự xuất hiện của các loại công nghệ, kĩ thuật, lý thuyết mới của công nghệ phần mềm, lý thuyết về độ tin cậy dần phát triển theo xu hướng mở rộng, áp dụng trên các lĩnh vực khác nhau, trở thành một yếu tố quan trọng và được xem như
là một trong các độ đo quan trọng trong lý thuyết về chất lượng phần mềm
1.2.3 Một số khái niệm liên quan trong mô hình độ tin cậy phần mềm
Trong lý thuyết về độ tin cậy phần mềm, các nhà nghiên cứu đề cập đến một loạt các thuật ngữ gần nghĩa với nhau như: lỗi (fault, error, bug, mistake), thất bại( failure), sự cố (malfunction), khuyết tật (defect), vv Mỗi khái niệm phản ánh một sự kiện khác nhau, có thể mang tính chất nguyên nhân gây ra hoặc sự kiện thực
tế Chúng tôi làm rõ các thuật ngữ sử dụng trong luận án với các khái niệm sau [62]:
Định nghĩa Lỗi (Fault)
Một phần mềm được gọi là có lỗi (khuyết tật) nếu với một vài bộ dữ liệu đầu vào,
dữ liệu kết quả đầu ra là không đúng
Mặc dù khái niệm lỗi phần mềm cho các hệ thống và môi trường khác nhau
là khác nhau, tuy nhiên lỗi phần mềm luôn tồn tại trong mọi hệ thống và có thể được loại bỏ bằng cách sửa chữa thành phần bị hỏng của hệ thống
Định nghĩa Thất bại (Failure)
Mỗi lần thực thi của phần mềm mà dữ liệu kết quả đầu ra là không đúng được gọi
là thất bại của phần mềm
Thất bại có thể do lỗi phần mềm hoặc các lí do khác như người dùng thao tác sai hay lỗi phần cứng Ví dụ, các dữ liệu đầu vào sai, thao tác in ấn kết quả đầu ra không chính xác hoặc phần cứng gặp vấn đề khi tính toán, vv có thể gây ra thất bại cho phần mềm Thông thường chúng ta sẽ tách riêng các trường hợp thất bại của phần mềm không liên quan đến lỗi của hệ thống ra, do vậy một thất bại của hệ thống sẽ liên quan đến một hoặc nhiều lỗi
Định nghĩa Tiến trình gỡ bỏ lỗi (Fault-removal process)
Trong các pha của quá trình kiểm thử phần mềm, chương trình chạy với các bộ dữ liệu đầu vào khác nhau và định vị được các bộ dữ liệu đầu ra sai, từ đó đánh dấu các thất bại của hệ thống Tiếp đó, các lỗi gây ra thất bại sẽ được định vị và sửa chữa Toàn bộ tiến trình đó được gọi là tiến trình gỡ bỏ lỗi
Trang 26Định nghĩa Sự tăng trưởng độ tin cậy (Reliability Growth)
Hiện tượng độ tin cậy của hệ thống tăng dần trong quá trình kiểm thử thông qua việc gỡ bỏ dần các lỗi được gọi là sự tăng trưởng độ tin cậy
Trong thực tế, đối với các hệ thống lớn và phức tạp, thường không thể định
vị và loại bỏ tất cả các lỗi Do đó, các nhà phát triển sẽ đưa ra một số yêu cầu về độ tin cậy và cố gắng đạt được chúng thông qua các quá trình kiểm thử và chữa lỗi Tuy nhiên, cấp độ tin cậy của phần mềm sẽ được đánh giá thông qua sử dụng một
số mô hình xấp xỉ áp dụng trên các dữ liệu thực nghiệm về thất bại của phần mềm
Định nghĩa Kích thước lỗi
Kích thước của lỗi là đại lượng phản ánh ảnh hưởng của lỗi đó đến xác suất xảy ra thất bại của hệ thống Do đó nếu các lỗi có kích thước bằng nhau được gỡ bỏ, mức
độ tăng độ tin cậy của hệ thống là như nhau
Đây là giả thiết quá mạnh và được thảo luận rất nhiều trong vấn đề xây dựng các mô hình đánh giá độ tin cậy Tuy nhiên, vấn đề là chưa có lý thuyết nào thực sự hữu hiệu để có thể phân loại hoặc đưa ra các độ đo trong định lượng số đo này
Định nghĩa Tính ngẫu nhiên và đồng nhất của quá trình kiểm thử
Một quá trình kiểm thử được giả thiết là hoàn toàn ngẫu nhiên và đồng nhất nếu các bộ kiểm thử được lựa chọn ngẫu nhiên từ không gian đầu vào và phần mềm được kiểm thử bằng các dữ liệu này trên một môi trường đồng nhất
Đây là điểm yếu của các mô hình hiện tại Vấn đề quan trọng đối với nhà phát triển là phải ước tính được độ tin cậy của hệ thống sau khi phát hành Do đó, các quá trình kiểm thử thường thiên kiến về các bộ tương đồng với môi trường thực
tế mà thiếu đi tính ngẫu nhiên
1.2.4 Phân nhóm các mô hình đánh giá độ tin cậy phần mềm
Hiện có rất nhiều cách thức phân loại mô hình đánh giá độ tin cậy phần mềm, phụ thuộc vào nhiều tiêu chí phân loại Một mô hình có thể có nhiều đặc tính, do đó
có thể thuộc các nhóm khác nhau khi phân chia theo các cách khác nhau Chúng tôi giới thiệu một số cách phân loại phổ biến
1.2.4.1 Phương pháp phân nhóm của Phạm Hoàng
Phạm Hoàng [26] chia các mô hình đánh giá độ tin cậy thành hai nhóm chính: xác định (static) và xác suất (probability)
Các mô hình xác định làm việc với các số đo về toán hạng và toán tử của chương trình, ví dụ như là số lỗi, số dòng mã, vv Số đo của các mô hình này hoàn toàn dựa trên phân tích tĩnh, không liên quan tới các thao tác ngẫu nhiên
Các mô hình xác suất tìm hiểu các thất bại và lỗi của hệ thống dưới góc nhìn như là các sự kiện xác suất, bao gồm các nhóm:
- Mô hình hạt giống lỗi (Error seeding)
- Tỉ lệ thất bại (Failure rate)
- Dọc theo đường cong (Curve fitting)
- Tăng trưởng độ tin cậy (Reliability growth)
Trang 27- Cấu trúc Markov (Markov structure)
- Dãy thời gian (Time series)
- Tiến trình Poisson không đồng nhất (Nonhomogeneous Poison process)
1.2.4.2 Phương pháp phân nhóm của Lyu
Michael R Lyu [66] đưa ra cách phân loại theo ý tưởng của Musa và Okumoto dựa trên năm đặc điểm của mô hình:
Miền thời gian (Time domain)
Nhóm (Category): số lượng thất bại của hệ thống là hữu hạn hay vô hạn
Kiểu (Type): thời điểm xảy ra lỗi thuộc phân phối Poisson hay nhị thức
Lớp (Class): (chỉ với nhóm hữu hạn) tần suất lỗi là hàm của thời gian
Họ (Family): tần suất lỗi là hàm của số lượng lỗi dự kiến
1.2.4.3 Phương pháp phân nhóm của Chengjie
Chengjie X.C [94] chia các mô hình vào ba nhóm:
Nhóm Bayesian: mô hình L-V [8]
Nhóm xác suất:
- Nhóm nhỏ Markov: mô hình Jelinski và Moranda, v.v
- Nhóm nhỏ Poisson không đồng nhất: mô hình Goel và Okumoto, mô hình Duane, mô hình Pham, v.v
Nhóm tĩnh: mô hình lỗi hạt giống [25]
1.2.4.4 Phương pháp phân nhóm theo mô hình cây phân cấp
Chúng tôi đề xuất phương pháp phân nhóm được trình bày như Hình 1.1 dựa trên dữ liệu được sử dụng trong quá trình xây dựng mô hình
Các mô hình đánh giá độ tin cậy thông qua tài nguyên dự án: độ tin cậy của hệ thống được đánh giá từ các thông số về mặt tài nguyên của dự án như số lượng
mã nguồn, các biểu đồ biểu diễn, v.v
Các mô hình đánh giá độ tin cậy thông qua phân tích đặc tính của quá trình phát hiện lỗi: độ tin cậy của hệ thống được tính toán dựa trên các đặc tính của quá trình phát hiện lỗi trong toàn bộ vòng đời của phần mềm
Các mô hình đánh giá độ tin cậy thông qua phân tích sự phân phối ngẫu nhiên của quá trình phát hiện lỗi Trong suốt vòng đời phần mềm, các lỗi sẽ được phát hiện tại các thời điểm rời rạc khác nhau Do đó, quá trình các thời điểm xảy ra lỗi được xem xét như là một quá trình ngẫu nhiên Từ đó sử dụng các
mô hình ngẫu nhiên toán học để mô hình quá trình đó Nhóm này chia thành hai nhóm nhỏ dựa trên quá trình ngẫu nhiên được sử dụng:
- Nhóm các mô hình dựa trên tiến trình Markov
- Nhóm các mô hình dựa trên tiến trình Poisson không đồng nhất
Trang 28Hình 1.1 Phân loại các mô hình độ tin cậy phần mềm theo cây phân cấp
1.3 Các hướng tiếp cận đánh giá độ tin cậy hệ thống phần mềm
Ở các mục trước, chúng tôi đã giới thiệu những lý thuyết cơ bản được sử dụng trong nghiên cứu về mô hình hóa độ tin cậy phần mềm, gồm các kiến thức toán học sử dụng trong mô hình hóa và khái niệm, tính chất của độ tin cậy phần mềm Áp dụng
Dựa trên phân phối của quá trình phát hiện lỗi
NHPP
Không hoàn hảo dạng S
Mô hình
độ tin cậy
phần mềm
Ohba dạng S Yamada dạng S
Yamada 1 Yamada 2
Goel-Okumoto Markov
Jelinski-Moranda Schick-Wolverton
Halstead McCabe Mills
Tohma
PNZ Pham tỉ lệ Pham Zhang Pham r.buộc t.số
Goel-Okumoto NHPP Ohba tỉ lệ Yamada-Osaki
Trang 29các kiến thức cơ bản đó, trong mục này, chúng tôi trình bày các cách tiếp cận khác
nhau trong mô hình độ tin cậy phần mềm
1.3.1 Nhóm mô hình đánh giá độ tin cậy dựa trên phân tích tài nguyên dự
án phát triển phần mềm
Trong quá trình xây dựng phần mềm, dự án phát triển bao gồm một số tài nguyên như chi phí, nhân công, mã nguồn, v.v Halstead [26] và McCabe [85] giới thiệu các mô hình tính toán độ tin cậy phần mềm dựa trên tài nguyên mã nguồn của
dự án
1.3.1.1 Độ đo Halstead
Lý thuyết Halstead [26] về độ đo phần mềm có thể coi là lý thuyết tốt nhất để
đánh giá về độ phức tạp của phần mềm Lý thuyết này dựa trên khái niệm về "toán
tử (operator)" và "toán hạng (operand)", do đó độ đo này sẽ lệ thuộc vào ngôn ngữ
lập trình Halstead sử dụng các mô tả sau cho ngôn ngữ lập trình C:
Toán tử: bao gồm toán tử phép tính số học (’+’), toán tử so sánh(’<’), toán tử gán (’+=’), toán tử dịch bit (’>>’), toán tử logic (’&&’), toán tử từ khóa điều khiển (’while’), toán tử khai báo kiểu (’double’), lời gọi hàm, tham chiếu phần tử của tập hợp/bản ghi/mảng, vv
Toán hạng: bao gồm tên biến, tên hằng, nhãn, tên hàm, v.v
Bên cạnh đó, Halstead sử dụng các kí hiệu sau khi thực hiện các phép tính toán thông số của chương trình:
𝑛1: số lượng toán tử khác nhau xuất hiện trong chương trình
𝑛2: số lượng toán hạng khác nhau xuất hiện trong chương trình
𝑁1: tổng số lượng toán tử trong chương trình (một toán tử có thể xuất hiện nhiều lần)
𝑁2: tổng số lượng toán hạng trong chương trình (một toán hạng có thể xuất hiện nhiều lần)
Sau khi thu thập từ thực tế các thông số trên, Halstead cung cấp các công thức giúp ước lượng được các thông số dẫn xuất sau:
1 𝑁: độ dài chương trình "Độ dài Halstead (Halstead Program Length)" của chương trình mô tả kích thước của một chương trình trừu tượng thu được bằng cách chỉ giữ lại các toán tử và toán hạng và loại bỏ tất cả các thành tố khác 𝑁 được ước lượng bởi công thức:
2 𝑉 : kích thước chương trình "Kích thước Halstead (Halstead Program
Volume)" của chương trình ước lượng số bit cần dùng để lưu trữ chương trình
trừu tượng độ dài 𝑁 nếu các toán tử và toán hạng được mã hóa nhị phân 𝑉 được ước lượng bởi công thức:
𝑉 = 𝑁 × log2(𝑛1+ 𝑛2) (1.10)
Trang 303 𝐿: mức độ chương trình "Mức độ Halstead (Halstead Program Level)" của chương trình mô tả tỉ lệ giữa kích thước chương trình hiện tại và chương trình cài đặt "nhỏ gọn nhất" của cùng thuật toán Một cài đặt dài sẽ có mức độ thấp hơn một cài đặt ngắn 𝐿 được ước lượng bởi công thức:
𝑛 2 của toán hạng tăng 𝐷 được ước lượng bởi công thức:
5 𝐸: sức gia công chương trình "Sức gia công Halstead (Halstead Program
Effort)" của chương trình tỉ lệ thuận với độ khó và kích thước chương trình:
𝐸 = 𝐷 × 𝑉 = 𝑛1× 𝑁2
2 ×𝑛2 × 𝑁 × log2( 𝑛1+ 𝑛2) (1.13)
6 𝐼: độ thông minh chương trình "Độ thông minh nội dung Halstead (Halstead
Intelligent Content)" của chương trình mô tả sự độc lập của thuật toán với
ngôn ngữ lập trình và được ước lượng bởi công thức:
1.3.1.2 Độ đo độ phức tạp xoay vòng của McCabe
Bảng 1.1 Độ phức tạp McCabe của một số cấu trúc cơ bản
If then
Trang 31
Theo Berger [1], "số xoay vòng (cyclomatic number)" của đồ thị có hướng
bao gồm 𝑝 thành phần liên thông mạnh 𝐺 = (𝑉, 𝐸) được định nghĩa là:
với |𝑉| = 𝑛 và |𝐸| = 𝑒 Chúng ta hoàn toàn có thể chứng minh được 𝑣(𝐺) chính bằng số lượng tối đa chu trình độc lập tuyến tính của 𝐺: kích thước của tập các chu trình tạo nên cơ sở của tất cả các chu trình trên 𝐺 McCabe gợi ý rằng chương trình
có độ đo McCabe cao sẽ tạo ra khó khăn trong sản xuất cũng như bảo hành và đưa
ra cận trên tốt nhất của chương trình Fortran là 10 Khi ứng dụng khái niệm số đo xoay vòng vào lưu đồ của một chương trình, McCabe đưa ra một số chú ý sau:
Đồ thị luồng điều khiển chương trình không phải là một đồ thị có hướng liên thông mạnh: cần thêm một cạnh ảo nối từ đầu ra out tới đầu vào in
Thông thường đồ thị luồng điều khiển khi thêm cạnh ảo ở trên vào sẽ có một thành phần liên thông
Số 2 trong công thức (1.18) có được do 𝑝 = 1 và một cạnh ảo được thêm vào Một số lưu đồ cơ bản và số xoay vòng tương ứng được trình bày trong Bảng 1.1 Độ phức tạp xoay vòng đánh giá mức độ khó khăn khi tiến hành kiểm thử tất cả các đường đi trên đồ thị luồng điều khiển, từ đó cung cấp các thông tin hữu ích trong đáp ứng các yêu cầu và mô tả của phần mềm Tuy nhiên, theo Friedman [63], độ đo McCabe sẽ không hữu ích nếu nhà phát triển và kiểm thử muốn phát hiện và loại bỏ tất cả các lỗi của phần mềm
1.3.2 Nhóm mô hình đánh giá độ tin cậy dựa trên phân tích đặc tính của
quá trình phát hiện lỗi trong quá trình phát triển phần mềm
Cách tiếp cận sử dụng các tài nguyên dự án như đã đề cập ở tiểu mục trước gặp nhiều nhược điểm Rõ ràng, tài nguyên "tĩnh" của dự án không phản ánh nhiều tính chất của dự án, khi phần mềm ngày càng phức tạp và được xây dựng thông qua
Trang 32nhiều kiến trúc và pha khác nhau Kiểm thử là một pha chính trong vòng đời phát triển phần mềm Mills[25], Cai [50] và Tohma [99] giới thiệu các mô hình áp dụng trên dữ liệu thực tế về quá trình kiểm thử, từ đó tính toán được các giá trị độ đo liên quan tới độ tin cậy phần mềm
1.3.2.1 Mô hình hạt giống lỗi của Mills
Mills [25] đưa ra một thủ tục nhằm ước tính số lỗi trong chương trình bằng
cách chèn thêm các "lỗi hạt giống (error seeding)" vào phần mềm Từ dữ liệu thu
được khi chữa lỗi, bao gồm cả lỗi có sẵn và lỗi hạt giống, số lượng chưa biết các lỗi sẵn có sẽ được tính toán ra Giả sử lỗi có sẵn và lỗi hạt giống có khả năng bị phát hiện ra là như nhau, từ tỉ lệ 𝑘 lỗi hạt giống trên tổng 𝑟 lỗi được phát hiện trong quá trình chữa lỗi ta có tổng số lỗi có sẵn là:
𝑟: tổng số lỗi phát hiện khi chữa lỗi
𝑘: số lỗi có sẵn bị phát hiện khi chữa lỗi
1.3.2.2 Mô hình Cai
Cai [50] đã cải tiến mô hình Mills bằng cách chia hệ thống thành hai phần: phần 0 và phần 1 Mô hình này được dùng để đánh giá số lượng khuyết tật còn lại của hệ thống Cai sử dụng các giả thiết:
1 Hệ thống tồn tại 𝑁 khuyết tật: phần 0 chứa N0 và phần 1 chứa N1 khuyết tật,
khi đó có N = N0 + N1
2 Các khuyết tật có xác suất bị phát hiện là như nhau
3 Khuyết tật bị gỡ bỏ ngay sau khi phát hiện
4 Mỗi lần chỉ loại bỏ một khuyết tật và không có khuyết tật nào được thêm vào
5 Đã loại bỏ được 𝑛 khuyết tật tồn tại trong tổng số 𝑁
Cho 𝑡𝑖 biểu diễn thời điểm khuyết tật thứ 𝑖 bị gỡ bỏ 𝑌𝑖 là biến ngẫu nhiên thỏa mãn:
𝑌𝑖 =0nếulỗithứibịpháthiệnthuộcphần01nếulỗithứibịpháthiệnthuộcphần1Gọi 𝑁𝑗(𝑖) là số lượng khuyết tật trong phần 𝑗 trong khoảng thời gian (𝑡𝑖, 𝑡𝑖+1] với
0 ≤ 𝑖 ≤ 𝑛, 𝑗 ∈ {0,1} Giả sử 𝑦𝑖 là giá trị quan sát của 𝑌𝑖 và 𝑦0 = 0 Khi đó có:
𝑁0(𝑖) = 𝑁0− 𝑖 + ∑ 𝑦𝑗
𝑖
𝑗=0
(1.20)
Trang 33− ln(𝑁0+ 𝑁1− 𝑖 + 1) + 𝑦𝑖ln(𝑁0+ 𝑁1− 𝑖 + 1))
(1.25)
Lấy đạo hàm bậc nhất theo các biến 𝑁0 và 𝑁1 và xét bằng 0, từ đó ta có công
thức ước lượng của N0 và N1:
Trang 34Cai xây dựng công thức (1.28) nhằm ước lượng được tổng số lỗi của hệ thống thông qua việc giải hệ hai phương trình độc lập tuyến tính (1.27) và (1.28) khi
có bảng phân bố giá trị của 𝑦𝑖
1.3.2.3 Mô hình Tohma
Tohma [99] giới thiệu mô hình nhằm ước lượng số lượng lỗi khởi thủy của
chương trình tại thời điểm bắt đầu tiến trình kiểm thử dựa trên phân phối "siêu hình học (hypergeometric)" Như đã biết, nếu từ một giỏ gồm 𝑚 quả bóng trắng lấy ra 𝑤
quả, số lượng bóng trắng trong mỗi lần lấy ra 𝑁𝑖 là biến ngẫu nhiên tuân theo phân phối siêu hình học Khi đó xác suất để 𝑁𝑖 nhận giá trị nguyên dương 𝑥𝑖 là:
𝑥𝑘 là giá trị quan sát của 𝑁𝑘 Chú ý rằng 𝑥𝑖 là số bóng trắng ở mỗi lần lấy, do đó
𝐶𝑖−1sẽ là tổng số bóng trắng trong các lần lấy từ trước đến giờ và cũng chính là số bóng đỏ ở thời điểm hiện tại, tức 𝑚 − 𝐶𝑖−1sẽ là số bóng trắng còn lại Ngoài ra giá trị kì vọng của 𝑁𝑖 là:
𝑁̂𝑖 = (𝑚 −𝐶𝑖−1)𝑤
Ước tính giá trị 𝑚 và 𝑤 thông qua sử dụng hai phương pháp:
Phương pháp hợp lý cực đại, hàm hợp lý dựa trên phân phối siêu hình học là:
Trang 35𝑠(𝑚, 𝑤) = ∑ [𝑥𝑖 − (𝑚 − 𝐶𝑖−1)𝑤
𝑚]
2 𝑛
(∑𝑛 𝐶𝑖−1)𝑖=1 2− 𝑛(∑𝑛 𝐶𝑖−12 )
(1.41)
Ứng dụng thực tế vào mô hình độ tin cậy hệ thống phần mềm, Tohma sử dụng các giả thiết:
Chương trình chứa 𝑚 lỗi khi bắt đầu pha kiểm thử
Các bộ kiểm thử trong một khoảng thời gian (1 tuần hoặc 1 ngày) được gọi là
các trường hợp kiểm thử (test instance) và được đánh dấu bằng ti với 𝑖 =1,2, ⋯ , 𝑛 Khi đó mỗi phép thử lấy ra 𝑤 quả bóng tương đương với một
Trang 36trường hợp kiểm thử được thực thi trên phần mềm Rõ ràng khi đó 𝑤 = 𝑤𝑖 là hàm theo thời gian
Gọi 𝐶𝑖−1 là tổng số lỗi tích lũy được phát hiện bởi các trường hợp kiểm thử
𝑡1, 𝑡1, ⋯ , 𝑡𝑖−1 và 𝑁𝑖 là số lỗi mới được phát hiện bởi 𝑡𝑖 𝑤𝑖 là số lượng lỗi được xem xét bởi trường hợp kiểm thử 𝑡𝑖 Chú ý rằng một vài lỗi trong 𝑤𝑖 lỗi có thể đã được tính trong 𝐶𝑖−1 và những lỗi còn lại sẽ được xem xét là các lỗi mới phát hiện Nếu
𝑛𝑖 là giá trị quan sát của 𝑁𝑖, rõ ràng: 𝑛𝑖 ≤ 𝑤𝑖 Tohma phân chia thành hai nhóm lỗi:
Lỗi mới tìm ra
Lỗi tái tìm ra
Giả sử số lượng lỗi mới phát hiện 𝑁𝑖 tuân theo phân phối siêu hình học, khi
đó có xác suất để thu được đúng 𝑛𝑖 lỗi mới trong 𝑤𝑖 lỗi là:
Pr(𝑁𝑖 = 𝑛𝑖) =(
𝑚−𝐶𝑖−1
𝑛𝑖 ) (𝐶𝑖−1
𝑤𝑖−𝑛𝑖)(𝑤𝑚
Đem giá trị trung bình 𝐸[𝐶𝑖] này ra so sánh với 𝐶𝑖 bằng các công cụ toán học
sẽ thu được nhận xét về chất lượng của mô hình
Trong tiểu mục này, chúng tôi đã trình bày một số cách tiếp cận của các nhà nghiên cứu trong việc mô hình độ tin cậy phần mềm Tuy nhiên, các nghiên cứu này gặp phải một số hạn chế như sau:
Các mô hình được đề xuất dựa trên một tài nguyên trong quá trình phát triển phần mềm như mã nguồn, dữ liệu kiểm thử, v.v Các tài nguyên này chỉ mang
Trang 37tính "tĩnh", tức không phụ thuộc vào quá trình thực chạy hay ngữ cảnh hoạt động Điều này làm giảm giá trị thực tế của các mô hình
Khi công nghệ và quy trình phát triển phần mềm còn sơ khai, các cách tiếp cận này hoàn toàn hợp lý Tuy nhiên, khi phần mềm và quá trình sản xuất phần mềm trở nên phức tạp, các cách tiếp cận tĩnh như vậy thường không đem lại hiệu quả cao
Từ các hạn chế trên, các nhà nghiên cứu gần đây tập trung vào việc sử dụng tiến trình Markov và tiến trình Poisson không đồng nhất vì sự phù hợp của chúng trong mô hình độ tin cậy phần mềm
Đánh giá cách tiếp cận áp dụng tiến trình Markov: như đã trình bày ở
mục 1.1, tiến trình Markov là một tiến trình với đặc điểm xác suất hệ thống ở một trạng thái chỉ phụ thuộc vào trạng thái liền trước Trong thực tế, các hệ thống phần mềm có thể chia làm hai nhóm: nhóm có xác suất hệ thống ở một trạng thái chỉ phụ thuộc vào trạng thái liền trước và nhóm có xác suất hệ thống ở một trạng thái phụ thuộc vào một dãy các trạng thái trước đó Tuy nhiên, các ứng dụng phần mềm thuộc nhóm thứ hai thường rất phức tạp, thuộc nhóm các phần mềm đặc thù Các phần mềm dân dụng được phát triển cho người dùng phổ thông thường thuộc nhóm thứ nhất Từ đặc điểm của tiến trình Markov và nhu cầu mô hình cho các hệ thống phần mềm dân dụng, chúng ta thấy được việc sử dụng tiến trình Markov cho việc
mô hình hệ thống phần mềm là hoàn toàn hợp lý
Đánh giá cách tiếp cận áp dụng tiến trình Poisson không đồng nhất: như
đã trình bày ở mục 1.1, tiến trình Poisson không đồng nhất có ứng dụng rộng rãi trong mô hình hóa số lượng sự kiện diễn ra trong một khoảng thời gian [𝑡1, 𝑡2] Bên cạnh đó, trong pha kiểm thử, nhóm phát triển có thể thu được dữ liệu theo dòng thời gian trong đó biểu diễn các thời điểm hệ thống xảy ra thất bại Các thời điểm này diễn ra riêng biệt trên một trục thời gian Do đó, việc áp dụng tiến trình Poisson không đồng nhất để mô hình dãy các thời điểm thất bại này là hoàn toàn hợp lý, tương đồng với việc áp dụng tiến trình Poisson không đồng nhất mô hình các dãy sự kiện trong thực tế
Từ nhận xét về đặc điểm và lĩnh vực áp dụng của hai loại tiến trình Markov
và Poisson không đồng nhất cũng như nhận xét về đặc điểm của khía cạnh của hệ thống phần mềm cần mô hình, chúng tôi đưa ra nhận xét việc áp dụng hai loại tiến trình trên để mô hình độ tin cậy hệ thống phần mềm hoàn toàn tự nhiên và hợp lý
1.4 Tổng hợp các nghiên cứu liên quan hiện có
1.4.1 Tiến trình Markov mô hình tiến trình gỡ lỗi phần mềm
Kĩ thuật xác suất thống kê đem lại nhiều công cụ tính toán toán học hiệu quả trong phân tích dữ liệu Tương tự như cách làm việc của các ngành khoa học khác, việc áp dụng lý thuyết xác suất trong mô hình độ tin cậy đem lại nhiều kết quả tốt hơn cách tiếp cận "tĩnh" Như đã giới thiệu ở mục 1.1, tiến trình Markov là tiến trình có xác suất xảy ra một trạng thái chỉ phụ thuộc vào trạng thái kề trước Tính chất này là hoàn toàn phù hợp khi sử dụng cho việc mô hình hóa các trạng thái độc lập của một quá trình hoạt động nào đó của phần mềm Xie [62] tổng hợp năm mô
Trang 38hình thuộc nhóm sử dụng tiến trình Markov mô hình tiến trình gỡ lỗi của phần mềm trong pha kiểm thử
1.4.1.1 Giả thiết chung của các mô hình
Khi áp dụng tiến trình Markov để mô hình độ tin cậy hệ thống phần mềm, Xie [62] sử dụng các qui ước sau:
𝑡𝑖: khoảng thời gian giữa thất bại thứ 𝑖 − 1 và thất bại thứ 𝑖
𝜆(𝑡𝑖): hàm tỉ lệ thất bại, cũng chính là hàm tham số của phân phối mũ
Do đó dữ liệu đầu vào của các mô hình này sẽ là khoảng thời gian hệ thống hoạt động bình thường giữa các lần thất bại Nhóm mô hình dựa trên tiến trình Markov để mô hình quá trình gỡ lỗi phần mềm sử dụng các giả sử chung sau:
1 Chương trình chứa 𝑁 lỗi 𝑁 chưa biết và là hằng số
2 Các lỗi là độc lập và có xác suất gây ra thất bại của hệ thống là như nhau trong quá trình kiểm thử
3 Khoảng thời gian giữa hai lỗi kế tiếp độc lập với các khoảng khác và là biến ngẫu nhiên liên tục tuân theo phân phối mũ: 𝑡𝑖 ∼ 𝐸𝑥𝑝(𝜆)
4 Khi hệ thống xảy ra một thất bại, lỗi tương ứng sẽ được loại bỏ ngay lập tức
5 Không có lỗi nào được thêm vào trong quá trình loại bỏ lỗi đã phát hiện
Từ các giả thiết khác nhau, các nhà nghiên cứu đề xuất hàm "tỉ lệ thất bại (failure rate)" 𝜆(𝑡𝑖), từ đó xây dựng được mô hình độ tin cậy Chúng ta có các mô hình sau thuộc nhóm sử dụng tiến trình Markov mô hình độ tin cậy phần mềm
1.4.1.2 Mô hình Jelinski-Moranda
Jelinski-Moranda là một trong những mô hình được giới thiệu sớm nhất
[100] Ngoài các giả sử chung, mô hình này sử dụng một giả thiết mới: Tỉ lệ thất bại của hệ thống là hằng số trong khoảng thời gian giữa hai thất bại và tỉ lệ thuận với
số lượng lỗi còn lại trong chương trình
Tỉ lệ thất bại của chương trình ở khoảng thời gian lỗi thứ 𝑖 là:
𝜆(𝑡𝑖) = 𝜙[𝑁 − (𝑖 − 1)], 𝑖 = 1, 2, … , 𝑁 (1.48) trong đó 𝜙 là hằng số tỉ lệ, phản ánh ảnh hưởng của các lỗi đến chương trình Từ đó
có Hình 1.2 mô tả quá trình Markov với trạng thái 𝑋𝑘 tương ứng với lỗi thứ
𝑁 + 1 − 𝑘 và còn 𝑘 lỗi trong hệ thống
Hình 1.2 Tiến trình Markov của mô hình Jelinski Moranda
Tỉ lệ thất bại khởi tạo là:
𝑋𝑁−1
Trang 39Giải (1.58) thu được 𝑁, thay vào (1.57) có 𝜙 Từ công thức (1.48), thay 𝑁 và
𝜙 vào có 𝜆(𝑡𝑖), qua đó tính được quãng thời gian tới lần thất bại tiếp theo qua công thức:
Trang 40hàm tỉ lệ thất bại Schick [24] chỉnh sửa mô hình Jelinski bằng gợi ý: Trong quãng thời gian từ thất bại thứ 𝑖 đến thất bại thứ 𝑖 + 1, tỉ lệ thất bại của hệ thống sẽ tăng dần
Khi đó, hàm tỉ lệ thất bại của hệ thống sẽ là:
𝜆(𝑡𝑖) = 𝜙[𝑁 − (𝑖 − 1)]𝑡𝑖, 𝑖 = 1, 2, ⋯ , 𝑁 (1.60)
Sử dụng các biến đổi tương tự của Jelinski có hàm mật độ xác suất và hàm
độ tin cậy và loga tự nhiên hàm hợp lý, từ đó thu được hệ phương trình hợp lý:
1.4.1.4 Mô hình Schick-Wolverton cải tiến
Sukert [2] cải tiến mô hình Schick-Wolverton bằng giả thiết:
1 Trong mỗi khoảng thời gian có thể có nhiều hơn một lỗi
2 Gọi 𝑛𝑖−1 là số lượng lỗi trong khoảng thời gian thứ 𝑖 − 1
Từ đó ta có hàm tỉ lệ lỗi:
Tính toán tương tự có hàm độ tin cậy:
𝑅(𝑡𝑖) = 𝑒−𝜙[𝑁−𝑛𝑖−1 ]𝑡2𝑖2 (1.63)
1.4.1.5 Mô hình Goel-Okumoto Markov
Goel [7] giới thiệu mô hình với khái niệm "chữa lỗi không hoàn hảo" Sự
khác biệt so với mô hình Jelinski là xác suất gỡ bỏ được lỗi bị phát hiện khỏi hệ
thống Goel vẫn sử dụng các giả thiết của Jelinski và thêm vào giả thiết mới: Xác suất gỡ bỏ được lỗi sau khi phát hiện là 𝑝 với 𝑝 là hằng số
Khi đó, tỉ lệ thất bại của hệ thống sẽ là:
hoàn toàn trở về mô hình Jelinski
1.4.1.6 Mô hình tỉ lệ xác định của Moranda
Moranda [69] thay đổi mô hình Jelinski bằng cách tiếp cận: Tỉ lệ thất bại không giảm theo dạng cấp số cộng mà theo dạng cấp số nhân