Các dấu hiệu nhận biết mã xấu (Code smells)
Mã xấu hay lỗi cấu trúc là những dấu hiệu tồn tại trong mã nguồn của chương trình tiềm ẩn khả năng xảy ra lỗi trong quá trình hoạt động. Các dấu hiệu có thể là: chương trình thiết kế không logic, các phân đoạn mã nguồn có cấu trúc không đồng nhất và khó hiểu, mã nguồn trùng lắp và dư thừa, tên hàm và biến khó kiểm soát, lớp và phương thức phức tạp...
Dựa trên kinh nghiệm nhiều năm lập trình và nghiên cứu về refactoring, hai chuyên gia Kent Beck và Marting Fowler đã đề xuất một tập các mã xấu thường gặp và giải pháp cải tiến dựa trên kỹ thuật refactoring.
STT | Đặc tả mã xấu | Kỹ thuật refactoring áp dụng |
1 |
Duplicated Code (Trùng lặp mã) |
Extract Method/Class, Pull Up Method, Form Template Method, Substitute Algorithm |
2 |
Long Method (Phương thức phức tạp) |
Extract Method, Replace Temp with Query, Introduce Parameter Object, Replace Method with Method Object, Decompose Conditional |
3 |
Large Class (Qui mô lớp lớn) |
Extract Class/SubClass, Extract Interface, Duplicate Observed Data |
4 |
Long Parameter List (Danh sách tham số quá dài) |
Replace Parameter with Method, Preserve Whole Object, Introduce Parameter Object |
5 |
Divergent Change (Cấu trúc lớp ít có tính khả biến) |
Extract Class |
6 |
Shotgun Surgery (Thiết kế lớp không hợp lý và phân rã) |
Move Method,Move Field, Inline Class |
7 |
Feature Envy (Phân bố phương thức giữa các lớp không hợp lý) |
Extract Method, Move Method |
8 |
Data Clumps (Gom cụm dữ liệu) |
Extract Class, Introduce Parameter Object, Preserve Whole Object |
9 |
Primitive Obsession (Khả năng thể hiện của lớp bị hạn chế) |
Replace Data Value with Object, Replace Type Code with Class, Replace Type Code with Subclasse, Introduce Parameter Object, Replace Array with Object |
10 |
Switch Statements (Khối lệnh rẽ hướng không hợp lý) |
Extract Method, Move Metho, Replace Type Code with Subclasses/State/Strateg, Replace Conditional with Polymorphism, Replace Parameter with Explicit Methods, Introduce Null Object |
11 |
Lazy Class (Lớp được định nghĩa không cần thiết) |
Collapse Hierarchy, Inline Class |
12 |
Speculative Generality (Cấu trúc bị thiết kế dư thừa) |
Collapse Hierarchy, Inline Class, Remove Parameter, Rename Method |
13 |
Temporary Field (Đặc tả các thuộc tính không cần thiết) |
Extract Class, Introduce Null Object |
14 |
Message Chains (Chuỗi phương thức liên hoàn khó kiểm soát) |
Extract Method, Move Method |
15 |
Middle Man (Quan hệ ủy quyền không hợp lý/logic) |
Remove Middle Man, Inline Classs Replace Delegation with Inheritance, |
16 |
Inapproprite Intimacy (Cấu trúc thành phần riêng không hợp lý) |
Move Method, Move Field |
17 | Alternative Classes with Different Interfaces (Đặc tả lớp không rõ ràng) | Rename Method, Move Method |
18 |
Incomplete Library Class (Thư viện lớp chưa được hoàn chỉnh) |
Introduce Foregin Method, Introduce Local Extension |
19 |
Data Class (Lớp dữ liệu độc lập) |
Encapsulate Field, Encapsulate Collection, Remove Setting Method, Move Method, Extract Method, Hide Method |
20 |
Refused Bequest (Quan hệ kế thừa không hợp lý/logic) |
Push Down Method, Push Down Field, Replace Inheritance with Delegation |
21 |
Comments (Chú thích không cần thiết) |
|
» Tin mới nhất:
» Các tin khác: