18
Tóm lại, tất cả những kỹ thuật này cung cấp một nền tảng cần thiết để ta có cái nhìn gần hơn về một hệ thống phần mềm đúng đắn và bền vững.
Chương 3: Tính đúng đắn của phần mềm
Giả sử có một người đưa cho bạn một chương trình C với 300 000 dòng lệnh và hỏi rằng nó có đúng khơng. Tơi nghĩ rằng rất có khả năng bạn thấy khó và thậm
chí là khơng thể trả lời được. Tuy nhiên, nếu là một cố vấn viên, bạn hãy trả lời “Không” và sau đó tính một giá thật cao vì rất có thể bạn đúng.
Thật sự, để có thể trả lời câu hỏi trên một cách đúng nghĩa, bạn không những cần phải lấy chương trình đó mà còn phải lấy cả lời diễn giải về những gì mà
chương trình đó làm được hay ta gọi chúng là những đặc tả của chương trình. Có những chú thích giống nhau cũng chẳng sao, dĩ nhiên, khi đó ta khơng để
ý đến kích thước của chương trình. Ví dụ, câu lệnh
x := y+1
khơng đúng cũng khơng sai. Vì đúng hay sai chỉ có ý nghĩa khi xét trong quan hệ của nó với một lời
chú dẫn, tức là cái mà người ta mong đợi có được sau khi thực hiện câu lệnh hay ít ra thì cũng là sự ảnh hưởng đến trạng thái của các biến trong chương trình. Do đó,
câu lệnh trên sẽ đúng với đặc tả: “Điều này đảm bảo cho x và y có giá trị khác nhau”
nhưng nó sẽ sai với đặc tả: “Điều này đảm bảo rằng x có giá trị âm”
giả sử các thực thể có kiểu số nguyên. Như vậy, x có thể có kết quả khơng âm sau khi gán. Điều đó tùy thuộc vào giá trị của y.
Ví dụ này nhằm minh họa cho khái niệm “tính đúng đắn” được trình bày bên dưới:
19
Tính đúng đắn của phần mềm
Tính đúng đắn là một khái niệm quan hệ
Một hệ thống phần mềm hay một thành phần phần mềm thì khơng đúng cũng khơng sai. Nó chỉ đúng hay sai khi có liên quan với một đặc tả nào đó. Nói một
cách chính xác, ta không thảo luận những thành phần phần mềm có đúng hay khơng, mà là thảo luận chúng có phù hợp với những đặc tả của chúng hay không.
Do đó, thuật ngữ “tính đúng đắn” khơng được dùng cho những thành phần phần mềm, mà nó được dùng cho từng cặp, mỗi cặp bao gồm một thành phần phần mềm
và một đặc tả. Trong phần này, ta sẽ biết cách biểu diễn những đặc tả thông qua một xác
nhận assertion để giúp ta xác nhận tính đúng đắn của phần mềm. Điều này cho thấy kết quả của việc viết những đặc tả là một bước đầu tiên quan trọng để đảm bảo
rằng phần mềm thật sự đúng. Việc viết những xác nhận cùng lúc hoặc đúng ra là trước khi viết phần mềm sẽ mang lại những lợi ích tuyệt vời như sau:
−
Sản xuất được phần mềm đúng với khi bắt đầu vì nó được thiết kế đúng. Ích lợi này đã được Harlan D.Mills một trong những người khởi đầu đề
xướng việc lập trình có cấu trúc “Structured Programming” trình bày vào năm 1970 trong quyển sách “How to write correct programs and know it” có nghĩa là
“Làm thế nào để viết được những chương trình đúng và biết được nó đúng”. “Biết” ở đây có nghĩa là trang bị cho phần mềm những đối số khi ta viết nó nhằm hiển thị
tính đúng đắn của nó.
−
Có được sự hiểu biết tốt hơn về vấn đề và những cách giải quyết cuối cùng của nó.
−
Việc thực hiện các tài liệu cho phần mềm dễ dàng. Chúng ta sẽ thấy được ở phần sau rằng những xác nhận sẽ đóng một vai trò trung tâm trong việc
hướng đối tượng đến gần tài liệu.
20 −
Cung cấp một căn bản cho việc kiểm tra và debug hệ thống. Trong những phần còn lại chúng ta sẽ tìm hiểu những ứng dụng này.
Trong C, C++ và một số ngôn ngữ khác dưới sự chỉ đạo của Algol W, ta có thể viết một câu lệnh đóng vai trò một xác nhận để kiểm tra một tình trạng nào đó
có được giữ ở một trạng thái nào đó như mong muốn hay khơng khi thực thi phần mềm, và chương trình sẽ khơng được thực thi nếu nó khơng thoả. Mặc dù như thế
cũng có thể làm được những gì mà ta muốn, nhưng việc làm vậy chỉ tượng trưng cho một phần nhỏ của việc sử dụng những lời xác nhận trong phương pháp hướng
đối tượng. Do đó, nếu giống như nhiều người phát triển phần mềm khác thì bạn sẽ quen với những câu lệnh như thế nhưng lại khơng thấy được bức tranh tồn cảnh.
Hầu hết tất cả những khái niệm được bàn ở đây đều sẽ mới lạ với bạn.
Chương 4: Biểu diễn một đặc tả