Phân tích source code và các giải pháp nâng cao kỹ thuật viết mã loại bỏ lỗi lập trình và tăng hiệu quả của chương trình

102 2 0
Phân tích source code và các giải pháp nâng cao kỹ thuật viết mã loại bỏ lỗi lập trình và tăng hiệu quả của chương trình

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BỘ GIÁO DỤC VÀ ĐÀO TẠO BÙI QUANG THẮNG TRƢỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI - Bùi Quang Thắng CÔNG NGHỆ THƠNG TIN PHÂN TÍCH SOURCE CODE VÀ CÁC GIẢI PHÁP NÂNG CAO KỸ THUẬT VIẾT MÃ LOẠI BỎ LỖI LẬP TRÌNH VÀ TĂNG HIỆU QUẢ CỦA CHƢƠNG TRÌNH LUẬN VĂN THẠC SĨ KỸ THUẬT CƠNG NGHỆ THƠNG TIN KHỐ 2011B Hà Nội – Năm 2013 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƢỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI - Bùi Quang Thắng PHÂN TÍCH SOURCE CODE VÀ CÁC GIẢI PHÁP NÂNG CAO KỸ THUẬT VIẾT MÃ LOẠI BỎ LỖI LẬP TRÌNH VÀ TĂNG HIỆU QUẢ CỦA CHƢƠNG TRÌNH Chuyên ngành: Công nghệ thông tin LUẬN VĂN THẠC SĨ KỸ THUẬT NGƯỜI HƯỚNG DẪN KHOA HỌC PGS.TS HUỲNH QUYẾT THẮNG Hà Nội – Năm 2013 MỤC LỤC Mục lục Danh sách bảng Danh sách hình Danh sách chữ viết tắt Lời nói đầu Chương 1: Tổng quan viết mã an tồn phân tích mã nguồn 11 1.1 Tổng quan viết mã an toàn 11 1.1.1 Viết mã an toàn .11 1.1.1.1 Đặt vấn đề 11 1.1.1.2 Viết mã an tồn gì? 11 1.1.2 Các kỹ thuật tiêu biểu 13 1.2 Tổng quan phân tích mã nguồn loại bỏ lỗi lập trình làm tăng hiệu chương trình 13 1.2.1 Làm tăng hiệu chương trình máy tính .13 1.2.1.1 Tối ưu hóa chương trình gì? 14 1.2.1.2 Tối ưu mã nguồn 15 1.2.2 Luật .15 1.2.2.1 Đặt vấn đề 15 1.2.2.2 Luật gì? 16 1.2.2.3 Nguồn luật .16 1.2.3 Cây cú pháp trừu tượng 17 1.2.3.1 Đặt vấn đề 17 1.2.3.2 Khái niệm .19 1.3 Nhiệm vụ luận văn 20 1.4 Kết chương 20 Chương 2: Tìm hiểu số lỗ hổng bảo mật kỹ thuật loại bỏ lỗi lập trình làm tăng hiệu cho chương trình 21 2.1 Một số lỗ hổng bảo mật phổ biến 21 2.1.1 Tấn công lỗi tràn đệm (Buffer Overflow) .21 2.1.2 Tấn công thông qua lỗi tràn số nguyên (Integer overflow) 22 2.1.3 Tấn công qua lỗi định dạng chuỗi (Format string attack) .22 2.1.4 Tấn công việc chèn câu lệnh (Command Injection) 23 2.1.5 Tấn công chèn câu truy vấn SQL (SQL Injection) 24 2.1.6 Tấn công dựa lỗi tương tranh (Race condition) 25 2.1.7 Tấn công tham số giả mạo (Parameter tampering) 27 2.1.8 Tấn công đầu độc cookie (Cookie Poisoning) .28 2.1.9 Các kiểu công khác 28 2.1.9.1 Thiếu kiểm tra liệu đầu vào (Unvalidate Input) .28 2.1.9.2 Lỗ hổng thực thi mã script độc (Cross Site Scripting) - XSS .29 2.1.9.3 Bắt lỗi ghi lại lỗi không (Improper Error Handling and Logging) 30 2.2 Các kĩ thuật loại bỏ lỗi lập trình làm tăng hiệu chương trình 32 2.2.1 Dịch chuyển mã (Code Motion) 32 2.2.2 Tối ưu nhánh (Branch optimization) 33 2.2.3 Truyền số (Constant propagation) .34 2.2.4 Phủ số (Constant folding) 34 2.2.5 Loại bỏ biểu thức chung (Common sub-expression elimination) 34 2.2.6 Loại bỏ câu điều kiện vòng lặp (Loop unswitching) 35 2.2.7 Loại bỏ mã chết (Dead code elimination) 35 2.2.8 Loại bỏ biến chết (Dead store elimination) 36 2.2.9 Tái liên kết (Reassociation) 37 2.2.10 Dịch chuyển biến (Store motion) 37 2.2.11 Giảm cường độ (Strength Reduction) .37 2.3 Kết chương 38 Chương 3: Các kỹ thuật quy tắc viết mã an toàn áp dụng xây dựng phần mềm tảng NET Framework 39 3.1 Quy trình chi tiết kỹ thuật viết mã an tồn loại bỏ lỗi lập trình 39 3.1.1 Xây dựng tập luật 40 3.1.2 Chiến lược áp dụng luật 40 3.1.2.1 Sử dụng luật phân tích mã nguồn 40 3.1.2.2 Sử dụng luật thay đổi mã nguồn 41 3.1.3 Ưu điểm chiến lược đề xuất 42 3.2 Quy trình phân tích mã nguồn tìm kiếm lỗ hổng bảo mật 43 3.3 Các kỹ thuật điển hình ngăn chặn lỗ hổng bảo mật áp dụng tảng NET Framework 44 3.3.1 Các kỹ thuật ngăn chặn lỗ hổng bảo mật 44 3.3.1.1 Kiểm tra liệu đầu vào (Validate Input) .44 3.3.1.2 Tràn đệm (Buffer Overflow) 45 3.3.1.3 Thực thi mã script độc - XSS (Cross Site Scripting) .46 3.3.1.4 Chèn câu lệnh (Injection Command) .47 3.3.1.5 Chèn câu truy vấn SQL (SQL Injection) .48 3.3.1.6 Kiểm soát lỗi kiện 49 3.3.2 Chính sách Luật cho việc viết mã nguồn 49 3.3.2.1 Kiểm tra đầu vào (Input Validation) 49 3.3.2.2 Tràn đệm (Buffer Overflow) 54 3.3.2.3 Thực thi mã script độc - XSS (Cross Site Scripting) .55 3.3.2.4 Chèn câu lệnh (Injection Command) .57 3.3.2.5 Chèn câu truy vấn SQL (SQL Injection) .58 3.4 Các quy tắc viết mã nguồn áp dụng NET Framework .59 3.4.1 Mục tiêu quy tắc gì? 59 3.4.2 Xây dựng quy tắc cho ngơn ngữ lập trình C# dựa tảng NET Framework 61 3.5 Áp dụng xây dựng ứng dụng dientutieudung.vn .62 3.5.1 Cấu trúc ứng dụng dientutieudung.vn 62 3.5.2 Nhận định lỗ hổng bảo mật có ứng dụng 63 3.5.3 Hướng giải lỗ hổng cho website dientutieudung.vn .64 3.5.3.1 Áp dụng quy tắc để tối ưu mã nguồn 64 3.5.3.2 Áp dụng kỹ thuật để ngăn chặn lỗ hổng bảo mật 66 3.5.4 Thử nghiệm kết 68 3.5.4.1 Phần mềm áp dụng để kiểm tra lỗ hổng bảo mật 68 3.5.4.2 Thử nghiệm 70 3.5.4.3 Kết 70 3.6 Kết chương 71 Kết luận hướng phát triển .72 Kết luận 72 Kiến nghị .74 Định hướng phát triển 75 Danh mục tài liệu tham khảo 76 Phụ lục 79 DANH SÁCH BẢNG Bảng 1: Ví dụ kỹ thuật dịch chuyển mã 32 Bảng 2: Ví dụ kỹ thuật tối ưu nhánh 33 Bảng 3: Ví dụ kỹ thuật truyền số 34 Bảng 4: Ví dụ kỹ thuật phủ số 34 Bảng 5: Ví dụ kỹ thuật loại bỏ biểu thức chung 35 Bảng 6: Ví dụ kỹ thuật loại bỏ câu điều kiện vịng lặp 35 Bảng 7: Ví dụ kỹ thuật loại bỏ mã chết .36 Bảng 8: Ví dụ kỹ thuật loại bỏ biến chết .36 Bảng 9: Ví dụ kỹ thuật tái liên kết .37 Bảng 10: Ví dụ kỹ thuật dịch chuyển biến 37 Bảng 11: Ví dụ kỹ thuật giảm cường độ 37 Bảng 12: Các công cụ dùng để kiểm tra đầu vào .45 DANH SÁCH HÌNH Hình 1: Ví dụ cú pháp trừu tượng [15] 20 Hình 2: Quá trình tương tranh 26 Hình 3: Kiểm tra liệu đầu vào để tránh SQL Injection .28 Hình 4: Cross Site Scripting .29 Hình 5: Việc hiển thị lỗi cung cấp thông tin cho kẻ công nhiều thông tin hệ thống .31 Hình 6: Cấu trúc ứng dụng ĐTTD 63 Hình 7: Giao diện phần mềm FxCop 68 Hình 8: Giao diện cấu hình StyleCop 69 Hình 9: Kết phân tích code StyleCop cho CMS 70 Hình 10: Kết phân tích code StyleCop cho Show .71 DANH SÁCH CÁC CHỮ VIẾT TẮT Chữ viết tắt Tên tiếng Anh Tên tiếng Việt AST Abstract Syntax Tree Cây cú pháp trừu tượng CVE Common Vulnerabilities and Danh sách lỗ hổng bảo mật Exposures API Application Programming Giao diện lập trình ứng dụng Interface CAS Code Access Security Bảo vệ mã CLR Common Language Runtime Ngôn ngữ chạy thông thường CSDL Database Cơ sở liệu DOM Document Object Model Mơ hình Đối tượng Tài liệu ĐTTD Điện tử tiêu dùng GC Garbage Collection Bộ phận thu gom rác IL Intermediate Language Ngôn ngữ thông dịch JIT Just-In-Time Đúng thời điểm Người viết luận văn NVLV OWASP SQL Open Web Application Tổ chức bảo mật web ứng Security Project dụng Structured Query Language Ngôn ngữ truy vấn có cấu trúc XSS Thực thi mã script độc Cross-Site Scripting bên phần tử namespace, trừ tập tin không chứa phần tử namespace Ví dụ: namespace using System; using Guid = System.Guid; namespace Microsoft.Sample { public class Program { } } Chúng ta sửa chúng sau: namespace Microsoft.Sample { using System; using Guid = System.Guid; public class Program { } } Đặt phần tử R1202 Các phần tử phải đƣợc đặt vào trật tự Mô tả: tập tin Vi phạm quy tắc xảy phần tử tập tin khơng theo chương trình đặt theo thứ tự mô tả tiêu chuẩn Tuân thủ quy tắc này, phần tử cấp độ gốc tập tin namespace phải đặt theo thứ tự sau: Extern Alias Directives  Using Directives  Namespaces  Delegates  Enums  Interfaces  Structs  Classes Trong lớp, struct hay interface, phần tử phải đặt theo thứ tự sau: Fields  Constructors 86  Finalizers (Destructors)  Delegates  Events  Enums  Interfaces  Properties  Indexers  Methods  Structs  Classes Việc tuân thủ chương trình đặt tiêu chuẩn dựa kiểu phần tử làm tăng khả đọc bảo trì tập tin khuyến khích tái sử dụng mã R1203 Các thị (using) phải đƣợc sếp theo bảng chữ Mô tả: Đặt thị sử dụng bảng chữ Vi phạm quy tắc xảy thị sử dụng không xếp theo bảng chữ của namespace namespace Phân loại thị bảng chữ làm cho mã dễ dàng để đọc, với tất mục dễ dàng việc xác định namespace sử dụng mã Các namespace namespace hệ thống ngoại lệ cho quy tắc luôn đặt trước tất namespace khác R1204 Các kiện Accessors phải đƣợc sếp theo trật tự Mô tả: hệ thống Hãy đặt accessor Add trước Vi phạm quy tắc xảy Add Accessor đặt sau Remove Accessor Tuân thủ quy tắc remove accessor Add Accessor phải đặt trước Remove Accessor Ví dụ: public event EventHandler NameChanged { remove { this.nameChanged -= value; } add { this.nameChanged += value; } } Chúng ta sửa sau: public event EventHandler NameChanged { 87 add { this.nameChanged += value; } remove { this.nameChanged -= value; } } R1205 Các truy xuất thuộc tính (Property Accessors) phải đƣợc sếp Mô tả: Hãy sếp truy xuất Vi phạm quy tắc xảy accessor get đặt sau accessor set nằm thuộc tính thuộc tính theo indexer Tuân thủ quy tắc này, accessor get xuất trước accessor set Ví dụ: public string Name { set { this.name = value; } get { return this.name; } } trật tự mô tả Theo quy tắc sửa sau: public string Name { get { return this.name; } set { this.name = value; } } I.4 Nhóm đặt tên R1301 Các phần tử phải đƣợc đặt tên bắt đầu với chữ viết hoa viết liền Mô tả: Thay đổi tên phần tử để Vi phạm quy tắc xảy tên số kiểu phần tử không bắt đầu chữ hoa Các bắt đầu với chữ dạng sau phần tử nên sử dụng chữ hoa chữ (UpperCaseLetter) tên chữ hoa, đặt phần tử: namespace, lớp, enums, cấu trúc, delegates, kiện, methods property mục Ngồi ra, lĩnh vực mà cơng khai nội bộ, đánh dấu với thuộc tính const nên bắt lớp 88 đầu với chữ hoa Lĩnh vực đọc không tin phải đặt tên theo chữ hoa NativeMethods Nếu lĩnh vực tên biến thiết kế để phù hợp với tên mục liên quan đến Win32 thích hợp COM, cần phải bắt đầu với chữ thường, đặt lĩnh vực biến lớp NativeMethods đặc biệt Một lớp NativeMethods lớp mà có tên kết thúc NativeMethods, thiết kế giữ chỗ cho Win32 COM wrapper Thêm chữ I R1302 Tên Interface phải bắt đầu chữ I hoa Mô tả: vào trước tên Vi phạm quy tắc xảy tên Interface không bắt đầu với chữ in hoa I tên Interface interface, nên luôn bắt đầu với I Ví dụ, ICustomer đặt mục Nếu field tên biến thiết kế để phù hợp với tên mục liên quan đến Win32 lớp COM, khơng thể bắt đầu chữ I, đặt field biến lớp NativeMethods NativeMethods đặc biệt Một lớp NativeMethods lớp mà có tên kết thúc NativeMethods, thích hợp thiết kế giữ chỗ cho Win32 COM wrapper Thay đổi tên R1303 Tên số phải bắt đầu chữ hoa Mô tả: trường số để Vi phạm quy tắc xảy tên đánh dấu với thuộc tính const khơng bắt đầu với bắt đầu với chữ hoa chữ chữ hoa, Nếu field tên biến thiết kế để phù hợp với tên mục liên quan đến Win32 đặt mục 89 COM, cần phải bắt đầu với chữ thường, đặt field biến lớp lớp NativeMethods đặc biệt Một lớp NativeMethods lớp mà, có tên kết thúc NativeMethods NativeMethods, thiết kế giữ chỗ cho Win32 COM wrapper thích hợp Hãy loại bỏ tất R1304 Tên trƣờng không sử dụng ngôn ngữ Hungarian Mơ tả: kí hiệu Vi phạm quy tắc xảy ký hiệu ngôn ngữ Hungary sử dụng việc đặt tên Hungarian khỏi field biến Việc sử dụng ký hiệu Hungary trở nên phổ biến C++, xu tên biến hướng C # tên biến mô tả nhiều dài đối tượng Thêm vào đó, trình soạn thảo đại ngày Visual Studio làm cho việc định danh thông tin chi tiết các biến hay đối tượng đơn giản nhiều việc đưa trỏ chuột qua biến đối tượng có đầy đủ thơng tin Điều làm cho việc sử dụng kí hiệu Hungarian giảm dần khơng cần thiết R1305 Tên đối tƣợng có khả truy cập phải bắt đầu chữ hoa Mô tả: Thay đổi tên đối tượng để Vi phạm quy tắc xảy tên đối tượng có khả truy cập public internal bắt bắt đầu với chữ đầu chữ thường Đối tượng có khả truy cập Public Internal phải bắt đầu chữ hoa, đặt mục lớp hoa Nếu đối tượng tên biến thiết kế để phù hợp với tên mục liên quan đến Win32 NativeMethods 90 COM, cần phải bắt đầu với chữ thường, đặt đối tượng biến lớp thích hợp NativeMethods đặc biệt Một lớp NativeMethods lớp mà, có tên kết thúc NativeMethods, thiết kế giữ chỗ cho Win32 COM wrapper I.5 Các quy tắc hiển thị mã nguồn Chắc chắn R1501 Khung xoắn {} phải nằm dịng riêng Mơ tả: hai mở Vi phạm quy tắc xảy mở đóng khung xoăn {} nằm nằm dịng với câu lệnh, phần đóng dấu ngoặc tử biểu thức Ví dụ: nhọn public object Method() { lock (this) { return this.value; } } đặt dòng riêng Câu lệnh sai mở xoăn { nằm dòng lock(this) Chúng ta sửa sau: public object Method() { lock (this) { return this.value; } } Viết lại phần R1502 Các phần tử khơng đƣợc nằm dịng Mơ tả: tử để mở rộng Vi phạm quy tắc xảy phần tử bao bọc mở đóng dấu ngoặc nhọn viết nhiều dịng 91 dịng đơn Ví dụ: public object Method() { return null; } Hành vi vi phạm quy định xảy tồn phương thức viết dòng Phương thức nên viết nhiều dịng, với việc mở đóng dấu ngoặc nhọn dòng riêng chúng, sau: public object Method() { return null; } Hãy loại bỏ R1503 Mã khơng chứa nhiều dịng trắng hàng Mơ tả: dịng trắng Để cải thiện khả đọc mã này, đòi hỏi dòng trắng tình định, cấm dịng trắng tình khác Điều dẫn đến mơ hình trực quan qn mã, mà cải thiện cơng nhận khả đọc mã quen thuộc Vi phạm quy tắc xảy mã có chứa nhiều dịng trống hàng Ví dụ: public bool Enabled { get { Console.WriteLine("Getting the enabled flag."); return this.enabled; } } Điều vi phạm quy tắc việc cần thiết loại bỏ dòng trắng đoạn mã 92 R1504 Dấu mở ngoặc nhọn { không đƣợc chèn trƣớc dịng trắng Mơ tả: Hãy chắn khơng có dịng Để cải thiện khả đọc mã này, đòi hỏi dòng trắng tình trắng đằng trước định, cấm dịng trắng tình khác Điều dẫn đến mơ hình trực quan dấu quán mã, mà cải thiện công nhận khả đọc mã quen thuộc mở ngoặc nhọn Vi phạm quy tắc xảy mở xoăn khung trước dòng trống Ví dụ: public bool Enabled { get { return this.enabled; } } Đoạn mã tạo hai trường hợp vi phạm quy tắc này, có đến hai vị trí mở dấu ngoặc nhọn mà trước có dịng trống Hãy loại bỏ dịng R1505 Khơng đƣợc có dịng trắng cuối file Mơ tả: trắng cuối file Để cải thiện bố cục mã, khơng cần dịng trắng cuối file Vi phạm quy tắc xảy nhiều dòng trống cuối tập tin II Các quy tắc bảo trì mã nguồn 93 R1401 Câu lệnh không đƣợc sử dụng dấu ngoặc đơnn không cần thiết Mô tả: Hãy loại bỏ dấu ngoặc Chúng ta chèn dấu ngoặc đơn chỗ mà có kiểu cơng thức, câu lệnh, truy vấn đơn không cần nhiều trường hợp dấu ngoặc đơn cải thiện khả đọc mã Tuy nhiên, việc sử thiết dụng nhiều dấu ngoặc đơn tác dụng ngược lại, làm cho khó khăn để đọc trì mã Vi phạm quy tắc xảy ngoặc đơn sử dụng tình mà chúng cung cấp khơng có giá trị thực tiễn Thơng thường, điều xảy lúc ngoặc đơn bao quanh biểu thức mà không yêu cầu nghiêm ngặt việc sử dụng dấu ngoặc đơn, biểu thức nằm gốc câu lệnh Ví dụ, dịng sau tất mã có dấu ngoặc khơng cần thiết dẫn đến hành vi vi phạm quy tắc này: int x = (5 + b); string y = (this.Method()).ToString(); return (x.Value); Chúng ta loại bỏ hầu hết dấu ngoặc đơn đây: int x = + b; string y = this.Method().ToString(); return x.Value; Hãy thêm mức độ R1402 Phải định nghĩa mức độ truy cập Mô tả: truy cập vào C# cho phép phần tử xác định mà khơng có mức độ truy cập Tùy thuộc vào loại phần tử, C# phần tử 94 tự động gán mức độ truy cập vào phần tử trường hợp Quy tắc yêu cầu mức độ truy cập xác định cách rõ ràng cho phần tử Điều loại bỏ cần thiết cho người đọc đưa giả định mã, nâng cao khả đọc mã Hãy tạo file R1403 Một file có lớp (class) Mơ tả: lớp theo Vi phạm quy tắc xảy tập tin C # có nhiều lớp Tăng khả bảo trì dài hạn mơ tả mã bản, lớp nên đặt tập tin riêng mình, tên tập tin cần phản ánh tên lớp tập tin Có thể đặt phần tử hỗ trợ khác tập tin lớp, chẳng hạn delegates, enums, vv, chúng có liên quan đến lớp Nó đặt nhiều phần partial class giống tập tin Hãy R1404 Mỗi file nên có namespace Mô tả: tạo namespace Vi phạm quy tắc xảy tập tin C # có nhiều namespace Tăng khả bảo trì file dài hạn mã bản, tập tin nên chứa khơng gian tên Hãy R1405 Hãy loại bỏ mã không thực cần thiết loại bỏ mã không Mô tả: Vi phạm quy tắc xảy tập tin có chứa mã loại bỏ mà khơng thay đổi logic tổng cần thiết 95 thể mã Ví dụ sau loại bỏ hồn tồn lệnh try-catch mà khơng ảnh hưởng đến logic (vì khơng có bắt kì hoạt động mã nằm đó, hồn tồn xóa bỏ khối try-catch này): try { } catch (Exception ex) { } III Các quy tắc tạo tài liệu Để khắc phục vi R1601 Các phần tử phải đƣợc thích Mơ tả: phạm quy tắc này, Cú pháp C# cung cấp chế để chèn thích cho lớp phần tử trực tiếp vào mã này, thêm điền thông qua việc sử dụng tiêu đề thích Xml Để giới thiệu tiêu đề mô tả cú vào tiêu đề pháp tiêu đề, xem viết sau: http://msdn.microsoft.com/en-us/magazine/cc302121.aspx thích cho Vi phạm quy tắc xảy phần tử hoàn toàn thiếu tiêu đề thích Trong C # loại phần tử sau phần tử có tiêu đề thích: lớp, constructor, delegates, enums, kiện, finalizers, indexers, interface, phương thức, property, cấu trúc R1602 Mỗi file phải có thích đầu file Thêm tiêu đề Mô tả: tập tin tiêu chuẩn 96 Vi phạm quy tắc xảy nguồn tập tin C # thiếu phần đầu tập tin Phần đầu tập tin phải bắt phía đầu dòng tập tin, phải định dạng khối bình luận có chứa dạng Xml, tập tin sau: // // // Company copyright tag // // - R1603 Các phần tử phân tán (Partial Element) phải đƣợc thích Mơ tả: Hãy thích cho lớp Vi phạm quy tắc xảy phần tử phần (một phần tử với thuộc tính phần) hồn tồn mô tả thiếu tiêu đề tài liệu, tiêu đề trống rỗng Trong C # loại sau phần tử quy phần với thuộc tính: lớp, phương thức Khi thích cung cấp nhiều phần partial class, thích cho hai lớp sáp nhập với để tạo thành nguồn thích Ví dụ, xem xét hai phần sau lớp học phần: /// /// Documentation for the first part of Class1 /// public partial class Class1 { } /// /// Documentation for the second part of Class1 /// 97 partial public partial class Class1 { } Hai phần khác lớp (partial class) có mơ tả kể có mơ tả khác nằm phần thích biên dịch, cơng cụ xây dựng lựa chọn phần tài liệu nằm thích lớp co thể hợp thành chuỗi sau: “Documentation for the first part of Class1 Documentation for the second part of Class1.” Tuy nhiên, vấn đề giải sử dụng thẻ thay cho thẻ Với cách làm gộp lại thích phần lớp nằm nơi khác Chúng ta sửa lại sau: /// /// Represents a customer in the database /// public partial class Customer { } /// /// Contains auto-generated functionality for the Customer class /// public partial class Customer { } R1604 Các đối tƣợng phần liệt kê (Enum) phải đƣợc thích Hãy thích cho Mơ tả: Vi phạm quy tắc xảy đối tượng bảng liệt kê thiếu thích Ví dụ: enum /// /// Types of animals 98 đối tượng /// public enum Animals { Dog, Cat, Horse } Chúng ta sửa lại sau: /// /// Types of animals /// public enum Animals { /// /// Represents a dog /// Dog, /// /// Represents a cat /// Cat, /// /// Represents a horse /// Horse } 99 R1605 Chú thích thuộc tính phải có nội dung Value Hãy thích cho Mơ tả: thuộc tính đầy đủ Các thich cho thuộc tính bao gồm thẻ , mơ tả giá trị nắm giữ thuộc bao gồm thẻ tính Vi phạm quy tắc xảy thẻ cho thích thuộc tính khơng có Dưới ví dụ cho thuộc tính: /// /// Gets the name of the customer /// /// The name of the customer. public bool Name { get { return this.name; } } 100 ... DỤC VÀ ĐÀO TẠO TRƢỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI - Bùi Quang Thắng PHÂN TÍCH SOURCE CODE VÀ CÁC GIẢI PHÁP NÂNG CAO KỸ THUẬT VIẾT MÃ LOẠI BỎ LỖI LẬP TRÌNH VÀ TĂNG HIỆU QUẢ CỦA... ảnh hưởng kĩ thuật tiêu biểu để viết mã an toàn - Phân tích mã nguồn loại bỏ lỗi lập trình làm tăng hiệu chương trình - Khái niệm tối ưu mã nguồn loại bỏ lỗi lập trình - Luật viết mã nguồn gì,... quan viết mã an tồn phân tích mã nguồn  Chƣơng 2: Trình bày tìm hiểu số lỗ hổng bảo mật phổ biến kỹ thuật loại bỏ lỗi lập trình làm tăng hiệu chương trình  Chƣơng 3: Các kỹ thuật quy tắc viết mã

Ngày đăng: 08/12/2021, 23:19

Mục lục

    DANH SÁCH CÁC CHỮ VIẾT TẮT

    KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

    DANH MỤC TÀI LIỆU THAM KHẢO