Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Nâng cao chất lượng mã Ruby của bạn với RubyCritic:Phân tích trực quan và cải tiến liên tục

RubyCritic cung cấp các báo cáo trực quan nêu bật mùi mã, cấu trúc mã, tính dễ kiểm tra và phạm vi kiểm tra trong ứng dụng Ruby của bạn.

Nó đang được phát triển tích cực, với các công cụ phân tích mã mới thường được giới thiệu dưới dạng các tính năng mới. Bạn nên theo dõi các bản phát hành của RubyCritic.

Bài viết này sẽ đề cập đến một số lợi ích của RubyCritic, các phần phụ thuộc của nó và cách đọc báo cáo mã của RubyCritic.

Hãy bắt đầu nào!

Tại sao chọn RubyCritic cho ứng dụng Ruby on Rails của bạn?

Bạn nên cân nhắc sử dụng RubyCritic nếu muốn có một nơi duy nhất để xem xét các cải tiến mã cho dự án của mình. Việc đưa RubyCritic vào quá trình phát triển của bạn chắc chắn sẽ giảm thời gian nhóm phát triển dành để xử lý các khoản nợ kỹ thuật. Hầu hết các khoản nợ kỹ thuật sẽ được giải quyết tại thời điểm phát triển.

Một số lợi ích mà RubyCritic có thể cung cấp cho dự án và quá trình phát triển của bạn bao gồm:

  • Thông tin thống nhất ở một nơi
  • Báo cáo trực quan
  • Cài đặt dễ dàng
  • Không có cấu hình
  • Cho phép tùy chỉnh
  • Có khả năng mở rộng — bạn có thể thực hiện tích hợp nguồn mở của riêng mình
  • Trình tạo huy hiệu 🎉

Để hiểu cách RubyCritic hoạt động, hãy xem xét các phần phụ thuộc nội bộ mà nó sử dụng để tạo báo cáo.

Sự phụ thuộc nội bộ trong RubyCritic

Khi bạn thêm RubyCritic vào dự án của mình, một số phần phụ thuộc cũng sẽ được đưa vào.

Hãy nêu bật những yếu tố phụ thuộc tạo nên điều kỳ diệu:đá quý Reek, Flay và Flog. Những phần phụ thuộc này cho phép RubyCritic hiển thị cho bạn thông tin có giá trị về mã của bạn. Hiểu cách chúng hoạt động cũng giúp RubyCritic dễ sử dụng hơn.

Reek:Phát hiện mùi mã trong Ruby

Reek là một viên ngọc quý để phát hiện mùi mã trong Ruby. Mùi hôi trong mã không phải là việc xác định mã sai mà là việc phân tích xem mã có thể được viết tốt hơn hay không.

Phân tích của Reek xác định nếu một cái gì đó có thể được thực hiện theo cách khác. Nó không gợi ý làm thế nào , vì hầu hết các mùi mã đều liên quan đến logic nghiệp vụ và trải nghiệm của nhà phát triển với ngôn ngữ.

Ví dụ:bạn có thể dễ dàng viết lại if tuyên bố sử dụng kỹ thuật siêu lập trình. Tuy nhiên, cách khắc phục tùy thuộc vào nhà phát triển tùy theo bối cảnh của dự án. Trong trường hợp này, không có thư viện nào có thể chỉ ra giải pháp tốt nhất.

Reek phát hiện ra một danh sách đầy đủ các mùi. Nó kiểm tra và xác định các mùi có thể có trong:

  • Lớp học
  • Thuộc tính
  • Phương pháp
  • Thông số
  • Mô-đun
  • Trình vòng lặp
  • Việc triển khai tính đa hình

Bằng cách tìm mùi, bạn có thể thực hiện các bước để làm cho mã của mình dễ đọc và dễ bảo trì hơn.

Reek cho phép cấu hình tùy chỉnh để:

  • Tắt trình phát hiện theo loại của nó
  • Loại trừ các thư mục khỏi bị quét
  • Sử dụng bộ lọc để tắt cảnh báo

Bạn thậm chí có thể xác định mã cụ thể để chặn trong quá trình quét, một tính năng rất hữu ích khi mã chưa được hoàn thiện hoặc tái cấu trúc hoặc ngay cả khi đó là mã kế thừa.

Hãy xem một ví dụ về cách Reek hoạt động. Trong mã này, ngoại lệ chỉ được xác định là e .

 

Dễ dàng hình dung rằng e có nghĩa là một ngoại lệ, nhưng nếu chúng ta có những ngoại lệ khác thì sao? Xác định chúng một cách chính xác là cách tốt nhất để duy trì mã tốt.

Hôi Thối sẽ xác định e dưới dạng UncommunicativeVariableName và hiển thị cảnh báo.

 

Flay:Kiểm tra sao chép mã Ruby

Flay xác định những điểm tương đồng về cấu trúc của mã Ruby, bao gồm:

  • Phát hiện sự trùng lặp mã trong dự án
  • Kiểm tra sự khác biệt ở mọi cấp độ mã
  • Tạo điểm để đo lường mức độ tốt của mã của bạn (điểm của bạn càng thấp thì mã càng tốt)

Nếu Flay báo cáo sự giống nhau trong mã của bạn thì đó là dấu hiệu rõ ràng cho thấy cần phải tái cấu trúc. Đừng bỏ qua điều này! Mã trùng lặp là một cánh cổng dẫn đến lỗi. Nếu bạn sửa một cái gì đó ở một nơi nhưng lại quên ở một nơi khác thì sẽ có nhiều lỗi hơn xuất hiện.

Chúng ta có thể kiểm tra cách Flay hoạt động bằng cách chạy nó trong mã nguồn của chính nó:

 

Flay xác định những điểm tương đồng giữa hai điều này:

 

Lưu ý rằng cách viết của mã không hoàn toàn giống nhau nhưng chức năng của nó có thể được cấu trúc lại để tránh trùng lặp. Đó chính là điều kỳ diệu của Flay!

Flog:Kiểm tra độ phức tạp mã của bạn trong Ruby

Flog kiểm tra mức độ khó kiểm tra mã của bạn. Nó đặt điểm độ phức tạp cho từng dòng mã và tính tổng điểm cho từng phương thức và lớp.

Điểm càng cao thì mã của bạn càng cần được tái cấu trúc nhiều hơn vì điều đó cho thấy rằng bạn có cách triển khai rất phức tạp.

Hãy cùng xem Flog hoạt động! Một thay đổi nhỏ có thể khiến điểm của bạn thay đổi.

 
 

Lưu ý rằng trong phần đầu tiên của mã, chúng ta có or kiểm tra làm tăng số điểm thêm 0,4 điểm.

 
 

Các phần phụ thuộc RubyCritic khác

RubyCritic cũng sử dụng các phần phụ thuộc thời gian chạy khác, chẳng hạn như:

  • byebug - điều này nâng cao khả năng gỡ lỗi các ứng dụng Ruby. Nó cho phép bạn chạy từng dòng chương trình, thêm điểm dừng cũng như đánh giá và theo dõi các giá trị trong thời gian chạy. Nếu bạn vẫn sử dụng puts để gỡ lỗi, đã đến lúc bạn làm quen với các tính năng và lệnh của Byebug.
  • rubocop - một công cụ nói dối dành cho mã Ruby giúp bạn làm theo hướng dẫn về kiểu được cộng đồng Ruby sử dụng hoặc thậm chí áp dụng kiểu mã của riêng bạn. Việc đặt ra các tiêu chuẩn trong nhóm của bạn và tránh những xung đột ngớ ngẩn về không gian và tab sẽ rất hữu ích.
  • SimpleCov - một công cụ để kiểm tra mức độ bao phủ mã ứng dụng Ruby. Bạn có thể định cấu hình nó để chạy cùng với các bài kiểm tra của mình. Nó cung cấp các số liệu về mức độ bao phủ của mã để bạn có thể xác định những gì bạn cần chú ý và đầu tư thời gian vào đâu để tạo ra các trường hợp thử nghiệm tốt hơn.

Đi sâu vào danh sách các phần phụ thuộc của RubyCritic.

Sử dụng RubyCritic cho ứng dụng Ruby on Rails của bạn

RubyCritic có tài liệu hay để giúp bạn bắt đầu mà không cần cấu hình nhiều. Do đó, chúng tôi sẽ tập trung vào việc sử dụng các nguồn lực của họ để giúp chúng tôi phân tích các báo cáo.

RubyCritic cung cấp các báo cáo 'Mã', 'Mùi' và 'Phạm vi bảo hiểm'. Chúng ta sẽ lần lượt xem xét từng tính năng này.

Tổng quan về RubyCritic

Trang 'Tổng quan' hiển thị tổng số điểm cho dự án của bạn trên biểu đồ bánh rán, cùng với các xếp hạng (A là xếp hạng tốt nhất, F là xếp hạng kém nhất). Phần 'Tóm tắt' hiển thị chi tiết của từng xếp hạng, bao gồm số lượng tệp, số lượt rời bỏ (các thay đổi cam kết) và các mùi được tìm thấy.

Nâng cao chất lượng mã Ruby của bạn với RubyCritic:Phân tích trực quan và cải tiến liên tục

Trong phần 'Churn vs Complexity' ở đây, bạn có thể xác định lớp có độ phức tạp lớn nhất, đây có lẽ là điểm cần chú ý đầu tiên.

Để hiểu rõ hơn về biểu đồ này, cần tóm tắt lại quá trình đảo mã. Mã thay đổi thường xuyên có thể đưa ra cảnh báo rằng có điều gì đó không ổn - chẳng hạn như trong logic hoặc miền kinh doanh. Dù thế nào đi nữa, việc xem xét 'Churn vs Complexity' có thể giúp bạn biết những điểm yếu trong dự án của mình nằm ở đâu.

Báo cáo mã

Báo cáo 'Mã' hiển thị điểm cho từng loại, bao gồm các chỉ số về tỷ lệ rời bỏ, độ phức tạp, trùng lặp và mùi.

Bạn có thể sắp xếp danh sách này theo bất kỳ cột nào để xem các yếu tố xếp hạng cao nhất và giải quyết các vấn đề quan trọng nhất trước tiên.

Nâng cao chất lượng mã Ruby của bạn với RubyCritic:Phân tích trực quan và cải tiến liên tục

Ngoài ra, danh sách này còn có bộ lọc cho phép bạn tìm kiếm theo tên lớp một cách nhanh chóng.

Bấm vào tên lớp sẽ mở ra trang chi tiết có mã lớp và số liệu như:

  • Dòng mã
  • Phương pháp định lượng
  • Số người rời bỏ được tính toán
  • Độ phức tạp theo phương pháp
  • Điểm phức tạp (tổng mỗi lớp)
  • Số lượng bản sao được tìm thấy
  • Số mùi

Dòng mã nơi phát hiện sự cố sẽ được đánh dấu (dựa trên thông tin do Reek gem cung cấp).

Nếu Flog xác định được bất kỳ vấn đề nào, bạn sẽ thấy điểm. Bạn cũng sẽ biết liệu báo cáo Flay có phát hiện bất kỳ mã trùng lặp nào không.

Nâng cao chất lượng mã Ruby của bạn với RubyCritic:Phân tích trực quan và cải tiến liên tục

Báo cáo về mùi

Trang 'Mùi' hiển thị loại mùi, vị trí chính xác nơi mùi xuất hiện và trạng thái khắc phục.

Như đã đề cập trước đó, mùi được Reek phát hiện và việc phân loại và lọc cũng có sẵn trên trang này.

Nhấp vào tên lớp sẽ mở ra một trang có chi tiết mã của bạn. Bạn cũng có thể xem các lớp được nhóm theo loại mùi (trang 'Mã' bị thiếu vì trang này chỉ hiển thị số lượng mùi).

Nâng cao chất lượng mã Ruby của bạn với RubyCritic:Phân tích trực quan và cải tiến liên tục

Báo cáo phạm vi bảo hiểm

Cuối cùng, bạn có thể xem phân loại lớp và tỷ lệ bao phủ của từng lớp trong báo cáo 'Phạm vi bảo hiểm'. Ngược lại với các danh sách trong báo cáo 'Mã' và 'Mùi', danh sách trong 'Phạm vi bảo hiểm' không cho phép sắp xếp và lọc thông tin.

Bạn chỉ có thể xem tỷ lệ phần trăm phạm vi mã — không có thông tin bổ sung nào.

Nâng cao chất lượng mã Ruby của bạn với RubyCritic:Phân tích trực quan và cải tiến liên tục

Việc tích hợp báo cáo SimpleCov có thể tăng thêm giá trị và tính hữu ích cho trang này. Nhưng trong mọi trường hợp, báo cáo 'Phạm vi bảo hiểm' có thể hữu ích nếu bạn cần một báo cáo đơn giản để kiểm tra phạm vi kiểm tra của dự án.

Kết thúc

Trong bài đăng này, chúng tôi đã xem xét ngắn gọn các lợi ích của RubyCritic đối với ứng dụng Ruby của bạn trước khi đi sâu vào các phần phụ thuộc nội bộ của nó:Reek, Flay và Flog. Sau đó, chúng tôi giới thiệu cách đọc và phân tích báo cáo của RubyCritic.

Bước tiếp theo, hãy tìm hiểu cách sử dụng RubyCritic trong quy trình của bạn.

Chúc bạn tái cấu trúc mã thành công!

Tái bút. Nếu bạn muốn đọc các bài đăng của Ruby Magic ngay khi chúng được đăng tải, hãy đăng ký nhận bản tin Ruby Magic của chúng tôi và không bao giờ bỏ lỡ một bài đăng nào!

Nâng cao chất lượng mã Ruby của bạn với RubyCritic:Phân tích trực quan và cải tiến liên tục

Brena Monteiro

Tác giả khách mời Brena là Trưởng nhóm công nghệ đam mê cố vấn cho các nhà phát triển mới và có kinh nghiệm trong việc phát triển cũng như lãnh đạo các nhóm có hiệu suất cao. Cô ấy có kinh nghiệm trong việc xây dựng các API có thể mở rộng và tích hợp giữa các dịch vụ đám mây, rất nhiệt tình với kiến trúc tiến hóa và là Người học việc về Thực tế Mở rộng (XR).

Tất cả bài viết của Brena Monteiro