
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
Học viên thực hiện: Nhiêu Lập Hòa
2
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 và cải tiến các đọan mã xấu trong chƣơng trình C# ", dƣới sự hƣớng dẫn
của TS. Nguyễn Thanh Bình, là công trình do tôi trực tiếp nghiên cứu.
Tôi xin cam đoan các số liệu, kết quả nghiên cứu trong luận văn là trung thực và
chƣa từng đƣợc công bố trong bất cứ công trình nào trƣớc đây.
Tác giả
Nhiêu Lập Hòa

Luận văn tốt nghiệp cao học – Khóa 2005 - 2008
Học viên thực hiện: Nhiêu Lập Hòa
3
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

Luận văn tốt nghiệp cao học – Khóa 2005 - 2008
Học viên thực hiện: Nhiêu Lập Hòa
4
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

Luận văn tốt nghiệp cao học – Khóa 2005 - 2008
Học viên thực hiện: Nhiêu Lập Hòa
5
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
93

