Review Refactoring

Mình quyết định đọc cuốn Refactoring: Improving the Design of Existing Code sau khi đọc xong cuốn Design Pattern.

Sơ lược

Refactoring: Improving the Design of Existing Code

Mặc dù đã được nghe đến khái niệm này rất nhiều lần, tuy nhiên sau khi đọc xong cuốn sách, đối chiếu với những trải nghiệm của bản thân về các pro­ject trước đây. Mình hiểu:

Refactor là quá trình thao tác trên mã nguồn có sẵn nhằm gia tăng chất lượng mã nguồn nhưng vẫn giữ lại được các ràng buộc của hệ thống.

Như vậy, refac­tor không phải quá trình tạo mới hoàn toàn một dự án hay một hệ thống nào cả, mà nhằm làm tăng chất lượng của mã nguồn đó. Chất lượng ở đây được đánh giá trên các độ đo khác nhau:

  1. Khả năng mở rộng của mã nguồn.
  2. Khả năng dễ đọc và tìm lỗi.
  3. Khả năng thích ứng với lỗi (tính ro­bust­ness)
  4. Hiệu suất của hệ thống.

Ngoài việc làm gia tăng chất lượng của hệ thống, bên cạnh đó refac­tor phải đảm bảo giữ lại được các ràng buộc mà trước đó hệ thống đã có. Ví dụ như:

  1. Những APIs đã được phát hành của hệ thống, ta không nên refac­tor và thay đổi luôn các APIs đó.
  2. Những class, func­tions liên hệ trực tiếp đến các mod­ules khác trong hệ thống lớn hơn.

Những kĩ thuật trong refac­tor

Một phần quan trọng của cuốn sách không chỉ nói về định nghĩa của refac­tor mà còn đề cập đến lí do vì sao cần refac­tor, khi nào nên refac­tor, những tác động nào ảnh hưởng đến quá trình refac­tor, và đặc biệt là xây dựng bộ test cho hệ thống. Trước giờ mình chủ yếu làm các hệ thống trong aca­d­e­mic, việc xây dựng các bộ test không được chú trọng quá nhiều. Nhưng thực sự đọc xong cuốn sách mình nghĩ mình nên tập các viết các bộ test trước khi viết một func­tion nào đó. Việc tự tay viết các bộ test mang lại khá nhiều thuận lợi:

  1. Giúp người thiết kế biết được giao diện tương tác API mà func­tion mình đảm nhiệm.
  2. Hiểu được các ràng buộc về Input/Output và tham số.
  3. Thuận lợi cho việc refac­tor, các bộ test sẽ giúp ta kiểm tra xem việc vừa refac­tor xong có ảnh hưởng gì đến hệ thống hiện có không.
  4. Hình thành được out­line của hệ thống trong quá trình xây dựng bộ test.

Cuốn sách được bố cục phần nào giống với bên Design Pattern, cung cấp một lượng lớn từ vựng về các kĩ thuật refac­tor. Với mỗi kĩ thuật được đề cập, tác giả nêu lên: động lực sử dụng, ví dụ minh họa, các lưu ý. Các kĩ thuật refac­tor được chia thành các cat­e­gory

  • Thao tác trên các method trong 1 class.
  • Thao tác trên các method giữa các class với nhau.
  • Tổ chức dữ liệu.
  • Đơn giản hóa các câu lệnh điều kiện.
  • Đơn giản hóa các hàm.
  • Tái tổ chức hệ thống class.

Cuối cùng là những thao tác refac­tor ảnh hưởng đến các ràng buộc của hệ thống, đây là những thao tác sẽ ảnh hưởng lên đến việc tương tác giữa các hệ thống với nhau nên cần suy nghĩ cẩn trọng trước khi thực hiện.

Phần cuối cùng là các công cụ refac­tor, mình nghĩ phần nào không cần nói nhiều vì trên các IDE nổi tiếng như Visual Studio, Eclipse, IntelliJ thì các kĩ thuật refac­tor đã trở thành những tính năng khá quen thuộc. Việc refac­tor tự động giúp tránh xảy ra lỗi và giảm thời gian cho công việc này khá nhiều.

Nếu có hành động nào đó lặp đi lặp lại trên 5 lần. Tốt hơn là ta nên làm cách khiến nó thành tự động.

Bình luận

Đây là cuốn sách cuối cùng mình đọc liên quan đến công nghệ phần mềm trước khi đến với phần thử thách với mình nhiều hơn: Machine Learning và Computer Vision.

Cuốn sách đặc biệt phù hợp với các bạn sinh viên năm 3, 4 sau khi đã học về lập trình hướng đối tượng cũng như đã trải qua một thời gian tiếp xúc với những mã nguồn, dự án có sẵn. Thời gian đọc có lẽ mất từ 5 – 7 ngày.

Điều thú vị khi mình đọc đó là cảm giác:

wtf?? đổi tên biến cũng được gọi là refac­tor wtf?? đổi tên hàm cũng vậy …

Mình nghiệm ra, refac­tor không phải là cái gì đó quá cao siêu, có lẽ bạn nào lập trình cũng đã từng thực hiện một lần. Nhưng refac­tor như thế nào hiệu quả, tốn ít thời gian và công sức và hơn hết là biết cách refac­tor là một chuyện khác.

Refactoring là cuốn sách sẽ giải đáp những điều đó.

Future Works

Mình đã đọc xong cuốn Design Patterns nhưng chưa biết re­view thế nào. Có lẽ cần nhiều thời gian hơn để có thể viết về các mẫu. Nhưng có lẽ mình không tập trung nhiều thời gian.

Kế hoạch sắp đến: Pattern Recognition and Machine Learning.