Tải bản đầy đủ (.doc) (15 trang)

tiểu luận phát triển phần mềm tin cậy (dependable software)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (226.3 KB, 15 trang )

ĐẠI HỌC CÔNG NGHỆ
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

TIỂU LUẬN

PHÁT TRIỂN PHẦN MỀM TIN CẬY
(DEPENDABLE SOFTWARE)

Giảng viên:

Nhóm 20:

TS. Võ Đình Hiếu

Nguyễn Trung Kiên (MHV:
12025228, )

Hà nội, tháng 4/2013


Phát triển phần mềm tin cậy Dependable Software

MỤC LỤC
1 TỔNG QUAN ...........................................................................................................3
2 PHÁT TRIỂN PHẦN MỀM TIN CẬY...................................................................5
3 KẾT LUẬN..............................................................................................................14
4 TÀI LIỆU THAM KHẢO......................................................................................15

2/15



Phát triển phần mềm tin cậy Dependable Software

1

TỔNG QUAN

1.1 Đặt vấn đề
Như chúng ta đã biết, hiện nay các hệ thống máy tính được ứng dụng rộng
rãi trong hoạt động kinh doanh của các tổ chức, doanh nghiệp cũng như trong
cuộc sống của mỗi cá nhân, cùng với sự phát triển đó thì các vấn đề bất cập
phát sinh từ hệ thống và các lỗi phát sinh từ phần mềm cũng tang theo. Một lỗi
trong phần mềm trên máy chủ của một công ty thương mại điện tử có thể dẫn
tới mất mát lượng vốn rất lớn của công ty, thậm chí của cả khách hang của công
ty đó. Một lỗi trong phần mềm nhúng trong hệ thống điều khiển ô tô có thể
khiến hãng sản xuất phải thực hiện đợt truy hồi tốn kém, thậm chí dẫn tới tai
nạn giao thông. Hay sự lây nhiễm các mã độc của một hệ thống máy tính trong
công ty sẽ cần đến các hoạt động quét virus vất vả, cùng với nguy cơ mất các
dữ liệu nhạy cảm rất lớn.
Chính vì các hệ thống máy tính ngày càng quan trọng đối với với các công
ty, cá nhân, hay chính phủ, nên một đặc tính rất cần thiết của hệ thống phần
mềm là phải tin cậy. Để nghiên cứu đặc tính tin cậy nêu trên của phần mềm,
khái niệm “dependability” – tin cậy- được đưa ra bởi Jean-Claude Laprie
(1995) [1], mở đầu cho các tìm hiểu về việc phát triển phần mềm tin cậy. Và
các nghiên cứu, cùng với thực tế ngày nay đã chỉ ra rằng, tính tin cậy của một
hệ thống giờ đây thậm chí đã quan trọng hơn cả những chức năng chi tiết của
hệ thống đó.
Vì vậy, việc tìm hiểu và phát triển các phần mềm tin cậy trở thành một
yêu cầu cấp thiết trong lĩnh vực phát triển phần mềm nói chung. Việc phát
triển phần mềm tin cậy đó không đơn thuần chỉ là một nhiệm vụ, một công
đoạn nhỏ lẻ mà là cả một quá trình đánh giá, phân tích, phát triển và kiểm soát

phần mềm. Để làm rõ hơn điều này, chúng tôi đã tập trung tìm hiểu và tổng
hợp các kiến thức cơ bản đối với việc phát triển phần mềm tin cậy.

3/15


Phát triển phần mềm tin cậy Dependable Software

Xin chân thành cảm ơn TS. Võ Đình Hiếu đã giúp đỡ chúng tôi hoàn
thành tài liệu này.
1.2 Mục tiêu tài liệu
Tài liệu này sẽ làm rõ các nội dung như sau:
- Khái niệm phần mềm tin cậy
- Quy trình phát triển phần mềm tin cậy
- Đề xuất đánh giá đối với hiện trạng phát triển phần mềm tại Việt Nam
hiện nay
1.3 Phạm vi tìm hiểu
Trong khuôn khổ một bài tiểu luận, chúng tôi xác định phạm vi tìm hiểu như
sau
- Đối tượng tìm hiểu: chỉ tập trung vào quy trình phát triển phần mềm xoay
quanh vấn đề phần mềm tin cậy. Một quy trình đầy đủ, theo chuẩn ISO
hoặc CMMI không được đề cập tại đây.
- Phạm vi nội dung: các nội dung được nêu ra ở mức độ tổng quát, có tính
lý thuyết cao, có một số nội dung được tìm hiểu chi tiết dựa trên những
tìm hiểu tài liệu và các kinh nghiệm cá nhân. Đây không phải là một guiline đầy đủ để phát triển được một phần mềm tin cậy.

4/15


Phát triển phần mềm tin cậy Dependable Software


2

PHÁT TRIỂN PHẦN MỀM TIN CẬY

2.1 Khái niệm tin cậy
Có nhiều khái niệm về tính cậy của phần mềm, có thể tìm kiếm bởi công
cụ google, như trang wikipedia coi “tính tin cậy là thước đo của hệ thống
về độ sẵn sàng, tin tưởng và khả năng hỗ trợ bảo trì hệ thống”... Trong lĩnh
công nghệ phần mềm, ta quan tâm đến khái niệm được mô tả bởi I.
Sommerville như sau [2]

Hình 01- Khái niệm tính tin cậy
Có bốn nhân tố cơ bản để xác định độ tin cậy của phần mềm, đó là
1. Tính sẵn sàng (availability): là một hệ thống cung cấp các chức năng
dịch vụ hữu ích tới người dùng một cách liên tục, vào bất cứ thời gian
nào
2. Tính tin tưởng (reliability): trong một giai đoạn bất kỳ, hệ thống sẽ
hoạt động cung cấp dịch vụ chính xác và đúng với những dự tính của
người dùng.
3. Tính an toàn (safely): hệ thống hoạt động không gấy tổn hại đến con
người cũng như môi trường xung quanh
4. Tính bảo mật (security): hệ thống có thể chống lại các tấn công hoặc
5/15


Phát triển phần mềm tin cậy Dependable Software

các hoạt động xâm hại khác
2.2 Quy trình phát triển phần mềm tin cậy

Để xây dựng được một phần mềm có tính tin cậy cao, người phát triển
cần đưa ra một quy trình đầy đủ và xuyên suốt từ lúc đặc tả yêu cầu, xây
dựng giải pháp, phát triển và kiểm thử phần mềm đó. Mỗi giai đoạn có các
đặc điểm và phương thức khác nhau để xây dựng tính tin cậy.
2.2.1 Đặc tả yêu cầu
Đặc tả yêu cầu kiểm soát rủi ro là hướng tiếp cận phổ biến của những
người phát triển phần mềm có yêu cầu cao về tính an toàn và bảo mật.
Những yêu cầu cần mô tả rõ trong đặc này bao gồm:
o Cách thức hệ thống tự bảo vệ mình khỏi các lỗi bên trong
o Ngăn chặn các lỗi hệ thống gây tổi hại tới môi trường xung quanh
o Cách thức ngăn chặn các tấn công từ môi trường lên hệ thống
o Phương thức khôi phục hệ thống khi xảy ra lỗi.
Để làm được điều này, thông thường người phát triển trải qua các bước
phân tích như sau:

Hình 02- Quy trình đặc tả kiểm soát rủi ro

Bước 1. Định ranh rủi ro: thực hiện mô tả các rủi ro tiềm ẩn
Bước 2. Đánh giá rủi ro: phân lớp các rủi ro
6/15


Phát triển phần mềm tin cậy Dependable Software

Bước 3. Phân tích rủi ro: tìm hiểu nguyên nhân thực sự gây ra rủi ro đó
Bước 4. Giảm thiểu rủi ro: đưa ra cách thức để đề phòng, giảm thiểu
rủi ro
Áp dụng phương thức tiếp cận trên, người phát triển cần mô tả các đặc
tính liên quan đến độ tin cậy của phần mềm như sau.
2.2.1.1 Đặc tả tính an toàn

Hệ thống khi xảy ra lỗi có thể ảnh hưởng tới môi trường xung quanh,
gây tổn thương thậm chí ảnh hưởng tới tính mạng con người trong môi
trường đó. Đặc tả tính an toàn là việc chỉ ra các yêu cầu để giảm thiểu
nguy cơ đó.
Thường thì các đặc tả an toàn không quan tâm tới hoạt động thông
thường của hệ thống, nên đôi khi nó mô tả hệ thống cần được tắt đi khi có
sự cố. Do đó người phát triển cần có những mô tả cân đối giữa tính an
toàn và các hoạt động cung cấp dịch vụ thông thường.
2.2.1.2 Đặc tả tính tin tưởng
Tính tin tưởng của hệ thống phụ thuộc vào cả phần cứng, phần mềm, và
năng lực của người điều hành. Khác với tính an toàn hay bảo mật liên
quan trực tiếp tới thiết kế hệ thống, đặc tả tính tin tưởng liên quan nhiều
tới theo dõi hệ thống. Ví dụ như đặc tả yêu cầu hệ thống cần được khởi
động lại 1 lần/ tuần, khi xay ra sự cố thì hệ thống cần phải ghi log thông
tin....
Có một số thước đo cho tính tin tưởng như:
1. Probability of failure on demand (POFOD): khả năng lỗi khi thực thi
yêu cầu. Ví dụ nếu POFOD = 0.001, nghĩa là hệ thống có khả năng
1/1,000 xảy ra lỗi khi một yêu cầu được thực thi.
2. Rate of occurrence of failures (ROCOF): tỉ lệ xảy ra lỗi, tính theo

7/15


Phát triển phần mềm tin cậy Dependable Software

thời gian.
3. Availability (AVAIL): độ sẵn sàng hệ thống. Ví dụ 0.9999 có nghĩa
là hệ thống luôn sẵn sàng 99,99% thời gian hoạt động.
2.2.1.3 Đặc tả bảo mật

Tính bảo mật đôi khi giao thoa với tính an toàn của hệ thống. Thông
thường đặc tả tính bảo mật mô tả các trường hợp không được chấp nhận
của hệ thống, ví dụ như đặc tả không cho phép các truy nhập chưa được xác
thực tới hệ thống.
2.2.2 Xây dựng giải pháp
2.2.2.1 Xây dựng hệ thống bảo vệ
Hệ thống bảo vệ là một thệ thống được kết hợp với các hệ thống khác.
Thường thì nó kiểm soát một số tiến trình, ví dụ như kiểm soát đoàn tàu
không người lái, kiểm soát quy trình sản xuất tự động. Việc kết hợp này,
được mô tả như sơ đồ dưới đây

Hình 03- Xây dựng hệ thống bảo vệ

8/15


Phát triển phần mềm tin cậy Dependable Software

2.2.2.2 Kiến trúc tự giám sát
Kiến trúc tự giám sát là kiếm trúc hệ thống được thiết kế để giám sát các
hoạt động của chính nó và thực thi một số nhiệm vụ khi lỗi hệ thống được
phát hiện. Phương pháp chung thực hiện việc này là chia hoạt động thành
một số kênh riêng biệt và so sánh kết quả đầu ra của các kênh đó, nếu giống
nhau nghĩa là hoạt động bình thướng, còn nếu có sai khác nghĩa là hệ thống
phát sinh lỗi.

Hình 04- Kiến trúc hệ thống tự giám sát
2.2.2.3 Kiến trúc hệ thống N-version
Trước hết, ta tìm hiệu về hệ thống TMR – triple modular redundancy, là
hệ thống mà ở đó mỗi thành phần phần cứng đều có ba (hoặc hơn) bảo

sao. Giá trị output của mỗi thành phần được chạy qua bộ so sánh hoạt
động theo cơ chế “đa số phiếu”, tức là nếu có 2 hoặc ba giá trị output
giống nhau thì đó sẽ là giá trị đúng, nếu có giá trị khác đi thì nó sẽ bị loại
bỏ hoặc được sửa lỗi

9/15


Phát triển phần mềm tin cậy Dependable Software

Hình 05- Hệ thống TRM
Tương tụ cách hoạt động như vậy, hệ thống phần mềm chia thành N
phiên bản chạy song song được giới thiệu bởi Avizienis (1985) [3]. Một
hệ thống phần mềm sẽ được thược hiện bởi nhiều nhóm khác nhau,
thường được thực thi trên các máy tính khác nhau, và cũng được thực thi
theo cơ chế “đa số phiếu”

Hình 06- Kiến trúc hệ thống N-version
So sánh với hệ thống tự giám sát thì kiến trúc hệ thống N-version tốn
kém ít hơn trong việc phát triển phần mềm vì không cần hệ thống giám
sát bên trong. Tuy nhiên việc phần mềm được thực hiện bởi nhiều nhóm
khác nhau lại khiến chi phí phát triển rất lớn.
2.2.3 Lập trình
Thông thường trong giai đoạn lập trình thì độ tin cậy của phần mềm phụ
thuộc khá nhiều vào trình độ của lập trình viên. Có nhiều cách thức lập
trình, cũng như nhiều loại ngôn ngữ lập trình khách nhau, tuy nhiên trên
quan điểm phát triển phần mềm tin cậy thì một số guide-line (hướng dẫn)
dưới đây là hữu ích.
2.2.3.1 Kiểm soát sự truy cập thông tin trong chương trình
Chỉ nhưng cá nhân cần biết một số thông tin mới được phép truy cập các


10/15


Phát triển phần mềm tin cậy Dependable Software

thông đó, nhưng thành phần không liên quan khác sẽ không được truy cập.
2.2.3.2 Kiểm tra tất cả giá trị nhập vào
Nên kiểm tra dữ liệu đầu vào ngay khi nó được đọc từ môi trường. Thông
thường ta kiểm tra một số yếu tố như
1. Kiểm tra phạm vi dữ liệu (ví dụ từ 0.0 đến 1.0)
2. Kiểm tra kích thước dữ liệu (ví dụ tài khoản ngân hàng phải là 8 chữ số)
3. Kiểm tra định dang dữ liệu (ví dụ dữ liệu email, tên người...)
4. Kiểm tra ý nghĩa dữ liệu (ví dự lượng điện tiêu thụ gia đình trong các
tháng thường là tương đương nhau)
2.2.3.3 Cung cấp quy trình xử lý cho tất cả ngoại lệ
Khi có một ngoại lệ xảy ra, nên thực hiện
1. Báo cho các thành phần mức cao hơn biết ngoại lệ xảy ra và cung cấp
các thông tin về ngoại lệ đó.
2. Thực thi một số xử lý liên quan tới ngoại lệ, như khôi phục dữ liệu.
3. Nên chuyển quyền điều khiển ngoại lệ tới hệ thống hỗ trợ chạy run-time
2.2.3.4 Hạn chế sử dụng các cấu trúc dễ gây lỗi
Một số cấu trúc trong các ngôn ngữ lập trình dễ gây lỗi, nên ta cần hạn chế
sử dụng, ví dụ như:
1. Lệnh rẽ nhánh go-to
2. Số dấu phẩy động
3. Con trỏ
4. Khởi tạo động bộ nhớ
5. Chạy song song
6. Đệ quy

11/15


Phát triển phần mềm tin cậy Dependable Software

7. Gọi ngắt hệ thống
8. Thừa kế
9. Đặt tên gọi liên kết (alias)
10.Dãy không xác định độ dài trước
11.Xử lý dữ liệu input mặc định
2.2.3.5 Cung cấp khả năng khởi tạo lại
Trong rất nhiều hệ thống, ta cần phải cung cấp khả năng khởi tạo lại, bằng
cách luôn tạo ra bản sao dữ liệu trước mỗi xử lý. Các xử lý được thực hiện
trên bản sao đó chứ không thực hiện trực tiếp lên dữ liệu gốc. Một số ví dụ
nhứ
1. Trong thương mại điện tử, cần lưu bản sao các dữ liệu trên form người
dùng đã nhập vào, cho phép người dùng truy cập và submit mà không
cần nhập lại nhiều lần
2. Trong các giao dịch, cần tự động sao lưu các dữ liệu đề phòng xảy ra
mất mát thì ta có thể lấy lại dữ liệu gần nhất.
2.2.3.6 Kiểm tra tất cả biên giới của dãy
Tất cả ngôn ngữ đều cho phép định nghĩa các dãy, là cấu trúc lưu các dữ
liệu tương đồng được truy cập bằng chỉ số index. Ta cần kiểm tra biên giới
của dãy tránh trường hợp xảy ra lỗi bộ nhớ do vượt giới hạn dãy.
2.2.3.7 Đặt time-out khi gọi các thành phần khác
Nhiều hệ thống phân tán, các thành phần đặt trên các máy tính khác nhau
và được gọi chéo lẫn nhau. Khi thành phần A gọi tới B và đợi phản hồi,
nhưng B lại bị lỗi nên không phản hồi được, thì thành phần A sẽ không tiếp
tục xử lý được nữa và nhiều khi sẽ bị treo. Để tránh xảy, ta cần đặt time-out
trước khi gọi thành phần khác.


12/15


Phát triển phần mềm tin cậy Dependable Software

2.2.3.8 Đặt tên các hằng số theo giá trị của nó trong thế giới thực
Việc đặt tên các hằng số theo giá trị nó mang theo có các lợi ích nhứ
1. Hạn chế lỗi sử dụng sai giá trị.
2. Khi giá trị thay đổi, ta chỉ cần đổi giá trị hằng số đó mà không phải tìm
kiếm cả chương trình.

13/15


Phát triển phần mềm tin cậy Dependable Software

3

KẾT LUẬN
Phần mềm tin cậy là một yêu cầu cần thiết trong rất nhiều lĩnh vực trong
cuộc sống hiện nay, tuy nhiên việc phát triển phần mềm tin cậy không phải
là một vấn đề đơn giản. Yêu cầu về tính tin cậy của phần mềm thậm chí
vượt qua cả yêu cầu về các chức năng trong phần mềm, đặc biệt trong các
lĩnh vực điều khiển tự động ô tô, máy bay, lĩnh vực chứng khoán, thương
mại điện tử, y tế... Chính vì thế, việc tìm hiểu, làm chủ và từng bước ứng
dụng phát triển phần mềm tin cận là một thách thức đối với người phát triển
phần mềm.
Tại Việt Nam hiện nay, nền công nghệ thông tin đang trong giai đoạn phát
triển, từ việc xây dựng các phần mềm quản lý, điều hành cho các đơn vị, tổ

chức vừa và nhỏ, đang dần chuyển sang các hệ thống lớn cho các tập đoàn,
tổ chức chính phủ, hoặc các hệ thống phục vụ lượng lớn người dùng như
viễn thông và dịch vụ trực tuyến. Chính vì vậy, trước đây yêu cầu về phần
mềm tin cậy chưa thực sự cấp thiết, nhưng đây là sẽ một yếu tố then chốt
trong giai đoạn tiếp theo. Môt doanh nghiệp phát triển phần mềm có thực
sự tồn tại được trong giai đoạn mới này hay không, phụ thuộc một phần vào
tính tin cậy của các sản phẩm phần mềm do họ tạo ra .

14/15


Phát triển phần mềm tin cậy Dependable Software

4

TÀI LIỆU THAM KHẢO
1. [1] />2. [2] I. Sommerville, Software Engineering 9th, 2010, chapter 11.1
Dependability properties
3. [3] />4. I. Sommerville, Software Engineering 9th, 2010.
5. A. Avizienis, J.-C. Laprie and B. Randell: Fundamental Concepts of Dependability.

Research Report No 1145, LAAS-CNRS, April 2001

15/15



×