Theo ANSI(American National Standards Institute) [11], phần mềm đáng tin cậy đƣợc định nghĩa là xác suất khả năng hoạt động của phần mềm không bị thất bại trong một khoảng thời gian nhất định và trong một môi trƣờng đƣợc quy định.
Độ tin cậy phần mềm [11] là một thuộc tính của chất lƣợng phần mềm, cùng với các chức năng, hiệu suất làm việc, khả năng sử dụng, khả năng bảo trì và tài liệu.
Mặc dù phần mềm đáng tin cậy đƣợc định nghĩa là một chức năng xác suất và đi kèm với khái niệm thời gian, tuy nhiên có sự khác nhau truyền thống về phần cứng đáng tin cậy và phần mềm đáng tin cậy, phần mềm đáng tin cậy không phải là một chức năng trực tiếp theo thời gian [11]. Linh kiện điện tử và cơ khí có thể trở thành "cũ" và mang ra so với thời gian và chức năng sử dụng, nhƣng phần mềm sẽ không gỉ hoặc thay ra trong suốt vòng đời của nó. Phần mềm sẽ không thay đổi theo thời gian trừ khi cố ý thay đổi hoặc nâng cấp.
Phần mềm đáng tin cậy [11] là một thuộc tính quan trọng của chất lƣợng phần mềm. Phần mềm đáng tin cậy là khó đạt đƣợc bởi vì sự phức tạp của phần mềm có xu hƣớng cao. Trong khi bất kỳ hệ thống nào có độ phức tạp cao thì sẽ bao gồm các phần mềm có độ phức tạp cao và sẽ rất khó để độ tin cậy đạt đƣợc một mức độ nhất định. Sự phát triển hệ thống có xu hƣớng đẩy sự phức tạp vào lớp phần mềm, để tăng trƣởng nhanh chóng kích thƣớc của hệ thống và thuận lợi thì bằng cách nâng cấp các phần mềm là dễ làm nhất.
Độ tin cậy phần mềm [11] cũng là một yếu tố quan trọng ảnh hƣởng đến độ tin cậy của hệ thống. Nó khác với độ tin cậy phần cứng ở chỗ nó phản ánh sự hoàn thiện thiết kế, chứ không phải là hoàn thiện sản xuất. Sự phức tạp cao của phần mềm là yếu tố chính góp phần vào các vấn đề độ tin cậy phần mềm. Độ tin cậy phần mềm là không phải là một hàm của thời gian - mặc dù các nhà nghiên cứu đã đƣa ra hai mô hình liên quan tới nhau.
Ví dụ: máy bay thế hệ tiếp theo sẽ có lớn hơn một triệu dòng mã nguồn của phần mềm trên máy bay; hệ thống kiểm soát không lƣu thế hệ tiếp theo sẽ có từ một đến hai triệu dòng; trạm vũ trụ quốc tế sắp tới sẽ có hơn hai triệu dòng trên phần mềm hệ thống điều khiển chính và hơn mƣời triệu dòng phần mềm hỗ trợ mặt đất; một số hệ thống phòng thủ lớn quan trọng của các quốc gia sẽ có hơn năm triệu dòng mã nguồn của phần mềm điều khiển.
Trong khi sự phức tạp của phần mềm là tỷ lệ nghịch với độ tin cậy phần mềm, nó có liên quan trực tiếp đến các yếu tố khác quan trọng về chất lƣợng phần mềm, đặc biệt là chức năng, khả năng,… Nếu chú trọng vào các tính năng này sẽ có xu hƣớng làm các phần mềm thêm phức tạp hơn.
2.6.2 Kỹ thuật cải thiện độ tin cậy phần mềm.
- Kiểm thử phần mềm: đƣợc sử dụng nhiều để kích hoạt, xác định vị trí và loại bỏ các khuyết tật phần mềm. Kiểm thử phần mềm vẫn đang trong giai đoạn sơ khai ban đầu, các thử nghiệm đƣợc tạo ra cho phù hợp với nhu cầu cụ thể trong dự án phát triển phần mềm khác nhau [11].
- Sử dụng các công cụ phân tích khác nhau nhƣ: phân tích xu hƣớng, phân tích lỗi cây, phân loại trực giao khiếm khuyết và các phƣơng pháp hình thức,… có thể đƣợc sử dụng để giảm thiểu khả năng xảy ra sai sót sau khi phát hành và do đó cải thiện độ tin cậy phần mềm.
- Thu thập và phân tích dữ liệu: sau khi triển khai các sản phẩm phần mềm thì có thể thu thập và phân tích dữ liệu các lĩnh vực để nghiên cứu hành vi của các khiếm khuyết phần mềm. Khả năng chịu lỗi kỹ thuật, dự báo lỗi/thất bại sẽ đƣợc phân tích kỹ thuật và các quy tắc hƣớng dẫn để giảm thiểu sự xuất hiện lỗi hoặc tác động của lỗi trên hệ thống.
- Độ tin cậy phần mềm là một phần của chất lƣợng phần mềm ngoài ra nó còn liên quan đến nhiều lĩnh vực chất lƣợng phần mềm.
Độ tin cậy truyền thống: nhiệm vụ ban đầu trong nghiên cứu độ tin cậy phần mềm dựa trên phép suy luận độ tin cậy truyền thống về phần cứng. Nhiều khái niệm và phƣơng pháp phân tích truyền thống đƣợc sử dụng trong việc đánh giá độ tin cậy có thể đƣợc sử dụng để đánh giá và cải thiện độ tin cậy phần mềm. Tuy nhiên, độ tin cậy phần mềm tập trung vào hoàn thiện thiết kế chứ không phải là sản xuất sản phẩm hoàn hảo nhƣ phƣơng pháp phân tích truyền thống độ tin cậy phần cứng [11].
Phần mềm chống chịu lỗi: là khả năng để cho phần mềm phát hiện và phục hồi từ một lỗi mà đang xảy ra hoặc đã xảy ra một trong hai thành phần: phần mềm hoặc phần cứng trong hệ thống; trong đó các phần mềm đang chạy để cung cấp dịch vụ phù hợp với các đặc điểm kỹ thuật. Phần mềm chống chịu lỗi
là một thành phần cần thiết để xây dựng thế hệ tiếp theo của hệ thống máy tính thích ứng cao và đáng tin cậy từ các hệ thống nhúng với các hệ thống kho dữ liệu. Ngoài ra, phần mềm chống chịu lỗi có độ tin cậy cao để xử lý những thất bại một cách không rõ ràng và không thể đoán trƣớc đƣợc bằng cách cung cấp một tập hợp các modul phần mềm có chức năng tƣơng đƣơng. Phần mềm chống chịu lỗi không phải là một giải pháp cho chính nó và khả năng chịu lỗi phần mềm chỉ là một phần cần thiết để tạo ra thế hệ tiếp theo của hệ thống.
Kiểm thử phần mềm: kiểm thử phần mềm đƣợc dùng nhƣ là một cách để đo lƣờng và cải thiện độ tin cậy phần mềm. Nó đóng một vai trò quan trọng trong giai đoạn thiết kế, xác nhận, thực hiện và giai đoạn phát hành. Nó không phải là một lĩnh vực đã phát triển hoàn thiện, nâng cao lĩnh vực này sẽ có tác động lớn đến ngành công nghiệp phần mềm.
Phần mềm tham gia vào rất nhiều lĩnh vực của nền sản xuất xã hội nên vấn đề liên quan đến phần mềm và chất lƣợng sản phẩm phần mềm có thể gây ra các vấn đề nghiêm trọng; ví dụ nhƣ phần mềm điều khiển nhà máy điện hạt nhân. Các lỗi trong phần mềm khác biệt rất nhiều so với lỗi trong phần cứng và các thành phần khác của hệ thống; chúng thƣờng có lỗi thiết kế và nhiều lỗi trong phần mềm có liên quan đến các vấn đề đặc tả. Thiệt hại do lỗi gây ra phần mềm ngày càng nhiều và hơn thế nữa là mối quan tâm của xã hội và vấn đề pháp lý.
Một trong những phƣơng pháp truyền thống để nâng cao độ tin cậy phần mềm là phƣơng pháp: N-phiên bản modul dự phòng, phƣơng pháp này rất có hiệu quả khi thực hiện một cách chính xác. Để sử dụng phƣơng pháp này chi phí rất tốn kém và thông thƣờng chỉ những hệ thống có nhiệm vụ quan trọng nhất sẽ sử dụng N-phiên bản module dự phòng; ví dụ trong ngành công nghiệp hàng không vũ trụ.
Ý tƣởng cơ bản của phƣơng pháp N-phiên bản module dự phòng là độ tin cậy hệ cấu trúc các modul song song. Những module hệ thống này có thể hỗ trợ thêm cho tính chính xác của hệ thống xuất phát từ những lỗi tiềm tàng trong giai đoạn thiết kế và đặc điểm kỹ thuật của dự án. Trong một hệ thống phần mềm N- phiên bản, mỗi module đƣợc thực hiện lên đến N thực thi khác nhau. Các
module độc lập thực hiện các nhiệm vụ song song tƣơng tự nhƣ nhau nhƣng kết quả trả về theo một cách khác nhau, mỗi module gửi kết quả thực thi của mình về cho hệ thống (kỳ vọng kết quả tất cả các phiên bản đều nhƣ nhau và chính xác), hệ thống sử dụng một số chƣơng trình bỏ phiếu để xác định kết quả đúng. Nếu hệ thống trên không bỏ phiếu có nghĩa là hệ thống dự phòng N- modul chỉ có thể tiếp cận giới hạn lý thuyết độ tin cậy cho một hệ thống song song đáng tin cậy hoàn toàn. Hệ thống có thể vƣợt qua những lỗi thiết kế có trong phần mềm bằng cách dựa trên khái niệm thiết kế đa dạng.
Một sự khác biệt quan trọng trong phần mềm N-phiên bản là thực tế hệ thống có thể bao gồm nhiều loại phần cứng và sử dụng nhiều phiên bản của phần mềm mục đích là để tăng sự đa dạng để tránh thất bại chế độ thông thƣờng. Sử dụng phần mềm N-phiên bản đƣợc khuyến khích mỗi phiên bản khác nhau đƣợc thực hiện càng đa dạng càng tốt, bao gồm bộ công cụ khác nhau, ngôn ngữ lập trình khác nhau và có thể môi trƣờng khác nhau. Các nhóm phát triển khác nhau nếu có ít sự tƣơng tác liên quan đến các chƣơng trình giữa chúng thì càng tốt.
Sự khác biệt giữa các phƣơng pháp phục hồi và khối phƣơng pháp N- phiên bản không phải là nhiều nhƣng điều đó rất quan trọng. Trong phƣơng pháp khối phục hồi truyền thống mỗi thành phần sẽ đƣợc thực hiện thay thế tuần tự cho đến khi tìm thấy một giải pháp có thể chấp nhận đƣợc xác định bởi hệ thống chính. Phƣơng pháp khối phục hồi đƣợc mở rộng để thực hiện bao gồm đồng thời các lựa chọn thay thế khác nhau. Phƣơng pháp dự phòng N-phiên bản thiết kế để hệ thống luôn luôn đƣợc thực hiện bằng phƣơng pháp sử dụng đồng thời N modul phần cứng.
Độ tin cậy của một hệ thống dự phòng N-phiên bản có thể đƣợc mô tả toán học nhƣ sau: 𝑃𝑠 𝑡 = 𝑛! 𝑛 − 𝑖 ! 𝑖! 𝑃𝑚 𝑛−𝑖 𝑡 [1 − 𝑃𝑚 𝑡 ]𝑖 (2.39) 𝑛−𝑚 𝑖=0 Trong đó: n: là số lƣợng các module dự phòng
m: là số lƣợng tối thiểu của các module bắt buộc phải hoạt động chính xác, bỏ qua sự sắp xếp bỏ phiếu.
Ví dụ: Xem xét một hệ thống gồm 5 module yêu cầu 3 module cho kết quả chính xác, giả thiết các module đều có một độ tin cậy là 0,95.
𝑅𝑠 𝑡 = 5! 5 − 𝑖 ! 𝑖! 𝑅𝑚 5−𝑖 𝑡 1 − 𝑅𝑚 𝑡 𝑖 2 𝑖=0 = 𝑅𝑚5 𝑡 + 5𝑅𝑚4 𝑡 1 − 𝑅𝑚 𝑡 + 10𝑅𝑚3 (𝑡)[1 − 𝑅𝑚(𝑡)]2 = 10(0,95)3 − 15 0,95 4 + 6(0,95)5 = 0,9988 2.7 Kết luận
Trong chƣơng hai của luận văn tôi đã trình bày các phƣơng pháp để nâng cao độ tin cậy của hệ thống bằng phƣơng pháp dự phòng cấu trúc.
Phƣơng pháp dự phòng đóng một vai trò quan trọng trong việc tăng cƣờng hệ thống đáng tin cậy. Vấn đề phân bổ dự phòng đã đƣợc phân tích cho nhiều cấu trúc khác nhau hệ thống. Một trong những hình thức thƣờng đƣợc sử dụng dự phòng là chế độ chờ dự phòng, tôi đã trình bày các phƣơng pháp dự phòng cấu trúc: hệ thống dự phòng cấu trúc có tải (còn gọi là dự phòng nóng), hệ thống dự phòng cấu trúc không tải (còn gọi là dự phòng lạnh), hệ thống dự phòng cấu trúc nhẹ tải(còn gọi là hệ thống dự phòng ấm) và hệ thống dự phòng bảo vệ tích cực.
Để nâng cao độ tin cậy của hệ thống ngoài các phƣơng pháp dự phòng cấu trúc hay còn gọi là dự phòng phần cứng thì chúng ta còn kết hợp sử dụng phƣơng pháp nâng cao độ tin cậy của phần mềm.
Độ tin cậy phần mềm là một phần quan trọng trong chất lƣợng phần mềm. Tuy nhiên nâng cao độ tin cậy phần mềm là khó khăn, khó khăn bắt nguồn từ sự hiểu biết và nắm bắt đầy đủ những thông tin về độ tin cậy phần mềm nói chung và đặc điểm của từng phần mềm nói riêng. Có rất nhiều phƣơng pháp và cách thức để nâng cao độ tin cậy của phần mềm tuy nhiên trong phạm vi của luận văn tôi chỉ trình bày sơ lƣợc một số vấn đề về độ tin cậy của phần mềm và đi sâu trình bày một phƣơng pháp N-phiên bản module dự phòng.
Ý tƣởng của phƣơng pháp dự phòng này giống nhƣ phƣơng pháp dự phòng cấu trúc song song. Những modul hệ thống này có thể hỗ trợ thêm cho tính chính xác của hệ thống xuất phát từ những lỗi tiềm tàng trong giai đoạn thiết kế và đặc điểm kỹ thuật của dự án. Mỗi modul trong hệ thống đƣợc thực hiện lên đến N thực thi khác nhau. Các modul độc lập thực hiện các nhiệm vụ song song tƣơng tự nhƣ nhau nhƣng kết quả trả về theo một cách khác nhau, sau đó mỗi modul gửi kết quả thực thi của mình về cho hệ thống và hệ thống sử dụng một số chƣơng trình bỏ phiếu để xác định kết quả trả lời đúng.
Nhƣ vậy, để nâng cao độ tin cậy của hệ thống thì kết hợp giữa các phƣơng pháp dự phòng cấu trúc hay còn gọi là dự phòng phần cứng và phƣơng pháp nâng cao độ tin cậy của phần mềm thì hệ thống sẽ hoạt động sẽ đảm bảo đƣợc độ tin cậy.
CHƢƠNG 3: XÂY DỰNG PHƢƠNG PHÁP NÂNG CAO ĐỘ TIN CẬY CHO HỆ THỐNG MÁY CHỦ DỰ PHÒNG
3.1 Đặt vấn đề
Hiện nay, các hệ thống tính toán kỹ thuật đang dần đƣợc ứng dụng rộng rãi trong các lĩnh vực hoạt động khác nhau của đời sống con ngƣời. Đặc biệt ngày càng nhiều hệ thống máy tính đƣợc sử dụng để quản lý, xử lý và chịu trách nhiệm về các đối tƣợng làm việc theo thời gian thực. Các hệ thống này đƣợc biết đến trong nhiều lĩnh vực: hệ thống kiểm soát nhà máy điện hạt nhân, hệ thống máy tính trong hệ thống ngân hàng, các công ty chứng khoán, hệ thống máy tính trên máy bay, hệ thống thông tin liên lạc vệ tinh,.. Những hệ thống nhƣ vậy cần phải có tính chất: khả năng phục hồi và khả năng sống sót trong suốt thời gian hoạt động của hệ thống vì những thất bại của nó có thể rất tốn kém và để lại những hậu quả nguy hiểm.
Phƣơng pháp đánh giá độ tin cậy của hệ thống dựa trên cơ sở lý thuyết xác suấtvà quá trình ngẫu nhiên đã đƣợc áp dụng và đã đạt đƣợc những kết quả khả quan.Việc đánh giá độ tin cậy của hệ thống dựa trên cấu trúc của hệ thống, thông qua độ tin cậy của từng thành phần hệ thống là một bài toán phức tạp, mà để giải nó cần đến các công cụ nhƣ lý thuyết xác suất, lý thuyết đồ thị, logic. Bài toán nâng cao độ tin cậy của hệ thống qua cấu trúc hệ thống đã đƣợc biết đến trong nhiều lĩnh vực, đặc biệt trong lĩnh vực điện tử - viễn thông nhƣng năm 70 của thế kỷ XX, gắn liền với các dự án phóng vệ tinh và sản xuất các thiết bị có yêu cầu độ tin cậy cao. Các công trình nghiên cứu truyền thống về vấn đề này thƣờng xác định cách để cải thiện độ tin cậy, chủ yếu là sự ra đời của các loại hình dự phòng (công cụ, chức năng, thời gian,...). Các nghiên cứu và kết quả thu đƣợc dựa chủ yếu vào phƣơng pháp toán học (lý thuyết xác suất và thống kê toán học, quy trình ngẫu nhiên, lý thuyết đồ thị, các hoạt động khảo sát,...).
Độ tin cậy [3] là đặc tính then chốt trong sự phát triển kỹ thuật, đặc biệt là khi xuất hiện những hệ thống phức tạp nhằm hoàn thành những chức năng quan trọng trong các lĩnh vực công nghiệp khác nhau. Độ tin cậy của phần tử hoặc của cả hệ thống đƣợc đánh giá một cách định lƣợng dựa trên hai yếu tố cơ bản là: tính làm việc an toàn và tính sửa chữa đƣợc. Dựa vào độ tin cậy của hệ thống
giúp chúng ta có đƣợc kế hoạch bảo trì, dự phòng, nâng cao độ tin cậy tránh đƣợc các sự cố có thể xảy ra.
Sử dụng các phƣơng pháp dự phòng cấu trúc nhằm bảo đảm độ tin cậy của hệ thống tính toán đã là một vấn đề khá phổ biến đối với các hệ thống phức tạp, bên cạnh đó, việc sử dụng hiệu quả trong sƣ phối hợp các phƣơng pháp này vẫn là một vấn đề cần tìm hiểu kỹ và có những đề xuất. Trong chƣơng hai tôi đã trình bày hệ thống hóa về các phƣơng pháp đảm bảo độ tin cậy của hệ thống dựa trên cấu trúc khác nhau của từng hệ thống nhƣ: cấu trúc dự phòng nóng, cấu trúc dự phòng lạnh và cấu trúc dự phòng bảo vệ tích cực,... Trong chƣơng ba cũng đánh giá việc kết hợp cả hai cấu trúc tạo ra độ tin cậy cao hơn và phƣơng pháp bảo vệ tích cực tăng độ tin cậy của hệ thống, đƣa ra hạn chế nhƣ: việc xác định thời điểm cần phải ngắt bỏ bộ phận này để thay thế bộ phận khác trong hệ thống; việc lão hóa các linh kiện điện tử theo thời gian cũng tạo ra độ tin cậy khác nhau dẫn đến sự hỏng hóc của hệ thống. Trong chƣơng ba tôi đã đề xuất phƣơng pháp đảm bảo độ tin cậy của hệ thống theo yêu cầu để khắc phục những sai sót nêu trên. Cuối cùng một số các thông số đƣợc đƣa ra để minh họa cho phƣơng pháp đảm bảo độ tin cậy của hệ thống.
3.2 Phát biểu bài toán
Khi xây dựng một hệ thống điều khiển tập trung, thông tin liên lạc và thu thập thông tin phân phối lớn theo mô hình hệ thống máy tính phân cấp (HCS_ Hierarchical Computing Systems). Hệ thống này đƣợc sử dụng rộng rãi nhờ sự kiểm soát các thành phần theo quy mô và nhu cầu thực tế lớn nhƣ kiến trúc mạng của các nhà cung cấp dịch vụ Internet (Internet Service Provider-ISP) hay phạm vi nhỏ hơn nhƣ các doanh nghiệp [21].
Trong chƣơng hai tác giả đã xem xét và đƣa ra cấu trúc dự phòng tĩnh, cấu trúc dự phòng chủ động đối với các phần tử không phục hồi, đồng thời phân tích