Bài giảng Programming technique: Chương 5 - Lương Mạnh Bá
Số trang: 44
Loại file: pdf
Dung lượng: 0.00 B
Lượt xem: 20
Lượt tải: 0
Xem trước 5 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Bài giảng "Programming technique - Chương 5: Lập trình phòng thủ" giới thiệu tới người đọc các nội dung: Bảo vệ chương trình khỏi các Invalid Inputs, kỹ thuật xử lý lỗi, xử lý ngoại lệ - Exceptions, gỡ rối – debbuging, phương pháp gỡ rối, công cụ gỡ lỗi,... Mời các bạn cùng tham khảo nội dung chi tiết.
Nội dung trích xuất từ tài liệu:
Bài giảng Programming technique: Chương 5 - Lương Mạnh Bá Lập trình phòng thủ (3LT-2BT) SE-SoICT KTLT 5.1Last update 09-2010 DEFENSIVE PROGRAMMING?• Xuất phát từ khái niệm defensive driving.• Khi lái xe bạn luôn phải tâm niệm rằng bạn không bao giờ biết chắc được người lái xe khác sẽ làm gì. Bằng cách đó, bạn có thể chắc chắn rằng khi họ làm điều gì nguy hiểm, thì bạn sẽ không bị ảnh hưởng ( tai nạn).• Bạn có trách nhiệm bảo vệ bản thân, ngay cả khi người khác có lỗi• Trong defensive programming, ý tưởng chính là nếu chương trình (con) được truyền dữ liệu tồi, nó cũng không sao, kể cả khi với CT khác thì sẽ bị fault.• Một cách tổng quát, lập trình phòng thủ nghĩa là : làm thế nào để tự bảo vệ mình khỏi thế giới lạnh lùng, tàn nhẫn của dữ liệu không hợp lệ, các sự kiện mà có thể không bao giờ xảy ra, và các lập trình viên khác ‘sai lầm’ SE-SoICT KTLT 5.2Last update 09-20101. Bảo vệ CT khỏi các Invalid Inputs• Trong thực tiễn :“Garbage in, garbage out.”• Trong lập trình “rác rưởi vào – rác rưởi ra” là điều không chấp nhận• Một CT tốt không bao giờ sãn xuất ra rác rưởi, bất kể đầu vào là gì !• Với 1 CT tốt thì :”rác rưởi vào, không có gì ra”, “rác rưởi vào, có thông báo lỗi” hoặc “không cho phép rác rưởi vào”.• Theo tiêu chuẩn ngày nay, “garbage in, garbage out” là dấu hiệu của những CT tồi, không an toàn SE-SoICT KTLT 5.3Last update 09-2010 Ba cách để xử lý rác vào• Kiểm tra giá trị của mọi dữ liệu từ nguồn bên ngoài – Khi nhận dữ liệu từ file, bàn phím, mạng, hoặc từ các nguồn ngoài khác, hãy kiểm tra đê đảm bảo rằng dữ liệu nằm trong giới hạn cho phép. – Hãy đảm bảo rằng giá trị số nằm trong dung sai và xâu phải đủ ngẵn để xử lý. Nếu một chuỗi được dự định để đại diện cho một phạm vi giới hạn của các giá trị (như một ID giao dịch tài chính hoặc một cái gì đó tương tự), hãy chắc chắn rằng các chuỗi là hợp lệ cho mục đích của nó; nếu không phải từ chối . – Nếu bạn làm việc trên 1 ứng dụng bảo mật, hãy đặc biệt lưu ý đến những dữ liệu có thể tấn công hệ thống :làm tràn bộ nhớ, injected SQL commands, injected html hay XML code, tràn số … SE-SoICT KTLT 5.4Last update 09-2010 Ba cách để xử lý rác vào• Check the values of all routine input parameters – Kiểm tra giá trị của tất cả các tham số truyền vào các hàm cũng cần như kiểm tra dữ liệu nhập từ nguồn ngoài khác• Decide how to handle bad inputs – Khi phát hiện 1 tham số hay 1 dữ liệu không hợp lệ, bạn cần làm gì với nó? Tùy thuộc tình huống, bạn có thể chọn 1 trong các phương án được mô tả chi tiết ở các phần sau. SE-SoICT KTLT 5.5Last update 09-20102 Assertions• 1 macro hay 1 CT con dùng trong quá trình phát triển ứng dụng, cho phép CT tự kiểm tra khi chạy.• Return true >> OK, false >> có 1 lỗi gì đó trong CT.• VD : Nếu hệ thống cho rằng file dữ liệu về khách hàng không bao giờ vượt quá 50 000 bản ghi, CT có thể chứa 1 assertion rằng số bản ghi là • Sử dụng assertions để ghi lại những giả thiết được đưa ra trong code và để loại bỏ những điều kiện không mong đợi. Assertions có thể đc dùng để kiểm tra các giả thiết như : – Các tham số đầu vào nằm trong phạm vi mong đợi (tương tự với các tham số đầu ra) – file hay stream đang được mở (hay đóng) khi 1 CTC bắt đầu thực hiện (hay kết thúc) – 1 file hay stream đang ở bản ghi đầu tiên (hay cuối cùng) khi 1 CTC bắt đầu ( hay kết thúc) thực hiện – 1 file hay stream được mở để đọc, để ghi, hay cả đọc và ghi – Giá trị của 1 tham số đầu vào là không thay đổi bởi 1 CTC – 1 pointer là non-NULL – 1 mảng đc truyền vào CTC có thể chứa ít nhất X phần tử – 1 bảng đã đc khởi tạo để chứa các giá trị thực – 1 danh sách là rỗng (hay đầy) lkhi 1 CTC bắt đầu (hay kết thúc) thực hiện SE-SoICT KTLT 5.7Last update 09-2010• ND cuối không cần thấy các thông báo của assertion ;• Assertions chủ yếu được dùng trong quá trình phát triển hay bảo dưỡng ứng dụng.• Dịch thành mã khi phát triển, loại bỏ khỏi mã trong sản phẩm >>hiệu quả. SE-SoICT KTLT 5.8Last update 09-2010Rất nhiều NNLT hỗ trợ assertions : C++, Java và Visual Basic.Kể cả khi NNLT không hỗ trợ, thì cũng có thể dễ ràng xdVD:#define ASSERT( condition, message ) { if ( !(condition) ) { fprintf( stderr, Assertion %s failed: %s , condition,message ); exit( EXIT_FAILURE ); }} SE-SoICT KTLT 5.9Last update 09-2010Guidelines for Using Assertions• S ...
Nội dung trích xuất từ tài liệu:
Bài giảng Programming technique: Chương 5 - Lương Mạnh Bá Lập trình phòng thủ (3LT-2BT) SE-SoICT KTLT 5.1Last update 09-2010 DEFENSIVE PROGRAMMING?• Xuất phát từ khái niệm defensive driving.• Khi lái xe bạn luôn phải tâm niệm rằng bạn không bao giờ biết chắc được người lái xe khác sẽ làm gì. Bằng cách đó, bạn có thể chắc chắn rằng khi họ làm điều gì nguy hiểm, thì bạn sẽ không bị ảnh hưởng ( tai nạn).• Bạn có trách nhiệm bảo vệ bản thân, ngay cả khi người khác có lỗi• Trong defensive programming, ý tưởng chính là nếu chương trình (con) được truyền dữ liệu tồi, nó cũng không sao, kể cả khi với CT khác thì sẽ bị fault.• Một cách tổng quát, lập trình phòng thủ nghĩa là : làm thế nào để tự bảo vệ mình khỏi thế giới lạnh lùng, tàn nhẫn của dữ liệu không hợp lệ, các sự kiện mà có thể không bao giờ xảy ra, và các lập trình viên khác ‘sai lầm’ SE-SoICT KTLT 5.2Last update 09-20101. Bảo vệ CT khỏi các Invalid Inputs• Trong thực tiễn :“Garbage in, garbage out.”• Trong lập trình “rác rưởi vào – rác rưởi ra” là điều không chấp nhận• Một CT tốt không bao giờ sãn xuất ra rác rưởi, bất kể đầu vào là gì !• Với 1 CT tốt thì :”rác rưởi vào, không có gì ra”, “rác rưởi vào, có thông báo lỗi” hoặc “không cho phép rác rưởi vào”.• Theo tiêu chuẩn ngày nay, “garbage in, garbage out” là dấu hiệu của những CT tồi, không an toàn SE-SoICT KTLT 5.3Last update 09-2010 Ba cách để xử lý rác vào• Kiểm tra giá trị của mọi dữ liệu từ nguồn bên ngoài – Khi nhận dữ liệu từ file, bàn phím, mạng, hoặc từ các nguồn ngoài khác, hãy kiểm tra đê đảm bảo rằng dữ liệu nằm trong giới hạn cho phép. – Hãy đảm bảo rằng giá trị số nằm trong dung sai và xâu phải đủ ngẵn để xử lý. Nếu một chuỗi được dự định để đại diện cho một phạm vi giới hạn của các giá trị (như một ID giao dịch tài chính hoặc một cái gì đó tương tự), hãy chắc chắn rằng các chuỗi là hợp lệ cho mục đích của nó; nếu không phải từ chối . – Nếu bạn làm việc trên 1 ứng dụng bảo mật, hãy đặc biệt lưu ý đến những dữ liệu có thể tấn công hệ thống :làm tràn bộ nhớ, injected SQL commands, injected html hay XML code, tràn số … SE-SoICT KTLT 5.4Last update 09-2010 Ba cách để xử lý rác vào• Check the values of all routine input parameters – Kiểm tra giá trị của tất cả các tham số truyền vào các hàm cũng cần như kiểm tra dữ liệu nhập từ nguồn ngoài khác• Decide how to handle bad inputs – Khi phát hiện 1 tham số hay 1 dữ liệu không hợp lệ, bạn cần làm gì với nó? Tùy thuộc tình huống, bạn có thể chọn 1 trong các phương án được mô tả chi tiết ở các phần sau. SE-SoICT KTLT 5.5Last update 09-20102 Assertions• 1 macro hay 1 CT con dùng trong quá trình phát triển ứng dụng, cho phép CT tự kiểm tra khi chạy.• Return true >> OK, false >> có 1 lỗi gì đó trong CT.• VD : Nếu hệ thống cho rằng file dữ liệu về khách hàng không bao giờ vượt quá 50 000 bản ghi, CT có thể chứa 1 assertion rằng số bản ghi là • Sử dụng assertions để ghi lại những giả thiết được đưa ra trong code và để loại bỏ những điều kiện không mong đợi. Assertions có thể đc dùng để kiểm tra các giả thiết như : – Các tham số đầu vào nằm trong phạm vi mong đợi (tương tự với các tham số đầu ra) – file hay stream đang được mở (hay đóng) khi 1 CTC bắt đầu thực hiện (hay kết thúc) – 1 file hay stream đang ở bản ghi đầu tiên (hay cuối cùng) khi 1 CTC bắt đầu ( hay kết thúc) thực hiện – 1 file hay stream được mở để đọc, để ghi, hay cả đọc và ghi – Giá trị của 1 tham số đầu vào là không thay đổi bởi 1 CTC – 1 pointer là non-NULL – 1 mảng đc truyền vào CTC có thể chứa ít nhất X phần tử – 1 bảng đã đc khởi tạo để chứa các giá trị thực – 1 danh sách là rỗng (hay đầy) lkhi 1 CTC bắt đầu (hay kết thúc) thực hiện SE-SoICT KTLT 5.7Last update 09-2010• ND cuối không cần thấy các thông báo của assertion ;• Assertions chủ yếu được dùng trong quá trình phát triển hay bảo dưỡng ứng dụng.• Dịch thành mã khi phát triển, loại bỏ khỏi mã trong sản phẩm >>hiệu quả. SE-SoICT KTLT 5.8Last update 09-2010Rất nhiều NNLT hỗ trợ assertions : C++, Java và Visual Basic.Kể cả khi NNLT không hỗ trợ, thì cũng có thể dễ ràng xdVD:#define ASSERT( condition, message ) { if ( !(condition) ) { fprintf( stderr, Assertion %s failed: %s , condition,message ); exit( EXIT_FAILURE ); }} SE-SoICT KTLT 5.9Last update 09-2010Guidelines for Using Assertions• S ...
Tìm kiếm theo từ khóa liên quan:
Bài giảng Programming technique Kỹ thuật lập trình Xử lý ngoại lệ Lập trình phòng thủ Bảo vệ chương trình Kỹ thuật xử lý lỗiGợi ý tài liệu liên quan:
-
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 256 0 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 200 0 0 -
Giới thiệu môn học Ngôn ngữ lập trình C++
5 trang 189 0 0 -
Bài giảng Nhập môn về lập trình - Chương 1: Giới thiệu về máy tính và lập trình
30 trang 158 0 0 -
Luận văn: Nghiên cứu kỹ thuật giấu tin trong ảnh Gif
33 trang 150 0 0 -
Báo cáo thực tập Công nghệ thông tin: Lập trình game trên Unity
27 trang 117 0 0 -
Giáo trình về phân tích thiết kế hệ thống thông tin
113 trang 114 0 0 -
LUẬN VĂN: Tìm hiểu kỹ thuật tạo bóng cứng trong đồ họa 3D
41 trang 105 0 0 -
Bài giảng Kỹ thuật lập trình - Chương 10: Tổng kết môn học (Trường Đại học Bách khoa Hà Nội)
67 trang 104 0 0 -
Giáo trình Nhập môn lập trình VB6: Phần 2
184 trang 84 0 0