Statik təhlil - girişdən inteqrasiyaya qədər

Sonsuz kodun nəzərdən keçirilməsindən və ya sazlanmasından bezdiyiniz üçün bəzən həyatınızı necə sadələşdirəcəyinizi düşünürsünüz. Bir az axtardıqdan sonra və ya təsadüfən ona rast gəlsəniz, sehrli ifadəni görə bilərsiniz: "Statik analiz." Gəlin bunun nə olduğunu və layihənizlə necə qarşılıqlı əlaqədə ola biləcəyini görək.

Statik təhlil - girişdən inteqrasiyaya qədər
Əslində, hər hansı bir müasir dildə yazırsansa, o zaman fərqinə varmadan onu statik analizatordan keçirdin. Məsələ burasındadır ki, istənilən müasir kompilyator koddakı potensial problemlər barədə kiçik də olsa xəbərdarlıqlar toplusunu təmin edir. Məsələn, Visual Studio-da C++ kodunu tərtib edərkən aşağıdakıları görə bilərsiniz:

Statik təhlil - girişdən inteqrasiyaya qədər
Bu çıxışda dəyişənin olduğunu görürük idi funksiyasında heç vaxt istifadə olunmayıb. Beləliklə, reallıqda siz demək olar ki, həmişə sadə statik kod analizatorundan istifadə etmisiniz. Bununla belə, Coverity, Klocwork və ya PVS-Studio kimi peşəkar analizatorlardan fərqli olaraq, tərtibçi tərəfindən verilən xəbərdarlıqlar yalnız kiçik bir sıra problemləri göstərə bilər.

Əgər statik analizin nə olduğunu və onu necə həyata keçirəcəyini dəqiq bilmirsinizsə, bu məqaləni oxuyunbu metodologiya haqqında daha çox öyrənmək üçün.

Niyə statik analizə ehtiyacınız var?

Bir sözlə: sürətləndirmə və sadələşdirmə.

Statik analiz kodda çoxlu müxtəlif problemləri tapmağa imkan verir: dil konstruksiyalarının düzgün istifadə edilməməsindən tutmuş yazı xətalarına qədər. Məsələn, əvəzinə

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

Siz aşağıdakı kodu yazdınız:

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

Gördüyünüz kimi, sonuncu sətirdə hərf səhvi var. Məsələn, PVS-Studio aşağıdakı xəbərdarlığı verir:

V537 'y' elementinin istifadəsinin düzgünlüyünü nəzərdən keçirin.

Bu səhvə əllərinizi soxmaq istəyirsinizsə, Compiler Explorer-də hazır nümunəni sınayın: *ağlamaq*.

Anladığınız kimi, kodun bu cür bölmələrinə dərhal diqqət yetirmək həmişə mümkün deyil və buna görə də hər şeyin niyə belə qəribə işlədiyini merak edərək, yaxşı bir saat sazlamaq üçün otura bilərsiniz.

Ancaq bu, açıq-aydın bir səhvdir. Tərtibatçı dilin bəzi incəliklərini unutduğuna görə suboptimal kod yazsa nə olacaq? Və ya hətta kodda buna icazə verdi qeyri-müəyyən davranış? Təəssüf ki, bu cür hallar tamamilə adi haldır və vaxtın çox hissəsi yazı xətaları, tipik səhvlər və ya qeyri-müəyyən davranışları ehtiva edən xüsusi işləyən kodun düzəldilməsinə sərf olunur.

Məhz bu vəziyyətlər üçün statik analiz ortaya çıxdı. Bu, koddakı müxtəlif problemləri göstərəcək və sənədlərdə niyə bu şəkildə yazmağın lazım olmadığını, nəyə gətirib çıxara biləcəyini və onu necə həll edəcəyini izah edən bir tərtibatçının köməkçisidir. Bunun necə görünə biləcəyinə dair bir nümunə: *ağlamaq*.

Analizatorun aşkar edə biləcəyi daha maraqlı səhvləri məqalələrdə tapa bilərsiniz:

İndi siz bu materialı oxuduğunuza və statik analizin faydalarına əmin olduğunuza görə, onu sınamaq istəyə bilərsiniz. Bəs haradan başlamaq lazımdır? Mövcud layihənizə yeni aləti necə inteqrasiya etmək olar? Bəs ona komandanı necə tanıtmaq olar? Bu suallara aşağıda cavab tapa bilərsiniz.

Qeyd edək. Statik analiz kod rəyləri kimi faydalı bir şeyi əvəz etmir və ya ləğv etmir. O, bu prosesi tamamlayır, yazı xətalarını, qeyri-dəqiqlikləri və təhlükəli dizaynları əvvəlcədən görməyə və düzəltməyə kömək edir. Yanlış yerləşdirilmiş mötərizə və ya mötərizə axtarmaqdansa, alqoritmlər və kod aydınlığı üzərində kod təhlillərinə diqqət yetirmək daha məhsuldardır. darıxdırıcı müqayisə funksiyalarını oxuyun.

0. Alətlə tanış olmaq

Hər şey sınaq versiyası ilə başlayır. Həqiqətən, aləti əvvəllər canlı görməmisinizsə, inkişaf prosesinə nəyisə təqdim etmək qərarına gəlmək çətindir. Buna görə etməli olduğunuz ilk şey yükləməkdir sınaq versiyası.

Bu mərhələdə nə öyrənəcəksiniz:

  • Analizatorla qarşılıqlı əlaqə yolları hansılardır;
  • Analizator inkişaf mühitinizə uyğundurmu?
  • Hazırda layihələrinizdə hansı problemlər var?

Lazım olan hər şeyi quraşdırdıqdan sonra etməli olduğunuz ilk şey bütün layihənin təhlilini aparmaqdır (Windows, Linux, MacOS). Visual Studio-da PVS-Studio vəziyyətində oxşar bir şəkil görəcəksiniz (kliklənə bilər):

Statik təhlil - girişdən inteqrasiyaya qədər
Fakt budur ki, statik analizatorlar adətən böyük kod bazası olan layihələr üçün çoxlu sayda xəbərdarlıqlar verirlər. Onların hamısını düzəltməyə ehtiyac yoxdur, çünki layihəniz artıq işləyir, yəni bu problemlər kritik deyil. Bununla belə, sən ən maraqlı xəbərdarlıqlara baxa bilərsiniz və zəruri hallarda onları düzəldin. Bunu etmək üçün çıxışı süzgəcdən keçirməli və yalnız ən etibarlı mesajları tərk etməlisiniz. Visual Studio üçün PVS-Studio plaginində bu, səhv səviyyələri və kateqoriyalar üzrə filtrasiya yolu ilə həyata keçirilir. Ən dəqiq çıxış üçün yalnız buraxın Yüksək и Ümumi (həmçinin tıklanabilir):

Statik təhlil - girişdən inteqrasiyaya qədər
Həqiqətən, 178 xəbərdarlığa baxmaq bir neçə mindən daha asandır...

Nişanlarda Mühit и Aşağı Tez-tez yaxşı xəbərdarlıqlar olur, lakin bu kateqoriyalara daha az dəqiqliyə (etibarlılığa) malik olan diaqnostika daxildir. Windows altında işləmək üçün xəbərdarlıq səviyyələri və seçimləri haqqında daha çox məlumatı burada tapa bilərsiniz: *ağlamaq*.

Ən maraqlı səhvləri uğurla nəzərdən keçirməyə (və onları uğurla düzəltməyə) dəyər qalan xəbərdarlıqları sıxışdırın. Bu, yeni xəbərdarlıqların köhnələr arasında itməməsi üçün lazımdır. Bundan əlavə, statik analizator səhvlərin siyahısı deyil, proqramçı üçün köməkçidir. 🙂

1. Avtomatizasiya

Tanışlıqdan sonra plaginləri konfiqurasiya etmək və CI-yə inteqrasiya etmək vaxtıdır. Bu, proqramçılar statik analizatordan istifadə etməyə başlamazdan əvvəl edilməlidir. Fakt budur ki, proqramçı təhlili aktivləşdirməyi unuda bilər və ya ümumiyyətlə etmək istəməyə bilər. Bunu etmək üçün, sınaqdan keçirilməmiş kodun ümumi inkişaf bölməsinə daxil olmaması üçün hər şeyin son yoxlamasını etməlisiniz.

Bu mərhələdə nə öyrənəcəksiniz:

  • Alət hansı avtomatlaşdırma variantlarını təmin edir;
  • Analizator montaj sisteminizə uyğundurmu?

Mükəmməl sənədlər olmadığı üçün bəzən yazmaq lazımdır dəstək. Bu normaldır və sizə kömək etməkdən məmnunuq. 🙂

İndi davamlı inteqrasiya (CI) xidmətlərinə keçək. Hər hansı bir analizator onlara heç bir ciddi problem olmadan tətbiq edilə bilər. Bunu etmək üçün boru kəmərində ayrı bir mərhələ yaratmalısınız ki, bu da adətən tikinti və bölmə testlərindən sonra yerləşir. Bu, müxtəlif konsol yardım proqramlarından istifadə etməklə edilir. Məsələn, PVS-Studio aşağıdakı kommunalları təqdim edir:

Təhlili CI-yə inteqrasiya etmək üçün siz üç şeyi etməlisiniz:

  • Analizatoru quraşdırın;
  • Təhlil aparın;
  • Nəticələri çatdırın.

Məsələn, PVS-Studio-nu Linux-da (Debian-base) quraşdırmaq üçün aşağıdakı əmrləri yerinə yetirməlisiniz:

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 ilə işləyən sistemlərdə analizatoru paket menecerindən quraşdırmağın heç bir yolu yoxdur, lakin analizatoru komanda xəttindən yerləşdirmək mümkündür:

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

Windows ilə işləyən sistemlərdə PVS-Studio-nun tətbiqi haqqında ətraflı oxuya bilərsiniz *burada*.

Quraşdırıldıqdan sonra təhlili birbaşa işə salmalısınız. Ancaq bunu yalnız tərtib etdikdən və testlərdən keçdikdən sonra etmək tövsiyə olunur. Bunun səbəbi, statik analizin adətən tərtibdən iki dəfə çox vaxt tələb etməsidir.

Başlatma metodu platforma və layihə xüsusiyyətlərindən asılı olduğundan, mən nümunə olaraq C++ (Linux) variantını göstərəcəyəm:

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

Birinci komanda analizi yerinə yetirəcək, ikincisi zərflərhesabatı mətn formatına çevirir, onu ekranda göstərir və xəbərdarlıqlar olduqda 0-dan başqa qaytarma kodunu qaytarır. Səhv mesajları olduqda quruluşu bloklamaq üçün belə bir mexanizm rahat şəkildə istifadə edilə bilər. Bununla belə, siz həmişə bayrağı silə bilərsiniz -w və xəbərdarlıqları ehtiva edən montajı bloklamayın.

Qeyd edək. Mətn formatı əlverişsizdir. Bu, sadəcə olaraq, nümunə kimi təqdim olunur. Daha maraqlı hesabat formatına diqqət yetirin - FullHtml. Bu, kodda naviqasiya etməyə imkan verir.

CI-də təhlilin qurulması haqqında daha çox məqalədə oxuya bilərsiniz "PVS-Studio və Davamlı İnteqrasiya"(Windows) və ya"Travis CI-də PVS-Studio-nu necə qurmaq olar" (Linux).

Yaxşı, siz qurma serverində analizatoru konfiqurasiya etmisiniz. İndi kimsə sınaqdan keçirilməmiş kodu yükləsə, yoxlama mərhələsi uğursuz olacaq və siz problemi aşkar edə biləcəksiniz, lakin bu, tamamilə rahat deyil, çünki filiallar birləşdirildikdən sonra deyil, layihəni yoxlamaq daha səmərəlidir. ondan əvvəl, çəkmə sorğusu mərhələsində A.

Ümumiyyətlə, çəkmə sorğusu təhlilinin qurulması CI-də təhlilin adi işə salınmasından çox da fərqlənmir. Dəyişən faylların siyahısını almaq ehtiyacı istisna olmaqla. Bunları adətən git istifadə edərək filiallar arasındakı fərqləri sorğulamaqla əldə etmək olar:

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

İndi bu faylların siyahısını giriş kimi analizatora ötürməlisiniz. Məsələn, PVS-Studio-da bu, bayraqdan istifadə etməklə həyata keçirilir -S:

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

Siz çəkmə sorğularının təhlili haqqında ətraflı məlumat əldə edə bilərsiniz *burada*. Sizin CI məqalədə göstərilən xidmətlər siyahısında olmasa belə, bu tip təhlilin nəzəriyyəsinə həsr olunmuş ümumi bölməni faydalı tapa bilərsiniz.

Çəkmə sorğularının təhlilini qurmaqla, siz xəbərdarlıqları ehtiva edən öhdəlikləri bloklaya bilərsiniz və bununla da sınaqdan keçirilməmiş kodun keçə bilməyəcəyi sərhəd yarada bilərsiniz.

Bu, əlbəttə ki, yaxşıdır, lakin mən bütün xəbərdarlıqları bir yerdə görmək istərdim. Yalnız statik analizatordan deyil, həm də vahid testlərindən və ya dinamik analizatordan. Bunun üçün müxtəlif xidmətlər və plaginlər var. Məsələn, PVS-Studio var SonarQube-ə inteqrasiya üçün plagin.

2. Developer maşınlarında inteqrasiya

İndi analizatoru gündəlik istifadə üçün quraşdırmaq və konfiqurasiya etmək vaxtıdır. Bu nöqtəyə qədər siz artıq iş üsullarının əksəriyyəti ilə tanış olmusunuz, ona görə də bunu ən asan hissə adlandırmaq olar.

Ən sadə seçim olaraq, tərtibatçılar lazımi analizatoru özləri quraşdıra bilərlər. Bununla belə, bu, çox vaxt aparacaq və onları inkişafdan yayındıracaq, beləliklə, quraşdırıcı və lazımi bayraqlardan istifadə edərək bu prosesi avtomatlaşdıra bilərsiniz. PVS-Studio üçün müxtəlif var avtomatlaşdırılmış quraşdırma üçün bayraqlar. Bununla belə, həmişə paket menecerləri var, məsələn, Chocolatey (Windows), Homebrew (macOS) və ya Linux üçün onlarla seçim.

Sonra, məsələn, üçün lazımi plaginləri quraşdırmalı olacaqsınız Visual Studio, İDEA, atlı s.

3. Gündəlik istifadə

Bu mərhələdə, gündəlik istifadə zamanı analizatoru sürətləndirməyin yolları haqqında bir neçə söz söyləməyin vaxtı gəldi. Bütün layihənin tam təhlili çox vaxt aparır, lakin biz bir anda bütün layihə üzrə kodu nə qədər tez-tez dəyişirik? Demək olar ki, bütün kod bazasına dərhal təsir edəcək qədər böyük refaktorinq yoxdur. Bir anda dəyişdirilən faylların sayı nadir hallarda ondan çox olur, ona görə də onları təhlil etməyin mənası var. Belə bir vəziyyət üçün var artımlı analiz rejimi. Sadəcə narahat olmayın, bu başqa bir vasitə deyil. Bu, yalnız dəyişdirilmiş faylları və onların asılılıqlarını təhlil etməyə imkan verən xüsusi rejimdir və bu, quraşdırılmış plugin ilə IDE-də işləyirsinizsə, qurduqdan sonra avtomatik olaraq baş verir.

Analizator bu yaxınlarda dəyişdirilmiş kodda problem aşkar edərsə, bu barədə müstəqil olaraq məlumat verəcəkdir. Məsələn, PVS-Studio bir xəbərdarlıqdan istifadə edərək bu barədə sizə məlumat verəcəkdir:

Statik təhlil - girişdən inteqrasiyaya qədər
Əlbəttə ki, tərtibatçılara alətdən istifadə etməyi söyləmək kifayət deyil. Biz bir şəkildə onlara bunun nə olduğunu və necə olduğunu söyləməliyik. Burada, məsələn, PVS-Studio üçün sürətli başlanğıc haqqında məqalələr var, lakin siz istədiyiniz hər hansı alət üçün oxşar dərslikləri tapa bilərsiniz:

Bu cür məqalələr gündəlik istifadə üçün lazım olan bütün məlumatları verir və çox vaxt tələb etmir. 🙂

Alətlə tanış olma mərhələsində belə, ilk buraxılışlardan birində bir çox xəbərdarlıqları yatırdıq. Təəssüf ki, statik analizatorlar mükəmməl deyillər, ona görə də zaman-zaman yalançı pozitivlər verirlər. Onları sıxışdırmaq adətən asandır; məsələn, Visual Studio üçün PVS-Studio plaginində sadəcə bir düyməni sıxmaq kifayətdir:

Statik təhlil - girişdən inteqrasiyaya qədər
Bununla belə, onları yatırtmaqdan daha çox şey edə bilərsiniz. Məsələn, problemi dəstəyə bildirə bilərsiniz. Yanlış müsbət düzəldilə bilərsə, gələcək yeniləmələrdə hər dəfə kod bazanıza xas olan daha az və daha az yalan pozitivlərin olduğunu görə bilərsiniz.

İnteqrasiyadan sonra

Beləliklə, biz statik təhlilin inkişaf prosesinə inteqrasiyasının bütün mərhələlərini keçdik. CI-də bu cür vasitələrin qurulmasının vacibliyinə baxmayaraq, onları işə salmaq üçün ən vacib yer tərtibatçının kompüteridir. Axı, statik analizator sizdən uzaq bir yerdə kodun yaxşı olmadığını söyləyən hakim deyil. Əksinə, yorulduğunuzu bildirən, nəyisə unutduğunuzu xatırladan köməkçidir.

Düzdür, müntəzəm istifadə olmadan, statik analizin inkişafı əhəmiyyətli dərəcədə asanlaşdırmaq mümkün deyil. Axı, onun tərtibatçı üçün əsas faydası kodun mürəkkəb və mübahisəli bölmələrinin axtarışında deyil, onların erkən aşkarlanmasındadır. Razılaşın ki, düzəlişlər sınaq üçün göndərildikdən sonra problem aşkar etmək nəinki xoşagəlməz, həm də çox vaxt aparır. Statik analiz, müntəzəm olaraq istifadə edildikdə, hər bir dəyişikliyə birbaşa kompüterinizdə baxır və kod üzərində işləyərkən şübhəli yerləri bildirir.

Əgər siz və ya həmkarlarınız hələ də analizatoru tətbiq etməyə dəyər olub olmadığına əmin deyilsinizsə, o zaman məqaləni oxumağa başlamağı təklif edirəm "Statik kod analizatoru PVS-Studio-nun inkişaf prosesinə daxil edilməsinin səbəbləri". O, tərtibatçıların statik təhlilin onların vaxtını alacağına dair tipik narahatlıqlarını həll edir və s.

Statik təhlil - girişdən inteqrasiyaya qədər

Bu məqaləni ingilisdilli auditoriya ilə bölüşmək istəyirsinizsə, tərcümə linkindən istifadə edin: Maksim Zvyagintsev. Statik Analiz: Başlanğıcdan İnteqrasiyaya qədər.

Mənbə: www.habr.com

Добавить комментарий