Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
20
Dung lượng
470,23 KB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO ĐẠI HỌC ĐÀ NẴNG BÁO CÁO LUẬN VĂN THẠC SĨ KỸ THUẬT NGÀNH KHOA HỌC MÁY TÍNH TÊN ĐỀ TÀI: ỨNG DỤNG KỸ THUẬT TÁI CẤU TRÚC MÃ NGUỒN ĐỂ TRIỂN KHAI DÒ TÌM VÀ CẢI TIẾN CÁC ĐOẠN MÃ XẤU TRONG CHƢƠNG TRÌNH C# Họ tên HV : NHIÊU LẬP HÒA Họ tên CBHD : TS.NGUYỄN THANH BÌNH ĐÀ NẴNG, 11/2008 Luận văn tốt nghiệp cao học – Khóa 2005 - 2008 LỜI CAM ĐOAN Tôi xin cam đoan nội dung luận văn "Ứng dụng kỹ thuật tái cấu trúc mã nguồn để triển khai dò tìm cải tiến đọan mã xấu chƣơng trình C# ", dƣới hƣớng dẫn TS Nguyễn Thanh Bình, công trình trực tiếp nghiên cứu Tôi xin cam đoan số liệu, kết nghiên cứu luận văn trung thực chƣa đƣợc công bố công trình trƣớc Tác giả Nhiêu Lập Hòa Học viên thực hiện: Nhiêu Lập Hòa Luận văn tốt nghiệp cao học – Khóa 2005 - 2008 MỤC LỤC LỜI CAM ĐOAN MỤC LỤC DANH MỤC HÌNH ẢNH MỞ ĐẦU CHƢƠNG I: KỸ THUẬT TÁI CẤU TRÚC MÃ NGUỒN (REFACTORING) I.1 ĐỊNH NGHĨA KỸ THUẬT TÁI CẤU TRÚC MÃ NGUỒN I.1.1 Ví dụ minh họa I.1.2 Định nghĩa kỹ thuật tái cấu trúc mã nguồn 19 I.2 HIỆU QUẢ CỦA TÁI CẤU TRÚC MÃ NGUỒN 20 I.2.1 Refactoring cải thiện thiết kế phần mềm 20 I.2.2 Refactoring làm mã nguồn phần mềm dễ hiểu 20 I.2.3 Refactoring giúp phát hạn chế lỗi 21 I.2.4 Refactoring giúp nhanh trình phát triển phần mềm 21 I.3 KHI NÀO THỰC HIỆN TÁI CẤU TRÚC MÃ NGUỒN 22 I.3.1 Refactor thêm chức 22 I.3.2 Refactor cần sửa lỗi 22 I.3.3 Refactor thực duyệt chƣơng trình 23 I.4 CÁC KỸ THUẬT TÁI CẤU TRÚC MÃ NGUỒN 23 I.4.1 Danh mục kỹ thuật tái cấu trúc mã nguồn 23 I.5 NHẬN XÉT VÀ KẾT LUẬN 26 CHƢƠNG II: LỖI CẤU TRÚC (BAD SMELLS) TRONG MÃ NGUỒN 27 II.1 KHÁI NIỆM VỀ LỖI CẤU TRÚC (BAD SMELLS) 27 II.2 LỖI CẤU TRÚC VÀ GIẢI PHÁP CẢI TIẾN 27 II.2.1 Duplicated Code - Trùng lặp mã 27 II.2.2 Long Method – Phƣơng thức phức tạp 28 II.2.3 Large Class – Qui mô lớp lớn 30 II.2.4 Long Parameter List - Danh sách tham số dài 31 II.2.5 Divergent Change – Cấu trúc lớp có tính khả biến 32 II.2.6 Shotgun Surgery – Lớp đƣợc thiết kế không hợp lý bị phân rã 32 II.2.7 Feature Envy – Phân bố phƣơng thức lớp không hợp lý 33 II.2.8 Data Clumps – Gôm cụm liệu 34 II.2.9 Primitive Obsession – Khả thể liệu lớp bị hạn chế 34 II.2.10 Switch Statements – Khối lệnh điều kiện rẽ hƣớng không hợp lý 36 II.2.11 Lazy Class – Lớp đƣợc định nghĩa không cần thiết 38 II.2.12 Speculative Generality – Cấu trúc bị thiết kế dƣ thừa 38 II.2.13 Temporary Field – Lạm dụng thuộc tính tạm thời 39 II.2.14 Message Chains –Chuỗi phƣơng thức liên hoàn khó kiểm soát 39 II.2.15 Middle Man – Quan hệ ủy quyền không hợp lý/logic 39 II.2.16 Inapproprite Intimacy - Cấu trúc thành phần riêng không hợp lý 41 II.2.17 Alternative Classes with Different Interfaces - Đặc tả lớp không rõ ràng 41 II.2.18 Incomplete Library Class – Sử dụng thƣ viện lớp chƣa đƣợc hòan chỉnh 41 II.2.19 Data Class – Lớp liệu độc lập 42 II.2.20 Refused Bequest – Quan hệ kế thừa không hợp lý/logic 43 Học viên thực hiện: Nhiêu Lập Hòa Luận văn tốt nghiệp cao học – Khóa 2005 - 2008 II.2.21 Comments – Chú thích không cần thiết 43 II.3 NHẬN XÉT VÀ KẾT LUẬN 44 CHƢƠNG III: NỀN TẢNG NET VÀ NGÔN NGỮ LẬP TRÌNH C# 45 III.1 TỔNG QUAN VỀ NỀN TẢNG NET 45 III.1.1 Định nghĩa NET 45 III.1.2 Mục tiêu NET 45 III.1.3 Dịch vụ NET 45 III.1.4 Kiến trúc NET 46 III.2 NGÔN NGỮ LẬP TRÌNH C# 47 III.2.1 Tổng quan ngôn ngữ lập trình C# 47 III.2.2 Đặc trƣng ngôn ngữ lập trình C# 47 III.3 MÔI TRƢỜNG PHÁT TRIỂN ỨNG DỤNG VISUAL STUDIO NET 48 CHƢƠNG IV: ỨNG DỤNG KỸ THUẬT TÁI CẤU TRÚC MÃ NGUỒN ĐỂ DÒ TÌM VÀ CẢI TIẾN CÁC ĐOẠN MÃ XẤU TRONG CHƢƠNG TRÌNH C# 49 IV.1 GIẢI PHÁP VÀ CÔNG CỤ HỖ TRỢ REFACTOR 49 IV.1.1 Đặc tả giải pháp triển khai 49 IV.1.2 Một số công cụ tiện ích hỗ trợ việc dò tìm cải tiến mã xấu 50 IV.1.3 Thử nghiệm minh họa công cụ hỗ trợ refactor VS.Net 57 IV.1.4 Nhận xét đánh giá 80 IV.2 ỨNG DỤNG KỸ THUẬT TÁI CẤU TRÚC MÃ NGUỒN ĐỂ DÒ TÌM VÀ CẢI TIẾN CÁC ĐOẠN MÃ XẤU TRONG CHƢƠNG TRÌNH C# 81 IV.2.1 Thực kỹ thuật tái cấu trúc mã nguồn chƣơng trình thực tế 82 IV.2.2 Phân tích đánh giá kết thực 94 IV.3 NHẬN XÉT VÀ KẾT LUẬN 95 CHƢƠNG V: KẾT LUẬN 96 V.1 ĐÁNH GIÁ KẾT QUẢ CỦA ĐỀ TÀI 96 V.2 PHẠM VI ỨNG DỤNG 96 V.3 HƢỚNG PHÁT TRIỂN 97 V.3.1 Triển khai áp dụng ngôn ngữ khác 97 V.3.2 Thử nghiệm xây dựng refactoring tool tích hợp vào VS.NET 97 TÀI LIỆU THAM KHẢO 98 Học viên thực hiện: Nhiêu Lập Hòa Luận văn tốt nghiệp cao học – Khóa 2005 - 2008 DANH MỤC HÌNH ẢNH Tên hình ảnh Trang H.3.1: Kiến trúc tảng NET 46 H.3.2: Môi trường phát triển ứng dụng VS.NET 48 H.4.1: Đặc tả kịch giải pháp triển khai 49 H.4.2: Trình chức refactor tích hợp VS.NET 50 H.4.3: Trình chức refactor Visual Assit X for VS.NET 51 H.4.4: Trình chức refactor C# Refactory for VS.NET 52 H.4.5: Trình chức refactor NET Refactor for NET 53 H.4.6: Trình chức refactor CodeIT.Once for NET 54 H.4.7: Trình chức refactor JetBrances ReShape 55 H.4.8: Trình chức refactor DevExpress Refactor!™ Pro 56 H.4.9: Minh họa kỹ thuật Change Signature JetBrains ReSharper 58 H.4.10: Kết minh họa kỹ thuật Change Signature 58 H.4.11: Minh họa kỹ thuật Convert Method to Property CodeIT.Once 60 H.4.12: Minh họa kỹ thuật Convert Method to Property ReSharper 61 H.4.13: Kết kỹ thuật Convert Method to Property 61 H.4.14: Minh họa kỹ thuật Decompose/Simplify Conditional 63 H.4.15: Kết kỹ thuật Decompose/Simplify Conditional 63 H.4.16: Minh họa kỹ thuật Encapsulate Field Refactor VS.NET 65 H.4.17: Minh họa kỹ thuật Encapsulate Field Visual Assit X for NET 66 H.4.18: Kết kỹ thuật Encapsulate Field 66 H.4.19: Minh họa kỹ thuật Extract Interface Refactor VS.NET 68 H.4.20: Minh họa kỹ thuật Extract Interface CodeIT.Once 69 H.4.21: Kết kỹ thuật Extract Interface 69 H.4.22: Minh họa kỹ thuật Extract Method Refactor VS.NET 71 H.4.23: Kết kỹ thuật Extract Method 71 H.4.24: Minh họa kỹ thuật Inline Variable CodeIT.Once for NET 73 H.4.25: Kết kỹ thuật Inline Variable 73 H.4.26: Minh họa kỹ thuật Promote Local Variable to Parameter VS.NET 75 H.4.27: Minh họa kỹ thuật Promote Local Variable to Parameter CodeIT.Once 75 H.4.28: Minh họa kỹ thuật Promote Local Variable to Parameter ReSharper 76 H.4.29: Kết kỹ thuật Promote Local Variable to Parameter 76 H.4.30: Minh họa kỹ thuật Rename Variables Refactor VS.NET 78 H.4.31: Minh họa kỹ thuật Rename Variables Visual Assit X 79 H.4.32: Kết kỹ thuật Rename Variables 79 H.4.33: Sơ đồ lớp chương trình chưa refactoring 82 H.4.34: Màn hình kết chạy chương trình chưa refactoring 84 H.4.35: Sơ đồ lớp chương trình sau refactoring 91 H.4.36: Màn hình kết chạy chương trình sau refactoring 93 Học viên thực hiện: Nhiêu Lập Hòa Luận văn tốt nghiệp cao học – Khóa 2005 - 2008 MỞ ĐẦU Trong qui trình phát triển phần mềm nay, thực tế tồn công ty sản xuất phần mềm lập trình viên thƣờng xem nhẹ việc tinh chỉnh mã nguồn kiểm thử Ngoài lý đơn giản công việc nhàm chán, khó đƣợc chấp nhận việc quản lý tốn thời gian, nguyên nhân khác phƣơng pháp tiện ích tốt hỗ trợ cho việc Điều dẫn đến việc phần lớn phần mềm không đƣợc kiểm thử đầy đủ phát hành với nguy lỗi tiềm ẩn Phƣơng thức phát triển phần mềm linh hoạt[15] bắt đầu xuất vào đầu năm 90 với mục tiêu phần mềm phải có khả biến đổi, phát triển tiến hóa theo thời gian mà không cần phải làm lại từ đầu Phƣơng thức đƣợc thực dựa hai kỹ thuật tái cấu trúc mã nguồn (refactoring) kiểm thử (developer testing) Vì việc nghiên cứu ứng dụng kỹ thuật tái cấu trúc mã nguồn nhằm tối ƣu hóa mã nguồn nâng cao hiệu kiểm thử nhu cầu cần thiết trình thực phát triển phần mềm Đề tài “Ứng dụng kỹ thuật tái cấu trúc mã nguồn để triển khai dò tìm cải tiến đoạn mã xấu chƣơng trình C#” đƣợc thực với mục đích nghiên cứu sở lý thuyết kỹ thuật tái cấu trúc mã nguồn áp dụng để triển khai việc dò tìm cải tiến mã xấu (lỗi cấu trúc) chƣơng trình đại phổ biến (C#) Toàn nội dung luận văn bao gồm chƣơng: Chƣơng 1: Kỹ thuật tái cấu trúc mã nguồn (refectoring) Chƣơng 2: Mã xấu (bad smells) giải pháp cải tiến dựa refactoring Chƣơng 3: Nền tảng NET ngôn ngữ lập trình C# Chƣơng 4: Ứng dụng kỹ thuật tái cấu trúc mã nguồn để dò tìm cải thiện mã xấu chƣơng trình C# Chƣơng 5: Kết luận Học viên thực hiện: Nhiêu Lập Hòa Luận văn tốt nghiệp cao học – Khóa 2005 - 2008 CHƢƠNG I: KỸ THUẬT TÁI CẤU TRÚC MÃ NGUỒN (REFACTORING) I.1 ĐỊNH NGHĨA KỸ THUẬT TÁI CẤU TRÚC MÃ NGUỒN I.1.1 Ví dụ minh họa Phƣơng thức tiếp cận tìm hiểu hiệu với khái niệm hay kỹ thuật tin học thông qua ví dụ minh họa [11] Với ví dụ dƣới đây, hiểu refactoring nhƣ cách thực hiệu qui trình công nghệ phát triển phần mềm Bài toán ví dụ: Chương trình trả lại kết danh sách số nguyên tố (Bài toán sử dụng thuật toán Eratosthenes) Nội dung thuật toán Eratosthenes: - Viết danh sách số từ tới maxNumbers mà ta cần tìm Gọi list A Viết số 2, số nguyên tố đầu tiên, vào list kết Gọi list B Xóa bỏ bội khỏi list A Số lại list A số nguyên tố Viết số sang list B Xóa bỏ số tất bội khỏi list A Lặp lại bƣớc and không số list A Chƣơng trình khởi đầu: public class PrimeNumbersGetter { private int maxNumber; public PrimeNumbersGetter(int maxNumber){ this.maxNumber = maxNumber; } public int[] GetPrimeNumbers() { // Use Eratosthenes's sieve bool[] numbers = new bool[maxNumber + 1]; for (int i = 0; i < numbers.Length; ++i){ umbers[i] = true; } int j = 2; while (j