[Update 2021] Danh sách Code Quality Tool post thumbnail image

[Update 2021] Danh sách Code Quality Tool

Code quality được phân loại đánh giá dựa trên nhiều metrics: Complexity, Vulnerability, Code Coverage, Duplication, Security, Code Smell hoặc Technical Debt, Coding Style hoặc Coding Convention,… Một trong những công cụ open-source phổ biến để đo lường là Sonarqube. Tuy nhiên, còn những công cụ hiệu quả khác đáng cân nhắc để sử dụng. Bài viết này sẽ tổng hợp một số công cụ dưa trên những khía cạnh metrics đã đề cập.

Complexity

Các công cụ sẽ tích hợp vào IDE, sẽ tập hợp độ phức tạp theo từng ngôn ngữ. Ví dụ: IDE cho Python: Radon, hoặc cho Javascript là ESLint. Cloud-based tool: SonarQube, Code Climate, CodeScence.

Cùng sơ lược cách Code Climate có được kết quả từ code của bạn.

Code Climate

Code Climate report phạm vi bằng cách kiểm tra từng dòng code, đánh giá tech debt và kiểm tra kiểu trong mọi pull request để team bạn chỉ merge code, có thể maintain và test tốt hơn.

URL: https://docs.codeclimate.com

Sau khi scan xong, bạn có thể đi vào chi tiết vào từng lỗi tương tự cách SonarQube hỗ trợ

Hotspot and Churn

Code đang ẩn chứa vấn đề gì? đặc biệt đối với dự án lớn.

Churn” là số lần file được thay đổi. Bạn có thể theo dõi nó theo từng giai đoạn.

Hotspot” là những files có độ phức tạp cao hơn trung bình và được thay đổi gần đây.

Một vài dấu hiệu cần quan tâm: Có bao nhiêu author đã contribute vào một file nào đó? Những file nào đa phần là của author không còn trong team nữa? Những files nào gần như luôn được thay đổi.

Codescence

Codescence là một trong những tool tốt nhất để collect system health.

URL: https://codescene.io

Codescence sẽ đánh giá trên từng commit trên repo mà ta yêu cầu analyse.

Sau khi chạy xong, dashboard sẽ có kết quả như sau:

Khi ta click vào Hotspot, ta sẽ thấy một lược đồ tròn, gồm một hình tròn lớn có chứa những hình tròn nhỏ. Mỗi hình tròn trong đây là một file, hình tròn lớn hơn là thư mục. Những file bị thay đổi nhiều sẽ có màu đỏ.

Các giá trị Churn sẽ được thể hiện bên trong X-Ray. Chỉ số sẽ được thể hiện theo từng function: bao gồm Change Frequency, Complexity, và Cyclomatic Complexity.

Ngoài ra phần settings cũng hỗ trợ merge những author cùng email bằng các alias. Tạo team, thêm member của từng team.

Code Coverage

Bao nhiêu % code của bạn được thực hiện bởi automated test?

Automated test ở đây được hiểu khác nhau bời những team khác nhau. Có thể sẽ là unit test – đơn vị nhỏ nhất trong hệ thống; acceptance test – tương tác với hệ thống giống cách user làm; integration test – đánh giá tập những component cùng một lúc.

Thực tế là:

  • Unit Test – 100% code coverage sẽ dễ nhất, chỉ cần cover tất cả những con đường đi qua phần code.
  • Acceptance Test – 100% dường như không thể vì có những con đường rất khó để force application đi theo.

dotCover, Resharper

NDepend

Xem report trực tiếp trên Visual Studio.

Sau khi có KQ, phần code coverage bạn có thể import XML từ kết quả của dotCover.

Thông qua graph, bạn có thể thấy được project nào màu đang hướng về xanh lá cây nghĩa là code coverage đang hướng đến 100%. Ngược lại hướng về màu đỏ là code coverage đang gần 0%.

Ngoài ra, quay lại Code Climate – công cụ cũng hỗ trợ visualize code coverage kết hợp với SimpleCov .

SimpleCov URL: https://github.com/simplecov-ruby/simplecov

Đầu tiên copy Report ID của Test Coverage

Sau đó upload kết quả code coverage dùng report ID mới copy:

Sau khi có kết quả, bạn sẽ thấy xuất hiện cột % bên tay phải. Mức độ đánh giá A là cao nhất. Ngoài ra, code còn được collect theo dạng trend report để đánh giá test coverage theo thời gian.

Duplication

DRY – Don’t repeat yourself

Duplicate code rất dễ xảy ra khi add thêm feature mới, có người mới vào team khi đứng giữa quyết định sửa code hiện tại để cover cho cả chức năng mới và đang có, hoặc đơn giản chỉ copy code ra và gây ra duplication.

Vấn đề khi phần code copy ra có một critical issue được fixed, và nguòi phát hiện không aware được đoạn code được copy từ đâu đó để fix luôn.

Một số CLI Tools: Flay, CPD – Copy Paste Detector, Simian

CPD – Copy Paste Detector

Một ví dụ dùng CPD để scan files dùng ngôn ngữ PHP

Ví dụ trên cũng yêu câu CPD chỉ scan những thứ có độ dài ít nhất 75 token (hiểu là số lượng ký tự)

CPD sẽ report có bao nhiêu line of code, và line number bị duplicate.

Kết quả có thể export thành xml sau đó visualze để view trên web hoặc intergrate với SonarQube.

Dependency Security

Để ý đến những package, library dùng bởi project vì chúng ta hay quên update phiên bản mới, thường sẽ fix những lỗi về security.

Snyk

URL: https://app.snyk.io

Khi ta install một library library từ npm. ta dùng lệnh `snyk test`

Sau đó dùng snyk wizard để tool hướng dẫn cách fix từng vulnerability.

Một cách khác là run trực tiếp trên project Github bằng cách chọn Project, chọn lanaguage, và chọn repository để analyse.

Coding Style

Đảm bảo code của bạn cần đồng nhất về cách code. Flask cho Python và Hound CI là những công cụ giúp scan và report lỗi vi phạm bên cạnh SonarQube,

Ngoài ra còn nhiều công cụ khác nhau đánh giá dựa trên những tiêu chí trên cho từng loại ngôn ngữ sẽ được tập hợp và giới thiệu trong một bài viết khác.

Cảm ơn đã xem bài viết.

1 thought on “[Update 2021] Danh sách Code Quality Tool”

  1. Tester says:

    Không thấy nói về SonarQube?

Leave a Reply

Related Post