8 công cụ code quality dùng cho ứng dụng PHP dài hạn của bạn

8 công cụ code quality dùng cho ứng dụng PHP dài hạn của bạn

Những dự án dài hạn rất khó để bảo trì và xử lý nhưng những công cụ code quality này có thể hỗ trợ nếu bạn sử dụng chúng một cách nhất quán.

Là một người có cơ hội làm việc với các ứng dụng kinh doanh rất phức tạp với các quy tắc phức tạp, tôi đã nhận thấy chất lượng code không tốt do các lý do khác nhau có thể bao gồm:

  • Thiếu kinh nghiệm

  • Hạn chế thời gian

  • Và nhiều lý do khác

Trong những năm qua, tôi đã nhận thấy rằng có rất nhiều công cụ và cách cải thiện chất lượng code không được biết đến có thể giúp tôi cải thiện code của riêng mình và giữ cho code có thể bảo trì được, điều này rất khó, đặc biệt là khi dự án ngày càng phức tạp về nghiệp vụ sau nhiều năm phát triển.

Dưới đây là danh sách những công cụ và cách cải thiện chất lượng code mà tôi muốn giới thiệu cho mọi người sử dụng để họ trở thành kỹ sư phần mềm giỏi hơn cũng như giữ cho code của họ có thể bảo trì được và ít lỗi hơn.

1. PHP CS Fixer

Công cụ này quét dự án của bạn để tìm các lỗi code style tiềm ẩn và sửa chúng dựa trên cấu hình nhất định.

Một trong những code style được đề xuất trong cộng đồng PHP từng là PSR-12 - hiện tại không còn được hỗ trợ mà thay thế bởi PER-CS.

Bạn có thể viết các quy tắc của riêng mình hoặc tùy chỉnh theo ý muốn.

Điều quan trọng nhất là giữ cho code của bạn và nhóm của bạn nhất quán.

Bạn có thể chạy nó theo cách thủ công để sửa code của mình nhưng tôi khuyên bạn nên chạy nó như một phần của quy trình CI để bạn không phải lo lắng về những sự cố như vậy.

2. PHPStan

Bởi vì PHP không phải là một ngôn ngữ strong-typed và nó không được biên dịch trước khi chạy như C# hay Java nên không có cách nào để biết được code của bạn có vấn đề gì cho đến khi chạy nó một cách thủ công.

Để bỏ qua việc chạy code sau mỗi thay đổi, bạn có thể sử dụng công cụ static analysis như PHPStan để trợ giúp việc này và giúp bạn phát hiện lỗi trước khi đưa code lên production.

PHPStan giống như TypeScript trong thế giới PHP, nó cho phép bạn định nghĩa những quy tắc và chỉnh sử những thứ có sẵn sao cho phù hợp.

Sẽ hơi lạ một chút khi bạn bắt đầu sử dụng PHPStan vì bạn thường quen với việc viết code và chạy nó một cách thủ công mà không quan tâm đến một số kiểm tra do công cụ này thực hiện. Nhưng nó giúp bạn giữ code của mình có chất lượng tốt hơn.

Một công cụ static analysis thay thế cho PHPStan là Psalm thực hiện các kiểm tra và có các quy tắc tương tự như PHPStan, nhưng chúng cũng có thể được sử dụng cùng nhau nếu cần thiết.

Bạn có thể chạy nó theo cách thủ công để phân tích code của mình nhưng tôi khuyên bạn nên chạy nó như một phần của quy trình CI để bạn không phải lo lắng về những vấn đề code thường gặp.

3. PHPArkitect

Bất cứ khi nào bạn làm việc trên một dự án lớn hơn mà phải được duy trì trong nhiều năm, nó sẽ yêu cầu bạn thiết kế và triển khai một kiến trúc cụ thể sao cho đơn giản và dễ dàng nhất quán với các thay đổi code theo các quy trình và quy tắc kinh doanh phức tạp.

PHPArkitect là một công cụ sẽ giúp bạn nhất quán với cấu trúc namespace/thư mục dự án của bạn.

Không thành vấn đề nếu bạn sử dụng Clean Architecture, Hexagonal Architecture, Vertical Slices hoặc kiến trúc nào khác, bạn có thể đặt các quy tắc để bất cứ khi nào bạn hoặc đồng nghiệp của bạn tạo một class trong một namespace sai hoặc thêm một controller như là dependency cho một controller hoặc một entity khác, công cụ này sẽ nắm bắt và cho bạn biết.

Bạn có thể chạy nó theo cách thủ công để phân tích code của mình nhưng tôi khuyên bạn nên chạy nó như một phần của quy trình CI để bạn không phải lo lắng về những vấn đề code thường gặp.

4. Automated Testing

Viết các loại kiểm thử tự động khác nhau sẽ giúp bạn bao quát càng nhiều code càng tốt và tìm lỗi cũng như cấu trúc lại code hiện có nhưng quan trọng nhất, nó sẽ giúp bạn thúc đẩy thiết kế triển khai tính năng nếu bạn đang sử dụng phương pháp test-driven development.

Kiểm thử thủ công có ích nhưng nó không mang lại nhiều giá trị như kiểm thử tự động nếu chúng được triển khai đúng cách.

Ngoài ra, hãy đảm bảo bao quát càng nhiều kịch bản và càng nhiều code triển khai càng tốt. Nếu không, chúng có thể không mang lại lợi ích và sau một thời gian chúng có thể trở nên lãng phí thời gian.

Có nhiều test runners và framework trong hệ sinh thái PHP đáng để xem xét:

Tất cả chúng đều thực hiện các loại thử nghiệm tương tự hoặc khác nhau tùy thuộc vào những gì bạn đang cố gắng hoàn thành và cách tiếp cận của bạn.

Bạn có thể chạy thử nghiệm theo cách thủ công để kiểm tra xem code của mình có hoạt động như mong đợi hay không nhưng tôi khuyên bạn nên chạy mã đó như một phần của quy trình CI để bạn không phải lo lắng về những sự cố như vậy.

5. Infection

Công cụ này sẽ thêm một lớp kịch bản bổ sung cho các tests tự động của bạn để xem liệu chúng có bao quát tất cả các tình huống có thể xảy ra hay không bằng cách thay đổi code theo những cách nhỏ rồi xem các tests fail hay pass. Nếu tests của bạn không pass, đó là một điều tốt. Ngược lại, điều đó có nghĩa là bạn đã bỏ lỡ một kịch bản thử nghiệm và bạn có thể muốn thêm kịch bản đó.

Bạn có thể chạy thử nghiệm theo cách thủ công để kiểm tra xem code của mình có hoạt động như mong đợi hay không nhưng tôi khuyên bạn nên chạy mã đó như một phần của quy trình CI để bạn không phải lo lắng về những sự cố như vậy.

6. Deptrac PHP

Deptrac là một công cụ static code analysis giúp phân tích code của mình và kiểm tra xem chúng có được viết với ý định tách rời hay không. Trong đó, tất cả các packages, modules và extensions đang hoạt động độc lập với nhau.

Bạn có thể chạy nó theo cách thủ công để phân tích code của mình nhưng tôi khuyên bạn nên chạy nó như một phần của quy trình CI để bạn không phải lo lắng về những vấn đề code thường gặp.

7. Rector

Khi bạn đang làm việc cho những dự án dài hạn, phần lớn công việc của bạn là sửa lỗi và tái cấu trúc code, những việc được coi là bảo trì khi so sánh với phát triển tính năng. Điều đó có nghĩa rằng bạn sẽ phải tập trung vào thay đổi code mọi nơi và nó sẽ tốn thời gian để thay đổi một cách thủ công.

Bên cạnh những cải tiến thông thường, bạn cũng sẽ phải nâng cấp PHP cũng như cách packages đi kèm với dự án.

Rector sẽ giúp bạn cấu trúc lại code của mình bằng các quy tắc được xác định cụ thể, điều đó sẽ tăng tốc công việc của bạn đối với một số đoạn code.

8. Design patterns and principles

Bất cứ khi nào mọi người lên kế hoạch cho các sản phẩm mà họ cần triển khai dựa trên nhu cầu kinh doanh, họ thường lập kế hoạch cho sản phẩm trong ngắn hạn hơn là dài hạn. Vì vậy design patterns và principles thường bị hiểu sai hoặc sử dụng sai, đó là lý do tại sao chúng được coi là quá kỹ thuật hoặc phức tạp.

Các tính năng của sản phẩm phát triển qua nhiều năm và độ phức tạp của code tăng lên. Vì vậy sẽ khó thay đổi code sau này hơn nếu mọi thứ không được triển khai hoặc lên kế hoạch trong thời gian dài.

Làm việc với những dự án dài hạn, hãy đảm bảo việc học những design patterns và principles, xem những ưu/nhược điểm của chúng là gì, học cách xác định bối cảnh của dự án và liệu việc sử dụng phương pháp đó và thử nghiệm theo cách đó có hợp lý để sử dụng trong lâu dài hay không.

Một số principles phổ biến nhất là S.O.L.I.D, giúp bạn viết framework agnostic code, trong đó framework mà bạn yêu thích và sử dụng sẽ chỉ là một công cụ và hỗ trợ các quy tắc kinh doanh thay vì kinh doanh của bạn phụ thuộc vào các quy tắc của framework.

Thêm nữa, hay xem xét ý tưởng sử dụng composition thay cho inhertiance và những lợi ích của nó.

Kết luận

Tất cả những công cụ và ý tưởng này cần có thời gian, lập kế hoạch và nhiều công sức hơn để làm quen với việc sử dụng hàng ngày và nhất quán với chúng nhưng nó sẽ giúp bạn tránh được rất nhiều rắc rối trong quá trình thực hiện và chúng sẽ tiết kiệm tiền cho doanh nghiệp. Nó có thể đòi hỏi nhiều thời gian hơn trước nhưng thời gian đó sẽ bị cắt giảm sau này khi các vấn đề nảy sinh và mọi thứ trở nên nghiêm trọng.

Bạn có thể không thấy lợi ích ngay lập tức, hoặc thậm chí không thấy được lợi ích của việc sử dụng những ý tưởng này như một công cụ nếu bạn không có kinh nghiệm làm việc trong một dự án lớn hơn đã kéo dài ít nhất vài năm, nhưng tin tôi đi, chúng được phát minh vì có lý do và chúng không tồn tại chỉ vì ai đó muốn làm phức tạp code và kiến trúc của riêng họ (mặc dù điều đó có thể xảy ra với những người sử dụng sai hoặc hiểu sai các công cụ và ý tưởng này).

Bạn có thể tìm thấy nhiều công cụ hơn tại PHPQA.io và xem liệu họ có thể giúp bạn trong một trường hợp cụ thể nào đấy.

Danh sách cuốn sách dành cho PHP devs mà tôi viết bao quát hầu hết (không phải tất cả) những ý tưởng và công cụ này. Vì vậy bạn có thể xem trong trường hợp muốn tìm hiểu kỹ hơn làm sao sử dụng chúng.

Nguồn: 8 Code Quality Tools To Use In Your Long-Term PHP Applications