Эцэс төгсгөлгүй кодыг шалгах эсвэл дибаг хийхээс залхсан тул заримдаа та амьдралаа хэрхэн хялбарчлах талаар боддог. Жаахан хайсны дараа эсвэл санамсаргүй түүн дээр унасны дараа та "Статик шинжилгээ" гэсэн шидэт хэллэгийг харж болно. Энэ нь юу болохыг, таны төсөлтэй хэрхэн харьцаж болохыг харцгаая.
Үнэн хэрэгтээ, хэрэв та орчин үеийн ямар ч хэлээр бичдэг бол үүнийг өөрөө ч мэдэлгүй статик анализатороор дамжуулдаг. Баримт нь орчин үеийн аливаа хөрвүүлэгч нь кодонд гарч болзошгүй асуудлуудын талаар өчүүхэн ч гэсэн анхааруулга өгдөг. Жишээлбэл, 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 дараах анхааруулгыг гаргадаг.
Хэрэв та энэ алдааг гартаа оруулахыг хүсвэл Compiler Explorer дээрх бэлэн жишээг үзээрэй: *
Таны ойлгож байгаагаар кодын ийм хэсгүүдэд шууд анхаарлаа хандуулах нь үргэлж боломжгүй байдаг бөгөөд үүнээс болж та бүх зүйл яагаад ийм хачирхалтай ажиллаж байгааг гайхаж, дибаг хийж нэг цаг сууж болно.
Гэсэн хэдий ч энэ бол алдаа гэдэг нь тодорхой. Хөгжүүлэгч хэлний нарийн ширийн зүйлийг мартсан тул дутуу код бичсэн бол яах вэ? Эсвэл кодонд ч зөвшөөрсөн
Эдгээр нөхцөл байдлын хувьд статик шинжилгээ гарч ирэв. Энэ бол хөгжүүлэгчийн туслах бөгөөд код дахь янз бүрийн асуудлуудыг зааж, яагаад ингэж бичих шаардлагагүй, энэ нь юунд хүргэж болох, хэрхэн засах талаар баримт бичигт тайлбарлах болно. Энэ нь хэрхэн харагдах жишээг энд харуулав: *
Та нийтлэлээс анализатор илрүүлж болох илүү сонирхолтой алдаануудыг олж болно.
10 оны C++ төслийн шилдэг 2019 алдаа 10 оны C# төслийн шилдэг 2019 алдаа 10 оны Java төслийн шилдэг 2019 алдаа
Одоо та энэ материалыг уншиж, статик шинжилгээний ашиг тустай гэдэгт итгэлтэй байгаа тул та үүнийг туршиж үзэхийг хүсч магадгүй юм. Гэхдээ хаанаас эхлэх вэ? Одоогийн төсөлдөө шинэ хэрэгслийг хэрхэн нэгтгэх вэ? Түүнд багаа хэрхэн танилцуулах вэ? Та эдгээр асуултын хариултыг доороос олох болно.
Анхаарна уу. Статик шинжилгээ нь кодын тойм гэх мэт ашигтай зүйлийг орлох эсвэл цуцлахгүй. Энэ нь энэ үйл явцыг нөхөж, үсгийн алдаа, алдаа, аюултай загварыг урьдчилан анзаарч, засахад тусалдаг. Буруу байрлуулсан хаалт хайхаас илүүтэй алгоритм болон кодын тодорхой байдал дээр кодын тойм дээр анхаарлаа төвлөрүүлэх нь илүү үр дүнтэй байдаг.
0. Хэрэгсэлтэй танилцах
Энэ бүхэн туршилтын хувилбараас эхэлдэг. Үнэн хэрэгтээ, хэрэв та өмнө нь уг хэрэгслийг хэзээ ч амьдаар нь харж байгаагүй бол хөгжлийн үйл явцад ямар нэг зүйлийг хэрэгжүүлэхээр шийдэхэд хэцүү байдаг. Тиймээс таны хийх ёстой хамгийн эхний зүйл бол татаж авах явдал юм
Энэ үе шатанд та юу сурах вэ:
- Анализатортой харилцах арга замууд юу вэ;
- Анализатор нь таны хөгжүүлэлтийн орчинд нийцэж байна уу?
- Танай төслүүдэд одоогоор ямар асуудал байна вэ?
Танд хэрэгтэй бүх зүйлээ суулгасны дараа хийх ёстой хамгийн эхний зүйл бол бүх төслийн дүн шинжилгээ хийх явдал юм (
Баримт нь статик анализаторууд ихэвчлэн том кодын суурьтай төслүүдэд асар олон тооны анхааруулга өгдөг. Таны төсөл аль хэдийн ажиллаж байгаа тул бүгдийг нь засах шаардлагагүй, энэ нь эдгээр асуудлууд чухал биш гэсэн үг юм. Гэсэн хэдий ч та
Үнэхээр 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
Эхний тушаал нь дүн шинжилгээ хийх бөгөөд хоёр дахь нь
Анхаарна уу. Текстийн формат нь тохиромжгүй байна. Үүнийг энгийн жишээ болгон өгсөн болно. Илүү сонирхолтой тайлангийн форматыг анхаарч үзээрэй - FullHtml. Энэ нь кодоор шилжих боломжийг танд олгоно.
Та CI дээр дүн шинжилгээ хийх талаар дэлгэрэнгүйг нийтлэлээс уншиж болно.
За, та бүтээх сервер дээр анализаторыг тохируулсан байна. Одоо, хэрэв хэн нэгэн шалгагдаагүй кодыг байршуулсан бол баталгаажуулах үе шат амжилтгүй болох бөгөөд та асуудлыг илрүүлэх боломжтой болно, гэхдээ энэ нь тийм ч тохиромжтой биш юм, учир нь салбаруудыг нэгтгэсний дараа биш харин төслийг шалгах нь илүү үр дүнтэй байдаг. түүнээс өмнө татах хүсэлтийн үе шатанд А.
Ерөнхийдөө татах хүсэлтийн шинжилгээг тохируулах нь 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
Та татах хүсэлтийг шинжлэх талаар илүү ихийг олж мэдэх боломжтой *
Татаж авах хүсэлтийн шинжилгээг тохируулснаар та анхааруулга агуулсан үйлдлийг блоклож, шалгагдаагүй кодыг давж чадахгүй хил хязгаарыг бий болгож чадна.
Энэ бүхэн мэдээж сайн, гэхдээ би бүх анхааруулгыг нэг дороос харахыг хүсч байна. Зөвхөн статик анализатороос гадна нэгжийн туршилт эсвэл динамик анализатороос. Үүнд зориулсан төрөл бүрийн үйлчилгээ, залгаасууд байдаг. Жишээлбэл, PVS-Studio-д байдаг
2. Хөгжүүлэгчийн машинууд дээр нэгтгэх
Одоо өдөр тутмын хэрэглээнд зориулж анализаторыг суулгаж, тохируулах цаг болжээ. Энэ үед та ажлын ихэнх аргуудыг аль хэдийн мэддэг болсон тул үүнийг хамгийн хялбар хэсэг гэж нэрлэж болно.
Хамгийн энгийн сонголт бол хөгжүүлэгчид шаардлагатай анализаторыг өөрсдөө суулгаж болно. Гэсэн хэдий ч, энэ нь маш их цаг хугацаа шаардагдах бөгөөд тэднийг хөгжүүлэлтээс сатааруулах тул та суулгагч болон шаардлагатай тугуудыг ашиглан энэ процессыг автоматжуулж болно. PVS-Studio-ийн хувьд олон янз байдаг
Дараа нь та шаардлагатай залгаасуудыг суулгах хэрэгтэй болно, жишээлбэл
3. Өдөр тутмын хэрэглээ
Энэ үе шатанд өдөр тутмын хэрэглээний үед анализаторыг хурдасгах аргуудын талаар хэдэн үг хэлэх цаг болжээ. Төслийг бүхэлд нь шинжлэхэд маш их цаг хугацаа шаардагддаг, гэхдээ бид бүхэл бүтэн төслийн туршид кодыг нэг дор өөрчилдөг вэ? Бүхэл бүтэн кодын үндсэнд шууд нөлөөлөх тийм том рефакторинг гэж бараг байдаггүй. Нэг удаад өөрчилдөг файлуудын тоо араваас хэтрэх нь ховор байдаг тул тэдгээрийг шинжлэх нь утга учиртай юм. Ийм нөхцөл байдлын хувьд байдаг
Хэрэв анализатор саяхан өөрчлөгдсөн кодонд асуудал илрүүлбэл энэ тухай бие даан мэдээлэх болно. Жишээлбэл, PVS-Studio танд анхааруулга ашиглан энэ талаар хэлэх болно.
Мэдээж хэрэг, хөгжүүлэгчдийг уг хэрэгслийг ашиглахыг хэлэх нь хангалтгүй юм. Бид ямар нэгэн байдлаар тэдэнд энэ нь юу болохыг, яаж байгааг хэлэх хэрэгтэй. Жишээлбэл, энд PVS-Studio-г хурдан эхлүүлэх тухай нийтлэлүүд байгаа боловч та дуртай ямар ч хэрэглүүрийн ижил төстэй зааварчилгааг олж болно:
Windows дээр PVS-Studio хэрхэн ажиллуулах вэ (C, C++, C#) Linux болон macOS (C, C++) дээр PVS-Studio-г хэрхэн ажиллуулах вэ PVS-Studio Java-г хэрхэн эхлүүлэх вэ
Ийм нийтлэл нь өдөр тутмын хэрэглээнд шаардлагатай бүх мэдээллийг өгдөг бөгөөд их цаг хугацаа шаарддаггүй. 🙂
Энэ хэрэгсэлтэй танилцах шатандаа ч гэсэн бид анхны хөөргөх үеэр олон анхааруулгыг дарсан. Харамсалтай нь статик анализаторууд төгс биш байдаг тул үе үе хуурамч эерэг үр дүн өгдөг. Тэдгээрийг дарах нь ихэвчлэн хялбар байдаг; жишээлбэл, Visual Studio-д зориулсан PVS-Studio залгаас дээр та нэг товчлуур дээр дарахад л хангалттай.
Гэсэн хэдий ч та тэднийг дарахаас илүү их зүйлийг хийж чадна. Жишээлбэл, та асуудлыг дэмжих байгууллагад мэдээлж болно. Хэрэв худал эерэгийг засах боломжтой бол ирээдүйн шинэчлэлтүүдэд таны кодын баазтай холбоотой худал эерэг мэдээлэл улам бүр багасч байгааг анзаарах болно.
Интеграцийн дараа
Тиймээс бид статик шинжилгээг хөгжлийн үйл явцад нэгтгэх бүх үе шатыг туулсан. CI дээр ийм хэрэгслийг тохируулах нь чухал хэдий ч тэдгээрийг ажиллуулах хамгийн чухал газар бол хөгжүүлэгчийн компьютер юм. Эцсийн эцэст, статик анализатор нь код нь сайн биш гэж чамаас хол хаа нэгтээ хэлдэг шүүгч биш юм. Харин ч ядарсан эсэхийг тань хэлж, мартсан зүйлээ сануулдаг туслах юм.
Тогтмол хэрэглээгүйгээр статик дүн шинжилгээ хийх нь хөгжлийг ихээхэн хялбаршуулах магадлал багатай нь үнэн. Эцсийн эцэст, хөгжүүлэгчийн хувьд түүний гол давуу тал нь кодын нарийн төвөгтэй, маргаантай хэсгүүдийг хайж олохоос гадна тэдгээрийг эрт илрүүлэх явдал юм. Засварыг туршилтанд явуулсны дараа асуудал олж илрүүлэх нь таагүй төдийгүй маш их цаг хугацаа шаарддаг гэдгийг хүлээн зөвшөөрч байна. Статик шинжилгээг тогтмол ашиглах үед таны компьютер дээрх өөрчлөлт бүрийг шууд харж, код дээр ажиллаж байхдаа сэжигтэй газруудыг мэдээлдэг.
Хэрэв та эсвэл танай хамт олон анализаторыг ашиглах нь зүйтэй эсэхэд эргэлзэж байгаа бол одоо нийтлэлийг уншиж эхлэхийг зөвлөж байна "
Хэрэв та энэ нийтлэлийг англи хэлээр ярьдаг үзэгчидтэй хуваалцахыг хүсвэл орчуулгын холбоосыг ашиглана уу: Максим Звягинцев.
Эх сурвалж: www.habr.com