දෝෂ සෙවීමට එය භාවිතා කරනවාට වඩා ක්‍රියාවලියට ස්ථිතික විශ්ලේෂණය ක්‍රියාත්මක කරන්න

මෙම ලිපිය ලිවීමට මා පොළඹවන ලද්දේ වැඩි වැඩියෙන් මගේ අවධානයට ලක්වන ස්ථිතික විශ්ලේෂණය පිළිබඳ ද්‍රව්‍ය විශාල ප්‍රමාණයක් මගිනි. පළමුව, මෙය PVS-studio බ්ලොග්, විවෘත මූලාශ්‍ර ව්‍යාපෘතිවල ඔවුන්ගේ මෙවලම මගින් සොයා ගන්නා ලද දෝෂ සමාලෝචන ආධාරයෙන් Habré මත සක්‍රියව ප්‍රවර්ධනය කරයි. මෑතකදී PVS-studio ක්රියාත්මක කරන ලදී ජාවා සහාය, සහ, ඇත්ත වශයෙන්ම, IntelliJ IDEA හි සංවර්ධකයින්, ඔවුන්ගේ බිල්ට් විශ්ලේෂකය අද ජාවා සඳහා වඩාත්ම දියුණු, අහක ඉන්න බැරි වුණා.

එවැනි සමාලෝචන කියවන විට, අපි මැජික් එලික්සර් ගැන කතා කරන බව ඔබට හැඟේ: බොත්තම ඔබන්න, මෙන්න එය - ඔබේ ඇස් ඉදිරිපිට ඇති අඩුපාඩු ලැයිස්තුවක්. විශ්ලේෂකයින් වැඩි දියුණු වන විට, වැඩි වැඩියෙන් දෝෂ ස්වයංක්‍රීයව සොයා ගන්නා බව පෙනේ, මෙම රොබෝවරුන් විසින් පරිලෝකනය කරන ලද නිෂ්පාදන අපගේ පැත්තෙන් කිසිදු උත්සාහයකින් තොරව වඩා හොඳ සහ වඩා හොඳ වනු ඇත.

නමුත් මැජික් අමෘත නැත. "මෙන්න අපේ රොබෝවරයාට සොයා ගත හැකි දේවල්": විශ්ලේෂකයින්ට කළ නොහැකි දේ, මෘදුකාංග බෙදා හැරීමේ ක්‍රියාවලියේ ඔවුන්ගේ සැබෑ භූමිකාව සහ ස්ථානය සහ ඒවා නිවැරදිව ක්‍රියාත්මක කරන්නේ කෙසේද වැනි පෝස්ට් වල සාමාන්‍යයෙන් කතා නොකරන දේ ගැන කතා කිරීමට මම කැමතියි. .

දෝෂ සෙවීමට එය භාවිතා කරනවාට වඩා ක්‍රියාවලියට ස්ථිතික විශ්ලේෂණය ක්‍රියාත්මක කරන්න
Ratchet (මූලාශ්රය: විකිපීඩියා).

ස්ථිතික විශ්ලේෂකයින්ට කිසිදා කළ නොහැකි දේ

ප්‍රයෝගික දෘෂ්ටි කෝණයකින් මූලාශ්‍ර කේත විශ්ලේෂණය යනු කුමක්ද? අපි යම් ප්‍රභව කේතයක් ආදානය ලෙස සපයන අතර, ප්‍රතිදානය ලෙස, කෙටි කාලයකදී (ධාවන පරීක්ෂණවලට වඩා ඉතා කෙටි) අපි අපගේ පද්ධතිය පිළිබඳ යම් තොරතුරු ලබා ගනිමු. මූලික හා ගණිතමය වශයෙන් ජයගත නොහැකි සීමාව වන්නේ මේ ආකාරයෙන් අපට ලබා ගත හැක්කේ තරමක් පටු තොරතුරු පන්තියක් පමණි.

ස්ථිතික විශ්ලේෂණය භාවිතයෙන් විසඳිය නොහැකි ගැටලුවක් පිළිබඳ වඩාත් ප්රසිද්ධ උදාහරණය වේ වසා දැමීමේ ගැටලුව: මෙය ප්‍රමේයයක් වන අතර එය වැඩසටහනක ප්‍රභව කේතයෙන් එය සීමිත කාලයකින් ලූප් වේද නැතහොත් අවසන් වේද යන්න තීරණය කළ හැකි සාමාන්‍ය ඇල්ගොරිතමයක් සංවර්ධනය කළ නොහැකි බව සනාථ කරයි. මෙම ප්‍රමේයයේ දිගුවකි සහල් ප්‍රමේයය, ගණනය කළ හැකි ශ්‍රිතවල ඕනෑම සුළු නොවන දේපලක් සඳහා, අත්තනෝමතික වැඩසටහනක් එවැනි දේපලක් සහිත ශ්‍රිතයක් ඇගයීමට ලක් කරන්නේද යන්න තීරණය කිරීම ඇල්ගොරිතමය වශයෙන් විසඳිය නොහැකි ගැටළුවක් බව සඳහන් කරයි. උදාහරණයක් ලෙස, විශ්ලේෂණය කරනු ලබන වැඩසටහන පූර්ණ සංඛ්‍යාවක වර්ග කිරීම ගණනය කරන ඇල්ගොරිතමයක් ක්‍රියාත්මක කිරීමක් ද යන්න ඕනෑම මූල කේතයකින් තීරණය කළ හැකි විශ්ලේෂකයක් ලිවීමට නොහැක.

මේ අනුව, ස්ථිතික විශ්ලේෂකවල ක්රියාකාරිත්වය ජයගත නොහැකි සීමාවන් ඇත. ස්ථිතික විශ්ලේෂකයෙකුට කිසිවිටෙකත් ශුන්‍ය අගයට ඉඩ සලසන භාෂාවලින් "ශුන්‍ය ලක්ෂ්‍ය ව්‍යතිරේකයක්" ඇතිවීම වැනි දේ හෝ සෑම අවස්ථාවකදීම "" සිදුවීම තීරණය කිරීම වැනි දේ හඳුනා ගැනීමට නොහැකි වනු ඇත. ගතිකය සොයාගත නොහැක" ගතිකව ටයිප් කළ භාෂාවලින්. වඩාත්ම දියුණු ස්ථිතික විශ්ලේෂකයට කළ හැක්කේ විශේෂ අවස්ථා ඉස්මතු කිරීම පමණි, ඔබේ ප්‍රභව කේතය සමඟ ඇති විය හැකි සියලු ගැටලු අතර, ඒවායින් සංඛ්‍යාව, අතිශයෝක්තියකින් තොරව, බාල්දියේ පහත වැටීමකි.

ස්ථිතික විශ්ලේෂණය යනු දෝෂ සෙවීම නොවේ

ඉහතින්, නිගමනය පහත පරිදි වේ: ස්ථිතික විශ්ලේෂණය යනු වැඩසටහනක ඇති දෝෂ ගණන අඩු කිරීමේ මාධ්‍යයක් නොවේ. මම කියන්නට උත්සාහ කරමි: ඔබේ ව්‍යාපෘතියට පළමු වරට අයදුම් කළ විට, එය කේතයේ “සිත්ගන්නා” ස්ථාන සොයා ගනු ඇත, නමුත්, බොහෝ දුරට, එය ඔබේ වැඩසටහනේ ගුණාත්මක භාවයට බලපාන කිසිදු දෝෂයක් සොයා නොගනු ඇත.

විශ්ලේෂකයින් විසින් ස්වයංක්‍රීයව සොයාගත් දෝෂ පිළිබඳ උදාහරණ සිත් ඇදගන්නා සුළු ය, නමුත් මෙම උදාහරණ විශාල කේත පදනමක් පරිලෝකනය කිරීමෙන් සොයාගත් බව අප අමතක නොකළ යුතුය. එකම මූලධර්මය අනුව, විශාල ගිණුම් ගණනක සරල මුරපද කිහිපයක් උත්සාහ කිරීමට අවස්ථාව ඇති හැකර්වරුන් අවසානයේ සරල මුරපදයක් ඇති ගිණුම් සොයා ගනී.

මෙයින් අදහස් කරන්නේ ස්ථිතික විශ්ලේෂණය භාවිතා නොකළ යුතුද? ඇත්ත වශයෙන්ම නැත! “සරල” මුරපද නැවතුම් ලැයිස්තුවට ඇතුළත් කර ඇති බවට වග බලා ගැනීම සඳහා සෑම නව මුරපදයක්ම පරීක්ෂා කිරීම වටී යන එකම හේතුව නිසා.

ස්ථිතික විශ්ලේෂණය දෝෂ සොයා ගැනීමට වඩා වැඩි ය

ඇත්ත වශයෙන්ම, විශ්ලේෂණය මගින් ප්රායෝගිකව විසඳා ඇති ගැටළු වඩා පුළුල් ය. පොදුවේ ගත් කල, ස්ථිතික විශ්ලේෂණය යනු මූල කේත දියත් කිරීමට පෙර සිදු කරන ලද ඕනෑම සත්‍යාපනයකි. ඔබට කළ හැකි දේවල් කිහිපයක් මෙන්න:

  • වචනයේ පුළුල්ම අර්ථයෙන් කේතීකරණ විලාසය පරීක්ෂා කිරීම. මෙයට හැඩතල ගැන්වීම පරීක්ෂා කිරීම, හිස්/අමතර වරහන් භාවිතය සෙවීම, ක්‍රමයක රේඛා ගණන/චක්‍රීය සංකීර්ණත්වය වැනි ප්‍රමිතික මත සීමාවන් සැකසීම යන දෙකම ඇතුළත් වේ - කේතයේ කියවීමේ හැකියාව සහ නඩත්තු කිරීමේ හැකියාවට බාධාවක් විය හැකි ඕනෑම දෙයක්. ජාවා හි, එවැනි මෙවලමක් වන්නේ චෙක්ස්ටයිල්, පයිතන් හි - ෆ්ලේක් 8 ය. මෙම පන්තියේ වැඩසටහන් සාමාන්යයෙන් "ලින්ටර්" ලෙස හැඳින්වේ.
  • ක්‍රියාත්මක කළ හැකි කේතය පමණක් නොව විශ්ලේෂණය කළ හැකිය. JSON, YAML, XML, .properties වැනි සම්පත් ගොනු වලංගුභාවය සඳහා ස්වයංක්‍රීයව පරීක්ෂා කළ හැක (සහ කළ යුතුය!). සියල්ලට පසු, පරීක්ෂණ ක්‍රියාත්මක කිරීමේදී හෝ ධාවන කාලයට වඩා ස්වයංක්‍රීය පුල් ඉල්ලීම් සත්‍යාපනයේ මුල් අවධියේදී යුගල නොකළ උපුටා දැක්වීම් කිහිපයක් හේතුවෙන් JSON ව්‍යුහය කැඩී ඇති බව සොයා ගැනීම වඩා හොඳය? සුදුසු මෙවලම් තිබේ: උදා. YAMLlint, JSONLint.
  • සම්පාදනය (හෝ ගතික ක්‍රමලේඛන භාෂා සඳහා විග්‍රහ කිරීම) ද ස්ථිතික විශ්ලේෂණ වර්ගයකි. සාමාන්‍යයෙන්, සම්පාදකයින්ට ප්‍රභව කේත ගුණාත්මක භාවය පිළිබඳ ගැටළු පෙන්නුම් කරන අනතුරු ඇඟවීම් නිපදවීමට හැකියාව ඇති අතර නොසලකා හැරිය යුතු නොවේ.
  • සමහර විට සම්පාදනය යනු ක්‍රියාත්මක කළ හැකි කේතය සම්පාදනය කිරීමට වඩා වැඩි ය. උදාහරණයක් ලෙස, ඔබට ආකෘතියේ ලේඛන තිබේ නම් අසීසී ඩොක්ටර්, පසුව එය HTML/PDF බවට පත් කරන මොහොතේ AsciiDoctor හසුරුවන්නා (මාවන් ප්ලගිනය) අනතුරු ඇඟවීම් නිකුත් කළ හැකිය, උදාහරණයක් ලෙස, කැඩුණු අභ්යන්තර සබැඳි ගැන. තවද මෙය ප්‍රලේඛන වෙනස් කිරීම් සමග ඇදීමේ ඉල්ලීම පිළි නොගැනීමට හොඳ හේතුවකි.
  • අක්ෂර වින්‍යාසය පරීක්ෂා කිරීම ද ස්ථිතික විශ්ලේෂණ වර්ගයකි. උපයෝගිතා aspel ලේඛනගත කිරීමේදී පමණක් නොව, C/C++, Java සහ Python ඇතුළු විවිධ ක්‍රමලේඛන භාෂාවල වැඩසටහන් මූල කේත (අදහස් සහ වචනාර්ථ) තුළද අක්ෂර වින්‍යාසය පරීක්ෂා කිරීමට හැකියාව ඇත. පරිශීලක අතුරුමුහුණතේ හෝ ලියකියවිලිවල අක්ෂර වින්‍යාස දෝෂයක් ද දෝෂයකි!
  • වින්‍යාස පරීක්ෂණ (ඒවා මොනවාද යන්න ගැන - බලන්න. මේ и මේ වාර්තා), පයිටෙස්ට් වැනි ඒකක පරීක්ෂණ ධාවන කාලයකදී ක්‍රියාත්මක වුවද, ඒවා ක්‍රියාත්මක කිරීමේදී ප්‍රභව කේත ක්‍රියාත්මක නොකරන බැවින් ඇත්ත වශයෙන්ම ස්ථිතික විශ්ලේෂණ වර්ගයකි.

ඔබට පෙනෙන පරිදි, මෙම ලැයිස්තුවේ දෝෂ සෙවීම අවම වැදගත් කාර්යභාරයක් ඉටු කරයි, සහ අනෙකුත් සියල්ල නොමිලේ විවෘත කේත මෙවලම් භාවිතයෙන් ලබා ගත හැකිය.

ඔබ ඔබේ ව්‍යාපෘතියේ භාවිතා කළ යුතු මෙම ස්ථිතික විශ්ලේෂණ වර්ග මොනවාද? ඇත්ත වශයෙන්ම, වැඩි වන තරමට වඩා හොඳය! ප්රධාන දෙය නම් එය නිවැරදිව ක්රියාත්මක කිරීමයි, එය තවදුරටත් සාකච්ඡා කරනු ඇත.

බහු-අදියර පෙරහනක් ලෙස බෙදා හැරීමේ නල මාර්ගය සහ එහි පළමු අදියර ලෙස ස්ථිතික විශ්ලේෂණය

අඛණ්ඩ අනුකලනය සඳහා වන සම්භාව්‍ය රූපකය වන්නේ ප්‍රභව කේත වෙනස් කිරීමේ සිට නිෂ්පාදනය දක්වා ප්‍රවාහය වෙනස් වන නල මාර්ගයකි. මෙම නල මාර්ගයේ අදියරවල සම්මත අනුපිළිවෙල මේ ආකාරයෙන් පෙනේ:

  1. ස්ථිතික විශ්ලේෂණය
  2. සම්පාදනය
  3. ඒකක පරීක්ෂණ
  4. ඒකාබද්ධතා පරීක්ෂණ
  5. UI පරීක්ෂණ
  6. අතින් චෙක්පත

නල මාර්ගයේ N වන අදියරේදී ප්රතික්ෂේප කරන ලද වෙනස්කම් N + 1 අදියර වෙත මාරු නොකෙරේ.

හරියටම මේ ආකාරයෙන් සහ වෙනත් ආකාරයකින් නොවන්නේ ඇයි? නල මාර්ගයේ පරීක්ෂණ කොටසෙහි, පරීක්ෂකයින් විසින් සුප්රසිද්ධ පරීක්ෂණ පිරමීඩය හඳුනා ගනු ඇත.

දෝෂ සෙවීමට එය භාවිතා කරනවාට වඩා ක්‍රියාවලියට ස්ථිතික විශ්ලේෂණය ක්‍රියාත්මක කරන්න
පරීක්ෂණ පිරමීඩය. මූලාශ්රය: ලිපියක් මාටින් ෆෝලර්.

මෙම පිරමීඩයේ පතුලේ ලිවීමට පහසු, ක්‍රියාත්මක කිරීමට වේගවත් සහ අසමත් වීමේ ප්‍රවණතාවක් නොමැති පරීක්ෂණ ඇත. එමනිසා, ඒවායින් වැඩි ගණනක් තිබිය යුතුය, ඒවා වැඩි කේතයක් ආවරණය කර මුලින්ම ක්රියාත්මක කළ යුතුය. පිරමීඩයේ මුදුනේ, ප්‍රතිවිරුද්ධ දෙය සත්‍ය වේ, එබැවින් අනුකලනය සහ UI පරීක්ෂණ ගණන අවශ්‍ය අවම මට්ටමට අඩු කළ යුතුය. මෙම දාමයේ පුද්ගලයා වඩාත්ම මිල අධික, මන්දගාමී සහ විශ්වාස කළ නොහැකි සම්පතක් වන අතර, එබැවින් ඔහු අවසානයේ සිටින අතර පෙර අදියරවල කිසිදු දෝෂයක් සොයා නොගත්තේ නම් පමණක් කාර්යය ඉටු කරයි. කෙසේ වෙතත්, පරීක්ෂණයට සෘජුව සම්බන්ධ නොවන කොටස්වල නල මාර්ගයක් තැනීම සඳහා එකම මූලධර්ම භාවිතා වේ!

බහු-අදියර ජල පෙරීමේ පද්ධතියක ස්වරූපයෙන් ප්‍රතිසමයක් ඉදිරිපත් කිරීමට මම කැමතියි. අපිරිසිදු ජලය (දෝෂ සහිත වෙනස්කම්) ආදානයට සපයනු ලැබේ; නිමැවුමේදී අපට පිරිසිදු ජලය ලැබිය යුතුය, එහි සියලුම අනවශ්‍ය අපවිත්‍ර ද්‍රව්‍ය ඉවත් කර ඇත.

දෝෂ සෙවීමට එය භාවිතා කරනවාට වඩා ක්‍රියාවලියට ස්ථිතික විශ්ලේෂණය ක්‍රියාත්මක කරන්න
බහු අදියර පෙරහන. මූලාශ්රය: විකිපීඩියා, නිදහස් විශ්වකෝෂය

ඔබ දන්නා පරිදි, පිරිසිදු කිරීමේ ෆිල්ටර නිර්මාණය කර ඇත්තේ එක් එක් ඊළඟ කඳුරැල්ලට වැඩි වැඩියෙන් දූෂිත කොටස් පෙරීමට හැකි වන පරිදි ය. ඒ අතරම, රළු පවිත්ර කිරීමේ කැස්ඩේඩ් ඉහළ කාර්ය සාධනයක් සහ අඩු පිරිවැයක් ඇත. අපගේ සාදෘශ්‍යයේ දී, මෙයින් අදහස් කරන්නේ ආදාන ගුණාත්මක ගේට්ටු වේගවත් වන අතර, ආරම්භ කිරීමට අඩු උත්සාහයක් අවශ්‍ය වන අතර, ඒවා ක්‍රියාත්මක කිරීමේදී වඩාත් අව්‍යාජ ඒවා වන බවයි - සහ ඒවා ඉදිකර ඇති අනුපිළිවෙල මෙයයි. ස්ථිතික විශ්ලේෂණයේ කාර්යභාරය, අප දැන් තේරුම් ගෙන ඇති පරිදි, දළ දෝෂයන් පමණක් ඉවත් කිරීමට සමත් වන අතර, පෙරහන් කස්සේඩියේ ආරම්භයේදීම "මඩ" ජාලයේ භූමිකාවයි.

"මඩ පෙරහන" ජලය පානය කළ නොහැකි සේම, ස්ථිතික විශ්ලේෂණය විසින්ම අවසන් නිෂ්පාදනයේ ගුණාත්මක භාවය වැඩි දියුණු නොවේ. එහෙත්, නල මාර්ගයේ අනෙකුත් මූලද්රව්ය සමඟ ඒකාබද්ධව, එහි වැදගත්කම පැහැදිලිය. බහුඅදියර ෆිල්ටරයක ප්‍රතිදාන අවධීන් ආදාන අවධීන් කරන සෑම දෙයක්ම ග්‍රහණය කර ගැනීමට හැකියාව ඇතත්, ආදාන අවධීන් නොමැතිව සියුම්-පිරිසිදු කිරීමේ අවධීන් සමඟ පමණක් සිදු කිරීමට උත්සාහ කිරීමෙන් ඇතිවන ප්‍රතිවිපාක මොනවාද යන්න පැහැදිලිය.

"මඩ උගුලේ" අරමුන වන්නේ පසුකාලීන කඳුරැල්ල ඉතා දළ දෝෂයන් අල්ලා ගැනීමෙන් නිදහස් කිරීමයි. උදාහරණයක් ලෙස, අවම වශයෙන්, කේත සමාලෝචනය කරන පුද්ගලයා වැරදි ලෙස හැඩගස්වා ඇති කේතය සහ ස්ථාපිත කේතීකරණ ප්‍රමිතීන් උල්ලංඝනය කිරීම (අතිරේක වරහන් හෝ ඉතා ගැඹුරින් කැදැලි ශාඛා වැනි) මගින් අවධානය වෙනතකට යොමු නොකළ යුතුය. NPE වැනි දෝෂ ඒකක පරීක්ෂණ මගින් අල්ලා ගත යුතුය, නමුත් පරීක්ෂණයට පෙර පවා දෝෂයක් සිදුවීමට නියමිත බව විශ්ලේෂකය අපට පෙන්වා දෙන්නේ නම්, මෙය එය නිවැරදි කිරීම සැලකිය යුතු ලෙස වේගවත් කරයි.

ස්ථිතික විශ්ලේෂණය ඉඳහිට භාවිතා කරන්නේ නම් නිෂ්පාදනයේ ගුණාත්මක භාවය වැඩි දියුණු නොකරන්නේ මන්දැයි දැන් පැහැදිලි බව මම විශ්වාස කරමි, සහ දළ දෝෂ සහිත වෙනස්කම් පෙරීමට නිරන්තරයෙන් භාවිතා කළ යුතුය. ස්ථිතික විශ්ලේෂකයක් භාවිතයෙන් ඔබේ නිෂ්පාදනයේ ගුණාත්මක භාවය වැඩි දියුණු වේද යන ප්‍රශ්නය දළ වශයෙන් සමාන වන්නේ, “අපිරිසිදු පොකුණකින් ගන්නා ජලය කොලන්ඩරයක් හරහා ගියහොත් එය පානයේ ගුණාත්මක භාවය වැඩි දියුණු වේද?” යන්නයි.

උරුම ව්‍යාපෘතියක් ලෙස ක්‍රියාත්මක කිරීම

වැදගත් ප්‍රායෝගික ප්‍රශ්නයක්: "ගුණාත්මක ද්වාරයක්" ලෙස අඛණ්ඩ ඒකාබද්ධ කිරීමේ ක්‍රියාවලියට ස්ථිතික විශ්ලේෂණය ක්‍රියාත්මක කරන්නේ කෙසේද? ස්වයංක්‍රීය පරීක්ෂණ වලදී, සෑම දෙයක්ම පැහැදිලිය: පරීක්ෂණ මාලාවක් ඇත, ඒවායින් කිසිවක් අසාර්ථක වීම එකලස් කිරීම ගුණාත්මක ගේට්ටුව සමත් නොවූ බව විශ්වාස කිරීමට ප්‍රමාණවත් හේතුවකි. ස්ථිතික විශ්ලේෂණයක ප්‍රතිඵල මත පදනම්ව ගේට්ටුවක් ස්ථාපනය කිරීමේ උත්සාහය අසාර්ථක වේ: උරුම කේතයේ විශ්ලේෂණ අනතුරු ඇඟවීම් ඕනෑවට වඩා තිබේ, ඔබට ඒවා සම්පූර්ණයෙන්ම නොසලකා හැරීමට අවශ්‍ය නැත, නමුත් නිෂ්පාදනයක් නැව්ගත කිරීම නැවැත්විය නොහැක. එය විශ්ලේෂක අනතුරු ඇඟවීම් අඩංගු නිසා පමණි.

පළමු වරට භාවිතා කරන විට, විශ්ලේෂකය ඕනෑම ව්‍යාපෘතියක අනතුරු ඇඟවීම් විශාල ප්‍රමාණයක් නිෂ්පාදනය කරයි, ඒවායින් බහුතරයක් නිෂ්පාදනයේ නිසි ක්‍රියාකාරිත්වයට සම්බන්ධ නොවේ. මෙම සියලු අදහස් එකවර නිවැරදි කිරීමට නොහැකි අතර බොහෝ ඒවා අවශ්ය නොවේ. සියල්ලට පසු, ස්ථිතික විශ්ලේෂණය හඳුන්වා දීමට පෙර පවා අපගේ නිෂ්පාදනය සමස්තයක් ලෙස ක්‍රියාත්මක වන බව අපි දනිමු!

එහි ප්‍රතිඵලයක් වශයෙන්, බොහෝ දෙනෙක් ස්ථිතික විශ්ලේෂණයක් ඉඳහිට භාවිතා කිරීමට සීමා වී ඇත, නැතහොත් එකලස් කිරීමේදී විශ්ලේෂක වාර්තාවක් සරලව නිකුත් කරන විට එය තොරතුරු ප්‍රකාරයේදී පමණක් භාවිතා කරයි. මෙය කිසිදු විශ්ලේෂණයක් නොමැතිකමට සමාන වේ, මන්ද අපට දැනටමත් බොහෝ අනතුරු ඇඟවීම් තිබේ නම්, කේතය වෙනස් කිරීමේදී තවත් එකක් (කොතරම් බරපතල වුවත්) සිදුවීම නොදැනේ.

ගුණාත්මක ගේට්ටු හඳුන්වාදීමේ පහත ක්‍රම දනී:

  • සම්පූර්ණ අනතුරු ඇඟවීම් ගණන හෝ අනතුරු ඇඟවීම් ගණන කේත රේඛා ගණනින් බෙදීම සඳහා සීමාවක් සැකසීම. මෙය දුර්වල ලෙස ක්‍රියා කරයි, මන්ද එවැනි ගේට්ටුවක් නව දෝෂ සහිත වෙනස්කම් වලට නිදහසේ ඉඩ සලසයි, මන්ද ඒවායේ සීමාව ඉක්මවා නොයන තාක් කල්.
  • නිශ්චිත මොහොතකදී, කේතයේ ඇති සියලුම පැරණි අනතුරු ඇඟවීම් නොසලකා හැරීම සහ නව අනතුරු ඇඟවීම් සිදු වූ විට ගොඩනැගීම ප්‍රතික්ෂේප කිරීම. මෙම ක්රියාකාරිත්වය PVS-studio සහ සමහර මාර්ගගත සම්පත් මගින් සපයනු ලැබේ, උදාහරණයක් ලෙස, Codacy. මට PVS-studio හි වැඩ කිරීමට අවස්ථාවක් නොතිබුණි, Codacy සමඟ මගේ අත්දැකීම් අනුව, ඔවුන්ගේ ප්රධාන ගැටළුව වන්නේ "පැරණි" සහ "නව" දෝෂය කුමක්ද යන්න තීරණය කිරීම සෑම විටම ක්රියා නොකරන තරමක් සංකීර්ණ ඇල්ගොරිතමයකි. නිවැරදිව, විශේෂයෙන්ම ගොනු විශාල වශයෙන් වෙනස් කර හෝ නැවත නම් කර ඇත්නම්. මගේ අත්දැකීමට අනුව, Codacy හට අදින්න ඉල්ලීමක නව අනතුරු ඇඟවීම් නොසලකා හැරිය හැකි අතර, ඒ සමඟම දී ඇති PR කේතයේ වෙනස්කම්වලට සම්බන්ධ නොවන අනතුරු ඇඟවීම් හේතුවෙන් ඇදීමේ ඉල්ලීමක් සම්මත නොකරයි.
  • මගේ මතය අනුව, වඩාත්ම ඵලදායී විසඳුම වන්නේ පොතේ විස්තර කර ඇති එකයි අඛණ්ඩ භාරදීම "රැට්චෙටින් ක්රමය". මූලික අදහස නම්, ස්ථිතික විශ්ලේෂණ අනතුරු ඇඟවීම් ගණන එක් එක් නිකුතුවේ දේපලක් වන අතර, සම්පූර්ණ අනතුරු ඇඟවීම් ගණන වැඩි නොකරන වෙනස්කම් වලට පමණක් ඉඩ දෙනු ලැබේ.

රැචට්

එය මේ ආකාරයට ක්‍රියා කරයි:

  1. ආරම්භක අදියරේදී, විශ්ලේෂකයින් විසින් සොයා ගන්නා ලද කේතයේ අනතුරු ඇඟවීම් ගණන මුදා හැරීම පිළිබඳව පාර-දත්ත තුළ වාර්තාවක් සාදනු ලැබේ. එබැවින්, ඔබ upstream ගොඩනඟන විට, ඔබේ ගබඩා කළමණාකරු ලියන්නේ "නිදහස් 7.0.2" පමණක් නොව, "7.0.2 චෙක්ස්ටයිල් අනතුරු ඇඟවීම් අඩංගු 100500 නිකුත් කරන්න." ඔබ උසස් ගබඩා කළමණාකරුවෙකු (Artifactory වැනි) භාවිතා කරන්නේ නම්, ඔබේ නිකුතුව පිළිබඳ එවැනි පාර-දත්ත ගබඩා කිරීම පහසුය.
  2. දැන් සෑම ඇදීමේ ඉල්ලීමක්ම ගොඩනඟන විට, ලැබෙන අනතුරු ඇඟවීම් සංඛ්‍යාව වත්මන් නිකුතුවේ පවතින අනතුරු ඇඟවීම් සංඛ්‍යාව සමඟ සංසන්දනය කරයි. PR මෙම අංකයේ වැඩි වීමක් ඇති කරයි නම්, කේතය ස්ථිතික විශ්ලේෂණය සඳහා ගුණාත්මක ද්වාරය සමත් නොවේ. අනතුරු ඇඟවීම් ගණන අඩු වුවහොත් හෝ වෙනස් නොවේ නම්, එය සමත් වේ.
  3. මීළඟ නිකුතුවේදී, නැවත ගණනය කරන ලද අනතුරු ඇඟවීම් සංඛ්‍යාව නිකුත් කිරීමේ පාර-දත්ත තුළ නැවත සටහන් වනු ඇත.

එබැවින් ටිකෙන් ටික නමුත් ස්ථාවරව (රැට්චෙට් ක්‍රියා කරන විට මෙන්), අනතුරු ඇඟවීම් ගණන බිංදුවට නැඹුරු වේ. ඇත්ත වශයෙන්ම, නව අනතුරු ඇඟවීමක් හඳුන්වා දීමෙන් පද්ධතිය රැවටිය හැකිය, නමුත් වෙනත් කෙනෙකුගේ නිවැරදි කිරීම. මෙය සාමාන්‍ය දෙයකි, මන්ද දිගු දුරක් එය ප්‍රති results ල ලබා දෙයි: අනතුරු ඇඟවීම් රීතියක් ලෙස, තනි තනිව නොව, යම් ආකාරයක කණ්ඩායමක් තුළ එකවර නිවැරදි කරනු ලබන අතර, පහසුවෙන් ඉවත් කළ හැකි සියලුම අනතුරු ඇඟවීම් ඉතා ඉක්මනින් ඉවත් කරනු ලැබේ.

මෙම ප්‍රස්ථාරයෙන් දැක්වෙන්නේ එවැනි “රැට්චෙට්” ක්‍රියාත්මක වන මාස හය සඳහා චෙක්ස්ටයිල් අනතුරු ඇඟවීම් ගණනයි අපගේ OpenSource ව්‍යාපෘති වලින් එකක්. අනතුරු ඇඟවීම් ගණන විශාලත්වයේ අනුපිළිවෙලකින් අඩු වී ඇති අතර, නිෂ්පාදන සංවර්ධනයට සමගාමීව මෙය ස්වභාවිකවම සිදු විය!

දෝෂ සෙවීමට එය භාවිතා කරනවාට වඩා ක්‍රියාවලියට ස්ථිතික විශ්ලේෂණය ක්‍රියාත්මක කරන්න

මම මෙම ක්‍රමයේ නවීකරණය කරන ලද අනුවාදයක් භාවිතා කරමි, ව්‍යාපෘති මොඩියුලය සහ විශ්ලේෂණ මෙවලම මගින් අනතුරු ඇඟවීම් වෙන වෙනම ගණන් කරන අතර, එහි ප්‍රතිඵලයක් ලෙස YAML ගොනුවක් ගොඩනඟන පාර-දත්ත සමඟ මෙවැන්නක් පෙනේ:

celesta-sql:
  checkstyle: 434
  spotbugs: 45
celesta-core:
  checkstyle: 206
  spotbugs: 13
celesta-maven-plugin:
  checkstyle: 19
  spotbugs: 0
celesta-unit:
  checkstyle: 0
  spotbugs: 0

ඕනෑම උසස් CI පද්ධතියක, ප්ලගීන සහ තෙවන පාර්ශවීය මෙවලම් මත රඳා නොසිට ඕනෑම ස්ථිතික විශ්ලේෂණ මෙවලම් සඳහා රැට්චෙට් ක්‍රියාත්මක කළ හැක. සෑම විශ්ලේෂකයක්ම විශ්ලේෂණය කිරීමට පහසු සරල පෙළ හෝ XML ආකෘතියකින් තමන්ගේම වාර්තාවක් නිෂ්පාදනය කරයි. ඉතිරිව ඇත්තේ CI ස්ක්‍රිප්ටයේ අවශ්‍ය තර්කනය ලිවීම පමණි. Jenkins සහ Artifactory මත පදනම් වූ අපගේ විවෘත මූලාශ්‍ර ව්‍යාපෘතිවල මෙය ක්‍රියාත්මක වන ආකාරය ඔබට දැක ගත හැකිය මෙහි හෝ මෙහි. උදාහරණ දෙකම පුස්තකාලය මත රඳා පවතී ratchetlib: ක්රමය countWarnings() සාමාන්‍ය ආකාරයෙන් Checkstyle සහ Spotbugs මගින් ජනනය කරන ලද ගොනු වල xml ටැග් ගණන් කරයි, සහ compareWarningMaps() ඕනෑම ප්‍රවර්ගයක අනතුරු ඇඟවීම් සංඛ්‍යාව වැඩි වන විට දෝෂයක් ඇති කරමින් එකම රැට්චෙට් ක්‍රියාත්මක කරයි.

"රැට්චෙට්" හි සිත් ඇදගන්නාසුළු ක්‍රියාවක් මඟින් අදහස්වල අක්ෂර වින්‍යාසය, පෙළ වචන සහ ප්‍රලේඛනය aspell භාවිතයෙන් විශ්ලේෂණය කළ හැකිය. ඔබ දන්නා පරිදි, අක්ෂර වින්‍යාසය පරීක්ෂා කිරීමේදී, සම්මත ශබ්දකෝෂයට නොදන්නා සියලුම වචන වැරදි නොවේ; ඒවා පරිශීලක ශබ්ද කෝෂයට එක් කළ හැකිය. ඔබ අභිරුචි ශබ්දකෝෂයක් ව්‍යාපෘතියේ ප්‍රභව කේතයේ කොටසක් කරන්නේ නම්, අක්ෂර වින්‍යාස ගුණාත්මක ද්වාරය මේ ආකාරයෙන් සකස් කළ හැක: සම්මත සහ අභිරුචි ශබ්දකෝෂයක් සමඟ aspell ධාවනය කිරීම නොකළ යුතුයි අක්ෂර වින්‍යාස දෝෂ සොයා ගන්න.

විශ්ලේෂක අනුවාදය සවි කිරීමේ වැදගත්කම ගැන

අවසාන වශයෙන්, සටහන් කළ යුතු කරුණ නම්, ඔබ ඔබේ බෙදාහැරීමේ නල මාර්ගයට විශ්ලේෂණය ක්‍රියාත්මක කරන ආකාරය කුමක් වුවත්, විශ්ලේෂකයේ අනුවාදය සවි කළ යුතුය. ඔබ විශ්ලේෂකය ස්වයංසිද්ධව යාවත්කාලීන කිරීමට ඉඩ දෙන්නේ නම්, ඊළඟ ඇදීමේ ඉල්ලීම එකලස් කිරීමේදී, කේත වෙනස් කිරීම්වලට සම්බන්ධ නොවන නව දෝෂ “උත්පත්ති” විය හැකි නමුත් නව විශ්ලේෂකය සරලව වැඩි අඩුපාඩු සොයා ගැනීමට හැකි වීම හා සම්බන්ධ වේ - මෙය ඔබගේ ඇදීමේ ඉල්ලීම් පිළිගැනීමේ ක්‍රියාවලිය බිඳ දමයි . විශ්ලේෂකයක් උත්ශ්‍රේණි කිරීම දැනුවත් ක්‍රියාවක් විය යුතුය. කෙසේ වෙතත්, එක් එක් එකලස් කිරීමේ සංරචකයේ අනුවාදය දැඩි ලෙස සවි කිරීම සාමාන්‍යයෙන් අවශ්‍ය අවශ්‍යතාවයක් වන අතර වෙනම සාකච්ඡාවක් සඳහා මාතෘකාවකි.

සොයා ගැනීම්

  • ස්ථිතික විශ්ලේෂණය ඔබට දෝෂ සොයා නොගන්නා අතර තනි යෙදුමක ප්‍රතිඵලයක් ලෙස ඔබේ නිෂ්පාදනයේ ගුණාත්මක භාවය වැඩි දියුණු නොකරනු ඇත. ගුණාත්මකභාවය කෙරෙහි ධනාත්මක බලපෑමක් ලබා ගත හැක්කේ බෙදා හැරීමේ ක්‍රියාවලියේදී එය නිරන්තරයෙන් භාවිතා කිරීමෙන් පමණි.
  • දෝෂ සොයා ගැනීම විශ්ලේෂණයේ ප්‍රධාන කාර්යය නොවේ; බොහෝ ප්‍රයෝජනවත් කාර්යයන් විවෘත මූලාශ්‍ර මෙවලම් තුළ පවතී.
  • ලෙගසි කේතය සඳහා "රැට්චෙට්" භාවිතා කරමින් බෙදාහැරීමේ නල මාර්ගයේ පළමු අදියරේදී ස්ථිතික විශ්ලේෂණයේ ප්රතිඵල මත පදනම්ව ගුණාත්මක ගේට්ටු ක්රියාත්මක කරන්න.

යොමු

  1. අඛණ්ඩ භාරදීම
  2. A. Kudryavtsev: වැඩසටහන් විශ්ලේෂණය: ඔබ හොඳ ක්‍රමලේඛකයෙකු බව තේරුම් ගන්නේ කෙසේද විවිධ කේත විශ්ලේෂණ ක්‍රම පිළිබඳ වාර්තාව (ස්ථිතික පමණක් නොවේ!)

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න