Phân tích dự án mã nguồn mở với PVS-Studio
Bạn có muốn làm cho dự án mã nguồn mở của mình sạch hơn và an toàn hơn không? Bài viết này sẽ hướng dẫn bạn cách sử dụng PVS-Studio để phân tích mã nguồn thường xuyên, tích hợp vào quy trình CI/CD, và phát hiện lỗi trước khi chúng xuất hiện trong bản phát hành. Đặc biệt, chúng tôi cung cấp giấy phép miễn phí cho các dự án mã nguồn mở.
Giới thiệu
PVS-Studio là một công cụ phân tích tĩnh mạnh mẽ, giúp phát hiện lỗi và lỗ hổng bảo mật trong mã nguồn. Trên blog của chúng tôi, chúng tôi thường xuyên đăng tải các bài viết mô tả cách chúng tôi sử dụng PVS-Studio để kiểm tra các dự án mã nguồn mở khác nhau.
Lưu ý: Danh sách đầy đủ các dự án mà chúng tôi đã kiểm tra có thể được tìm thấy tại đây. Để gợi ý một dự án để phân tích, vui lòng gửi nó qua kho chứa GitHub của chúng tôi.
Sau mỗi bài viết, chúng tôi thông báo cho các nhà phát triển dự án về các lỗi mà chúng tôi đã phát hiện. Tuy nhiên, vì chúng tôi chỉ kiểm tra mỗi dự án một lần và với những khoảng thời gian dài giữa các lần kiểm tra, các vấn đề mới vẫn có thể xuất hiện trong mã.
Vì vậy, hôm nay tôi sẽ chỉ cho bạn cách sử dụng PVS-Studio để giữ cho mã nguồn của các dự án mã nguồn mở sạch và an toàn.
Tại sao lại cần phân tích mã nguồn?
Có thể bạn đang tự hỏi: "Tại sao tôi nên kiểm tra một dự án mã nguồn mở bằng công cụ phân tích?"
Câu trả lời rất đơn giản: vì lý do giống như bạn nên kiểm tra bất kỳ mã nguồn nào—bởi vì nó có thể chứa lỗi. Ngay cả những dự án phổ biến và được duy trì tích cực nhất cũng không miễn dịch với lỗi chính tả, lỗi logic, hay các lỗ hổng ẩn.
Công cụ phân tích tĩnh giúp bạn tìm ra những vấn đề này trước khi chúng xuất hiện trong bản phát hành, cho dù đó là một lỗi logic nhỏ hay một lỗ hổng tiềm ẩn nghiêm trọng.
Nếu bạn sử dụng công cụ phân tích thường xuyên—ví dụ, trong CI/CD—nó sẽ ngăn chặn những khuyết điểm này đến tay người dùng của bạn. Như vậy, bạn không chỉ sửa chữa các lỗi trong quá khứ, mà còn ngăn chặn những lỗi trong tương lai.
Mã nguồn mở là về "cùng nhau làm cho mọi thứ tốt hơn." Phân tích tĩnh là một trong những cách để đóng góp vào nỗ lực chung đó.
Chi phí sử dụng PVS-Studio
Mã nguồn mở thường là một nỗ lực phi thương mại, vì vậy cách cấp giấy phép của chúng tôi phản ánh điều đó.
Bạn có thể sử dụng công cụ phân tích tĩnh PVS-Studio miễn phí khi phát triển các dự án mã nguồn mở được lưu trữ trên GitHub. Chúng tôi cung cấp giấy phép miễn phí có thời hạn một năm cho bất kỳ ai yêu cầu.
Quan trọng: Giấy phép PVS-Studio miễn phí không áp dụng cho các dự án thương mại, các dự án do các công ty phát triển, hoặc các bản sao và nhánh.
Để nhận giấy phép, bạn cần thực hiện một số bước đơn giản.
Đầu tiên, hãy thêm đoạn mã sau vào tệp README.md của dự án:
## Công cụ SAST
[PVS-Studio](https://pvs-studio.com/pvs-studio/?utm_source=website&utm_medium=github&utm_campaign=open_source) - công cụ phân tích tĩnh cho mã C, C++, C#, và Java.
Tiếp theo, hãy truy cập trang này, nhập tên của bạn và email nơi chúng tôi sẽ gửi khóa giấy phép, và cung cấp liên kết đến dự án của bạn.
Để gia hạn giấy phép của bạn sau này, hãy làm theo các bước tương tự.
Ngoài ra, vui lòng tuân thủ các quy tắc sau khi sử dụng giấy phép PVS-Studio miễn phí:
- Sử dụng một giấy phép cho mỗi dự án chỉ;
- Đề cập đến PVS-Studio trong các cam kết và yêu cầu kéo liên quan đến việc sửa chữa cảnh báo của PVS-Studio, ví dụ: "Đã sửa các vấn đề được phát hiện bởi PVS-Studio";
Nếu các điều khoản của giấy phép miễn phí tiêu chuẩn không phù hợp với dự án của bạn, điều đó hoàn toàn ổn. Chúng tôi sẵn sàng thảo luận về các thông số tùy chỉnh nếu bạn muốn sử dụng giải pháp của chúng tôi cho kiểm soát chất lượng mã. Hãy cho chúng tôi biết về trường hợp sử dụng của bạn qua biểu mẫu phản hồi, và chúng tôi sẽ cùng nhau tìm ra giải pháp tốt nhất.
Nếu bạn có câu hỏi về cách sử dụng PVS-Studio trong dự án mã nguồn mở của mình—bạn có thể hỏi trên Stack Overflow bằng cách sử dụng thẻ pvs-studio.
Nếu bạn gặp bất kỳ vấn đề gì với công cụ phân tích, bạn có thể báo cáo cho đội ngũ hỗ trợ của chúng tôi.
Sử dụng thường xuyên
Như tôi đã đề cập trước đó, tích hợp phân tích tĩnh vào CI là một bước quan trọng để tận dụng tối đa công cụ này. Thực tế, việc chạy phân tích thường xuyên ở giai đoạn đầu của quy trình giúp phát hiện lỗi và lỗ hổng trước khi chúng đến nhánh chính. Điều này không chỉ cải thiện chất lượng mã tổng thể mà còn giảm chi phí sửa chữa, vì các nhà phát triển nhận được phản hồi ngay sau khi thực hiện thay đổi.
Chạy phân tích khi mở yêu cầu kéo/gộp thậm chí còn hiệu quả hơn. Tại thời điểm này, mã đã sẵn sàng để tích hợp nhưng chưa được hợp nhất vào nhánh chính.
Chúng tôi đã thảo luận về chủ đề này chi tiết hơn trong một trong các bài viết trên blog của chúng tôi. Hơn nữa, chúng tôi cũng đã cung cấp một ví dụ về pipeline cho GitHub Actions mà phân tích các yêu cầu kéo. Tuy nhiên, có một điểm mà chúng tôi chưa đề cập trong bài viết đó: cách phân tích các yêu cầu kéo "ngoại"—những yêu cầu được mở từ các nhánh khác?
Trong những trường hợp như vậy, GitHub kích hoạt các cơ chế bảo vệ cho dữ liệu nhạy cảm và không cấp quyền truy cập vào các biến môi trường bí mật được thiết lập trong dự án. Điều này là hợp lý—nếu không, bất kỳ ai cũng có thể sửa đổi tệp yaml và in các biến đó ra console.
Vậy, làm thế nào bạn có thể cấu hình phân tích cho các yêu cầu kéo "ngoại"? Bạn chỉ cần điều chỉnh một vài cài đặt.
Trong cài đặt Môi trường của kho chứa, tạo một môi trường mới và thiết lập tùy chọn Nhà phê duyệt bắt buộc, chỉ định những người bảo trì sẽ xem xét các thay đổi ngoại gửi đến.
Dưới đây, trong Bí mật môi trường, tạo một biến cụ thể cho môi trường này, tương tự như cách bạn thiết lập một biến bí mật cho toàn bộ kho chứa.
Sau đó, thêm môi trường đã tạo vào tệp yaml của bạn, ví dụ:
....
jobs:
external-analysis:
environment: pr-review-required
....
Thay đổi này mang lại điều gì?
Bây giờ, trước khi chạy, pipeline sẽ chờ sự phê duyệt từ một người bảo trì để xác nhận rằng các thay đổi ngoại là an toàn. Khi được phê duyệt, pipeline sẽ chạy thành công với tất cả các biến môi trường mà bạn đã chỉ định trước đó.
Lưu ý: Khi làm việc trong một môi trường như vậy, bạn có thể gặp phải một vấn đề khi tải báo cáo phân tích lên CodeQL, bởi vì GitHub không truyền thông tin liên kết giữa cam kết và quy trình làm việc đang chạy. Để giải quyết vấn đề này, bạn có thể di chuyển việc tải lên CodeQL vào một quy trình làm việc riêng biệt, vì nó không yêu cầu bất kỳ biến môi trường nhạy cảm nào.
Bạn có thể xem một ví dụ về quy trình làm việc cho GitHub Actions trong kho chứa thử nghiệm này.
Ngoài GitHub Actions, bạn cũng có thể chạy công cụ phân tích PVS-Studio trong GitLab CI/CD. Đối với các trường hợp cụ thể hơn, hãy tham khảo phần này trong tài liệu của chúng tôi về phân tích các cam kết và yêu cầu kéo.
Kết luận
Trong bài viết này, tôi đã trả lời các câu hỏi liên quan đến việc sử dụng công cụ phân tích tĩnh PVS-Studio cho các dự án mã nguồn mở. Nếu bạn vẫn có câu hỏi, tôi sẽ rất vui lòng trả lời chúng trong phần bình luận bên dưới.
Chúc bạn mã nguồn sạch sẽ!