Assertions - xaydungphanmem

Download Report

Transcript Assertions - xaydungphanmem

Assertion
Assertion là gì
• Định nghĩa: Assertion là một đoạn code cho phép 1 chương
trình tự kiểm tra chính nó trong quá trình thực thi kết quả trả
về mang giá trị true hoặc false. Nếu giá trị của assertion là
true chương trình hoạt động đúng , nếu false là phát hiện lỗi
trong chương trình.
• Lập trình viên sử dụng assertion để mô tả cách thức các đoạn
code hoạt động như thế nào, chứng thực các ràng buộc bên
trong hệ thống.
Một assertion thường nhận 2 đối số: 1 biểu thức luận lý kết quả
trả về là true hoặc false cho biết chương trình chạy sai hay đúng.
Một đối số là 1 messages thông báo cho lập trình viên biết lỗi
của chương trình nếu kết quả là false.
Các assertion thường được tích hợp sẵn trong nhiều ngôn ngữ
như java , C++..
VD: trong java dùng assertion như sau:
Assert 0 <= index && index < length : “ Out of memory”;
• Trong C++ cung cấp macro “ assert” tương tự như hàm nhưng
không có tham số message thông báo lỗi.
Vd: assert(0 <= index && index < length);
Tuy nhiên trong c++ chúng ta có thể dùng macro để tự định
nghĩa 1 assertion như VD sau:
#define assert( condition, message) {
if( !condition) {
LogError (“ Assertion failed: “, #condition, message);
exit ( EXIT_FAILURE);
}
}
Kỹ thuật xử lý lỗi
• Assertion dùng để phát hiện các lỗi không nên xảy ra trong
chương trình . Làm sao mà chúng ta xử lý các lỗi mà mong đợi
chúng sẽ xảy ra? Tùy vào từng trường hợp mà chúng ta có các
phương pháp sau:
–
–
–
–
–
–
–
–
–
Trả về các giá trị đặc biệt không gây ảnh hưởng đến chương trình
Thay thế 1 phần trong các giá trị đúng kế tiếp
Trả về giá trị tại thời điểm trước
Thay thế bằng 1 giá trị gần với giá trị hợp lệ nhất
Ghi các cảnh báo ra file
Trả đến đoạn mã nguồn phát sinh lỗi
Gọi đến một đối tượng chuyên về xử lý lỗi
Hiện lên thông báo lỗi tại đoạn mã nguồn phát sinh ra lỗi đó.
Tắt hệ thống
Xử lý các assertion bị thất bại
• Khi assertion bị thất bại, đầu tiên là nó sẽ truyền thông
báo lỗi đến người dùng bằng nhiều cách (in ra màn hình,
message box, file log...). Khi các thông báo chuẩn đoán
được hiển thị. Có nhiều cách chọn lựa tiếp theo:
–
–
–
–
Kết thúc chương trình
Cho phép thực thi tiếp chương trình
Quăng một ngoại lệ quay về đoạn code bị lỗi.
Cho phép kết hợp 1 hay nhiều cách trên.
Lợi ích của assertions
• Vai trò của các assertion là xác định lỗi trong chương
trình.
• Một lợi ích lớn nữa là giúp việc kiểm thử ứng dụng được
hiệu quả hơn.
• Tuy nhiên assertion chỉ có hiệu quả khi được thực thi
trong đoạn mã nguồn chứa nó.
Giới hạn của assertions
• Bản thân 1 assertion cũng có thể tồn tại các lỗi và do 1
trong các nguyên nhân sau:
– Thông báo lỗi không có thực.
– Không thực hiện được 1 báo cáo lỗi tồn tại trong chương trình
– Not being side-effect free
Assertion có thể tác động đến hiệu năng cùa chương trình:
 Chiếm nhiều thời gian thực thi
 Nắm giữ vùng nhớ
Các assertion có thể làm cho việc kiểm thử chương trình khó
khăn hơn.