په دې حالت کې، موږ کولی شو د 10-15٪ په اړه د ټیټ غلط مثبت نرخ تمه وکړو [5]. په بل عبارت، د 9 تحلیل کونکي اخطارونو څخه 10 به په کوډ کې ریښتینې ستونزه په ګوته کړي، یا لږترلږه "قوی بوی کوډ." موافقه وکړئ، دا سناریو خورا خوندور دی، او تحلیل کونکی د پروګرامر ریښتینی ملګری دی.
په واقعیت کې، په یوه لویه پروژه کې، لومړنی انځور به په بشپړه توګه توپیر ولري. تحلیل کونکی د میراث کوډ لپاره په سلګونو یا زره خبرداری ورکوي. دا ناشونې ده چې ژر تر ژره پوه شي چې د دې اخطارونو څخه کوم یو اړین دي او کوم ندي. دا غیر معقوله ده چې ناست شئ او د دې ټولو اخطارونو سره معامله پیل کړئ، ځکه چې پدې قضیه کې اصلي کار به د ورځو یا اونیو لپاره ودریږي. عموما، یو ټیم نشي کولی دا ډول سناریو برداشت کړي. دلته به یو لوی شمیر توپیرونه هم وي چې د بدلون تاریخ خرابوي. او په کوډ کې د ډیری برخو ګړندۍ ډله ایز ترمیم به حتمي د نوي ټایپونو او غلطیو پایله وي.
او تر ټولو مهم، د اخطارونو په وړاندې مبارزه کې دا ډول کار لږ معنی لري. موافقه وکړه چې دا پروژه له څو کلونو راهیسې په بریالیتوب سره روانه ده، ډیری مهمې تېروتنې لا دمخه سمې شوې دي. هو، دا اصلاحات خورا ګران وو، باید ډیبګ شوي وای، د بګ په اړه د کاروونکي منفي نظرونه ترلاسه کړي، او داسې نور. یو جامد تحلیل کونکی به د کوډ کولو په مرحله کې د دې ډیری غلطیو په سمولو کې مرسته وکړي، په چټکه او ارزانه توګه. مګر په اوس وخت کې، په یوه لاره یا بل ډول، دا تېروتنې سمې شوي، او تحلیل کونکی په عمده توګه په زاړه کوډ کې غیر جدي غلطی کشف کوي. دا کوډ ممکن ونه کارول شي، دا ممکن په ندرت سره وکارول شي، او پدې کې یوه تېروتنه ممکن د پام وړ پایلو لامل نشي. شاید په کوم ځای کې د تڼۍ سیوري غلط رنګ وي، مګر دا د هرچا د محصول په کارولو کې مداخله نه کوي.
البته، حتی کوچنۍ تېروتنې لا هم تېروتنې دي. او ځینې وختونه یوه تېروتنه کولی شي یو ریښتینی زیان پټ کړي. په هرصورت، هرڅه پریښودل او د نیمګړتیاوو سره معامله کولو لپاره ورځې / اونۍ مصرف کول چې په سختۍ سره ځان ښکاره کوي د شکمن نظر په څیر ښکاري.
پروګرام کونکي د زاړه کاري کوډ په اړه دا ټول اخطارونه ګوري، وګوري، وګوري ... او دوی فکر کوي: موږ کولی شو پرته له جامد تحلیل څخه ترسره کړو. راځئ چې ځینې نوي ګټور فعالیت ولیکئ.
په خپله طریقه، دوی سم دي. دوی فکر کوي چې لومړی دوی باید یو څه له دې ټولو اخطارونو څخه ځان خلاص کړي. یوازې بیا به دوی وکولی شي د کوډ تحلیل کونکي منظم کارولو څخه ګټه پورته کړي. که نه نو، نوي اخطارونه به په ساده ډول په زړو کې ډوب شي، او هیڅوک به ورته پام ونه کړي.
دا ورته ورته والی دی لکه د کمپیلر اخطارونو سره. دا بې دلیله نه ده چې دوی د کمپلر اخطارونو شمیره په 0 کې ساتلو وړاندیز کوي. که چیرې 1000 اخطارونه شتون ولري ، نو کله چې 1001 شتون ولري ، هیڅوک به ورته پام ونه کړي ، او دا روښانه نده چې دا نوي خبرداری چیرته وګورو.
پدې کیسه کې ترټولو بد شی دا دی که چیرې پدې شیبه کې له پورته څخه یو څوک تاسو د جامد کوډ تحلیل کارولو ته اړ کړي. دا به یوازې ټیم کمزوری کړي، ځکه چې د دوی له نظره به اضافي بیوروکراټیک پیچلتیا وي چې یوازې په لاره کې راځي. هیڅوک به د تحلیل کونکي راپورونه ونه ګوري، او ټول کارول به یوازې "په کاغذ" وي. هغوی. په رسمي ډول، تحلیل د DevOps پروسې کې جوړ شوی، مګر په عمل کې دا هیڅ ګټه نه کوي. موږ د کنفرانس برخه والو څخه په بوتونو کې مفصلې کیسې اوریدلې. دا ډول تجربه کولی شي پروګرام کونکي د اوږدې مودې لپاره د جامد تحلیل وسیلو کارولو څخه وهڅوي، که د تل لپاره نه وي.
ترټولو ساده او خورا طبیعي خبره دا ده چې یو څه وخت ونیسئ ترڅو په پراخه کچه فشار لرونکي تحلیل کونکي اخطارونه تحلیل کړئ او په تدریجي ډول ورسره معامله وکړئ. چیرته چې تاسو باید په کوډ کې غلطۍ حل کړئ، چیرته چې تاسو باید بیاکتنه وکړئ ترڅو تحلیل کونکي ته ووایاست چې کوډ ستونزه نلري. ساده مثال:
if (a = b)
ډیری C++ تالیف کونکي او شنونکي د ورته کوډ په اړه شکایت کوي ، ځکه چې ډیر احتمال شتون لري چې دوی واقعیا لیکل غواړي (a == ب). مګر یو ناڅرګند تړون شتون لري، او دا معمولا په اسنادو کې یادونه کیږي، که چیرې اضافي قوسونه شتون ولري، نو دا په پام کې نیول کیږي چې پروګرام کونکي په قصدي توګه دا ډول کوډ لیکلی، او د قسم خوړلو اړتیا نشته. د مثال په توګه، د تشخیص لپاره د PVS-Studio اسنادو کې V559 (CWE-481) دا په واضح ډول لیکل شوي چې لاندې کرښه به سمه او خوندي وګڼل شي:
if ((a = b))
بل مثال. ایا دا پدې C++ کوډ کې هیر شوی؟ د وقفې که نه؟
case A:
foo();
case B:
bar();
break;
د PVS-Studio شنونکی به دلته یو خبرداری خپور کړي V796 (CWE-484). دا ممکن تېروتنه نه وي، په دې حالت کې تاسو باید د ځانګړتیا په اضافه کولو سره پارسر ته اشاره ورکړئ [[زوال]] یا د مثال په توګه __خاصیت__((د زوال له لارې)):
case A:
foo();
[[fallthrough]];
case B:
bar();
break;
دا ویل کیدی شي چې دا ډول کوډ بدلونونه بګ نه حل کوي. هو، دا ریښتیا ده، مګر دا دوه ګټور کارونه کوي. لومړی، د شنونکي راپور له غلطو مثبتو څخه خلاصیږي. دوهم، کوډ د هغو خلکو لپاره د پوهیدو وړ کیږي چې د هغې په ساتنه کې ښکیل دي. او دا خورا مهم دی! یوازې د دې لپاره، دا د کوډ د روښانه کولو او ساتلو لپاره اسانه کولو لپاره د کوچنیو بیاکتنې ترسره کولو ارزښت لري. څرنګه چې شنونکی نه پوهیږي چې ایا "بریک" ته اړتیا ده یا نه، دا به د نورو پروګرام کونکو لپاره هم روښانه نه وي.
د بګ فکسونو او ریفیکٹرینګونو سربیره ، تاسو کولی شئ په ځانګړي ډول د غلط تحلیل کونکي خبرداری فشار ورکړئ. ځینې غیر اړونده تشخیصونه غیر فعال کیدی شي. د مثال په توګه، یو څوک فکر کوي چې اخطارونه بې معنی دي V550 د فلوټ/ډبل ارزښتونو پرتله کولو په اړه. او ځینې یې د مهم او د مطالعې وړ په توګه طبقه بندي کوي [7]. کوم اخطارونه اړونده ګڼل کیږي او کوم نه دي د پراختیا ټیم پورې اړه لري چې پریکړه وکړي.
د غلط خبرتیاو د ځپلو لپاره نورې لارې شتون لري. د مثال په توګه، میکرو مارک اپ مخکې یادونه وشوه. دا ټول په اسنادو کې په ډیر تفصیل سره تشریح شوي. ترټولو مهمه خبره دا ده چې پوه شئ چې که تاسو په تدریجي او سیسټمیک ډول د غلط مثبتو سره کار کولو ته نږدې شئ، نو د دوی سره هیڅ شی نشته. د نه منلو وړ اخطارونو لویه برخه د ترتیب کولو وروسته ورک کیږي، او یوازې هغه ځایونه چې واقعیا دقیق مطالعې ته اړتیا لري او په کوډ کې ځینې بدلونونه پاتې دي.
همچنان ، موږ تل د خپلو پیرودونکو سره د PVS سټوډیو تنظیم کولو کې مرسته کوو که کومه ستونزه رامینځته شي. سربیره پردې، داسې قضیې وې کله چې موږ پخپله غلط اخطارونه له منځه یوړل او غلطۍ یې سمې کړې [8]. یوازې په هغه حالت کې ، ما پریکړه وکړه چې یادونه وکړم چې د پراخې همکارۍ لپاره دا اختیار هم امکان لري :).
د راچټ طریقه
د جامد تحلیل کونکي خبرتیا له مینځه وړلو سره د کوډ کیفیت په تدریجي ډول ښه کولو لپاره یو بل په زړه پورې طریقه شتون لري. لاندینۍ کرښه دا ده چې د اخطارونو شمیر یوازې کم کیدی شي.