የ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, ለዚያ ነው መኪና. ነገር ግን ፒቪኤስ የሚከተሉትን መልዕክቶች አዘጋጅቷል፡-

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

ከዚህ በፊት ያልነበሩ አንዳንድ "ደረጃዎች" እዚህ ታዩ፣ እና በሰነዱ ውስጥም ስለእነሱ ምንም አላገኘሁም።

በአጠቃላይ, ግልጽ አይደለም. ለዚህ ነው ሁሉንም ነገር ወደ ከፍተኛው ያዘጋጀሁት።

በ Catch ላይ የሞኝ መሳደብ

ከተተነተንኳቸው ሶስት ፕሮጀክቶች ውስጥ ሁለቱ የአሃድ ሙከራ ቤተ-መጽሐፍትን ይጠቀማሉ ያዝ2. የአንበሳውን ድርሻ ይይዛል (!!! 90 ከ 138 በአንድ እና 297 ከ 344 በሌላ!!!) የሚከተለው መልክ አላቸው።

የPVS-ስቱዲዮ (ሊኑክስ፣ ሲ++) ገለልተኛ ግምገማ

ባለብዙ ክር ንባብን ግምት ውስጥ አያስገባም።

የማይለወጡ ተለዋዋጮች ወይም ማለቂያ ስለሌላቸው ዑደቶች ብዙ የተሳሳቱ አዎንታዊዎች አሉ፣ ከእነዚህ ተለዋዋጮች ጋር መስራት ከተለያዩ ክሮች ውስጥ ይከሰታል፣ እና ይህ ካልሆነ፣ የዩኒት ሙከራዎች አይሰራም።

የPVS-ስቱዲዮ (ሊኑክስ፣ ሲ++) ገለልተኛ ግምገማ

ሆኖም ፣ የማይንቀሳቀስ ተንታኝ ይህንን እንኳን ከግምት ውስጥ ማስገባት ይችላል? አላውቅም.

ውጤቶች

PVS በክፍት ምንጭ ፕሮጄክቶቼ ውስጥ ምንም እውነተኛ ሳንካዎችን አላገኘም። ይፈነዳል и ፕሮክሲማ, እንዲሁም በሥራ ረቂቅ ውስጥ, ግልጽ በሆኑ ምክንያቶች, ማቅረብ አልችልም. እውነት ነው, አንዳንድ ድክመቶች ቀደም ብለው ተጠቅመው ተይዘው የተስተካከሉ መሆናቸውን ማስታወስ ጠቃሚ ነው ሲፒኬክ и 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

በፕሮጀክትህ ውስጥ አንቃቸው እና ስለ ኮድህ ብዙ ተማር።

ከደረጃው ጋር መጣበቅ

መደበኛ አናሎጎች ካሉ ከመድረክ ላይ ጥገኛ የሆኑ ነገሮችን ላለመጠቀም ይሞክሩ እና ያለእነሱ በፍጹም ማድረግ ካልቻሉ ለማክሮዎች (ወይም ሌላ ነገር) በልዩ ብሎኮች ጠቅልለው በቀላሉ ኮድዎን በማይደገፉ ሁኔታዎች ውስጥ እንዲጠናቀር አይፍቀዱ።

ከመደበኛ ኦፕሬሽን ፍቺዎች ጋር መጣበቅ

መደመር መደመር፣ ማባዛት ማባዛት፣ የተግባር ጥሪ ተግባር ጥሪ መሆን አለበት፣ ኮፒ መሆን አለበት፣ መሸከም አለበት፣ ኮንቴይነሩ የሚደጋገም፣ ተደጋጋሚ ፕሮሞሽን ሊኖረው ይገባል። ++ እና መሰረዝ *. እና ወዘተ.

ሀሳቡ ግልፅ ነው ብዬ አስባለሁ። አስገዳጅ ያልሆኑ፣ ነገር ግን ሁሉም የኮድዎ ተጠቃሚዎች እና አንባቢዎች ለማየት የሚጠብቁ የተቋቋሙ ስምምነቶች አሉ። ሌሎችን ለማታለል አትሞክር አለበለዚያ እራስህን ታታልላለህ።

ተስማሚ ኮድ ይፃፉ

በመጀመሪያ ደረጃ መደበኛ ቤተ መጻሕፍት ማለቴ ነው። የክፍሎችዎ እና የተግባሮችዎ በይነገጾች ከመደበኛ እና ከሌሎች ቤተ-መጻሕፍት (ለምሳሌ ማበልጸጊያ) ጋር መጠቀም መቻላቸው በጣም የሚፈለግ ነው።

የ STL እና Boost መገናኛዎችን ለማየት ነፃነት ይሰማህ። ከስንት ለየት ያሉ ሁኔታዎች፣ እዚያ ብቁ የሆነ አርአያ ታያለህ።

ከክፍት ምንጭ መሳሪያዎች ምርጡን ይጠቀሙ

ለተመሳሳይ የማይንቀሳቀስ ትንተና፣ ከሲኤምኤክ ግንባታ ስርዓት ጋር ወደ ማንኛውም ፕሮጀክት አንድ ጊዜ ብቻ ሊገናኙ የሚችሉ ቢያንስ ሁለት ክፍት የሆኑ መሳሪያዎች አሉ።

በቅርብ ጽሑፌ ውስጥ ስለዚህ ጉዳይ የበለጠ ማንበብ ይችላሉ።.

ከቃል በኋላ

በመጨረሻም፣ እኔ PVS ወይም ሌላ ማንኛውንም የማይንቀሳቀስ ተንታኝ እንዳንጠቀም እየመከርኩ እንዳልሆነ አፅንዖት መስጠት እፈልጋለሁ። ነገር ግን የማይንቀሳቀስ ተንታኝ በኮድዎ ውስጥ ጉልህ ስህተቶችን ሲያገኝ እንዴት እንደተፈጠረ እንዲያስቡ አበረታታለሁ።

ይህ መዘዝ ብቻ ነው። መንስኤውን መፈለግ እና ማስወገድ አለብን.

ምንጭ: hab.com

አስተያየት ያክሉ