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 và cải tiến các đoạn mã xấu trong chươn

Thảo luận trong 'Công Nghệ Thông Tin' bắt đầu bởi Thúy Viết Bài, 5/12/13.

  1. Thúy Viết Bài

    Thành viên vàng

    Bài viết:
    198,891
    Được thích:
    170
    Điểm thành tích:
    0
    Xu:
    0Xu
    Ứ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#

    MỤC LỤC



    LỜI CAM ĐOAN 2

    MỤC LỤC . 3

    DANH MỤC HÌNH ẢNH . 5

    MỞ ĐẦU . 6



    CHƯƠNG I: KỸ THUẬT TÁI CẤU TRÚC MÃ NGUỒN (REFACTORING) 7

    I.1 ĐỊNH NGHĨA KỸ THUẬT TÁI CẤU TRÚC MÃ NGUỒN 7

    I.1.1 Ví dụ minh họa . 7

    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 hiện và hạn chế lỗi . 21

    I.2.4 Refactoring giúp đấy nhanh quá 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 khi thêm chức năng . 22

    I.3.2 Refactor khi cần sửa lỗi 22

    I.3.3 Refactor khi thực hiện 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 cá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ố quá dài . 31

    II.2.5 Divergent Change – Cấu trúc lớp ít có tính khả biến 32

    II.2.6 Shotgun Surgery – Lớp được thiết kế không hợp lý và bị phân rã 32

    II.2.7 Feature Envy – Phân bố phương thức giữa các lớp không hợp lý 33

    II.2.8 Data Clumps – Gôm cụm dữ liệu 34

    II.2.9 Primitive Obsession – Khả năng thể hiện dữ liệu của 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 dữ liệu độc lập . 42

    II.2.20 Refused Bequest – Quan hệ kế thừa không hợp lý/logic . 43

    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 của .NET . 45

    III.1.3 Dịch vụ của .NET . 45

    III.1.4 Kiến trúc của .NET 46

    III.2 NGÔN NGỮ LẬP TRÌNH C# 47

    III.2.1 Tổng quan về ngôn ngữ lập trình C# . 47

    III.2.2 Đặc trưng của các 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ụ và tiện ích hỗ trợ việc dò tìm và cải tiến mã xấu . 50

    IV.1.3 Thử nghiệm minh họa các công cụ hỗ trợ refactor trong VS.Net 57

    IV.1.4 Nhận xét và đá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 hiện kỹ thuật tái cấu trúc mã nguồn trên chương trình thực tế . 82

    IV.2.2 Phân tích và đánh giá kết quả thực hiện 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 trên các ngôn ngữ khác 97

    V.3.2 Thử nghiệm xây dựng một refactoring tool tích hợp vào VS.NET . 97



    TÀI LIỆU THAM KHẢO . 98

    DANH MỤC HÌNH ẢNH



    Tên hình ảnh

    Trang

    H.3.1: Kiến trúc nền 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 bản giải pháp triển khai

    49

    H.4.2: Trình chức năng refactor tích hợp trong VS.NET

    50

    H.4.3: Trình chức năng refactor của Visual Assit X for VS.NET

    51

    H.4.4: Trình chức năng refactor của C# Refactory for VS.NET

    52

    H.4.5: Trình chức năng refactor của .NET Refactor for .NET

    53

    H.4.6: Trình chức năng refactor của CodeIT.Once for .NET

    54

    H.4.7: Trình chức năng refactor của JetBrances ReShape

    55

    H.4.8: Trình chức năng refactor của DevExpress Refactor!™ Pro

    56

    H.4.9: Minh họa kỹ thuật Change Signature trong JetBrains ReSharper

    58

    H.4.10: Kết quả minh họa kỹ thuật Change Signature

    58

    H.4.11: Minh họa kỹ thuật Convert Method to Property của CodeIT.Once

    60

    H.4.12: Minh họa kỹ thuật Convert Method to Property của ReSharper

    61

    H.4.13: Kết quả 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 quả kỹ thuật Decompose/Simplify Conditional

    63

    H.4.16: Minh họa kỹ thuật Encapsulate Field của Refactor trong VS.NET

    65

    H.4.17: Minh họa kỹ thuật Encapsulate Field của Visual Assit X for .NET

    66

    H.4.18: Kết quả kỹ thuật Encapsulate Field

    66

    H.4.19: Minh họa kỹ thuật Extract Interface của Refactor trong VS.NET

    68

    H.4.20: Minh họa kỹ thuật Extract Interface của CodeIT.Once

    69

    H.4.21: Kết quả kỹ thuật Extract Interface

    69

    H.4.22: Minh họa kỹ thuật Extract Method của Refactor trong VS.NET

    71

    H.4.23: Kết quả kỹ thuật Extract Method

    71

    H.4.24: Minh họa kỹ thuật Inline Variable của CodeIT.Once for .NET

    73

    H.4.25: Kết quả kỹ thuật Inline Variable

    73

    H.4.26: Minh họa kỹ thuật Promote Local Variable to Parameter của VS.NET

    75

    H.4.27: Minh họa kỹ thuật Promote Local Variable to Parameter của CodeIT.Once

    75

    H.4.28: Minh họa kỹ thuật Promote Local Variable to Parameter của ReSharper

    76

    H.4.29: Kết quả kỹ thuật Promote Local Variable to Parameter

    76

    H.4.30: Minh họa kỹ thuật Rename Variables của Refactor trong VS.NET

    78

    H.4.31: Minh họa kỹ thuật Rename Variables của Visual Assit X

    79

    H.4.32: Kết quả kỹ thuật Rename Variables

    79

    H.4.33: Sơ đồ lớp của chương trình khi chưa refactoring

    82

    H.4.34: Màn hình kết quả chạy chương trình khi chưa refactoring

    84

    H.4.35: Sơ đồ lớp của chương trình sau khi refactoring

    91

    H.4.36: Màn hình kết quả chạy chương trình sau khi refactoring

    MỞ ĐẦU



    Trong qui trình phát triển phần mềm hiện nay, một thực tế đang tồn tại ở các công

    ty sản xuất phần mềm là các lập trình viên thường xem nhẹ việc tinh chỉnh mã nguồn và

    kiểm thử. Ngoài lý do đơn giản vì đó là một công việc nhàm chán, khó được chấp nhận

    đối với việc quản lý vì sự tốn kém và mất thời gian, còn một nguyên nhân khác là chúng

    ta không có những phương pháp và tiện ích tốt hỗ trợ cho những việc này. Điều này dẫn

    đến việc phần lớn các phần mềm không được kiểm thử đầy đủ và phát hành với các nguy

    cơ 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 hiện vào đầu những

    năm 90 với mục tiêu là phần mềm phải có khả năng biến đổi, phát triển và 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 này được thực hiện dựa trên hai

    kỹ thuật chính là tái cấu trúc mã nguồn (refactoring) và kiểm thử (developer testing). Vì

    thế việc nghiên cứu và ứ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 và nâng cao hiệu quả kiểm thử là một nhu cầu cần thiết trong quá trình thực hiện

    và 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 và cải

    tiến các đoạn mã xấu trong chương trình C#” được thực hiện với mục đích nghiên cứu

    cơ sở lý thuyết kỹ thuật tái cấu trúc mã nguồn và áp dụng để triển khai việc dò tìm và cải

    tiến mã xấu (lỗi cấu trúc) trong các chương trình hiện đại và phổ biến hiện nay (C#).

    Toàn bộ nội dung của luận văn bao gồm các 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) và giải pháp cải tiến dựa trên refactoring

    Chương 3: Nền tảng .NET và 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 và cải thiện mã xấu

    trong các chương trình C#

    Chương 5: Kết luận
     

    Các file đính kèm:

Đang tải...