C# เจฒเจˆ PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ GitLab เจตเจฟเฉฑเจš เจตเจฟเจฒเฉ€เจจ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ

C# เจฒเจˆ PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ GitLab เจตเจฟเฉฑเจš เจ…เจญเฉ‡เจฆ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ
GitLab เจจเฉ‚เฉฐ เจชเจฟเจ†เจฐ เจ•เจฐเจฆเฉ‡ เจนเฉ‹ เจ…เจคเฉ‡ เจฌเฉฑเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจจเจซเจผเจฐเจค เจ•เจฐเจฆเฉ‡ เจนเฉ‹? เจ†เจชเจฃเฉ‡ เจธเจฐเฉ‹เจค เจ•เฉ‹เจก เจฆเฉ€ เจ—เฉเจฃเจตเฉฑเจคเจพ เจตเจฟเฉฑเจš เจธเฉเจงเจพเจฐ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเฉ‹? เจซเจฟเจฐ เจคเฉเจธเฉ€เจ‚ เจธเจนเฉ€ เจœเจ—เฉเจนเจพ 'เจคเฉ‡ เจ†เจ เจนเฉ‹เฅค เจ…เฉฑเจœ เจ…เจธเฉ€เจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฆเฉฑเจธเจพเจ‚เจ—เฉ‡ เจ•เจฟ เจฎเจฐเจœ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฒเจˆ PVS-Studio C# เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจธเฉฐเจฐเจšเจฟเจค เจ•เจฐเจจเจพ เจนเฉˆเฅค เจ‡เฉฑเจ• เจฏเฉ‚เจจเฉ€เจ•เฉ‹เจฐเจจ เจฎเฉ‚เจก เจ…เจคเฉ‡ เจนเจฐ เจ•เจฟเจธเฉ‡ เจฒเจˆ เจ–เฉเจธเจผเฉ€ เจจเจพเจฒ เจชเฉœเฉเจนเฉ‹เฅค

เจชเฉ€เจตเฉ€เจเจธ-เจธเจŸเฉ‚เจกเฉ€เจ“ C, C++, C# เจ…เจคเฉ‡ Java เจตเจฟเฉฑเจš เจฒเจฟเจ–เฉ‡ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจพเจ‚ เจฆเฉ‡ เจธเจฐเฉ‹เจค เจ•เฉ‹เจก เจตเจฟเฉฑเจš เจคเจฐเฉเฉฑเจŸเฉ€เจ†เจ‚ เจ…เจคเฉ‡ เจธเฉฐเจญเจพเจตเฉ€ เจ•เจฎเจœเจผเฉ‹เจฐเฉ€เจ†เจ‚ เจฆเฉ€ เจชเจ›เจพเจฃ เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจธเจพเจงเจจ เจนเฉˆเฅค เจตเจฟเฉฐเจกเฉ‹เจœเจผ, เจฒเฉ€เจจเจ•เจธ เจ…เจคเฉ‡ เจฎเฉˆเจ•เฉ‹เจธ 'เจคเฉ‡ 64-เจฌเจฟเฉฑเจŸ เจธเจฟเจธเจŸเจฎเจพเจ‚ 'เจคเฉ‡ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆเฅค 32-เจฌเจฟเฉฑเจŸ, 64-เจฌเจฟเฉฑเจŸ เจ…เจคเฉ‡ เจเจฎเจฌเฉˆเจกเจก เจเจ†เจฐเจเจฎ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎเจพเจ‚ เจฒเจˆ เจกเจฟเจœเจผเจพเจˆเจจ เจ•เฉ€เจคเฉ‡ เจ•เฉ‹เจก เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆเฅค

เจคเจฐเฉ€เจ•เฉ‡ เจจเจพเจฒ, เจ…เจธเฉ€เจ‚ PVS-Studio 7.08 เจจเฉ‚เฉฐ เจœเจพเจฐเฉ€ เจ•เฉ€เจคเจพ, เจœเจฟเจธ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจšเฉ€เจœเจผเจพเจ‚ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจฆเจฟเจฒเจšเจธเจช. เจ‰เจฆเจพเจนเจฐเจฃ เจฒเจˆ:

  • เจฒเฉ€เจจเจ•เจธ เจ…เจคเฉ‡ เจฎเฉˆเจ•เฉ‹เจธ เจฒเจˆ C# เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ•;
  • เจฐเจพเจˆเจกเจฐ เจฒเจˆ เจชเจฒเฉฑเจ—เจ‡เจจ;
  • เจจเจตเฉ€เจ‚ เจซเจพเจˆเจฒ เจธเฉ‚เจšเฉ€ เจœเจพเจ‚เจš เจฎเฉ‹เจก.

เจซเจพเจˆเจฒ เจธเฉ‚เจšเฉ€ เจœเจพเจ‚เจš เจฎเฉ‹เจก

เจชเจนเจฟเจฒเจพเจ‚, เจ•เฉเจ เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฒเจˆ, เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจจเฉ‚เฉฐ เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• .xml เจชเจพเจธ เจ•เจฐเจจเจพ เจœเจผเจฐเฉ‚เจฐเฉ€ เจธเฉ€เฅค เจชเจฐ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจน เจฌเจนเฉเจค เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจจเจนเฉ€เจ‚ เจนเฉˆ, เจ…เจธเฉ€เจ‚ .txt เจจเฉ‚เฉฐ เจŸเฉเจฐเจพเจ‚เจธเจซเจฐ เจ•เจฐเจจ เจฆเฉ€ เจฏเฉ‹เจ—เจคเจพ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจฟเจ† เจนเฉˆ, เจœเฉ‹ เจœเฉ€เจตเจจ เจจเฉ‚เฉฐ เจฌเจนเฉเจค เจธเจงเจพเจฐเจจ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ.

เจ–เจพเจธ เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฒเจˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจซเจฒเฉˆเจ— เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจจเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ --sourceFiles (-f) เจ…เจคเฉ‡ เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจฆเฉ‡ เจจเจพเจฒ .txt เจŸเฉเจฐเจพเจ‚เจธเจซเจฐ เจ•เจฐเฉ‹เฅค เจ‡เจน เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจฟเจธเจฆเจพ เจนเฉˆ:

pvs-studio-dotnet -t path/to/solution.sln -f fileList.txt -o project.json

เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจ•เจฎเจฟเจŸ เจšเฉˆเจ•เจฟเฉฐเจ— เจœเจพเจ‚ เจชเฉเฉฑเจฒ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจตเจฟเฉฑเจš เจฆเจฟเจฒเจšเจธเจชเฉ€ เจฐเฉฑเจ–เจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจฎเฉ‹เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจตเฉ€ เจ…เจœเจฟเจนเจพ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจ…เฉฐเจคเจฐ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจฒเจˆ เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจตเจฟเฉฑเจš เจนเฉ‹เจตเฉ‡เจ—เจพ เจ…เจคเฉ‡ เจ‡เจน เจ‡เจธ เจ—เฉฑเจฒ 'เจคเฉ‡ เจจเจฟเจฐเจญเจฐ เจ•เจฐเฉ‡เจ—เจพ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจ•เจฟเจนเฉœเฉ‡ เจธเจฟเจธเจŸเจฎเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐ เจฐเจนเฉ‡ เจนเฉ‹เฅค

เจ…เจญเฉ‡เจฆ เจฆเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฆเจพ เจธเจฟเจงเจพเจ‚เจค

เจœเจพเจ‚เจš เจฆเจพ เจฎเฉเฉฑเจ– เจคเฉฑเจค เจ‡เจน เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ‰เจฃเจพ เจนเฉˆ เจ•เจฟ เจ…เจญเฉ‡เจฆ เจนเฉ‹เจฃ เจฆเฉŒเจฐเจพเจจ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจฆเฉเจ†เจฐเจพ เจ–เฉ‹เจœเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจตเจฟเฉฑเจš เจจเจนเฉ€เจ‚ เจ†เจ‰เจ‚เจฆเฉ€เจ†เจ‚ เจฎเจพเจธเจŸเจฐ เจธเจผเจพเจ–เจพ เจ…เจธเฉ€เจ‚ เจนเจฐ เจตเจพเจฐ เจชเฉ‚เจฐเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจจเจนเฉ€เจ‚ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡เฅค เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจธเจผเจพเจ–เจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจฎเจฟเจฒเจพเจ‰เจ‚เจฆเฉ‡ เจธเจฎเฉ‡เจ‚, เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจฌเจฆเจฒเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค เจ‡เจธ เจฒเจˆ, เจฎเฉˆเจ‚ เจ‡เฉฑเจ• เจ…เจญเฉ‡เจฆ เจฌเฉ‡เจจเจคเฉ€ เจœเจพเจ‚เจš เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจ เจฆเจพ เจธเฉเจเจพเจ… เจฆเจฟเฉฐเจฆเจพ เจนเจพเจ‚เฅค

เจธเจฅเจฟเจฐ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจฎเจฐเจœ เจฌเฉ‡เจจเจคเฉ€ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจฟเจ–เจพเจˆ เจฆเจฟเฉฐเจฆเฉ€ เจนเฉˆ:

C# เจฒเจˆ PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ GitLab เจตเจฟเฉฑเจš เจ…เจญเฉ‡เจฆ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ
เจฏเจพเจจเฉ€ เจ‰เจน เจธเจพเจฐเฉ€เจ†เจ‚ เจคเจฐเฉเฉฑเจŸเฉ€เจ†เจ‚ เจœเฉ‹ เจฌเฉเจฐเจพเจ‚เจš เจตเจฟเฉฑเจš เจธเจจ เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚, เจฎเจพเจธเจŸเจฐ เจธเจผเจพเจ–เจพ เจตเจฟเฉฑเจš เจšเจฒเฉ‡ เจœเจพเจฃเจ—เฉ‡เฅค เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ…เจธเฉ€เจ‚ เจ‡เจน เจจเจนเฉ€เจ‚ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเจพเจ‚, เจ…เจธเฉ€เจ‚ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจœเฉ‹เฉœเจฆเฉ‡ เจนเจพเจ‚, เจ…เจคเฉ‡ เจนเฉเจฃ เจšเจฟเฉฑเจคเจฐ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจฟเจ–เจพเจˆ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ:

C# เจฒเจˆ PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ GitLab เจตเจฟเฉฑเจš เจ…เจญเฉ‡เจฆ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ
เจ…เจธเฉ€เจ‚ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚2 เจ…เจคเฉ‡, เจœเฉ‡เจ•เจฐ เจ•เฉ‹เจˆ เจคเจฐเฉเฉฑเจŸเฉ€เจ†เจ‚ เจจเจนเฉ€เจ‚ เจนเจจ, เจคเจพเจ‚ เจ…เจธเฉ€เจ‚ เจฐเจฒเฉ‡เจตเฉ‡เจ‚ เจฆเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจจเฉ‚เฉฐ เจธเจตเฉ€เจ•เจพเจฐ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจจเจนเฉ€เจ‚ เจคเจพเจ‚ เจ…เจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจ…เจธเจตเฉ€เจ•เจพเจฐ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค

เจคเจฐเฉ€เจ•เฉ‡ เจจเจพเจฒ, เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ C/C++ เจฒเจˆ เจ•เจฎเจฟเจŸเจธ เจ…เจคเฉ‡ เจชเฉเฉฑเจฒ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เจฐเจจ เจตเจฟเฉฑเจš เจฆเจฟเจฒเจšเจธเจชเฉ€ เจฐเฉฑเจ–เจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจฌเจพเจฐเฉ‡ เจชเฉœเฉเจน เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ‡เฉฑเจฅเฉ‡.

GitLab

GitLab เจ‡เฉฑเจ• เจ“เจชเจจ เจธเฉ‹เจฐเจธ เจตเฉˆเฉฑเจฌ-เจ…เจงเจพเจฐเจฟเจค DevOps เจฒเจพเจˆเจซเจธเจพเจˆเจ•เจฒ เจŸเฉ‚เจฒ เจนเฉˆ เจœเฉ‹ Git เจฒเจˆ เจ‡เจธเจฆเฉ‡ เจ†เจชเจฃเฉ‡ เจตเจฟเจ•เฉ€, เจ‡เจธเจผเฉ‚ เจŸเฉเจฐเฉˆเจ•เจฟเฉฐเจ— เจธเจฟเจธเจŸเจฎ, CI/CD เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจ•เฉ‹เจก เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจชเฉเจฐเจฌเฉฐเจงเจจ เจธเจฟเจธเจŸเจฎ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจ‡เจธ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจตเจฟเจฒเฉ€เจจ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เจฐเจจเจพ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเฉ‹, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ†เจชเจฃเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจฐเจœเจฟเจธเจŸเจฐ เจ•เจฐเจจ เจ…เจคเฉ‡ เจ…เจชเจฒเฉ‹เจก เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจจเจนเฉ€เจ‚ เจœเจพเจฃเจฆเฉ‡ เจ•เจฟ เจ‡เจน เจ•เจฟเจตเฉ‡เจ‚ เจ•เจฐเจจเจพ เจนเฉˆ, เจคเจพเจ‚ เจฎเฉˆเจ‚ เจธเฉเจเจพเจ… เจฆเจฟเฉฐเจฆเจพ เจนเจพเจ‚ เจฒเฉ‡เจ– เจฎเฉ‡เจฐเฉ‡ เจธเจพเจฅเฉ€.

เจŸเจฟเฉฑเจชเจฃเฉ€. เจนเฉ‡เจ เจพเจ‚ เจตเจฐเจฃเจฟเจค เจตเจพเจคเจพเจตเจฐเจฃ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจฆเจพ เจคเจฐเฉ€เจ•เจพ เจธเฉฐเจญเจต เจฒเฉ‹เจ•เจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• เจนเฉˆเฅค เจŸเฉ€เจšเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจฒเจˆ เจœเจผเจฐเฉ‚เจฐเฉ€ เจตเจพเจคเจพเจตเจฐเจฃ เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจ…เจคเฉ‡ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจจเฉ‚เฉฐ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจ เจฒเจˆ เจ•เจฆเจฎเจพเจ‚ เจจเฉ‚เฉฐ เจฆเจฟเจ–เจพเจ‰เจฃเจพ เจนเฉˆเฅค เจธเจผเจพเจ‡เจฆ เจคเฉเจนเจพเจกเฉ‡ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš เจตเจพเจคเจพเจตเจฐเจฃ เจฆเฉ€ เจคเจฟเจ†เจฐเฉ€ (เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจเจพ, เจ‡เฉฑเจ• เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจธเจฅเจพเจชเจค เจ•เจฐเจจเจพ) เจ…เจคเฉ‡ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจฆเฉ‡ เจชเฉœเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจตเฉฑเจ– เจ•เจฐเจจเจพ เจตเจงเฉ‡เจฐเฉ‡ เจ…เจจเฉเจ•เฉ‚เจฒ เจนเฉ‹เจตเฉ‡เจ—เจพ: เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจตเจพเจคเจพเจตเจฐเจฃ เจจเจพเจฒ เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจคเจฟเจ†เจฐ เจ•เจฐเจจเจพ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ, เจœเจพเจ‚ เจ•เฉ‹เจˆ เจนเฉ‹เจฐ เจคเจฐเฉ€เจ•เจพเฅค

เจฌเจฟเจนเจคเจฐ เจขเฉฐเจ— เจจเจพเจฒ เจธเจฎเจเจฃ เจฒเจˆ เจ•เจฟ เจนเฉเจฃ เจ•เฉ€ เจนเฉ‹เจตเฉ‡เจ—เจพ, เจฎเฉˆเจ‚ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจšเจฟเฉฑเจคเจฐ เจจเฉ‚เฉฐ เจฆเฉ‡เจ–เจฃ เจฆเจพ เจธเฉเจเจพเจ… เจฆเจฟเฉฐเจฆเจพ เจนเจพเจ‚:

C# เจฒเจˆ PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ GitLab เจตเจฟเฉฑเจš เจ…เจญเฉ‡เจฆ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ
เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจจเฉ‚เฉฐ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ .NET เจ•เฉ‹เจฐ SDK 3 เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจ‡เจธ เจฒเจˆ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ Microsoft เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ เจœเจฟเฉฑเจฅเฉ‹เจ‚ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจฒเจˆ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ€เจ†เจ‚ เจจเจฟเจฐเจญเจฐเจคเจพเจตเจพเจ‚ เจธเจฅเจพเจชเจค เจ•เฉ€เจคเฉ€เจ†เจ‚ เจœเจพเจฃเจ—เฉ€เจ†เจ‚เฅค เจตเฉฑเจ–-เจตเฉฑเจ– เจฒเฉ€เจจเจ•เจธ เจกเจฟเจธเจŸเจฐเฉ€เจฌเจฟเจŠเจธเจผเจจเจพเจ‚ เจฒเจˆ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจธเจพเจซเจŸ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจเจพ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจตเจฟเฉฑเจš เจฆเฉฑเจธเจฟเจ† เจ—เจฟเจ† เจนเฉˆ.

เจชเฉˆเจ•เฉ‡เจœ เจฎเฉˆเจจเฉ‡เจœเจฐ เจฆเฉเจ†เจฐเจพ PVS-Studio เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจ เจฒเจˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจตเฉ€ เจœเฉ‹เฉœเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉ‹เจตเฉ‡เจ—เฉ€เฅค เจตเฉฑเจ–-เจตเฉฑเจ– เจกเจฟเจธเจŸเจฐเฉ€เจฌเจฟเจŠเจธเจผเจจเจพเจ‚ เจฒเจˆ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจเจพ เจตเจฟเฉฑเจš เจตเจงเฉ‡เจฐเฉ‡ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจš เจฆเฉฑเจธเจฟเจ† เจ—เจฟเจ† เจนเฉˆ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจฆเจพ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจญเจพเจ—.

เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจจเฉ‚เฉฐ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจฒเจพเจ‡เจธเฉˆเจ‚เจธ เจ•เฉเฉฐเจœเฉ€ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค 'เจคเฉ‡ เจคเฉเจธเฉ€เจ‚ เจŸเฉเจฐเจพเจ‡เจฒ เจฒเจพเจ‡เจธเฉฐเจธ เจชเฉเจฐเจพเจชเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจกเจพเจ‰เจจเจฒเฉ‹เจก เจชเฉฐเจจเจพ.

เจŸเจฟเฉฑเจชเจฃเฉ€. เจ•เจฟเจฐเจชเจพ เจ•เจฐเจ•เฉ‡ เจจเฉ‹เจŸ เจ•เจฐเฉ‹ เจ•เจฟ เจ“เจชเจฐเฉ‡เจธเจผเจจ เจฆเฉ‡ เจตเจฐเจฃเจฟเจค เจขเฉฐเจ— (เจ…เจญเฉ‡เจฆ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเฉ‡ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ) เจฒเจˆ เจ‡เฉฑเจ• เจเจ‚เจŸเจฐเจชเฉเจฐเจพเจˆเจœเจผ เจฒเจพเจ‡เจธเฉˆเจ‚เจธ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจ‡เจธ เจฒเจˆ, เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจธเฉฐเจšเจพเจฒเจจ เจตเจฟเจงเฉ€ เจจเฉ‚เฉฐ เจ…เจœเจผเจฎเจพเจ‰เจฃเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ "เจธเฉเจจเฉ‡เจนเจพ" เจ–เฉ‡เจคเจฐ เจตเจฟเฉฑเจš เจ‡เจน เจฆเจฐเจธเจพเจ‰เจฃเจพ เจจเจพ เจญเฉเฉฑเจฒเฉ‹ เจ•เจฟ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจเจ‚เจŸเจฐเจชเฉเจฐเจพเจˆเจœเจผ เจฒเจพเจ‡เจธเฉˆเจ‚เจธ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค

เจœเฉ‡เจ•เจฐ เจ‡เฉฑเจ• เจฎเจฟเจฒเจพเจจ เจฆเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจคเจพเจ‚ เจธเจพเจจเฉ‚เฉฐ เจธเจฟเจฐเจซ เจฌเจฆเจฒเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจจเจนเฉ€เจ‚ เจคเจพเจ‚ เจ…เจธเฉ€เจ‚ เจธเจพเจฐเฉ€เจ†เจ‚ เจซเจพเจˆเจฒเจพเจ‚ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจธเจพเจจเฉ‚เฉฐ เจฒเฉŒเจ—เจธ เจจเฉ‚เฉฐ เจ‰เจธ เจซเจพเจฐเจฎเฉˆเจŸ เจตเจฟเฉฑเจš เจฌเจฆเจฒเจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ เจœเจฟเจธเจฆเฉ€ เจธเจพเจจเฉ‚เฉฐ เจฒเฉ‹เฉœ เจนเฉˆเฅค

เจนเฉเจฃ, เจคเฉเจนเจพเจกเฉ€เจ†เจ‚ เจ…เฉฑเจ–เจพเจ‚ เจฆเฉ‡ เจธเจพเจนเจฎเจฃเฉ‡ เจ•เฉฐเจฎ เจฆเจพ เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ เจนเฉ‹เจฃ เจจเจพเจฒ, เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ• เจธเจ•เฉเจฐเจฟเจชเจŸ เจฒเจฟเจ–เจฃ เจฒเจˆ เจ…เฉฑเจ—เฉ‡ เจตเจง เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฒเจˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจซเจพเจˆเจฒ เจจเฉ‚เฉฐ เจฌเจฆเจฒเจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ .gitlab-ci.yml เจœเจพเจ‚, เจœเฉ‡เจ•เจฐ เจ‡เจน เจฎเฉŒเจœเฉ‚เจฆ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจคเจพเจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจฌเจฃเจพเจ“เฅค เจ‡เจธเจจเฉ‚เฉฐ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ†เจชเจฃเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฆเฉ‡ เจจเจพเจฎ 'เจคเฉ‡ เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ -> CI/CD เจธเฉˆเจŸ เจ…เจช เจ•เจฐเฉ‹.

C# เจฒเจˆ PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ GitLab เจตเจฟเฉฑเจš เจ…เจญเฉ‡เจฆ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ
เจนเฉเจฃ เจ…เจธเฉ€เจ‚ เจธเจ•เฉเจฐเจฟเจชเจŸ เจฒเจฟเจ–เจฃ เจฒเจˆ เจคเจฟเจ†เจฐ เจนเจพเจ‚เฅค เจ†เจ“ เจชเจนเจฟเจฒเจพเจ‚ เจ•เฉ‹เจก เจฒเจฟเจ–เฉ€เจ เจœเฉ‹ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเฉ‡เจ—เจพ เจ…เจคเฉ‡ เจฒเจพเจ‡เจธเฉˆเจ‚เจธ เจฆเจฐเจœ เจ•เจฐเฉ‡เจ—เจพ:

before_script:
  - apt-get update && apt-get -y install wget gnupg 

  - apt-get -y install git
  - wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
  - dpkg -i packages-microsoft-prod.deb
  - apt-get update
  - apt-get install apt-transport-https
  - apt-get update
  
  - wget -q -O - https://files.viva64.com/etc/pubkey.txt | apt-key add -
  - wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
  - apt-get update
  - apt-get -y install pvs-studio-dotnet

  - pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
  - dotnet restore "$CI_PROJECT_DIR"/Test/Test.sln

เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เฉฐเจธเจŸเจพเจฒเฉ‡เจธเจผเจจ เจ…เจคเฉ‡ เจเจ•เจŸเฉ€เจตเฉ‡เจธเจผเจจ เจนเฉ‹เจฐ เจธเจพเจฐเฉ€เจ†เจ‚ เจธเจ•เฉเจฐเจฟเจชเจŸเจพเจ‚ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ‹เจฃเฉ€ เจšเจพเจนเฉ€เจฆเฉ€ เจนเฉˆ, เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจตเจฟเจธเจผเฉ‡เจธเจผ เจฒเฉ‡เจฌเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ…เฉฑเจ—เฉ‡_เจธเจ•เฉเจฐเจฟเจชเจŸ. เจฎเฉˆเจจเฉ‚เฉฐ เจ‡เจธ เจŸเฉเจ•เฉœเฉ‡ เจจเฉ‚เฉฐ เจฅเฉ‹เฉœเจพ เจธเจฎเจเจพเจ‰เจฃ เจฆเจฟเจ“.

เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจ เจฆเฉ€ เจคเจฟเจ†เจฐเฉ€:

  - wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
  - dpkg -i packages-microsoft-prod.deb
  - apt-get update
  - apt-get install apt-transport-https
  - apt-get update

PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚ เจ…เจคเฉ‡ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจธเจผเจพเจฎเจฒ เจ•เจฐเจจเจพ:

  - wget -q -O - https://files.viva64.com/etc/pubkey.txt | apt-key add -
  - wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
  - apt-get update
  - apt-get -y install pvs-studio-dotnet

เจฒเจพเจ‡เจธเฉฐเจธ เจเจ•เจŸเฉ€เจตเฉ‡เจธเจผเจจ:

  - pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY

$PVS_NAME - เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจจเจพเจฎเฅค

$PVS_KEY - เจ‰เจคเจชเจพเจฆ เจ•เฉเฉฐเจœเฉ€.

เจœเจฟเฉฑเจฅเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเจฟเจฐเจญเจฐเจคเจพ เจจเฉ‚เฉฐ เจฎเฉเฉœ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจเจพ $CI_PROJECT_DIR - เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจฆเจพ เจชเฉ‚เจฐเจพ เจฎเจพเจฐเจ—:

  - dotnet restore "$CI_PROJECT_DIR"/Path/To/Solution.sln

เจธเจนเฉ€ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจฒเจˆ, เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจธเจซเจฒเจคเจพเจชเฉ‚เจฐเจตเจ• เจฌเจฃเจพเจ‡เจ† เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ€ เจจเจฟเจฐเจญเจฐเจคเจพ เจจเฉ‚เฉฐ เจฌเจนเจพเจฒ เจ•เฉ€เจคเจพ เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ (เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ NuGet เจชเฉˆเจ•เฉ‡เจœ เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เฉ€เจคเฉ‡ เจœเจพเจฃเฉ‡ เจšเจพเจนเฉ€เจฆเฉ‡ เจนเจจ)เฅค

เจคเฉเจธเฉ€เจ‚ เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเจ•เฉ‡ เจฒเจพเจ‡เจธเฉˆเจ‚เจธ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจตเจพเจฒเฉ‡ เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจธเฉˆเฉฑเจŸ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจธเฉˆเจŸเจฟเฉฐเจ—, เจ…เจคเฉ‡ เจฌเจพเจ…เจฆ - เจšเจพเจฒเฉ‚ CI/CD.

C# เจฒเจˆ PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ GitLab เจตเจฟเฉฑเจš เจ…เจญเฉ‡เจฆ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ
เจ–เฉเฉฑเจฒเจฃ เจตเจพเจฒเฉ€ เจตเจฟเฉฐเจกเฉ‹ เจตเจฟเฉฑเจš, เจ†เจˆเจŸเจฎ เจฒเฉฑเจญเฉ‹ เจตเฉ‡เจฐเฉ€เจฌเจฒ, เจธเฉฑเจœเฉ‡ เจชเจพเจธเฉ‡ เจฆเฉ‡ เจฌเจŸเจจ 'เจคเฉ‡ เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเฉ‹ เจซเฉˆเจฒเจพเจ“ เจ…เจคเฉ‡ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจœเฉ‹เฉœเฉ‹เฅค เจจเจคเฉ€เจœเจพ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ:

C# เจฒเจˆ PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ GitLab เจตเจฟเฉฑเจš เจ…เจญเฉ‡เจฆ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ
เจนเฉเจฃ เจคเฉเจธเฉ€เจ‚ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจตเฉฑเจฒ เจตเจง เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจชเจนเจฟเจฒเจพเจ‚, เจ†เจ“ เจ‡เฉฑเจ• เจชเฉ‚เจฐเฉ‡ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจฒเจˆ เจ‡เฉฑเจ• เจธเจ•เฉเจฐเจฟเจชเจŸ เจœเฉ‹เฉœเฉ€เจเฅค เจเฉฐเจกเฉ‡ เจจเฉ‚เฉฐ -t เจ…เจธเฉ€เจ‚ เจเฉฐเจกเฉ‡ เจฆเฉ‡ เจนเฉฑเจฒ เจฒเจˆ เจฐเจพเจน เจชเจพเจธ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ -o เจซเจพเจˆเจฒ เจฆเจพ เจฎเจพเจฐเจ— เจฒเจฟเจ–เฉ‹ เจœเจฟเจธ เจตเจฟเฉฑเจš เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจจเจคเฉ€เจœเฉ‡ เจฒเจฟเจ–เฉ‡ เจœเจพเจฃเจ—เฉ‡เฅค เจ…เจธเฉ€เจ‚ เจฐเจฟเจŸเจฐเจจ เจ•เฉ‹เจก เจตเจฟเฉฑเจš เจตเฉ€ เจฆเจฟเจฒเจšเจธเจชเฉ€ เจฐเฉฑเจ–เจฆเฉ‡ เจนเจพเจ‚เฅค เจ‡เจธ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจ“เจชเจฐเฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจฐเฉ‹เจ•เจฃ เจตเจฟเฉฑเจš เจฆเจฟเจฒเจšเจธเจชเฉ€ เจฐเฉฑเจ–เจฆเฉ‡ เจนเจพเจ‚ เจœเจฆเฉ‹เจ‚ เจฐเจฟเจŸเจฐเจจ เจ•เฉ‹เจก เจตเจฟเฉฑเจš เจœเจพเจฃเจ•เจพเจฐเฉ€ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ เจ•เจฟ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจฆเฉŒเจฐเจพเจจ เจšเฉ‡เจคเจพเจตเจจเฉ€เจ†เจ‚ เจœเจพเจฐเฉ€ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจธเจจเฅค เจ‡เจน เจŸเฉเจ•เฉœเจพ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจฟเจ–เจพเจˆ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ:

job:
  script:
  - exit_code=0
  - pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -o 
PVS-Studio.json || exit_code=$?
  - exit_code=$((($exit_code & 8)/8))
  - if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi

เจฐเจฟเจŸเจฐเจจ เจ•เฉ‹เจก เจฌเจฟเฉฑเจŸ เจฎเจพเจธเจ• เจฆเฉ‡ เจธเจฟเจงเจพเจ‚เจค 'เจคเฉ‡ เจ•เฉฐเจฎ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจœเฉ‡เจ•เจฐ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจฆเฉ‡ เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚ เจšเฉ‡เจคเจพเจตเจจเฉ€เจ†เจ‚ เจœเจพเจฐเฉ€ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจธเจจ, เจคเจพเจ‚ เจฐเจฟเจŸเจฐเจจ เจ•เฉ‹เจก 8 เจฆเฉ‡ เจฌเจฐเจพเจฌเจฐ เจนเฉ‹เจตเฉ‡เจ—เจพเฅค เจœเฉ‡เจ•เจฐ เจฒเจพเจ‡เจธเฉˆเจ‚เจธ เจฆเฉ€ เจฎเจฟเจ†เจฆ เจ‡เฉฑเจ• เจฎเจนเฉ€เจจเฉ‡ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจ–เจคเจฎ เจนเฉ‹ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ, เจคเจพเจ‚ เจฐเจฟเจŸเจฐเจจ เจ•เฉ‹เจก 4 เจฆเฉ‡ เจฌเจฐเจพเจฌเจฐ เจนเฉ‹เจตเฉ‡เจ—เจพเฅค เจœเฉ‡เจ•เจฐ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจฆเฉŒเจฐเจพเจจ เจ—เจฒเจคเฉ€เจ†เจ‚ เจฆเจพ เจชเจคเจพ เจฒเจ—เจพเจ‡เจ† เจ—เจฟเจ† เจธเฉ€, เจ…เจคเฉ‡ เจฒเจพเจ‡เจธเฉˆเจ‚เจธ เจฆเฉ€ เจฎเจฟเจ†เจฆ เจ‡เฉฑเจ• เจฎเจนเฉ€เจจเฉ‡ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจ–เจคเจฎ เจนเฉ‹ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ, เจ•เฉ‹เจก เจตเจพเจชเจธเฉ€, เจฆเฉ‹เจตเฉ‡เจ‚ เจฎเฉเฉฑเจฒ เจฒเจฟเจ–เฉ‡ เจœเจพเจฃเจ—เฉ‡: เจจเฉฐเจฌเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เจ•เฉฑเจ เฉ‡ เจœเฉ‹เฉœเฉ‹ เจ…เจคเฉ‡ เจ…เฉฐเจคเจฎ เจฐเจฟเจŸเจฐเจจ เจ•เฉ‹เจก เจชเฉเจฐเจพเจชเจค เจ•เจฐเฉ‹ - 8+4=12เฅค เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚, เจธเฉฐเจฌเฉฐเจงเจฟเจค เจฌเจฟเฉฑเจŸเจพเจ‚ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจ•เฉ‡, เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจฆเฉŒเจฐเจพเจจ เจตเฉฑเจ–-เจตเฉฑเจ– เจฐเจพเจœเจพเจ‚ เจฌเจพเจฐเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเฉ€ เจœเจพ เจธเจ•เจฆเฉ€ เจนเฉˆเฅค เจฐเจฟเจŸเจฐเจจ เจ•เฉ‹เจกเจพเจ‚ เจจเฉ‚เฉฐ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจฆเฉ‡ "pvs-studio-dotnet (Linux/macOS) เจฐเจฟเจŸเจฐเจจ เจ•เฉ‹เจก" เจญเจพเจ— เจตเจฟเฉฑเจš เจตเจงเฉ‡เจฐเฉ‡ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจš เจฆเฉฑเจธเจฟเจ† เจ—เจฟเจ† เจนเฉˆเฅคPVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจ•เจฎเจพเจ‚เจก เจฒเจพเจˆเจจ เจคเฉ‹เจ‚ เจตเจฟเจœเจผเฉ‚เจ…เจฒ เจธเจŸเฉ‚เจกเฉ€เจ“ / MSBuild / .NET เจ•เฉ‹เจฐ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸเจพเจ‚ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เฉ€เจคเฉ€ เจœเจพ เจฐเจนเฉ€ เจนเฉˆ".

เจ‡เจธ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจธเจพเจฐเฉ‡ เจฐเจฟเจŸเจฐเจจ เจ•เฉ‹เจกเจพเจ‚ เจตเจฟเฉฑเจš เจฆเจฟเจฒเจšเจธเจชเฉ€ เจฐเฉฑเจ–เจฆเฉ‡ เจนเจพเจ‚ เจœเจฟเฉฑเจฅเฉ‡ 8 เจฆเจฟเจ–เจพเจˆ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ.

  - exit_code=$((($exit_code & 8)/8))

เจธเจพเจจเฉ‚เฉฐ 1 เจชเฉเจฐเจพเจชเจค เจนเฉ‹เจตเฉ‡เจ—เจพ เจœเจฆเฉ‹เจ‚ เจฐเจฟเจŸเจฐเจจ เจ•เฉ‹เจก เจตเจฟเฉฑเจš เจ‰เจธ เจจเฉฐเจฌเจฐ เจฆเจพ เจฌเจฟเฉฑเจŸ เจธเจผเจพเจฎเจฒ เจนเฉ‹เจตเฉ‡เจ—เจพ เจœเจฟเจธ เจตเจฟเฉฑเจš เจธเจพเจกเฉ€ เจฆเจฟเจฒเจšเจธเจชเฉ€ เจนเฉˆ, เจจเจนเฉ€เจ‚ เจคเจพเจ‚ เจธเจพเจจเฉ‚เฉฐ 0 เจชเฉเจฐเจพเจชเจค เจนเฉ‹เจตเฉ‡เจ—เจพเฅค

เจ‡เจน เจ…เจญเฉ‡เจฆ เจฌเฉ‡เจจเจคเฉ€ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจ เจฆเจพ เจธเจฎเจพเจ‚ เจนเฉˆเฅค เจ‡เจธ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจ…เจœเจฟเจนเจพ เจ•เจฐเฉ€เจ, เจ†เจ“ เจธเจ•เฉเจฐเจฟเจชเจŸ เจฒเจˆ เจœเจ—เฉเจนเจพ เจคเจฟเจ†เจฐ เจ•เจฐเฉ€เจเฅค เจธเจพเจจเฉ‚เฉฐ เจ‡เจธ เจจเฉ‚เฉฐ เจธเจฟเจฐเจซเจผ เจ‰เจฆเฉ‹เจ‚ เจนเฉ€ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ เจœเจฆเฉ‹เจ‚ เจ•เฉ‹เจˆ เจ…เจญเฉ‡เจฆ เจฌเฉ‡เจจเจคเฉ€ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค เจ‡เจน เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจฟเจธเจฆเจพ เจนเฉˆ:

merge:
  script:
  only:
  - merge_requests

เจ†เจ“ เจธเจ•เฉเจฐเจฟเจชเจŸ 'เจคเฉ‡ เจนเฉ€ เจ…เฉฑเจ—เฉ‡ เจตเจงเฉ€เจเฅค เจฎเฉˆเจจเฉ‚เฉฐ เจ‡เจธ เจคเฉฑเจฅ เจฆเจพ เจธเจพเจนเจฎเจฃเจพ เจ•เจฐเจจเจพ เจชเจฟเจ† เจ•เจฟ เจตเจฐเจšเฉเจ…เจฒ เจฎเจธเจผเฉ€เจจ เจฌเจพเจฐเฉ‡ เจ•เฉเจ เจจเจนเฉ€เจ‚ เจชเจคเจพ เจฎเฉ‚เจฒ/เจฎเจพเจธเจŸเจฐ. เจ‡เจธ เจฒเจˆ เจ†เจ“ เจ‰เจธเจฆเฉ€ เจฅเฉ‹เฉœเฉ€ เจฎเจฆเจฆ เจ•เจฐเฉ€เจ:

  - git fetch origin

เจนเฉเจฃ เจ…เจธเฉ€เจ‚ เจธเจผเจพเจ–เจพเจตเจพเจ‚ เจฆเฉ‡ เจตเจฟเจšเจ•เจพเจฐ เจ…เฉฐเจคเจฐ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจจเจคเฉ€เจœเจพ เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ txt เจซเจพเจˆเจฒ:

  - git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt

เจ•เจฟเฉฑเจฅเฉ‡ $CI_COMMIT_SHA - เจ†เจ–เจฐเฉ€ เจ•เจฎเจฟเจŸ เจฆเฉ€ เจนเฉˆเจธเจผ.

เจ…เฉฑเจ—เฉ‡, เจ…เจธเฉ€เจ‚ เจซเจฒเฉˆเจ— เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เจฐเจจเจพ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ -f. เจ…เจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเฉ€ .txt เจซเจพเจˆเจฒ เจจเฉ‚เฉฐ เจ‡เจธ เจตเจฟเฉฑเจš เจŸเฉเจฐเจพเจ‚เจธเจซเจฐ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค เจ–เฉˆเจฐ, เจชเฉ‚เจฐเฉ‡ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจจเจพเจฒ เจธเจฎเจพเจจเจคเจพ เจฆเฉเจ†เจฐเจพ, เจ…เจธเฉ€เจ‚ เจฐเจฟเจŸเจฐเจจ เจ•เฉ‹เจกเจพเจ‚ เจจเฉ‚เฉฐ เจฆเฉ‡เจ–เจฆเฉ‡ เจนเจพเจ‚:

  - exit_code=0
  - pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f 
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
  - exit_code=$((($exit_code & 8)/8))
  - if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi

เจ…เจญเฉ‡เจฆ เจฆเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฒเจˆ เจชเฉ‚เจฐเฉ€ เจธเจ•เฉเจฐเจฟเจชเจŸ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจตเฉ‡เจ—เฉ€:

merge:
  script:
  - git fetch origin
  - git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
  - exit_code=0
  - pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f 
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
  - exit_code=$((($exit_code & 8)/8))
  - if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
  only:
  - merge_requests

เจธเจพเจฐเฉ€เจ†เจ‚ เจธเจ•เฉเจฐเจฟเจชเจŸเจพเจ‚ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจนเฉ‹เจฃ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจฒเฉŒเจ— เจชเจฐเจฟเจตเจฐเจคเจจ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจเจพ เจฌเจพเจ•เฉ€ เจนเฉˆเฅค เจ…เจธเฉ€เจ‚ เจฒเฉ‡เจฌเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ after_script เจ…เจคเฉ‡ เจ‰เจชเจฏเฉ‹เจ—เจคเจพ เจชเจฒเฉฑเจ—-เจ•เจจเจตเจฐเจŸเจฐ:

after_script:
  - plog-converter -t html -o eLog ./PVS-Studio.json

เจ‰เจชเจฏเฉ‹เจ—เจคเจพ เจชเจฒเฉฑเจ—-เจ•เจจเจตเจฐเจŸเจฐ เจ‡เฉฑเจ• เจ“เจชเจจ เจธเฉ‹เจฐเจธ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจนเฉˆ เจœเฉ‹ เจชเจพเจฐเจธเจฐ เจ—เจฒเจคเฉ€ เจฐเจฟเจชเฉ‹เจฐเจŸเจพเจ‚ เจจเฉ‚เฉฐ เจตเฉฑเจ–-เจตเฉฑเจ– เจฐเฉ‚เจชเจพเจ‚ เจตเจฟเฉฑเจš เจฌเจฆเจฒเจฃ เจฒเจˆ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ HTMLเฅค เจ‰เจชเจฏเฉ‹เจ—เจคเจพ เจฆเจพ เจตเจงเฉ‡เจฐเฉ‡ เจตเจฟเจธเจคเฉเจฐเจฟเจค เจตเฉ‡เจฐเจตเจพ เจ‰เจชเจญเจพเจ— "เจชเจฒเฉŒเจ— เจ•เจจเจตเจฐเจŸเจฐ เจ‰เจชเจฏเฉ‹เจ—เจคเจพ" เจตเจฟเฉฑเจš เจฆเจฟเฉฑเจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจฆเจพ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจญเจพเจ—.

เจคเจฐเฉ€เจ•เฉ‡ เจจเจพเจฒ, เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ IDE เจคเฉ‹เจ‚ เจธเจฅเจพเจจเจ• เจคเฉŒเจฐ 'เจคเฉ‡ .json เจฐเจฟเจชเฉ‹เจฐเจŸเจพเจ‚ เจจเจพเจฒ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจขเฉฐเจ— เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจฎเฉˆเจ‚ เจธเฉเจเจพเจ… เจฆเจฟเฉฐเจฆเจพ เจนเจพเจ‚ เจ•เจฟ เจธเจพเจกเฉ‡ เจชเจฒเฉฑเจ—เจ‡เจจ IDE เจฐเจพเจˆเจกเจฐ เจฒเจˆ. เจ‡เจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจฌเจพเจฐเฉ‡ เจตเจงเฉ‡เจฐเฉ‡ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจš เจฆเฉฑเจธเจฟเจ† เจ—เจฟเจ† เจนเฉˆ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจฆเจธเจคเจพเจตเฉ‡เจœเจผ.

เจธเจนเฉ‚เจฒเจค เจฒเจˆ, เจ‡เจน เจ‡เฉฑเจฅเฉ‡ เจนเฉˆ .gitlab-ci.yml เจชเฉ‚เจฐเฉ€ เจตเจฟเฉฑเจš:

image: debian

before_script:
  - apt-get update && apt-get -y install wget gnupg 

  - apt-get -y install git
  - wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
  - dpkg -i packages-microsoft-prod.deb
  - apt-get update
  - apt-get install apt-transport-https
  - apt-get update
  
  - wget -q -O - https://files.viva64.com/etc/pubkey.txt | apt-key add -
  - wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
  - apt-get update
  - apt-get -y install pvs-studio-dotnet

  - pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
  - dotnet restore "$CI_PROJECT_DIR"/Test/Test.sln

merge:
  script:
  - git fetch origin
  - git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
  - exit_code=0
  - pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f 
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
  - exit_code=$((($exit_code & 8)/8))
  - if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
  only:
  - merge_requests

job:
  script:
  - exit_code=0
  - pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -o 
PVS-Studio.json || exit_code=$?
  - exit_code=$((($exit_code & 8)/8))
  - if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
  
after_script:
  - plog-converter -t html -o eLog ./PVS-Studio.json

เจ‡เฉฑเจ• เจตเจพเจฐ เจœเจฆเฉ‹เจ‚ เจคเฉเจธเฉ€เจ‚ เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจธเจญ เจ•เฉเจ เจธเจผเจพเจฎเจฒ เจ•เจฐ เจฒเฉˆเจ‚เจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเฉ‹ เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจฆเจพ เจตเจพเจ…เจฆเจพ เจ•เจฐเฉ‹. เจ‡เจน เจฆเฉ‡เจ–เจฃ เจฒเจˆ เจ•เจฟ เจธเจญ เจ•เฉเจ เจธเจนเฉ€ เจนเฉˆ, 'เจคเฉ‡ เจœเจพเจ“ เจธเฉ€เจ†เจˆ / เจธเฉ€เจกเฉ€ -> เจชเจพเจˆเจชเจฒเจพเจˆเจจเจœเจผ -> เจšเฉฑเจฒ เจฐเจฟเจนเจพ เจนเฉˆ. เจ‡เฉฑเจ• เจตเจฐเจšเฉเจ…เจฒ เจฎเจธเจผเฉ€เจจ เจตเจฟเฉฐเจกเฉ‹ เจ–เฉเฉฑเจฒเฉ‡เจ—เฉ€, เจœเจฟเจธ เจฆเฉ‡ เจ…เฉฐเจค เจตเจฟเฉฑเจš เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจนเฉ‹เจฃเฉ‡ เจšเจพเจนเฉ€เจฆเฉ‡ เจนเจจ:

C# เจฒเจˆ PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ GitLab เจตเจฟเฉฑเจš เจ…เจญเฉ‡เจฆ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ
เจฆเฉ‡เจ–เจฟเจ† เจจเฉŒเจ•เจฐเฉ€ เจธเจซเจฒ เจนเฉ‹ เจ—เจˆ - เจธเจซเจฒเจคเจพ, เจธเจญ เจ•เฉเจ เจ เฉ€เจ• เจนเฉˆ. เจนเฉเจฃ เจคเฉเจธเฉ€เจ‚ เจœเจพเจ‚เจš เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจ•เฉ€ เจ•เฉ€เจคเจพ เจนเฉˆเฅค

เจ•เฉฐเจฎ เจฆเฉ€เจ†เจ‚ เจ‰เจฆเจพเจนเจฐเจฃเจพเจ‚

เจ•เฉฐเจฎ เจฆเฉ€ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจฃ เจฒเจˆ, เจ†เจ“ เจ‡เฉฑเจ• เจธเจงเจพเจฐเจจ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฌเจฃเจพเจˆเจ (เจตเจฟเฉฑเจš เจฎเจพเจธเจŸเจฐ) เจœเจฟเจธ เจตเจฟเฉฑเจš เจ•เจˆ เจซเจพเจˆเจฒเจพเจ‚ เจนเฉ‹เจฃเจ—เฉ€เจ†เจ‚เฅค เจ‰เจธ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ•เจฟเจธเฉ‡ เจนเฉ‹เจฐ เจธเจผเจพเจ–เจพ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจธเจฟเจฐเจซ เจ‡เฉฑเจ• เจซเจพเจˆเจฒ เจจเฉ‚เฉฐ เจฌเจฆเจฒเจพเจ‚เจ—เฉ‡ เจ…เจคเฉ‡ เจฎเจฐเจœ เจฌเฉ‡เจจเจคเฉ€ เจ•เจฐเจจ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค

เจ†เจ‰ เจฆเฉ‹ เจฎเจพเจฎเจฒเจฟเจ†เจ‚ 'เจคเฉ‡ เจตเจฟเจšเจพเจฐ เจ•เจฐเฉ€เจ: เจœเจฆเฉ‹เจ‚ เจธเฉ‹เจงเฉ€ เจ—เจˆ เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ—เจฒเจคเฉ€ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจ•เจฆเฉ‹เจ‚ เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค เจชเจนเจฟเจฒเฉ€, เจ‡เฉฑเจ• เจ—เจฒเจคเฉ€ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจจ.

เจฆเฉฑเจธ เจฆเฉ‡เจˆเจ เจ•เจฟ เจฎเจพเจธเจŸเจฐ เจฌเฉเจฐเจพเจ‚เจš เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจซเจพเจˆเจฒ เจนเฉˆ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ.เจธเฉ€.เจเจธ, เจœเจฟเจธ เจตเจฟเฉฑเจš เจคเจฐเฉเฉฑเจŸเฉ€เจ†เจ‚ เจจเจนเฉ€เจ‚ เจนเจจ, เจชเจฐ เจ•เจฟเจธเฉ‡ เจนเฉ‹เจฐ เจธเจผเจพเจ–เจพ เจตเจฟเฉฑเจš เจกเจฟเจตเฉˆเจฒเจชเจฐ เจจเฉ‡ เจ—เจฒเจค เจ•เฉ‹เจก เจœเฉ‹เฉœเจฟเจ† เจนเฉˆ เจ…เจคเฉ‡ เจฎเจฐเจœ เจฌเฉ‡เจจเจคเฉ€ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค เจ‰เจธ เจจเฉ‡ เจ•เจฟเจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเฉ€ เจ—เจฒเจคเฉ€ เจ•เฉ€เจคเฉ€ เจนเฉˆ, เจ‡เจน เจฌเจนเฉเจค เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจฎเฉเฉฑเจ– เจ—เฉฑเจฒ เจ‡เจน เจนเฉˆ เจ•เจฟ เจ‡เจน เจฎเฉŒเจœเฉ‚เจฆ เจนเฉˆ. เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจ†เจชเจฐเฉ‡เจŸเจฐ เจญเฉเฉฑเจฒ เจ—เจฟเจ† เจธเฉเฉฑเจŸ (เจนเจพเจ‚, เจฌเจนเฉเจค เจ—เจฒเจค):

void MyAwesomeMethod(String name)
{
  if (name == null)
    new ArgumentNullException(....);
  // do something
  ....
}

เจ†เจ‰ เจ‡เฉฑเจ• เจ—เจฒเจคเฉ€ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจฃ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เจฐเจจ เจฆเฉ‡ เจจเจคเฉ€เจœเฉ‡ เจจเฉ‚เฉฐ เจตเฉ‡เจ–เฉ€เจ. เจ‡เจน เจตเฉ€ เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจ•เจฟ เจธเจฟเจฐเจซ เจ‡เฉฑเจ• เจซเจพเจˆเจฒ เจจเฉ‚เฉฐ เจชเจพเจฐเจธ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€, เจฎเฉˆเจ‚ เจซเจฒเฉˆเจ— เจœเฉ‹เฉœเจฟเจ† เจนเฉˆ -r pvs-studio-dotnet เจฒเจพเจ‚เจš เจฒเจพเจˆเจจ เจฒเจˆ:

C# เจฒเจˆ PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ GitLab เจตเจฟเฉฑเจš เจ…เจญเฉ‡เจฆ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ
เจ…เจธเฉ€เจ‚ เจฆเฉ‡เจ–เจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจจเฉ‡ เจ‡เฉฑเจ• เจ—เจฒเจคเฉ€ เจฒเฉฑเจญเฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจฌเฉเจฐเจพเจ‚เจšเจพเจ‚ เจจเฉ‚เฉฐ เจฎเจฟเจฒเจพเจ‰เจฃ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจจเจนเฉ€เจ‚ เจฆเจฟเฉฑเจคเฉ€เฅค

เจšเจฒเฉ‹ เจฌเจฟเจจเจพเจ‚ เจ•เจฟเจธเฉ‡ เจ—เจฒเจคเฉ€ เจฆเฉ‡ เจ‰เจฆเจพเจนเจฐเจจ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเฉ€เจเฅค เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจ เฉ€เจ• เจ•เจฐเจจเจพ:

void MyAwesomeMethod(String name)
{
  if (name == null)
    throw new ArgumentNullException(....);
  // do something
  ....
}

เจฌเฉ‡เจจเจคเฉ€ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจฆเฉ‡ เจจเจคเฉ€เจœเฉ‡ เจฎเจฟเจฒเจพเจ“:

C# เจฒเจˆ PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ GitLab เจตเจฟเฉฑเจš เจ…เจญเฉ‡เจฆ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ
เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเจพเจ‚, เจ•เฉ‹เจˆ เจ—เจฒเจคเฉ€ เจจเจนเฉ€เจ‚ เจฎเจฟเจฒเฉ€, เจ…เจคเฉ‡ เจ•เฉฐเจฎ เจฆเจพ เจ…เจฎเจฒ เจธเจซเจฒ เจฐเจฟเจนเจพ, เจœเจฟเจธ เจฆเฉ€ เจ…เจธเฉ€เจ‚ เจœเจพเจ‚เจš เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจธเฉ€เฅค

เจธเจฟเฉฑเจŸเจพ

เจธเจผเจพเจ–เจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจฎเจฟเจฒเจพเจ‰เจฃ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจ–เจฐเจพเจฌ เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจ–เจคเจฎ เจ•เจฐเจจเจพ เจฌเจนเฉเจค เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจ…เจคเฉ‡ เจธเฉเจนเจพเจตเจฃเจพ เจนเฉˆเฅค เจ‡เจธ เจฒเจˆ เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ CI/CD เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐ เจฐเจนเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจธเจฅเจฟเจฐ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจจเฉ‚เฉฐ เจเจฎเจฌเฉˆเจก เจ•เจฐเจจ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเฉ‹เฅค เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจ‡เจน เจฌเจนเฉเจค เจธเจพเจฆเจพ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ.

เจคเฉเจนเจพเจกเฉ‡ เจงเจฟเจ†เจจ เจฒเจˆ เจงเฉฐเจจเจตเจพเจฆ.

C# เจฒเจˆ PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ GitLab เจตเจฟเฉฑเจš เจ…เจญเฉ‡เจฆ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ
เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจฒเฉ‡เจ– เจจเฉ‚เฉฐ เจ…เฉฐเจ—เจฐเฉ‡เจœเจผเฉ€ เจฌเฉ‹เจฒเจฃ เจตเจพเจฒเฉ‡ เจฆเจฐเจธเจผเจ•เจพเจ‚ เจจเจพเจฒ เจธเจพเจ‚เจเจพ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจ•เจฟเจฐเจชเจพ เจ•เจฐเจ•เฉ‡ เจ…เจจเฉเจตเจพเจฆ เจฒเจฟเฉฐเจ• เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเฉ‹: เจจเจฟเจ•เฉ‹เจฒเฉ‡ เจฎเฉ€เจฐเฉ‹เจจเฉ‹เจตเฅค C# เจฒเจˆ PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ GitLab เจตเจฟเฉฑเจš เจ…เจญเฉ‡เจฆ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ.

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹