Cách chúng tôi triển khai SonarQube và nhận ra tiềm năng to lớn của nó

Cách chúng tôi triển khai SonarQube và nhận ra tiềm năng to lớn của nó

Chúng tôi muốn chia sẻ kinh nghiệm triển khai một nền tảng để phân tích và đo lường liên tục chất lượng của mã SonarQube vào các quy trình hiện có để phát triển hệ thống DPO (một phần bổ sung cho hệ thống kế toán thanh toán bù trừ và lưu ký Alameda) của National Settlement Depository.

National Settlement Depository (Moscow Exchange Group of Companies) là một trong những công ty cơ sở hạ tầng tài chính quan trọng lưu trữ và ghi lại chứng khoán của các tổ chức phát hành Nga và nước ngoài trị giá hơn 50 nghìn tỷ rúp. Khối lượng ngày càng tăng của các hoạt động được thực hiện bởi hệ thống, cũng như sự gia tăng liên tục về chức năng, đòi hỏi phải duy trì chất lượng cao của mã nguồn của hệ thống. Một trong những công cụ để đạt được mục tiêu này là máy phân tích tĩnh SonarQube. Trong bài viết này, chúng tôi mô tả trải nghiệm thành công khi triển khai liền mạch máy phân tích tĩnh SonarQube vào các quy trình phát triển hiện có của bộ phận chúng tôi.

Sơ lược về khoa

Năng lực của chúng tôi bao gồm các mô-đun sau: thanh toán cho khách hàng NSD, quản lý tài liệu điện tử (EDF), xử lý thông báo kho lưu trữ thương mại (đăng ký giao dịch ngoại hối), kênh tương tác điện tử giữa khách hàng và NSD, v.v. Nói chung, một lớp lớn công việc về mặt kỹ thuật của hoạt động. Chúng tôi làm việc trên cơ sở các ứng dụng. Các ứng dụng của giao dịch viên được xử lý bởi các nhà phân tích: họ thu thập các yêu cầu của khách hàng và trình bày cho chúng tôi tầm nhìn của họ về cách nó phù hợp với chương trình. Hơn nữa, sơ đồ tiêu chuẩn: phát triển mã - thử nghiệm - vận hành thử - chuyển mã đến mạch sản xuất cho khách hàng trực tiếp.

Tại sao SonarQube?

Đây là kinh nghiệm đầu tiên của bộ phận chúng tôi trong việc triển khai một nền tảng để kiểm soát chất lượng mã - trước đây chúng tôi đã thực hiện thủ công, chỉ xem xét mã. Nhưng khối lượng công việc ngày càng tăng đòi hỏi phải tự động hóa quy trình này. Ngoài ra, cũng có những nhân viên thiếu kinh nghiệm trong nhóm, những người không hoàn toàn quen thuộc với các quy định phát triển nội bộ và có xu hướng phạm sai lầm nhiều hơn. Để kiểm soát chất lượng của mã, người ta đã quyết định triển khai một bộ phân tích tĩnh. Vì SonarQube đã được sử dụng trong một số hệ thống NSD nên không mất nhiều thời gian để lựa chọn. Trước đây, các đồng nghiệp từ các bộ phận khác đã sử dụng nó để phân tích mã của các dịch vụ siêu nhỏ trong hệ thống Alameda (hệ thống kế toán thanh toán bù trừ và lưu ký riêng của NSD), trong CFT (hệ thống thông tin cho kế toán, số dư, chuẩn bị báo cáo bắt buộc và nội bộ), trong một số khác hệ thống . Để thử nghiệm, chúng tôi quyết định bắt đầu với phiên bản miễn phí của SonarQube. Vì vậy, hãy chuyển sang trường hợp của chúng tôi.

Quá trình thực hiện

Chúng ta có:

  • lắp ráp hệ thống tự động trong TeamCity;
  • thiết lập quy trình upload code qua MergeRequest từ nhánh tính năng lên nhánh chính trong GitLab (quy trình phát triển theo GitHub Flow);
  • SonarQube được định cấu hình để phân tích mã cho hệ thống DPO theo đúng lịch trình.

Mục tiêu của chúng tôi: thực hiện phân tích mã tự động trong quy trình CI/CD của AVE.

Cần tùy chỉnh: quá trình tự động kiểm tra mã bằng bộ phân tích tĩnh với mỗi MergeRequest đến nhánh chính.

Những thứ kia. hình ảnh mục tiêu như sau: ngay sau khi nhà phát triển tải các thay đổi lên nhánh tính năng, quá trình kiểm tra tự động các lỗi mới trong mã sẽ bắt đầu. Nếu không có lỗi thì mới được chấp nhận thay đổi, nếu không sẽ phải sửa lỗi. Ngay ở giai đoạn đầu, chúng tôi đã có thể xác định một số lỗi nhất định trong mã. Hệ thống có các cài đặt rất linh hoạt: nó có thể được cấu hình theo cách mà nó hoạt động cho các nhiệm vụ cụ thể của nhà phát triển, cho từng hệ thống và phong cách lập trình.

Định cấu hình QualityGate trong SonarQube

Phân tích QualityGate là thứ mà chúng tôi đọc được trong ruột của Internet. Ban đầu, chúng tôi sử dụng một cách tiếp cận khác, phức tạp hơn và bằng cách nào đó không hoàn toàn chính xác. Đầu tiên, chúng tôi chạy quét qua SonarQube hai lần: chúng tôi quét nhánh tính năng và nhánh mà chúng tôi sẽ hợp nhất nhánh tính năng, sau đó chúng tôi so sánh số lượng lỗi. Phương pháp này không ổn định và không phải lúc nào cũng cho kết quả chính xác. Sau đó, chúng tôi biết được rằng thay vì chạy SonarQube hai lần, bạn có thể đặt giới hạn về số lỗi mắc phải (QualityGate) và chỉ phân tích nhánh mà bạn tải lên và so sánh.

Cách chúng tôi triển khai SonarQube và nhận ra tiềm năng to lớn của nó

Hiện tại, chúng tôi vẫn sử dụng cách kiểm tra mã khá thô sơ. Cần lưu ý rằng SonarQube không tương thích với một số ngôn ngữ lập trình, bao gồm cả Delphi. Hiện tại, đối với hệ thống của chúng tôi, chúng tôi chỉ phân tích mã PLSql.

Nó hoạt động như thế này:

  • Chúng tôi chỉ phân tích mã PL/SQL cho dự án của mình.
  • QualityGate được định cấu hình trong SonarQube để số lượng lỗi không tăng lên khi thực hiện cam kết.
  • Số lỗi trong lần chạy đầu tiên là 229. Nếu có nhiều lỗi hơn trong quá trình xác nhận thì không được phép hợp nhất.
  • Ngoài ra, tùy thuộc vào việc sửa lỗi, có thể cấu hình lại QualityGate.
  • Bạn cũng có thể thêm các mục mới để phân tích, ví dụ: phạm vi mã với các bài kiểm tra, v.v.

Đề án làm việc:

Cách chúng tôi triển khai SonarQube và nhận ra tiềm năng to lớn của nó

Trong các nhận xét của tập lệnh, bạn có thể thấy rằng số lượng lỗi trong nhánh tính năng không tăng lên. Vì vậy, mọi thứ đều ổn.

Cách chúng tôi triển khai SonarQube và nhận ra tiềm năng to lớn của nó

Nút Hợp nhất sẽ khả dụng.

Cách chúng tôi triển khai SonarQube và nhận ra tiềm năng to lớn của nó

Trong phần nhận xét của tập lệnh, bạn có thể thấy rằng số lượng lỗi trong nhánh tính năng đã nhiều hơn mức cho phép. Vì vậy, mọi thứ đều XẤU.

Cách chúng tôi triển khai SonarQube và nhận ra tiềm năng to lớn của nó

Nút Hợp nhất có màu đỏ. Hiện tại, không có lệnh cấm tải lên các thay đổi đối với mã bị lỗi, nhưng điều này được thực hiện theo quyết định của nhà phát triển có trách nhiệm. Trong tương lai, bạn có thể ngăn chặn các cam kết như vậy được thực hiện đối với nhánh chính.

Cách chúng tôi triển khai SonarQube và nhận ra tiềm năng to lớn của nó

Tự xử lý lỗi

Tiếp theo, bạn cần kiểm tra tất cả các lỗi mà hệ thống phát hiện được, vì SonarQube phân tích theo các tiêu chuẩn nghiêm ngặt của nó. Những gì anh ấy coi là lỗi có thể không thực sự là lỗi trong mã của chúng tôi. Vì vậy, bạn cần kiểm tra và lưu ý xem đây có thực sự là nhầm lẫn hay không hoặc không cần chỉnh sửa trong điều kiện của chúng ta. Vì vậy, chúng tôi giảm số lượng lỗi. Theo thời gian, hệ thống sẽ học cách hiểu những sắc thái này.

chúng ta đã đến với cái gì

Mục tiêu của chúng tôi là tìm hiểu xem liệu việc chuyển xác minh mã sang tự động hóa có phù hợp trong trường hợp của chúng tôi hay không. Và kết quả đúng như mong đợi. SonarQube cho phép chúng tôi làm việc với các ngôn ngữ chúng tôi cần, thực hiện phân tích khá thành thạo và có khả năng học hỏi từ các mẹo dành cho nhà phát triển. Nói chung, chúng tôi hài lòng với trải nghiệm đầu tiên của mình với SonarQube và có kế hoạch phát triển hơn nữa theo hướng này. Chúng tôi hy vọng rằng trong tương lai, chúng tôi sẽ có thể tiết kiệm nhiều thời gian và công sức hơn cho việc xem xét mã và làm cho nó tốt hơn bằng cách loại bỏ yếu tố con người. Có lẽ trong quá trình này, chúng tôi sẽ phát hiện ra những thiếu sót của nền tảng hoặc ngược lại, chúng tôi sẽ đảm bảo một lần nữa rằng đây là một điều thú vị với tiềm năng lớn.

Trong bài viết tổng quan này, chúng tôi đã nói về việc làm quen với máy phân tích tĩnh SonarQube. Nếu bạn có câu hỏi, xin vui lòng viết trong các ý kiến. Nếu bạn quan tâm đến chủ đề này, trong ấn phẩm mới, chúng tôi sẽ mô tả chi tiết hơn cách thiết lập mọi thứ chính xác và viết mã để thực hiện kiểm tra như vậy.

Tác giả văn bản: atanya

Nguồn: www.habr.com

Thêm một lời nhận xét