II. NGUYÊN LÝ TRONG REFACTORING
2. TẠI SAO NÊN REFACTORING
2.1 Refactoring cải thiện thiết kế phần mềm
Không có refactoring, thiết kế chương trình sẽ bị hư tổn. Khi thay đổi chương trình – thay đổi hiện thực hóa mục tiêu ngắn hạn hay sự thay đổi không được hiểu thấu đáo thiết kế chương trình – chương trình mất cấu trúc. Chương trình sẽ trở nên khó để hiểu thiết kế bởi việc đọc chương trình. Refactoring sẽ làm gọn chương trình. Công việc được thực hiện chuyển đổi chút ít những gì thực sự không để đúng chổ. Việc mất cấu trúc chương trình có tác động chồng chất thêm. Càng khó nhìn thấy thiết kế chương trình, càng khó bảo trì nó, càng nhanh chóng bị hư tổn. Refactoring làm cho chương trình chứa đựng độ sắc bén.
Đoạn chương trình được thiết kế tồi thường chiếm nhiều dòng code làm cùng một công việc bởi vì đoạn code làm một công việc ở nhiều chổ. Như vậy
khía cạnh quan trọng của cải tiến thiết kế là loại bỏ những code lặp. Điều quan trọng của vấn đề này nằm ở những thay đổi tương lai đoạn code. Việc giảm số lượng đoạn code sẽ không làm hệ thống chạy nhanh hơn bởi tác động ghi dấu của chương trình hiếm khi trọng yếu. Việc giảm số lượng đoạn code thực thi, tuy nhiên, gây ra khác biệt lớn trong điều chỉnh đoạn code. Chương trình càng nhiều, càng khó điều chỉnh chính xác. Khi có nhiều code để hiểu, chúng ta thay đổi chút ít đoạn code ở đây, nhưng hệ thống không làm những gì chúng ta mong đợi bởi vì chúng ta đã không thay đổi chút ít đó nhưng nó làm nhiều hơn cùng công việc trong ngữ cảnh hơi khác. Bằng việc loại bỏ trùng lắp, đảm bảo rằng đoạn chương trình chỉ làm một lần và chỉ một là điều thiết yếu của thiết kế tốt.
2.2 Refactoring làm phần mềm dễ hiểu
Lập trình là sự đối thoại theo nhiều cách với máy tính. Chúng ta viết code để bảo máy tính những gì để làm và nó phản hồi chính xác những gì chúng ta bảo nó. Theo thời gian chúng ta giảm khoảng cách giữa những gì chúng ta muốn làm và những gì chúng ta bảo nó thực hiện. Lập trình như vậy nghĩa là nói chính xác những gì chúng ta muốn. Nhưng có những người khác dùng đoạn chương trình của chúng ta. Một số người sẽ có gắng đọc đoạn chương trình chúng ta trong một vài lần trong nhiều tháng để thực hiện những thay đổi, tuy nhiên người đó thực sự là quan trọng nhất. Người quan tâm nếu máy tính thực hiện nhiều hơn chu trình để biên dịch? nó không có vấn đề nếu mất một tuần để thực hiện thay đổi mà thay đổi này chỉ mất chỉ một giờ nếu họ đã hiểu đoạn chương trình của chúng ta.
Vấn đề là khi chúng ta cố gắng làm chương trình thực thi, chúng ta đã không nghĩ về người phát triển trong tương lai. Nó chiếm đáng kể thực hiện thay đổi đó là làm đoạn chương trình dễ hiểu hơn. Refactoring giúp chúng ta làm cho đoạn code có khả năng đọc được. Khi refactoring bạn có code chạy nhưng không được cấu trúc hoàn chỉnh. Việc refactoring chiếm chút ít thời gian có thể làm cho đoạn code tốt để giao tiếp đúng mục đích.
Chúng ta sử dụng refactoring để giúp hiểu đoạn code không không quen thuộc. Khi nhìn đoạn code không quen, chúng ta phải có gắng hiểu những gì nó làm. Thật vậy, chúng ta thay đổi code cho tốt để phản ánh sự hiểu biết và sau đó kiểm tra sự hiểu biết đó bằng cách quay trở lại đoạn code để hiểu.
Khi đoạn code trở nên rõ hơn, chúng ta có thể nhìn mọi thứ về thiết kế mà chúng ta có thể chưa hiểu trước đây bởi chúng ta không đủ sáng suốt để trực
quan hóa mọi thứ trong đầu. Ralph Johnson mô tả refactoring sớm khi quét bỏ một cửa sổ vì vậy ta có thể nhìn thấy trước. Khi chúng ta đang nghiền ngẫm code chúng ta sẽ nhận thấy refactoring dẫn chúng ta đến mức cao hơn để hiểu ngược lại chúng ta sẽ bỏ qua.
2.3 Refactoring giúp tìm Bugs
Refactoring giúp hiểu đoạn code cũng như giúp phát hiện lỗi. Một số người có thể đọc hàng đống code để tìm lỗi, có người thì không. Tuy nhiên, chúng ta nhận thấy nếu refactor code, chúng ta sẽ hiểu sâu những đoạn code làm gì, và đã hiểu mới quay lại đúng đoạn code. Bởi việc làm rõ cấu trúc chương trình, chúng ta làm rõ những giả định chúng ta làm, để chỉ rõ thậm chí có thể tránh phát sinh lỗi.
Như khẳng định Kent Beck ‘Tôi không là lập trình giỏi; tôi chỉ là lập trình tốt với thói quen ..’ Refacotring giúp tôi trở nên hiệu quả trong viết chương trình có độ chắc chắn.
2.4 Refactoring giúp chương trình chạy nhanh hơn
Tóm lại, Refactoring giúp chúng ta phát triển code nhanh hơn. Khi nói về refactoring, mọi người có thể dễ dàng nhìn thấy nó cải tiến chất lượng. Cải tiến thiết kế, cải tiến tính đọc được, giảm bug, đó là những cải tiến chất lượng. Nhưng tất cả điều này có giảm tốc độ phát triển?
Chúng ta tin chắc rằng thiết kế tốt cần thiết cho phát triển phần mềm nhanh (RAD). Thực tế, tất cả có thiết kế tốt cho phép phát triển nhanh. Không có thiết kế tốt, chúng ta có thể triển khai nhanh chóng, nhưng sớm bắt đầu một thiết kế tồi sẽ kéo chúng ta chậm lại. Chúng ta mất thời gian để tìm và sửa lỗi thay vì thêm mới chức năng. Những thay đổi mất thời gian lâu hơn khi chúng ta cố gắng hiểu hệ thống và tìm đoạn code lặp.
Một thiết kế tốt là cần thiết để duy trì tốc độ phát triển phần mềm. Refactoring giúp chúng ta phát triển phần mềm nhanh hơn, bởi nó không ngừng thiết kế hệ thống từ việc hủy bỏ. Nó có thể cải tiến thiết kế.