
αααα‘αΆαα GitLab αα·αααα’ααααα α»α? α
αααααααα’αα»αααΆαααααΌααααααααααα’ααααα? αααααΆααααα’αααααΆαααααααααααααααααααΉαααααΌαα αααααααααΎαααΉαααααΆααα’αααααΈααααααααααα
ααΆααααααααα§ααααααα·ααΆα PVS-Studio C# ααΎααααΈαα·αα·αααααΎαααααΎαααα
αΌαααααΆα ααΆαα’αΆαααααα unicorn αα·αααΈαααΆααααα»αααΆαα’αΆααααα’αααααΆααααααΆα
β ααΊααΆα§ααααααα½ααααααΆαααααααα’ααααααααΆαααα α»α αα·αααΆαααΆαααααααααααα’αΆα
ααΎαααΆααα
αααα»αααΌαααααααααααααα·ααΈααααααααααΆ C, C++, C# αα·α Javaα ααΆααααΎαααΆαααΎαααααααα 64 αααΈαα Windows, Linux ΠΈ macOSααΆα’αΆα
αα·ααΆαααΌαααααααααααααα
ααΎαααα·ααΆ ARM 32-bit, 64-bit αα·α embeddedα
ααααα·ααΈααα ααΎαααΆαα ααααααΆα PVS-Studio 7.08 ααααααα»ααααααΎαααΆαααααΎααΏαααΆα αααΎαα α α§ααΆα αααα
- α’ααααα·ααΆα C# αα ααααα Linux ΠΈ macOS;
- αααααα·ααΈαααα½ααααααΆαα Rider;
- αααααα·αα·ααααααααΈα―αααΆαααααΈα
αααααα·αα·ααααααααΈα―αααΆα
ααΈαα»α ααΎααααΈαα·αα·αααααΎαα―αααΆαααΆααααΆαα α αΆαααΆα αααααΌαααααααΆαα .xml αααααΆααααααΈα―αααΆααα α’ααααα·ααΆαα ααα»αααααααααΆαααΆαα·αααΆααααα½αααααΆαα ααΎαααΆααααααααααααααΆααααα»αααΆαααααα .txt αααααααΎα±ααααΈαα·αααΆαααααααα»αα
ααΎααααΈαα·αα·αααααΎαα―αααΆαααΆααααΆαα α’αααααααΌααααααααΆααααα --sourceFiles (-f) αα·αααααα .txt ααΆαα½αααΉααααααΈα―αααΆαα ααΆααΎααα ααΌα αααα
pvs-studio-dotnet -t path/to/solution.sln -f fileList.txt -o project.jsonααααα·αααΎα’αααα αΆααα’αΆαααααααααα»αααΆαααα‘αΎα commit checking α¬ααΆαααααΎ α’αααααα’αΆα ααααΎααΆααΆααααααααΎααααααααααααα ααΆααα»αααααΆααΉααααα·ααα αααα»αααΆαααα½αααΆααααααΈα―αααΆαααΎααααΈαα·ααΆα α αΎαααΉαα’αΆαααααααΎααααααααα’αααΈαααα’ααααααα»αααααΎα
αααααΆαααααααΆααααα½ααα·αα·αααααΆαααααΎαα»ααααα αΌαααααΆ
ααααΉαααΆαααααΆααααααΆααααα½ααα·αα·αααααΊααΎααααΈααΆααΆααΆαααα αΆαααααΆαααααΎααααα’ααααα·ααΆαααα‘α»αααααααα αΌαααααΆαα·αααααΆααα αΌααα αααα»α αα ααΆααΆα ααΎααααα·αα αααα·ααΆαααααααααΆααααΌαααΆααααααααα ααΎαααΈααα ααααααα αΌαααΆααΆ ααΎαααΆααααααΈα―αααΆααααααΆαααααΆααααααΌαα ααΌα αααα αααα»αααααΎα±ααααααααααΆααααα½ααα·αα·αααααααΎαααα αΌαααααΆα
αααβααΆβα’αααΈβαααβααααΎβαααα αΌαβααααΆβααΎαβαα βααΌα βααΆβαα»αβαααβα’αα»ααααβαααααα·ααΈβαα·ααΆαβαα·αα·ααααα

αααααΊααα α»αααΆααα’αααααααΆααα
αααα»αααΆααΆ ααΆαααααΆααααααΌαααΉαααααΆααααΈαα
ααΆααΆααα αααβααΆαβααΎαβαα·αβα
ααβααΆαβααΆ ααΎαβααααααβααΆαβαα·ααΆα α αΎαβα₯α‘αΌαβααα ααααΆααααΆαβααΎαβαα
βααΌα
βαααα

ααΆααα·ααΆα ααΆαααααΆααααααΌα 2 α αΎαααααα·αααΎαα·αααΆαααα α»ααα ααΎαααα½αααααααΎαααα
αΌαααααΆ ααΎαα·αααΌα
αααααα ααΎαααα·αααααΆα
ααααα·ααΈααα ααααα·αααΎα’αααα αΆααα’αΆαααααααααα»αααΆααα·ααΆαααΆααααααΆ αα·αααΆαααααΎαααααΆαα C/C++ αααα’αααα’αΆα α’αΆαα’αααΈααΆ .
GitLab
ααΊααΆα§αααααααΈαα·α DevOps αααααΆαααΌαααααΆαααΎαααααΆαααΎαα αα αααααααααααααααααααααααααααααΆααααΌααααααΆαα Git ααΆαα½αααΉααα·ααΈααααΆαααααα½α ααααααααααΆαααΆααααα αΆ ααααααααα αΌα CI/CD αα·ααααααααα·αααααααααααα
αα»ααααα’αααα αΆααααααΎααα·ααΆαααααΎαααα αΌαααααΆ α’αααααααΌαα α»αααααα αα·ααααα ααααααααααααα’αααα ααααα·αααΎα’ααααα·αααΉαααΈααααααααΎααΆααααααααα»αααααΆα αα·ααααα½αααΆαααΆααααααααα»αα
ααΆαααααααααΆαα. αα·ααΈααΆαααααααααΆααααα αααα·ααααΆααααααΆααα·αααααΆααΆααααααααΊααΆαα·ααΈαα½ααααα’αΆα ααααΎαα ααΆαα ααααα ααΊααΎααααΈαααα αΆαααΈααα αΆααααααΆααααΆααααα αααα·ααΆααΆαα αΆαααΆα ααααααΆααααΆααα·ααΆα αα·αααΆαααΎαααααΎαααΆαα§ααααααα·ααΆαα αααα ααααΆαααα»αααααΈααααα’ααα ααΆααΆααΆααααααΎααααα»ααααα»αααΆααααα ααααααΆααααΆαααααΆααααα αααα·ααααΆα (ααααααααααΆαα ααα‘αΎαα§ααααααα·ααΆα) αα·αααΆααα·ααΆαα α§ααΆα ααα ααΆααααα αααΌαααΆα Docker ααΆαα½αααΉαααα·ααααΆαα αΆαααΆα α αα·αααΆαααααΎααααΆαααα½αααΆ α¬αα·ααΈααΆαααααααααααααα
ααΎααααΈαααααΆααααα αααΆααα’αααΈα’αααΈαααααΉαααΎαα‘αΎαα₯α‘αΌαααα αααα»αααααΎα±ααααΎαααααΆααααΆαααΆααααααα

α§ααααααα·ααΆααααααΌαα±ααααΆα .NET Core SDK 3 ααΌα
αααααα»ααααααα‘αΎαα§ααααααα·ααΆα α’αααααααΌαααααααααααΆαα Microsoft αααααΆαα’αΆαααααααααα§ααααααα·ααΆαααΉαααααΌαααΆαααα‘αΎαα ααΆαααααααααααΆαα Microsoft αααααΆααααΆαα
ααα
αΆαααααααα Linux .
ααΎααααΈααα‘αΎα PVS-Studio ααΆαααααααααα·ααΈααααααααααααα αα α’αααααααΉαααααΌαααααααααααΆαα PVS-Studio αααααα ααΆαααααααααααΆαααααααΆααααΆαα ααα αΆαααααααααααΆααααΌαααΆααα·αααααΆαααα’α·αααααααααααα αααα»α .
α§ααααααα·ααΆαααΆαααΆαααα’αΆααααΆαααααααΎααααΈααααΎαααΆαα α’αααα’αΆα ααα½αααΆαα’αΆααααΆαααααααΆααααααα .
ααΆαααααααααΆαα. ααΌαα αααΆαααΆααααααααα·ααααα·ααΆααααααΆααα·αααααΆ (ααΆααα·ααΆαααααΎαααα αΌαααααΆ) ααΆαααΆαα’αΆααααΆααααααα ααααΆαα ααΌα ααααα αΎα ααααα·αααΎα’αααα ααααΆαααααααααααααα·ααααα·ααΆαααα αα»αααααα αααα αΆααα αααα»αααΆα "ααΆα" ααΆα’αααααααΌαααΆαα’αΆααααΆααααααα ααααΆαα
ααααα·αααΎααααΎαααα αΌαααααΆααΎαα‘αΎα αααααΎαααααΆααααααααΌαααΆααα·ααΆααααααΈα―αααΆααααααΆαααααΆααααααΌα ααΎαα·αααΌα ααααααααΎααα·ααΆαα―αααΆαααΆααα’ααα αααααΆααααΈααΆααα·ααΆα ααΎαααααΌαααααααααααααα ααα»αα ααΆαααααααααααΎαααααΌαααΆαα
α₯α‘αΌαβααα αααβααΆαβαααα½αβαααααααΆαβααΆαααΆαβαα βα ααααβαα»αβα’ααα α’αααβα’αΆα βααααβαα βαααααβααααααΈαβααΆαα ααΎααααΈααααΎααΌα αααα’αααααααΌαααααΆααααααΌαα―αααΆα .gitlab-ci.yml α¬ααααα·αααΎααΆαα·αααΆααα αααααΎαααΆα ααΎααααΈαααααΎαααΆα’αααααααΌαα α»α ααΎαααααααααααααααα’ααα -> ααα‘αΎα CI/CD.

α₯α‘αΌααααααΎαααααααααα½ααα½α
ααΆααα αΎαααΎααααΈαααααααααααΈαα ααααΌαααΎααααααααΌααααααΉαααα‘αΎαα§ααααααα·ααΆα α αΎααααα
αΌαα’αΆααααΆαααααα
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αααααΆαααΆαααα‘αΎα αα·αααΆαααααΎα±αααααααααααΌαααααΎαα‘αΎααα»ααααααααααΈαααααααααααΆααα’αα ααΎαααααΎααααΆααα·ααα before_script. αααα»αααΌαααααααααΈααααααααααααα·α α
αααα»ααααα αααα‘αΎαα§ααααααα·ααΆαα
- 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-Studio αα·αα§ααααααα·ααΆαα
- 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.

αα
αααα»ααααα’α½α
αααααΎαααΌααααααααααΆαα» α’αααα
α»α
ααΎαααΌαα»ααα
ααΆαααααΆα αααααΈα αα·αααααααα’αααα αααααααα½αααααΎααα
ααΌα
αααα

α₯α‘αΌααααα’αααα’αΆα
αααααα
ααΆααα·ααΆαα ααΆααααΌα α
αΌαααΎαααααααααααααΈααααααΆααααΆααα·ααΆαααααααα ααααααααΆαα· -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ααΌαβαααα‘ααβααααΎαααΆαβααΎβαααααΆααα bitmaskα α§ααΆα ααα ααααα·αααΎβααΆααα·ααΆαβααΆαβαααα αΆαβααΈβααΆααααααΆα ααΌαβαααα‘ααβααΉαβααΆα 8α ααααα·αααΎβα’αΆααααΆαααααβαα»ααααααβαααα»αβααααααβαα½ααα ααΌαβαααα‘ααβααΉαβααΆα 4α ααααα·αααΎβααΆααα·ααΆαβααααΎαβααα α»α α αΎαβα’αΆααααΆαααααβαα»ααααααβαααα»αβααααααβαα½ααα ααΌαβαααα‘ααβααΉαβααΆαβαααααβααΆααααΈαα ααΌαβαααβααΆαα½αααααΆβααΎααααΈβααα½αααΆαβααΌαβαααα‘ααβα α»ααααααβ8 + 4 = 12α ααΌα αααα αααβααΆααααα½ααα·αα·αααβαααΈαβαααααααΌαααααΆ α’αααα’αΆα βααα½αααΆαβααααααΆαβα’αααΈβααααΆαααΆαβααααααβαααα»αα’αα‘α»ααααβαα·ααΆαα ααΌαβαααα‘ααβααααΌαααΆαβαα·αααααΆβαααα’α·αβααααααβαα αααα»αβααααα "ααΌαβαααα‘αα pvs-studio-dotnet"αLinux / macOS) "α―αααΆα"".
αααα»αααααΈαααααΎαα αΆααα’αΆααααααααΎαααααΌααααα‘αααααα·αααΆααα’αααααααα 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 αα·αα§αααααααααΎααααΆαα αααααα·ααΈαααααα plog:
after_script:
- plog-converter -t html -o eLog ./PVS-Studio.jsonα§αααααααααΎααααΆαα ααΊααΆαααααααααααααΎαα αα αααααααΌαααΆαααααΎααΎααααΈααααααααααΆαααΆαααααα α»αααααα ααΆααααααααααααααΌα ααΆ HTML ααΆααΎαα ααΆααα·αααααΆαααα’α·ααααααααααα’αααΈα§αααααααααΎααααΆααααααΌαααΆααααααα±αααα αααα»αααααααα "α§αααααααααααα Plog" .
ααααα·ααΈααα ααααα·αααΎα’αααα ααααααΎααΆααααΆαααΆααααα½αααΆαα½ααααΆαααΆααα .json αααα»ααααα»αααΈ IDE ααααααα»αααααΎα±ααααΎαααααΆα αααααΆαα IDE Rider α ααΆαααααΎααααΆααααααααΆααααΌαααΆααα·αααααΆαααα’α·αααααααααααα αααα»α .
ααΎααααΈααΆαααΆααααα½αααΊαα ααΈααα .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αα ααααααα’αααααΆαααααααα’αααΈααααααααΆααα αααα»αα―αααΆαααΌαα α»α ααΎ ααααΎααΆαααααΆααααααΌα. ααΎααααΈβααΎαβααΆβα’αααΈβαααααβαααΆαβααΊβααααΌαβαα βααΆααβ αααΈα’αΆα / αααΈααΈ -> ααααα -> ααΆαααα. αααα’α½α αααΆαααΈααα·αααα·αααΉαααΎα ααααα α α»ααααα αααα½αααααΆαααΌα ααΆααααααα

α ααΆαααΆαααΆααααααα - ααααααα’αααΈααααααααΆαααΊααα’α α₯α‘αΌααααα’αααα’αΆα
ααΆαααααα’αααΈαααα’αααααΆαααααΎα
α§ααΆα αααααααΆαααΆα
αααααΆααα§ααΆα αααααααΆαααΆα α αΌαααΎααααααΎαααααααααΆαααααα½α (αααα»α αα) αααααΉαααΆαα―αααΆαααΆα αααΎαα αααααΆααααΈααα αα αααα»αααΆααΆαα½αααα ααΎαααΉαααααΆααααααΌαα―αααΆααααα½α α αΎαααααΆααΆαααααΎααΆαααααΎαα»ααααα αΌαααααΆα
α αΌαααΎααα·α αΆαααΆααααΈααΈαα αα ααααααα―αααΆααααααΆαααααααααΆαααα α»α αα·ααα ααααααααΆαα·αααΆαα ααΈαα½αα§ααΆα αααααΆαα½αααα α»ααα½αα
α αΌααα·ααΆαααΆααΆαα―αααΆααα½ααα αααα»αααΆααΆαα αααααα·ααΈ.csααααα·αααΆαααα α»α ααα»αααααα αααα»αααΆααΆαα½ααααααααα α’αααα’αα·ααααααααΆαααααααααΌααααααΆαααα α»α α αΎαα ααααααΎααΆαααααΎαα»ααααα αΌαααααΆα ααΎβααα α»αβα’αααΈβαααβααΆααβααααΎβαα·αβααααΆααβαααβαα ααΏαβααααΆααβααΊβααΆβααΆαα α§ααΆα αααααααα·ααααα·ααααααα ααα (ααΆα! ):
void MyAwesomeMethod(String name)
{
if (name == null)
new ArgumentNullException(....);
// do something
....
}ααΌααααα‘ααααΎαααααααααααΆααα·ααΆαα§ααΆα αααααΆαα½αααα α»αα ααΎααααΈααααΆααααΆααΆαααα―αααΆααα½αααα»ααααααααααααΌαααΆαααα αααα»αααααααααα -r αα ααΆαααααααΆααα αΆααααααΎα pvs-studio-dotnetα

ααΎαααΎαααΆα’ααααα·ααΆαααΆαααααΎαααα α»ααα½α αα·ααα·αα’αα»ααααΆαα±ααααΆαααΆααααα
αΌαααααΆααααΆααΆα
ααααα·αα·αααααΎαα§ααΆα ααααααααααΆαααα α»αα ααΆαααααΌαα
void MyAwesomeMethod(String name)
{
if (name == null)
throw new ArgumentNullException(....);
// do something
....
}αααα αΌαααααααααΆααα·ααΆαααααΎα

ααΌα
αααααΎαααΎαα αΎα ααααΆαααα α»αααααΌαααΆαααααΎααα α αΎαααΆαααααα·ααααα·ααΆααα·α
αα
ααΆααααααα αααααΆα’αααΈαααααΎαα
αααα·αα·αααα
ααα ααααΈααααα·ααααΆα
ααΆαααβααΌαβα’αΆαααααβα ααβαα»αβαααβαα½αβαααα αΌαβαααβααΊβααΆαβαααα½αβαα·αβααΈαααΆαα ααΌα ααααααααα·αααΎα’ααααααα»αααααΎ CI/CD ααΌαααΆαααααααααααα§ααααααα·ααΆααα·αα·ααααααΎααααΈαα·αα·αααα ααΎαααΈαααααααααααααΌαααΆαααααΎαααΆαααΆααααα
ααΌαα’ααα»αα ααααααΆαααα α·ααααα»αααΆααααααα’αααα
ααααα·αααΎα’αααα
ααα
αααααααα’ααααααααααΆαα½ααααααα·αααααααα·ααΆαααΆααΆα’ααααααα ααΌαααααΎαααααααααα Nikolay Mironov α .
ααααα: www.habr.com
