Статик шинжилгээ - танилцуулгаас нэгтгэх хүртэл

Эцэс төгсгөлгүй кодыг шалгах эсвэл дибаг хийхээс залхсан тул заримдаа та амьдралаа хэрхэн хялбарчлах талаар боддог. Жаахан хайсны дараа эсвэл санамсаргүй түүн дээр унасны дараа та "Статик шинжилгээ" гэсэн шидэт хэллэгийг харж болно. Энэ нь юу болохыг, таны төсөлтэй хэрхэн харьцаж болохыг харцгаая.

Статик шинжилгээ - танилцуулгаас нэгтгэх хүртэл
Үнэн хэрэгтээ, хэрэв та орчин үеийн ямар ч хэлээр бичдэг бол үүнийг өөрөө ч мэдэлгүй статик анализатороор дамжуулдаг. Баримт нь орчин үеийн аливаа хөрвүүлэгч нь кодонд гарч болзошгүй асуудлуудын талаар өчүүхэн ч гэсэн анхааруулга өгдөг. Жишээлбэл, Visual Studio дээр C++ кодыг эмхэтгэх үед та дараах зүйлийг харж болно.

Статик шинжилгээ - танилцуулгаас нэгтгэх хүртэл
Энэ гаралтаас бид хувьсагч байгааг харж байна байдаг функцийн хаана ч хэзээ ч ашиглагдаагүй. Бодит байдал дээр та энгийн статик код анализаторыг бараг үргэлж ашигладаг байсан. Гэсэн хэдий ч Coverity, Klocwork эсвэл PVS-Studio зэрэг мэргэжлийн анализаторуудаас ялгаатай нь хөрвүүлэгчийн өгсөн анхааруулга нь зөвхөн цөөн тооны асуудлуудыг илэрхийлж болно.

Хэрэв та статик шинжилгээ гэж юу болох, түүнийг хэрхэн хэрэгжүүлэх талаар сайн мэдэхгүй байгаа бол энэ нийтлэлийг уншина ууЭнэ аргачлалын талаар илүү ихийг мэдэх.

Та яагаад статик шинжилгээ хэрэгтэй байна вэ?

Товчхондоо: хурдатгал, хялбарчлах.

Статик шинжилгээ нь кодын олон янзын асуудлыг олох боломжийг олгодог: хэлний бүтцийг буруу ашиглахаас эхлээд үсгийн алдаа хүртэл. Жишээлбэл, оронд нь

auto x = obj.x;
auto y = obj.y;
auto z = obj.z;

Та дараах кодыг бичсэн:

auto x = obj.x;
auto y = obj.y;
auto z = obj.x;

Таны харж байгаагаар сүүлийн мөрөнд үсгийн алдаа байна. Жишээлбэл, PVS-Studio дараах анхааруулгыг гаргадаг.

V537 'y' зүйлийн ашиглалтын зөв эсэхийг шалгах талаар бодож үзээрэй.

Хэрэв та энэ алдааг гартаа оруулахыг хүсвэл Compiler Explorer дээрх бэлэн жишээг үзээрэй: *дарна уу*.

Таны ойлгож байгаагаар кодын ийм хэсгүүдэд шууд анхаарлаа хандуулах нь үргэлж боломжгүй байдаг бөгөөд үүнээс болж та бүх зүйл яагаад ийм хачирхалтай ажиллаж байгааг гайхаж, дибаг хийж нэг цаг сууж болно.

Гэсэн хэдий ч энэ бол алдаа гэдэг нь тодорхой. Хөгжүүлэгч хэлний нарийн ширийн зүйлийг мартсан тул дутуу код бичсэн бол яах вэ? Эсвэл кодонд ч зөвшөөрсөн тодорхойгүй зан байдал? Харамсалтай нь ийм тохиолдлууд түгээмэл тохиолддог бөгөөд алдаа, ердийн алдаа эсвэл тодорхойгүй зан үйлийг агуулсан тусгайлан ажиллаж буй кодыг дибаг хийхэд хамгийн их цаг зарцуулдаг.

Эдгээр нөхцөл байдлын хувьд статик шинжилгээ гарч ирэв. Энэ бол хөгжүүлэгчийн туслах бөгөөд код дахь янз бүрийн асуудлуудыг зааж, яагаад ингэж бичих шаардлагагүй, энэ нь юунд хүргэж болох, хэрхэн засах талаар баримт бичигт тайлбарлах болно. Энэ нь хэрхэн харагдах жишээг энд харуулав: *дарна уу*.

Та нийтлэлээс анализатор илрүүлж болох илүү сонирхолтой алдаануудыг олж болно.

Одоо та энэ материалыг уншиж, статик шинжилгээний ашиг тустай гэдэгт итгэлтэй байгаа тул та үүнийг туршиж үзэхийг хүсч магадгүй юм. Гэхдээ хаанаас эхлэх вэ? Одоогийн төсөлдөө шинэ хэрэгслийг хэрхэн нэгтгэх вэ? Түүнд багаа хэрхэн танилцуулах вэ? Та эдгээр асуултын хариултыг доороос олох болно.

Анхаарна уу. Статик шинжилгээ нь кодын тойм гэх мэт ашигтай зүйлийг орлох эсвэл цуцлахгүй. Энэ нь энэ үйл явцыг нөхөж, үсгийн алдаа, алдаа, аюултай загварыг урьдчилан анзаарч, засахад тусалдаг. Буруу байрлуулсан хаалт хайхаас илүүтэй алгоритм болон кодын тодорхой байдал дээр кодын тойм дээр анхаарлаа төвлөрүүлэх нь илүү үр дүнтэй байдаг. уйтгартай харьцуулах функцүүдийг уншина уу.

0. Хэрэгсэлтэй танилцах

Энэ бүхэн туршилтын хувилбараас эхэлдэг. Үнэн хэрэгтээ, хэрэв та өмнө нь уг хэрэгслийг хэзээ ч амьдаар нь харж байгаагүй бол хөгжлийн үйл явцад ямар нэг зүйлийг хэрэгжүүлэхээр шийдэхэд хэцүү байдаг. Тиймээс таны хийх ёстой хамгийн эхний зүйл бол татаж авах явдал юм туршилтын хувилбар.

Энэ үе шатанд та юу сурах вэ:

  • Анализатортой харилцах арга замууд юу вэ;
  • Анализатор нь таны хөгжүүлэлтийн орчинд нийцэж байна уу?
  • Танай төслүүдэд одоогоор ямар асуудал байна вэ?

Танд хэрэгтэй бүх зүйлээ суулгасны дараа хийх ёстой хамгийн эхний зүйл бол бүх төслийн дүн шинжилгээ хийх явдал юм (Windows, Linux, MacOS). Visual Studio дахь PVS-Studio-ийн хувьд та ижил төстэй зургийг харах болно (товшиж болно):

Статик шинжилгээ - танилцуулгаас нэгтгэх хүртэл
Баримт нь статик анализаторууд ихэвчлэн том кодын суурьтай төслүүдэд асар олон тооны анхааруулга өгдөг. Таны төсөл аль хэдийн ажиллаж байгаа тул бүгдийг нь засах шаардлагагүй, энэ нь эдгээр асуудлууд чухал биш гэсэн үг юм. Гэсэн хэдий ч та Та хамгийн сонирхолтой сэрэмжлүүлгийг харж болно шаардлагатай бол тэдгээрийг засах. Үүнийг хийхийн тулд та гаралтыг шүүж, зөвхөн хамгийн найдвартай мессежүүдийг үлдээх хэрэгтэй. Visual Studio-д зориулсан PVS-Studio залгаас дээр үүнийг алдааны түвшин болон ангиллаар шүүж хийдэг. Хамгийн зөв гаралтыг авахын тулд зөвхөн үлдээгээрэй Өндөр и Ерөнхий (мөн товших боломжтой):

Статик шинжилгээ - танилцуулгаас нэгтгэх хүртэл
Үнэхээр 178 анхааруулгыг харахад хэдэн мянган...

Таб дотор Дунд и Бага Ихэнхдээ сайн анхааруулга байдаг боловч эдгээр ангилалд нарийвчлал багатай (найдвартай) оношилгоонууд багтдаг. Анхааруулгын түвшин болон Windows дээр ажиллах сонголтуудын талаарх дэлгэрэнгүй мэдээллийг эндээс авах боломжтой: *дарна уу*.

Хамгийн сонирхолтой алдаануудыг амжилттай хянаж (мөн тэдгээрийг амжилттай зассан) үнэ цэнэтэй юм үлдсэн анхааруулгыг дарах. Энэ нь шинэ сэрэмжлүүлгийг хуучин хүмүүсийн дунд алдахгүйн тулд зайлшгүй шаардлагатай. Нэмж дурдахад статик анализатор нь програмистын туслах бөгөөд алдааны жагсаалт биш юм. 🙂

1. Автоматжуулалт

Танилцсаны дараа залгаасуудыг тохируулах, CI-д нэгтгэх цаг болжээ. Програмистууд статик анализаторыг ашиглаж эхлэхээс өмнө үүнийг хийх ёстой. Программист дүн шинжилгээ хийхээ мартсан эсвэл огт хийхийг хүсэхгүй байж магадгүй юм. Үүнийг хийхийн тулд та бүх зүйлийг эцсийн байдлаар шалгах хэрэгтэй бөгөөд ингэснээр шалгагдаагүй код нь ерөнхий хөгжлийн салбар руу орохгүй байх болно.

Энэ үе шатанд та юу сурах вэ:

  • Энэ хэрэгсэл нь автоматжуулалтын ямар сонголтуудыг өгдөг;
  • Анализатор нь таны угсралтын системтэй нийцэж байна уу?

Төгс баримт бичиг байхгүй тул заримдаа бичих шаардлагатай болдог дэмжлэг. Энэ бол хэвийн зүйл бөгөөд бид танд туслахдаа баяртай байна. 🙂

Одоо тасралтгүй интеграцийн (CI) үйлчилгээ рүү шилжье. Аливаа анализаторыг ямар ч ноцтой асуудалгүйгээр ашиглах боломжтой. Үүнийг хийхийн тулд шугам хоолойд тусдаа үе шатыг бий болгох хэрэгтэй бөгөөд энэ нь ихэвчлэн угсралтын болон нэгжийн туршилтын дараа байрладаг. Энэ нь янз бүрийн консол хэрэгслүүдийг ашиглан хийгддэг. Жишээлбэл, PVS-Studio нь дараахь хэрэгслүүдээр хангадаг.

  • PVS-Studio_Cmd.exe (шийдлийн шинжилгээ, Windows дээрх C#, C++ төслүүд)
  • CLMonitor.exe (эмхэтгэлд хяналт тавих)
  • pvs-studio-analyzer (Linux / macOS дээрх C++ төслүүдийн шинжилгээ)
  • pvs-studio-dotnet (шийдлийн шинжилгээ, Linux / macOS дээрх C# төслүүд)
  • pvs-studio.jar (Java төслүүдийн шинжилгээ)
  • PlogConverter (тайлангийн файл хөрвүүлэгч)

Шинжилгээг CI-д нэгтгэхийн тулд та гурван зүйлийг хийх хэрэгтэй.

  • Анализатор суурилуулах;
  • Шинжилгээ хийх;
  • Үр дүнг хүргэх.

Жишээлбэл, Linux (Debian-base) дээр PVS-Studio суулгахын тулд та дараах тушаалуудыг ажиллуулах хэрэгтэй.

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

Windows үйлдлийн систем дээр анализаторыг багц менежерээс суулгах боломжгүй боловч командын мөрөөс анализаторыг суулгах боломжтой.

PVS-Studio_setup.exe /verysilent /suppressmsgboxes 
/norestart /nocloseapplications

Та Windows үйлдлийн систем дээр PVS-Studio-г ашиглах талаар дэлгэрэнгүй уншиж болно *энд*.

Суулгасны дараа та шинжилгээг шууд хийх хэрэгтэй. Гэсэн хэдий ч эмхэтгэл, туршилтыг давсны дараа үүнийг хийхийг зөвлөж байна. Учир нь статик шинжилгээ нь эмхэтгэлээс хоёр дахин их хугацаа шаарддаг.

Эхлэх арга нь платформ болон төслийн онцлогоос хамаардаг тул би жишээ болгон C++ (Linux)-ын сонголтыг харуулах болно.

pvs-studio-analyzer analyze -j8 
                            -o PVS-Studio.log
plog-converter -t errorfile PVS-Studio.log --cerr -w

Эхний тушаал нь дүн шинжилгээ хийх бөгөөд хоёр дахь нь дугтуйнуудтайланг текст формат руу хөрвүүлж, дэлгэцэн дээр гаргаж, анхааруулга байгаа бол 0-ээс өөр кодыг буцаана. Иймэрхүү механизмыг алдааны мэдэгдэл байгаа үед угсралтыг блоклоход хялбар ашиглаж болно. Гэсэн хэдий ч та тугийг үргэлж устгаж болно -w мөн анхааруулга агуулсан угсралтыг хааж болохгүй.

Анхаарна уу. Текстийн формат нь тохиромжгүй байна. Үүнийг энгийн жишээ болгон өгсөн болно. Илүү сонирхолтой тайлангийн форматыг анхаарч үзээрэй - FullHtml. Энэ нь кодоор шилжих боломжийг танд олгоно.

Та CI дээр дүн шинжилгээ хийх талаар дэлгэрэнгүйг нийтлэлээс уншиж болно.PVS-Studio ба тасралтгүй интеграци"(Windows) эсвэл"Travis CI дээр PVS-Studio-г хэрхэн тохируулах талаар"(Linux).

За, та бүтээх сервер дээр анализаторыг тохируулсан байна. Одоо, хэрэв хэн нэгэн шалгагдаагүй кодыг байршуулсан бол баталгаажуулах үе шат амжилтгүй болох бөгөөд та асуудлыг илрүүлэх боломжтой болно, гэхдээ энэ нь тийм ч тохиромжтой биш юм, учир нь салбаруудыг нэгтгэсний дараа биш харин төслийг шалгах нь илүү үр дүнтэй байдаг. түүнээс өмнө татах хүсэлтийн үе шатанд А.

Ерөнхийдөө татах хүсэлтийн шинжилгээг тохируулах нь CI дээрх шинжилгээг ердийн эхлүүлэхээс тийм ч их ялгаатай биш юм. Өөрчлөгдсөн файлуудын жагсаалтыг авах шаардлагатайг эс тооцвол. Эдгээрийг ихэвчлэн git ашиглан салбар хоорондын ялгааг асуух замаар олж авч болно:

git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list

Одоо та энэ файлуудын жагсаалтыг анализатор руу оролт болгон дамжуулах хэрэгтэй. Жишээлбэл, PVS-Studio-д үүнийг туг ашиглан хэрэгжүүлдэг -S:

pvs-studio-analyzer analyze -j8 
                            -o PVS-Studio.log 
                            -S .pvs-pr.list

Та татах хүсэлтийг шинжлэх талаар илүү ихийг олж мэдэх боломжтой *энд*. Таны CI нь нийтлэлд дурдсан үйлчилгээний жагсаалтад ороогүй байсан ч энэ төрлийн шинжилгээний онолд зориулсан ерөнхий хэсгийг танд хэрэгтэй болно.

Татаж авах хүсэлтийн шинжилгээг тохируулснаар та анхааруулга агуулсан үйлдлийг блоклож, шалгагдаагүй кодыг давж чадахгүй хил хязгаарыг бий болгож чадна.

Энэ бүхэн мэдээж сайн, гэхдээ би бүх анхааруулгыг нэг дороос харахыг хүсч байна. Зөвхөн статик анализатороос гадна нэгжийн туршилт эсвэл динамик анализатороос. Үүнд зориулсан төрөл бүрийн үйлчилгээ, залгаасууд байдаг. Жишээлбэл, PVS-Studio-д байдаг SonarQube-д нэгтгэх залгаас.

2. Хөгжүүлэгчийн машинууд дээр нэгтгэх

Одоо өдөр тутмын хэрэглээнд зориулж анализаторыг суулгаж, тохируулах цаг болжээ. Энэ үед та ажлын ихэнх аргуудыг аль хэдийн мэддэг болсон тул үүнийг хамгийн хялбар хэсэг гэж нэрлэж болно.

Хамгийн энгийн сонголт бол хөгжүүлэгчид шаардлагатай анализаторыг өөрсдөө суулгаж болно. Гэсэн хэдий ч, энэ нь маш их цаг хугацаа шаардагдах бөгөөд тэднийг хөгжүүлэлтээс сатааруулах тул та суулгагч болон шаардлагатай тугуудыг ашиглан энэ процессыг автоматжуулж болно. PVS-Studio-ийн хувьд олон янз байдаг автомат суурилуулалтад зориулсан тугнууд. Гэсэн хэдий ч багц менежерүүд үргэлж байдаг, жишээлбэл, Chocolatey (Windows), Homebrew (macOS) эсвэл Линуксийн олон арван сонголтууд.

Дараа нь та шаардлагатай залгаасуудыг суулгах хэрэгтэй болно, жишээлбэл Visual Studio, САНАА, Rider гэх мэт

3. Өдөр тутмын хэрэглээ

Энэ үе шатанд өдөр тутмын хэрэглээний үед анализаторыг хурдасгах аргуудын талаар хэдэн үг хэлэх цаг болжээ. Төслийг бүхэлд нь шинжлэхэд маш их цаг хугацаа шаардагддаг, гэхдээ бид бүхэл бүтэн төслийн туршид кодыг нэг дор өөрчилдөг вэ? Бүхэл бүтэн кодын үндсэнд шууд нөлөөлөх тийм том рефакторинг гэж бараг байдаггүй. Нэг удаад өөрчилдөг файлуудын тоо араваас хэтрэх нь ховор байдаг тул тэдгээрийг шинжлэх нь утга учиртай юм. Ийм нөхцөл байдлын хувьд байдаг нэмэлт шинжилгээний горим. Зүгээр л бүү ай, энэ бол өөр хэрэгсэл биш юм. Энэ нь зөвхөн өөрчилсөн файлууд болон тэдгээрийн хамаарлыг шинжлэх боломжийг олгодог тусгай горим бөгөөд хэрэв та залгаас суулгасан IDE дээр ажиллаж байгаа бол энэ нь бүтээсний дараа автоматаар тохиолддог.

Хэрэв анализатор саяхан өөрчлөгдсөн кодонд асуудал илрүүлбэл энэ тухай бие даан мэдээлэх болно. Жишээлбэл, PVS-Studio танд анхааруулга ашиглан энэ талаар хэлэх болно.

Статик шинжилгээ - танилцуулгаас нэгтгэх хүртэл
Мэдээж хэрэг, хөгжүүлэгчдийг уг хэрэгслийг ашиглахыг хэлэх нь хангалтгүй юм. Бид ямар нэгэн байдлаар тэдэнд энэ нь юу болохыг, яаж байгааг хэлэх хэрэгтэй. Жишээлбэл, энд PVS-Studio-г хурдан эхлүүлэх тухай нийтлэлүүд байгаа боловч та дуртай ямар ч хэрэглүүрийн ижил төстэй зааварчилгааг олж болно:

Ийм нийтлэл нь өдөр тутмын хэрэглээнд шаардлагатай бүх мэдээллийг өгдөг бөгөөд их цаг хугацаа шаарддаггүй. 🙂

Энэ хэрэгсэлтэй танилцах шатандаа ч гэсэн бид анхны хөөргөх үеэр олон анхааруулгыг дарсан. Харамсалтай нь статик анализаторууд төгс биш байдаг тул үе үе хуурамч эерэг үр дүн өгдөг. Тэдгээрийг дарах нь ихэвчлэн хялбар байдаг; жишээлбэл, Visual Studio-д зориулсан PVS-Studio залгаас дээр та нэг товчлуур дээр дарахад л хангалттай.

Статик шинжилгээ - танилцуулгаас нэгтгэх хүртэл
Гэсэн хэдий ч та тэднийг дарахаас илүү их зүйлийг хийж чадна. Жишээлбэл, та асуудлыг дэмжих байгууллагад мэдээлж болно. Хэрэв худал эерэгийг засах боломжтой бол ирээдүйн шинэчлэлтүүдэд таны кодын баазтай холбоотой худал эерэг мэдээлэл улам бүр багасч байгааг анзаарах болно.

Интеграцийн дараа

Тиймээс бид статик шинжилгээг хөгжлийн үйл явцад нэгтгэх бүх үе шатыг туулсан. CI дээр ийм хэрэгслийг тохируулах нь чухал хэдий ч тэдгээрийг ажиллуулах хамгийн чухал газар бол хөгжүүлэгчийн компьютер юм. Эцсийн эцэст, статик анализатор нь код нь сайн биш гэж чамаас хол хаа нэгтээ хэлдэг шүүгч биш юм. Харин ч ядарсан эсэхийг тань хэлж, мартсан зүйлээ сануулдаг туслах юм.

Тогтмол хэрэглээгүйгээр статик дүн шинжилгээ хийх нь хөгжлийг ихээхэн хялбаршуулах магадлал багатай нь үнэн. Эцсийн эцэст, хөгжүүлэгчийн хувьд түүний гол давуу тал нь кодын нарийн төвөгтэй, маргаантай хэсгүүдийг хайж олохоос гадна тэдгээрийг эрт илрүүлэх явдал юм. Засварыг туршилтанд явуулсны дараа асуудал олж илрүүлэх нь таагүй төдийгүй маш их цаг хугацаа шаарддаг гэдгийг хүлээн зөвшөөрч байна. Статик шинжилгээг тогтмол ашиглах үед таны компьютер дээрх өөрчлөлт бүрийг шууд харж, код дээр ажиллаж байхдаа сэжигтэй газруудыг мэдээлдэг.

Хэрэв та эсвэл танай хамт олон анализаторыг ашиглах нь зүйтэй эсэхэд эргэлзэж байгаа бол одоо нийтлэлийг уншиж эхлэхийг зөвлөж байна "PVS-Studio статик кодын анализаторыг хөгжүүлэх үйл явцад нэвтрүүлэх шалтгаанууд". Энэ нь статик дүн шинжилгээ хийх нь тэдний цаг хугацаа гэх мэтчилэн хөгжүүлэгчдийн нийтлэг санаа зовоосон асуудлыг шийддэг.

Статик шинжилгээ - танилцуулгаас нэгтгэх хүртэл

Хэрэв та энэ нийтлэлийг англи хэлээр ярьдаг үзэгчидтэй хуваалцахыг хүсвэл орчуулгын холбоосыг ашиглана уу: Максим Звягинцев. Статик шинжилгээ: Эхлэхээс эхлээд нэгтгэх хүртэл.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх