éçã³ãŒã ã¢ãã©ã€ã¶ãŒãè©Šãã®ã¯ç°¡åã§ãã ãããããããå®è£
ããã«ã¯ãç¹ã«å€§èŠæš¡ã§å€ããããžã§ã¯ãã®éçºã§ã¯ã¹ãã«ãå¿
èŠã§ãã ããæ¹ã誀ããšãã¢ãã©ã€ã¶ãŒã¯äœæ¥ãè¿œå ããéçºãé
ãããããŒã ã®ããæ°ã倱ãããå¯èœæ§ããããŸãã éçºããã»ã¹ãžã®éçåæã®çµ±åã«é©åã«ã¢ãããŒãããCI/CD ã®äžéšãšããŠéçåæã®äœ¿çšãéå§ããæ¹æ³ã«ã€ããŠç°¡åã«èª¬æããŸãã
å°å ¥
æè¿ãç§ã®æ³šæãåºçç©ã«åŒãå¯ããããŸããã
ç§ãã¡ã® PVS-Studio ããŒã ã¯ããã®ãããã¯ã«é¢ããèŠè§£ãæäŸããŸãã ãããããéçã³ãŒã ã¢ãã©ã€ã¶ãŒã®å®è£ ã®åé¡ãã©ã®ããã«çºçããã®ãããã®åé¡ãå æããæ¹æ³ããããŠæè¡çè² åµãèŠåŽããã«åŸã ã«åãé€ãæ¹æ³ãèŠãŠã¿ãŸãããã
åé¡
éåžžãéçã¢ãã©ã€ã¶ãŒãèµ·åããŠã©ã®ããã«åäœãããã確èªããã®ã¯é£ãããããŸããã
ãã¹ãŠã®éçã¢ãã©ã€ã¶ãŒã¯èª€æ€ç¥ãçæããŸãã ããã¯éçã³ãŒãåæææ³ã®ç¹åŸŽã§ãããããã«ã€ããŠã¯äœãã§ããŸããã äžè¬çãªã±ãŒã¹ã§ã¯ãã©ã€ã¹ã®å®çã«ãã£ãŠç¢ºèªãããŠããããã«ãããã¯è§£æ±ºäžå¯èœãªåé¡ã§ã [
éçã¢ãã©ã€ã¶ãŒããã§ã«æ§æãããŠããå Žåã誀æ€ç¥ã¯åé¡ã«ãªããŸããã
- ç¡é¢ä¿ãªã«ãŒã«ã»ãããç¡å¹ã«ããŸãã
- äžéšã®ç¡é¢ä¿ãªèšºæã¯ç¡å¹ã«ãªã£ãŠããŸãã
- C ãŸã㯠C++ ã«ã€ããŠè©±ããŠããå Žåããã¯ãã¯ããã®ãããªãã¯ãã䜿çšããããã¹ãŠã®å Žæã§ç¡çšãªèŠåã衚瀺ãããç¹å®ã®æ§æèŠçŽ ãå«ãããã«ããŒã¯ã¢ãããããŸãã
- ç¬èªã®é¢æ°ã¯ãã·ã¹ãã é¢æ°ãšåæ§ã®ã¢ã¯ã·ã§ã³ãå®è¡ããããã«ããŒã¯ãããŠããŸã (ç¬èªã®ã¢ããã° memcpy ãŸã㯠printfïŒ[
4 ]; - 誀æ€ç¥ã¯ã³ã¡ã³ãã䜿çšããŠå ·äœçã«ç¡å¹ã«ããŸãã
- ãªã©ãªã©ã
ãã®å Žåã誀æ€ç¥çã¯çŽ 10 ïœ 15% ãšäœãããšãäºæ³ãããŸã [
å®éã倧èŠæš¡ãªãããžã§ã¯ãã§ã¯ãåœåã®ã€ã¡ãŒãžã¯ãŸã£ããç°ãªããŸãã ã¢ãã©ã€ã¶ãŒã¯ãã¬ã¬ã·ãŒ ã³ãŒãã«å¯ŸããŠæ°çŸãŸãã¯æ°åã®èŠåãçºè¡ããŸãã ãããã®èŠåã®ã©ããé¢é£ããŠãããã©ããããã§ãªãããããã«ç解ããããšã¯äžå¯èœã§ãã ãã®å Žåãäž»èŠãªäœæ¥ãæ°æ¥ãŸãã¯æ°é±éåæ¢ããããšã«ãªãããã座ã£ãŠããããã¹ãŠã®èŠåã«å¯ŸåŠãå§ããã®ã¯éåççã§ãã éåžžãããŒã ã«ã¯ãã®ãããªã·ããªãªãåãå
¥ããäœè£ã¯ãããŸããã å€æŽå±¥æŽãå°ç¡ãã«ããèšå€§ãªæ°ã®å·®åãååšããŸãã ãŸããã³ãŒãå
ã®éåžžã«å€ãã®æçãè¿
éã«å€§éã«ç·šéãããšãå¿
ç¶çã«æ°ããªã¿ã€ããã¹ããšã©ãŒãçºçããŸãã
ãããŠæãéèŠãªããšã¯ãèŠåãšã®æŠãã«ãããŠãã®ãããªåæ¥ã¯ã»ãšãã©æå³ããããŸããã ãããžã§ã¯ãã¯é·å¹Žã«ããã£ãŠæ£åžžã«å®è¡ãããŠããããããããžã§ã¯ãå ã®é倧ãªãšã©ãŒã®ã»ãšãã©ã¯ãã§ã«ä¿®æ£ãããŠããããšã«åæããŸãã ã¯ãããããã®ä¿®æ£ã¯éåžžã«é«äŸ¡ã§ããããã°ãå¿ èŠã§ããã°ãªã©ã«ã€ããŠãŠãŒã¶ãŒããåŠå®çãªãã£ãŒãããã¯ãåããŠããŸããã éçã¢ãã©ã€ã¶ãŒã¯ãã³ãŒãã£ã³ã°æ®µéã§ãããã®ãšã©ãŒã®å€ããè¿ éãã€å®äŸ¡ã«ä¿®æ£ããã®ã«åœ¹ç«ã¡ãŸãã ãããçŸæç¹ã§ã¯ãäœããã®åœ¢ã§ãããã®ãšã©ãŒã¯ä¿®æ£ãããŠãããã¢ãã©ã€ã¶ãŒã¯äž»ã«å€ãã³ãŒãå ã®é倧ã§ã¯ãªããšã©ãŒãæ€åºããŸãã ãã®ã³ãŒãã¯äœ¿çšãããªãå¯èœæ§ãããã䜿çšãããããšã¯éåžžã«ãŸãã§ãããã³ãŒãå ã®ãšã©ãŒãç®ç«ã£ãçµæã«ã€ãªããããšã¯ãããŸããã ãããããã¿ã³ã®åœ±ã®è²ãééã£ãŠããå¯èœæ§ããããŸãããããã¯è£œåã®äœ¿çšã劚ãããã®ã§ã¯ãããŸããã
ãã¡ãããå°ããªééãã§ãã£ãŠãééãã¯ééãã§ãã ãããŠãééãã«ãã£ãŠæ¬åœã®è匱æ§ãé ããŠããŸãããšããããŸãã ãããããã¹ãŠãæŸæ£ããŠãã»ãšãã©çŸããªãæ¬ é¥ã«å¯ŸåŠããããã«æ°æ¥ãŸãã¯æ°é±éãè²»ããã®ã¯çãããèãã®ããã«æããŸãã
ããã°ã©ããŒã¯ãå€ãåäœã³ãŒãã«é¢ãããããã®èŠåãèŠãŠãèŠãŠãèŠãŠ...ãããŠåœŒãã¯ããèããŸããéç解æãªãã§æžãã®ã§ãã æ°ãã䟿å©ãªæ©èœãããã€ãæžããŠã¿ãŸãããã
圌ããªãã®ããæ¹ã§ã圌ãã¯æ£ããã®ã§ãã 圌ãã¯ããŸããããã®èŠåããã¹ãŠäœããã®æ¹æ³ã§åãé€ãå¿ èŠããããšèããŠããŸãã ããããŠåããŠãã³ãŒã ã¢ãã©ã€ã¶ãŒãå®æçã«äœ¿çšããã¡ãªãããåŸãããããã«ãªããŸãã ããããªããšãæ°ããèŠåãå€ãèŠåã«åãããŠããŸãã誰ã泚æãæããªããªããŸãã
ããã¯ã³ã³ãã€ã©ã®èŠåãšåãé¡äŒŒç¹ã§ãã ã³ã³ãã€ã©èŠåã®æ°ã 0 ã«ä¿ã€ããšãæšå¥šããã®ã«ã¯çç±ããªãããã§ã¯ãããŸãããèŠåã 1000 件ããå Žåã1001 件ã«ãªããšèª°ãããã«æ³šæãæããªããªãããã®ææ°ã®èŠåãã©ãã§æ¢ãã°ããã®ããæ確ã§ã¯ãããŸããã
ãã®è©±ã§ææªãªã®ã¯ãçŸæç¹ã§äžããã®èª°ããéçã³ãŒãåæã®äœ¿çšã匷å¶ããå Žåã§ãã ããã¯ããŒã ã®ããæ°ã倱ãããã ãã§ãã圌ãã®èŠ³ç¹ããã¯ãããã«å®åçãªè€éããéªéã«ãªãã ãã ããã§ãã 誰ãã¢ãã©ã€ã¶ãŒã®ã¬ããŒããèŠãããšã¯ãªãããã¹ãŠã®äœ¿çšã¯ãçŽã®äžãã§ã®ã¿è¡ãããŸãã ãããã®ã 圢åŒçã«ã¯ãåæ㯠DevOps ããã»ã¹ã«çµã¿èŸŒãŸããŠããŸãããå®éã«ã¯ããã¯èª°ã«ãå©çããããããŸããã ã«ã³ãã¡ã¬ã³ã¹åå è
ããããŒã¹ã§è©³ãã話ãèããŸããã ãã®ãããªçµéšã«ãããããã°ã©ããŒã¯ãæ°žä¹
ã§ã¯ãªãã«ããŠããé·æéã«ããã£ãŠéç解æããŒã«ã䜿çšããæ欲ã倱ãå¯èœæ§ããããŸãã
æè¡çè² åµã®å°å ¥ãšè§£æ¶
å®éã倧èŠæš¡ã§å€ããããžã§ã¯ãã§ãã£ãŠããéç解æãå°å ¥ããããšã¯ãäœãé£ããããšãæãããšã§ã¯ãããŸããã
CI / CD
ããã«ãã¢ãã©ã€ã¶ãŒãç¶ç¶çãªéçºããã»ã¹ã®äžéšãšããŠããã«çµã¿èŸŒãããšãã§ããŸãã ããšãã°ãPVS-Studio ãã£ã¹ããªãã¥ãŒã·ã§ã³ã«ã¯ãå¿
èŠãªåœ¢åŒã§ã¬ããŒããç°¡åã«è¡šç€ºããããã®ãŠãŒãã£ãªãã£ãšãã³ãŒãã®åé¡ã®ããã»ã¯ã·ã§ã³ãäœæããéçºè
ãžã®éç¥ãå«ãŸããŠããŸãã CI/CD ã·ã¹ãã ãã PVS-Studio ãèµ·åããããšã«èå³ãããæ¹ã¯ã察å¿ããã³ãã³ããããç解ããŠããããšããå§ãããŸãã
PVS-Studio ãã¯ã©ãŠãã«ç§»è¡: Azure Devops PVS-Studio ãã¯ã©ãŠããž: Travis CI PVS-Studio ãã¯ã©ãŠããž: GitLab CI/CD PVS-Studio ãã¯ã©ãŠãã«ç§»è¡: CircleCI
ããããã³ãŒãåæããŒã«ã®å®è£ ã®æåã®æ®µéã§å€§éã®èª€æ€ç¥ãçºçãããšããåé¡ã«æ»ããŸãããã
æ¢åã®æè¡çè² åµãä¿®æ£ããæ°ããªèŠåã«å¯ŸåŠãã
ææ°ã®åçšéçã¢ãã©ã€ã¶ãŒã§ã¯ãæ°ããã³ãŒããŸãã¯å€æŽãããã³ãŒãã«è¡šç€ºãããæ°ããèŠåã®ã¿ã調æ»ã§ããŸãã ãã®ã¡ã«ããºã ã®å®è£ ã¯ç°ãªããŸãããæ¬è³ªã¯åãã§ãã PVS-Studio éçã¢ãã©ã€ã¶ãŒã§ã¯ããã®æ©èœã¯æ¬¡ã®ããã«å®è£ ãããŸãã
éçåæã®äœ¿çšãããã«éå§ããã«ã¯ãPVS-Studio ãŠãŒã¶ãŒãèŠåã倧éã«æå¶ããã¡ã«ããºã ã䜿çšããããšããå§ãããŸã [
PVS-Studio ã«ããããã®èŠåãçŸæç¹ã§ã¯ç¡é¢ä¿ã§ãããšã¿ãªãããã«æ瀺ããããšãã§ããŸã (æè¡çè² åµã¯åŸã§ä¿åããŠãã ãã)ãããããã°ãèŠåã¯è¡šç€ºãããªããªããŸãã ã¢ãã©ã€ã¶ãŒã¯ããŸã é¢å¿ã®ãªããšã©ãŒã«é¢ããæ å ±ãä¿åããç¹å¥ãªãã¡ã€ã«ãäœæããŸãã ãããŠãPVS-Studio ã¯æ°èŠãŸãã¯å€æŽãããã³ãŒãã«å¯ŸããŠã®ã¿èŠåãçºè¡ããããã«ãªããŸããã ããã«ããããã¯ãã¹ãŠå·§åŠã«å®è£ ãããŠããŸãã ããšãã°ããœãŒã¹ ã³ãŒã ãã¡ã€ã«ã®å é ã«ç©ºã®è¡ãè¿œå ãããå Žåãã¢ãã©ã€ã¶ãŒã¯å®éã«ã¯äœãå€æŽãããŠããªããšèªèããæ²é»ãç¶ããŸãã ãã®ããŒã¯ã¢ãã ãã¡ã€ã«ã¯ããŒãžã§ã³ç®¡çã·ã¹ãã ã«å ¥ããããšãã§ããŸãã ãã¡ã€ã«ã¯å€§ããã§ãããé »ç¹ã«ä¿åããŠãæå³ããªãã®ã§åé¡ãããŸããã
ããã§ããã¹ãŠã®ããã°ã©ããŒã«ã¯ãæ°èŠãŸãã¯å€æŽãããã³ãŒãã«ã®ã¿é¢é£ããèŠåã衚瀺ãããããã«ãªããŸãã ãããã£ãŠã圌ããèšãããã«ãç¿æ¥ããã¢ãã©ã€ã¶ãŒã䜿ãå§ããããšãã§ããŸãã ãããŠãåŸã§æè¡çè² åµã«æ»ããåŸã ã«ãšã©ãŒãä¿®æ£ããã¢ãã©ã€ã¶ãŒãæ§æããããšãã§ããŸãã
ããã§ã倧èŠæš¡ãªå€ããããžã§ã¯ãã«ãããã¢ãã©ã€ã¶ãŒã®å®è£ ã«é¢ããæåã®åé¡ã¯è§£æ±ºãããŸããã 次ã«ãæè¡çè² åµãã©ãããããèããŠã¿ãŸãããã
ãã°ä¿®æ£ãšãªãã¡ã¯ã¿ãªã³ã°
æãåçŽãã€èªç¶ãªããšã¯ã倧èŠæš¡ã«æå¶ãããã¢ãã©ã€ã¶ãŒã®èŠåãåæããæéã確ä¿ããåŸã ã«å¯ŸåŠããããšã§ãã ã³ãŒãå ã®ãšã©ãŒãä¿®æ£ããå¿ èŠãããç®æããã³ãŒãã«åé¡ããªãããšãã¢ãã©ã€ã¶ãŒã«äŒããããã«ãªãã¡ã¯ã¿ãªã³ã°ããå¿ èŠãããç®æããããŸãã ç°¡åãªäŸ:
if (a = b)
ã»ãšãã©ã® C++ ã³ã³ãã€ã©ãšã¢ãã©ã€ã¶ã¯ãå®éã«æžãããã£ãå¯èœæ§ãé«ãããããã®ãããªã³ãŒãã«ã€ããŠäžæºãæ±ããŠããŸãã (a == b)ã ããããæé»ã®åæããããããã¯éåžžããã¥ã¡ã³ãã«èšèŒãããŠããŸããè¿œå ã®æ¬åŒ§ãããå Žåã¯ãããã°ã©ããŒãæå³çã«ãã®ãããªã³ãŒããäœæãããšèŠãªãããèªãå¿
èŠã¯ãããŸããã ããšãã°ã蚺æã«é¢ãã PVS-Studio ããã¥ã¡ã³ãã§ã¯ã
if ((a = b))
ããäžã€ã®äŸã ãã® C++ ã³ãŒãã§ã¯å¿ããããŠããŸãã? ç Žã ãã©ããïŒ
case A:
foo();
case B:
bar();
break;
PVS-Studio ã¢ãã©ã€ã¶ãŒã¯ããã§èŠåãçºè¡ããŸãã
case A:
foo();
[[fallthrough]];
case B:
bar();
break;
ãã®ãããªã³ãŒãå€æŽã§ã¯ãã°ã¯ä¿®æ£ãããªããšèšããŸãã ã¯ããããã¯çå®ã§ãããããã«ã¯ XNUMX ã€ã®äŸ¿å©ãªå¹æããããŸãã ãŸããã¢ãã©ã€ã¶ãŒ ã¬ããŒãã«ãã£ãŠèª€æ€ç¥ãæé€ãããŸãã 第 XNUMX ã«ãã³ãŒãã®ä¿å®ã«æºãã人ã ã«ãšã£ãŠã³ãŒããããç解ãããããªããŸãã ãããŠãããã¯ãšãŠãéèŠã§ãïŒ ããã ãã§ããã³ãŒããããæ確ã«ããŠä¿å®ããããããããã«ãå°èŠæš¡ãªãªãã¡ã¯ã¿ãªã³ã°ãå®è¡ãã䟡å€ããããŸãã ã¢ãã©ã€ã¶ãŒã¯ããã¬ãŒã¯ããå¿ èŠãã©ãããç解ã§ããªããããä»ã®ããã°ã©ããŒã«ãšã£ãŠãããããŸããã
ãã°ä¿®æ£ããªãã¡ã¯ã¿ãªã³ã°ã«å ããŠãæããã«èª€ã£ãã¢ãã©ã€ã¶ãŒèŠåãç¹ã«æå¶ããããšãã§ããŸãã äžéšã®ç¡é¢ä¿ãªèšºæã¯ç¡å¹ã«ããããšãã§ããŸãã ããšãã°ã誰ããèŠåã¯ç¡æå³ã ãšèããŠããŸã
誀ã£ãã¢ã©ãŒããæå¶ããä»ã®æ¹æ³ããããŸãã ããšãã°ããã¯ã ããŒã¯ã¢ããã«ã€ããŠã¯åè¿°ããŸããã ããããã¹ãŠã«ã€ããŠã¯ãããã¥ã¡ã³ãã§è©³ãã説æãããŠããŸãã æãéèŠãªããšã¯ã段éçãã€äœç³»çã«èª€æ€ç¥ã«å¯ŸåŠããããšã«åãçµãã§ããã°ã誀æ€ç¥ã«ã¯äœãåé¡ããªãããšãç解ããããšã§ãã èå³ã®ãªãèŠåã®å€§éšåã¯æ§æåŸã«æ¶ããå®éã«æ éãªèª¿æ»ãšã³ãŒãã®äžéšã®å€æŽãå¿ èŠãªç®æã ããæ®ããŸãã
ãŸããåé¡ãçºçããå Žåã«ã¯ãã¯ã©ã€ã¢ã³ãã PVS-Studio ãã»ããã¢ããããã®ãåžžã«æ¯æŽããŸãã ããã«ãç§ãã¡èªèº«ã誀ã£ãèŠåãæé€ãããšã©ãŒãä¿®æ£ããã±ãŒã¹ããããŸããã
ã©ãã§ããæ¹åŒ
éçã¢ãã©ã€ã¶ãŒã®èŠåãæé€ããããšã§ã³ãŒãã®å質ãåŸã ã«åäžããããå¥ã®èå³æ·±ãã¢ãããŒãããããŸãã èŠããã«ãèŠåã®æ°ã¯æžå°ãããããªããšããããšã§ãã
éçã¢ãã©ã€ã¶ãŒã«ãã£ãŠçºè¡ãããèŠåã®æ°ãèšé²ãããŸãã å質ã²ãŒãã¯ãæäœæ°ãå¢ãããªãã³ãŒãã®ã¿ãå ¥åã§ããããã«æ§æãããŠããŸãã ãã®çµæãã¢ãã©ã€ã¶ãŒã調æŽããŠãšã©ãŒãä¿®æ£ããããšã«ãã£ãŠãã¢ã©ãŒã ã®æ°ãåŸã ã«æžããããã»ã¹ãå§ãŸããŸãã
ããšãå°ãäžæ£ãããã人ããæ°ããã³ãŒãã®èŠåãåé€ããã®ã§ã¯ãªããå€ããµãŒãããŒãã£ã®ã³ãŒããæ¹åããããšã«ãã£ãŠå質ã²ãŒããééããããšã«æ±ºãããšããŠããããã¯æãããšã§ã¯ãããŸããã ããã§ããã©ãã§ããã¯äžæ¹åã«å転ããæ¬ é¥ã®æ°ã¯åŸã ã«æžå°ããŸãã ããšãèªåèªèº«ã®æ°ããªæ¬ é¥ãä¿®æ£ããããªããšããŠããé£æ¥ããã³ãŒãã®äœããæ¹åããå¿ èŠããããŸãã ããæç¹ã§ãèŠåã®æ°ãæžããç°¡åãªæ¹æ³ã¯çµäºããå®éã®ãã°ãä¿®æ£ãããæç¹ãæ¥ãŸãã
ãã®æ¹æ³è«ã¯ãIvan Ponomarev ã«ããéåžžã«èå³æ·±ãèšäºã§è©³ãã説æãããŠããŸãã
ãã®èšäºã®èè
ã¯ããã®ãããã¯ã«é¢ããã¬ããŒããäœæããŠããŸãã
ãŸãšã
ãã®èšäºãèªãã èªè
ãéç解æããŒã«ããã£ãšåãå
¥ããéçºããã»ã¹ã«å°å
¥ããããšæãããã«ãªãããšãé¡ã£ãŠããŸãã ã質åãããããŸãããããã€ã§ããåŸ
ã¡ããŠãããŸã
éç解æãæ¬åœã«äŸ¿å©ã§æçšã§ãããã©ããã«ã€ããŠã¯ãä»ã«ãå
žåçãªçåããããŸãã ç§ã¯ãåºçç©ãéçºããã»ã¹ã« PVS-Studio éçã³ãŒã ã¢ãã©ã€ã¶ãŒãå°å
¥ããçç±ãã§ããããã®çåã®ã»ãšãã©ãææããããšåªããŸããã
ãæž
èŽããããšãããããŸããããã²ãè¶ããã ãã
è¿œå ã®ãªã³ã¯
- ã¢ã³ãã¬ã€ã»ã«ã«ããã
PVS-Studio ã¢ãã©ã€ã¶ãŒã C ããã³ C++ ã³ãŒãã«å¯ŸããŠçæããèå³æ·±ãèŠåãããã«ç¢ºèªããã«ã¯ã©ãããã°ããã§ãã? - ãŠã£ãããã£ã¢ã
ã©ã€ã¹ã®å®ç . - ã¢ã³ãã¬ã€ã»ã«ã«ããããŽã£ã¯ããªã¢ã»ãããšã¯ã
ããã°ã©ã ãœãŒã¹ã³ãŒãã®éç解æã«ãããæ©æ¢°åŠç¿ã®äœ¿çš . - PVS ã¹ã¿ãžãªã ããã¥ã¡ã³ããŒã·ã§ã³ã
è¿œå ã®èšºæèšå® . - ã¢ã³ãã¬ã€ã»ã«ã«ããã
EFL ã³ã¢ ã©ã€ãã©ãªã®äŸã䜿çšãã PVS-Studio ã¢ãã©ã€ã¶ãŒã®ç¹æ§ã10 ïœ 15% ã®èª€æ€ç¥ . - PVS ã¹ã¿ãžãªã ããã¥ã¡ã³ããŒã·ã§ã³ã
ã¢ãã©ã€ã¶ãŒã¡ãã»ãŒãžã®å€§éæå¶ . - ã€ã¯ã³ã»ã¢ã³ããªã€ã·ã³ã
X ç·è¡ç®¡å æè¡ã®æè²çšã·ãã¥ã¬ãŒã¿ãŒã®ãããžã§ã¯ãã§éç解æããã¹ãããæ¹æ³ã«ã€ã㊠. - ããã«ã»ãšã¬ã¡ãŒãšããã¹ãŽã£ãã¹ã©ãã»ã©ãºãã¹ããã
PVS-Studio ããŒã ã Unreal Engine ã³ãŒããã©ã®ããã«æ¹åããã . - ã¢ã³ãã¬ã€ã»ã«ã«ããã
éçã³ãŒã ã¢ãã©ã€ã¶ãŒ PVS-Studio ãéçºããã»ã¹ã«å°å ¥ããçç± .
ãã®èšäºãè±èªåã®èªè
ãšå
±æãããå Žåã¯ã翻蚳ãªã³ã¯ã䜿çšããŠãã ãã: Andrey Karpovã
åºæïŒ habr.com