PVS-ஸ்டுடியோவின் சுயாதீன மதிப்பாய்வு (லினக்ஸ், சி++)

PVS லினக்ஸின் கீழ் பகுப்பாய்வு செய்யக் கற்றுக்கொண்ட ஒரு வெளியீட்டைப் பார்த்தேன், அதை எனது சொந்த திட்டங்களில் முயற்சிக்க முடிவு செய்தேன். அதிலிருந்து வெளிவந்தது இதுதான்.


உள்ளடக்கம்

  1. Плюсы
  2. Минусы
  3. முடிவுகளை
  4. பின்னுரை

Плюсы

பதிலளிக்கக்கூடிய ஆதரவு

நான் ஒரு சோதனை சாவியைக் கோரினேன், அவர்கள் அதை அன்றே எனக்கு அனுப்பினார்கள்.

மிகவும் தெளிவான ஆவணங்கள்

எந்த பிரச்சனையும் இல்லாமல் பகுப்பாய்வியைத் தொடங்க முடிந்தது. கன்சோல் கட்டளைகளுக்கான உதவியும் கிடைக்கிறது (இங்கு சில புகார்கள் இருந்தாலும், பகுதியைப் பார்க்கவும் Минусы).

பல திரிக்கப்பட்ட பகுப்பாய்வு சாத்தியம்

பகுப்பாய்விக்கு "நிலையான" விருப்பம் உள்ளது -j, பல பணிகளில் இணையாக பகுப்பாய்வு செய்ய அனுமதிக்கிறது. இதனால் நிறைய நேரம் மிச்சமாகும்.

நல்ல காட்சிப்படுத்தல்

உரையிலிருந்து சிறிய வலை முகவாய் வரை பல வேறுபட்ட வெளியீட்டு வடிவங்கள். வலை இடைமுகம் வசதியானது, சுருக்கமானது, குறியீட்டில் உள்ள வரிகளுக்கு அடுத்துள்ள குறிப்புகள் மற்றும் கண்டறியும் விளக்கங்களுக்கான இணைப்புகள்.

சட்டசபையில் எளிதான ஒருங்கிணைப்பு

அனைத்து ஆவணங்களும் அவர்களின் இணையதளத்தில் உள்ளன, உங்கள் திட்டம் CMake ஐப் பயன்படுத்தி கட்டமைக்கப்பட்டிருந்தால், எல்லாம் மிகவும் எளிமையானது என்று மட்டுமே சொல்ல முடியும்.

நல்ல நோயறிதல் விளக்கங்கள்

நீங்கள் பயன்முறையில் வெளியீட்டை உருவாக்கினால் fullhtml, பின்னர் ஒவ்வொரு செய்திக்கும் விளக்கங்கள், குறியீடு எடுத்துக்காட்டுகள் மற்றும் கூடுதல் இணைப்புகளுடன் கண்டறியும் விளக்கத்திற்கான இணைப்பு உள்ளது.

Минусы

பகுப்பாய்வி மூலம் C++ மொழியின் அறியாமை

துரதிர்ஷ்டவசமாக, PVS சில நேரங்களில் தொடரியல் பிழைகளை உருவாக்குகிறது மற்றும் குறியீடு முற்றிலும் சரியாக இருக்கும்போது தவறான நேர்மறை செய்திகளை உருவாக்குகிறது.

எடுத்துக்காட்டாக, திரும்பும் செயல்பாடு உள்ளது void:

template <typename T>
auto copy (const void * source, void * destination)
    ->
        std::enable_if_t
        <
            std::is_copy_constructible<T>::value
        >
{
    new (destination) T(*static_cast<const T *>(source));
}

ஆம் என்பது முக்கிய வார்த்தை auto பொருள் கொள்ளலாம் void, அது எதற்காக கார். ஆனால் PVS பின்வரும் செய்திகளை உருவாக்கியது:

dynamic_tuple_management.hpp:29:1: error: V591 Non-void function should return a value.
dynamic_tuple_management.hpp:29:1: error: V2542 Function with a non-void return type should return a value from all exit paths.

மிகவும் மெதுவான தளம்

ஆம், ஒவ்வொரு செய்திக்கும் அடுத்த இணைய இடைமுகத்தில் எடுத்துக்காட்டுகளுடன் தொடர்புடைய கண்டறியும் விளக்கத்திற்கான இணைப்பு உள்ளது. ஆனால் நீங்கள் ஒரு இணைப்பைக் கிளிக் செய்தால், நீங்கள் நீண்ட நேரம் காத்திருக்க வேண்டும், சில சமயங்களில் அது நடக்கும் 504 கேட்வே டைம்-அவுட்.

மொழி

அனைத்து விளக்கங்களும் ரஷ்ய மொழியில் உள்ளன, இது சிறந்தது. ஆனால் அறிக்கையின் இணைப்புகள் எப்போதும் ஆங்கிலப் பதிப்பிற்கு வழிவகுக்கும். மொழியை மாற்றுவது நன்றாக இருக்கும், இதன் மூலம் நீங்கள் உடனடியாக ரஷ்ய மொழியில் கண்டறியலாம். இடைமுகத்தில் அத்தகைய விருப்பத்தை நான் காணவில்லை.

கன்சோல் மூலம் கண்டறியும் நிலைகளுடன் வேலை செய்வது சிரமமாக உள்ளது

இரண்டு கட்டளைகள் பயன்படுத்தப்பட்டன என்ற உண்மையுடன் ஆரம்பிக்கலாம் (இது pvs-studio-analyzer и plog-converter) நோயறிதலைக் குறிப்பிடுவதற்கான வெவ்வேறு வடிவங்கள்.

க்கான உதவி pvs-studio-analyzer படிக்கிறது:

-a [MODE], --analysis-mode [MODE]
    MODE defines the type of warnings:
    1 - 64-bit errors;
    2 - reserved;
    4 - General Analysis;
    8 - Micro-optimizations;
    16 - Customers Specific Requests;
    32 - MISRA.
    Modes can be combined by adding the values
    Default: 4

எங்கு செல்வது என்று நீண்ட நேரம் யோசித்தேன் சேர்க்க ("மதிப்புகளைச் சேர்த்தல்") விசைகள். நான் அவற்றை காற்புள்ளிகளால் பிரிக்க முயற்சித்தேன்:

pvs-studio-analyzer analyze ... -a 1,4,16

நான் பல முறை விசையை பதிவு செய்ய முயற்சித்தேன்:

pvs-studio-analyzer analyze ... -a 1 -a 4 -a 16

அப்போதுதான் இவை பிட் முகமூடிகள் என்பதை உணர்ந்தேன்! மற்றும் உங்களுக்கு வேண்டும் சுருக்கமாகமற்றும் இல்லை சேர்க்க அர்த்தங்கள். எடுத்துக்காட்டாக, பொதுவான நோயறிதல், மைக்ரோ-ஆப்டிமைசேஷன் மற்றும் MISRA க்கான கண்டறிதல் ஆகியவற்றைப் பெற, நீங்கள் அவற்றைச் சுருக்க வேண்டும் (4 + 8 + 32 = 44):

pvs-studio-analyzer analyze ... -a 44

பயனர் இடைமுகங்களில் பிட்மாஸ்க்களைப் பயன்படுத்துவது பொதுவாக மோசமான வடிவமாகும். இவை அனைத்தையும் உள்நாட்டில் தொகுக்கலாம், மேலும் பயனருக்கான கொடிகளின் தொகுப்பை அமைக்கலாம்.

கூடுதலாக, ஒரு பயன்பாடும் உள்ளது plog-converter, இது மனிதனால் படிக்கக்கூடிய நிலையான பகுப்பாய்வு தகவலை உருவாக்குகிறது. அவளுக்கு வேறு பிரச்சினைகள் உள்ளன.

திட்டத்திற்கான உதவி plog-converter அறிக்கைகள்:

-a, --analyzer            Specifies analyzer(s) and level(s) to be
                          used for filtering, i.e.
                          'GA:1,2;64:1;OP:1,2,3;CS:1;MISRA:1,2'
                          Default: GA:1,2

இதற்கு முன் இல்லாத சில "நிலைகள்" இங்கே தோன்றின, மேலும் ஆவணங்களில் அவற்றைப் பற்றி எதையும் நான் காணவில்லை.

பொதுவாக, இது தெளிவாக இல்லை. அதனால்தான் எல்லாவற்றையும் அதிகபட்சமாக அமைத்தேன்.

கேட்ச் மீது முட்டாள்தனமான சத்தியம்

நான் பகுப்பாய்வு செய்த மூன்று திட்டங்களில் இரண்டு அலகு சோதனை நூலகத்தைப் பயன்படுத்துகின்றன பிடி 2. மேலும் செய்திகளின் சிங்கப் பங்கு (!!! ஒன்றில் 90 இல் 138 மற்றும் மற்றொன்றில் 297 இல் 344!!!) பின்வரும் படிவத்தைக் கொண்டுள்ளது:

PVS-ஸ்டுடியோவின் சுயாதீன மதிப்பாய்வு (லினக்ஸ், சி++)

மல்டித்ரெடிங்கை கணக்கில் எடுத்துக்கொள்ளவில்லை

மாறாத மாறிகள் அல்லது முடிவற்ற சுழல்கள் பற்றி பல தவறான நேர்மறைகள் உள்ளன, அதே சமயம் இந்த மாறிகளுடன் வேலை வெவ்வேறு நூல்களில் இருந்து நிகழ்கிறது, இது அவ்வாறு இல்லையென்றால், அலகு சோதனைகள் வேலை செய்யாது.

PVS-ஸ்டுடியோவின் சுயாதீன மதிப்பாய்வு (லினக்ஸ், சி++)

இருப்பினும், ஒரு நிலையான பகுப்பாய்வி இதை கணக்கில் எடுத்துக்கொள்ள முடியுமா? தெரியாது.

முடிவுகளை

எனது திறந்த மூல திட்டங்களில் உண்மையான பிழைகள் எதையும் PVS கண்டறியவில்லை பர்ஸ்ட் и ப்ராக்ஸிமா, அத்துடன் வேலை செய்யும் வரைவில், வெளிப்படையான காரணங்களுக்காக, என்னால் முன்வைக்க முடியாது. உண்மை, சில குறைபாடுகள் ஏற்கனவே பிடிபட்டது மற்றும் ஏற்கனவே பயன்படுத்தி சரி செய்யப்பட்டது என்பதை நினைவில் கொள்வது மதிப்பு Cppcheck и scan-build.

பொதுவாக, இந்த அனைத்து பகுப்பாய்விகளின் தோற்றமும் தோராயமாக ஒரே மாதிரியாக இருக்கும்: ஆம், அவர்கள் எதையாவது பிடிக்கிறார்கள், சில சமயங்களில் முக்கியமான ஒன்று கூட, ஆனால் ஒட்டுமொத்தமாக கம்பைலர் போதுமானது.

எங்கள் குழு மென்பொருள் மேம்பாட்டு நடைமுறைகளைப் பயன்படுத்துவது சாத்தியம் (மற்றும் நான் தனிப்பட்ட முறையில் அவ்வாறு நினைக்க விரும்புகிறேன்), இது குறைந்தபட்ச அளவு மோசமான குறியீட்டை உருவாக்க அனுமதிக்கிறது. பிரச்சனைகளை வீரமாக சமாளிப்பதை விட பிரச்சனைகளை உருவாக்காமல் இருப்பது நல்லது.

எனவே, யாருடைய கால்களையும் சுடாத வகையில், யாருடைய நெற்றியில் ரேக் அடிக்காத வகையில், C++ இல் எழுதுவது எப்படி என்று சில அறிவுரைகளை வழங்க நான் சுதந்திரமாக இருக்கிறேன்.

கம்பைலர் கண்டறிதலை அதிகம் பயன்படுத்தவும்

எங்கள் குழு பின்வரும் தொகுப்பு விருப்பங்களைப் பயன்படுத்துகிறது (மற்றும் உங்களுக்கு அறிவுறுத்துகிறது):

-Werror

-Wall
-Wextra
-Wpedantic

-Wcast-align
-Wcast-qual
-Wconversion
-Wctor-dtor-privacy
-Wenum-compare
-Wfloat-equal
-Wnon-virtual-dtor
-Wold-style-cast
-Woverloaded-virtual
-Wredundant-decls
-Wsign-conversion
-Wsign-promo

உங்கள் திட்டத்தில் அவற்றை இயக்கி, உங்கள் குறியீட்டைப் பற்றி நிறைய கற்றுக்கொள்ளுங்கள்.

தரத்தில் ஒட்டிக்கொள்

நிலையான ஒப்புமைகள் இருந்தால், பிளாட்ஃபார்ம் சார்ந்த விஷயங்களைப் பயன்படுத்த வேண்டாம், மேலும் அவை இல்லாமல் உங்களால் செய்ய முடியாவிட்டால், அவற்றை மேக்ரோக்களுக்கான சிறப்புத் தொகுதிகளில் (அல்லது வேறு ஏதாவது) போர்த்தி, ஆதரிக்கப்படாத நிலைமைகளின் கீழ் உங்கள் குறியீட்டைத் தொகுக்க அனுமதிக்காதீர்கள்.

நிலையான செயல்பாட்டு சொற்பொருளில் ஒட்டிக்கொள்க

கூட்டல் கூட்டலாக இருக்க வேண்டும், பெருக்கல் பெருக்கலாக இருக்க வேண்டும், செயல்பாட்டு அழைப்பு செயல்பாட்டு அழைப்பாக இருக்க வேண்டும், நகலெடுக்க வேண்டும், எடுத்துச் செல்ல வேண்டும், கொள்கலன் திரும்பச் செல்லக்கூடியதாக இருக்க வேண்டும், மீண்டும் செய்பவருக்கு பதவி உயர்வு இருக்க வேண்டும் ++ மற்றும் dereferencing *. மற்றும் பல.

யோசனை தெளிவாக இருப்பதாக நினைக்கிறேன். கட்டமைக்கப்படாத மரபுகள் உள்ளன, ஆனால் உங்கள் குறியீட்டின் அனைத்து பயனர்களும் வாசகர்களும் பார்க்க எதிர்பார்க்கிறார்கள். மற்றவர்களை விஞ்ச முயற்சிக்காதீர்கள், இல்லையெனில் உங்களை நீங்களே விஞ்சிவிடுவீர்கள்.

இணக்கமான குறியீட்டை எழுதவும்

முதலில், நான் நிலையான நூலகத்தை சொல்கிறேன். உங்கள் வகுப்புகள் மற்றும் செயல்பாடுகளின் இடைமுகங்கள் நிலையான மற்றும் பிற நூலகங்களுடன் பயன்படுத்தப்படுவது மிகவும் விரும்பத்தக்கது (உதாரணமாக, பூஸ்ட்).

STL மற்றும் பூஸ்ட் இடைமுகங்களைப் பார்க்க தயங்க வேண்டாம். அரிதான விதிவிலக்குகளுடன், நீங்கள் ஒரு தகுதியான முன்மாதிரியைக் காண்பீர்கள்.

திறந்த மூலக் கருவிகளைப் பயன்படுத்திக் கொள்ளுங்கள்

அதே நிலையான பகுப்பாய்விற்கு, CMake பில்ட் சிஸ்டம் மூலம் எந்தவொரு திட்டத்திற்கும் ஒருமுறை மட்டுமே இணைக்கக்கூடிய குறைந்தபட்சம் இரண்டு திறந்த இலவச கருவிகள் உள்ளன.

எனது சமீபத்திய வெளியீட்டில் இதைப் பற்றி மேலும் படிக்கலாம்.

பின்னுரை

இறுதியாக, நான் PVS அல்லது வேறு எந்த நிலையான பகுப்பாய்விகளையும் பயன்படுத்த வேண்டாம் என்று பரிந்துரைக்கவில்லை என்பதை வலியுறுத்த விரும்புகிறேன். ஆனால் உங்கள் குறியீட்டில் நிலையான பகுப்பாய்வி தொடர்ந்து குறிப்பிடத்தக்க பிழைகளைக் கண்டறிவது எப்படி நடந்தது என்பதைப் பற்றி சிந்திக்க நான் உங்களை ஊக்குவிக்கிறேன்.

இது ஒரு விளைவு மட்டுமே. அதற்கான காரணத்தைக் கண்டுபிடித்து அகற்ற வேண்டும்.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்