ఇంటెల్ కోడ్ నాణ్యతను మెరుగుపరచడానికి మెషీన్ లెర్నింగ్ సిస్టమ్ను రూపొందించే లక్ష్యంతో కంట్రోల్ఫ్లాగ్ పరిశోధన ప్రాజెక్ట్కు సంబంధించిన పరిణామాలను కనుగొంది. ప్రాజెక్ట్ ద్వారా తయారు చేయబడిన టూల్కిట్, ఇప్పటికే ఉన్న పెద్ద మొత్తంలో కోడ్పై శిక్షణ పొందిన మోడల్ ఆధారంగా, C/C++ వంటి ఉన్నత-స్థాయి భాషలలో వ్రాసిన మూల గ్రంథాలలో వివిధ లోపాలు మరియు క్రమరాహిత్యాలను గుర్తించడానికి అనుమతిస్తుంది. అక్షరదోషాలు మరియు సరికాని టైప్ కాంబినేషన్లను గుర్తించడం నుండి, పాయింటర్లలో మిస్ అయిన NULL చెక్లు మరియు మెమరీ సమస్యలను గుర్తించడం వరకు కోడ్లోని వివిధ రకాల సమస్యలను గుర్తించడానికి సిస్టమ్ అనుకూలంగా ఉంటుంది. కంట్రోల్ ఫ్లాగ్ కోడ్ C++లో వ్రాయబడింది మరియు MIT లైసెన్స్ క్రింద ఓపెన్ సోర్స్.
GitHub మరియు ఇలాంటి పబ్లిక్ రిపోజిటరీలలో ప్రచురించబడిన ఓపెన్ ప్రాజెక్ట్ల ప్రస్తుత కోడ్ శ్రేణి యొక్క గణాంక నమూనాను రూపొందించడం ద్వారా సిస్టమ్ స్వీయ-నేర్చుకుంటుంది. అభ్యాస దశలో, సిస్టమ్ కోడ్లో నిర్మాణాలను నిర్మించడానికి సాధారణ నమూనాలను నిర్ణయిస్తుంది మరియు ఈ నమూనాల మధ్య లింక్ల యొక్క వాక్యనిర్మాణ వృక్షాన్ని నిర్మిస్తుంది, ఇది ప్రోగ్రామ్లోని కోడ్ అమలు ప్రవాహాన్ని ప్రతిబింబిస్తుంది. ఫలితంగా, విశ్లేషించబడిన అన్ని మూల గ్రంథాలను అభివృద్ధి చేసే అనుభవాన్ని మిళితం చేసే రిఫరెన్స్ డెసిషన్ ట్రీ ఏర్పడుతుంది.
పరీక్షిస్తున్న కోడ్ సూచన నిర్ణయ ట్రీకి వ్యతిరేకంగా తనిఖీ చేయబడిన నమూనాలను గుర్తించే ప్రక్రియ ద్వారానే వెళుతుంది. పొరుగు శాఖలతో పెద్ద వ్యత్యాసాలు తనిఖీ చేయబడిన టెంప్లేట్లో క్రమరాహిత్యాన్ని సూచిస్తాయి. సిస్టమ్ టెంప్లేట్లోని లోపాన్ని గుర్తించడానికి మాత్రమే కాకుండా, దిద్దుబాటును సూచించడానికి కూడా అనుమతిస్తుంది. ఉదాహరణకు, OpenSSL కోడ్లో, “(s1 == NULL) ∧ (s2 == NULL)” నిర్మాణం కనుగొనబడింది, ఇది సింటాక్స్ ట్రీలో 8 సార్లు మాత్రమే సంభవించింది, అయితే “(s1 == విలువ కలిగిన సమీప శాఖ NULL) || (s2 == NULL)" సుమారు 7 వేల సార్లు సంభవించింది. సిస్టమ్ క్రమరాహిత్యాన్ని కూడా గుర్తించింది “(s1 == NULL) | (s2 == NULL)" ఇది చెట్టులో 32 సార్లు సంభవించింది.
కోడ్ స్నిప్పెట్ను అన్వయించేటప్పుడు "if (x = 7) y = x;" సంఖ్యా విలువలను సరిపోల్చడానికి “వేరియబుల్ == నంబర్” నిర్మాణం సాధారణంగా “if” స్టేట్మెంట్లో ఉపయోగించబడుతుందని సిస్టమ్ నిర్ణయించింది, కాబట్టి, అధిక సంభావ్యతతో, “if” వ్యక్తీకరణలో “వేరియబుల్ = సంఖ్య” దీని వలన ఏర్పడుతుంది ఒక అక్షర దోషం. సాంప్రదాయ స్టాటిక్ ఎనలైజర్లు అటువంటి లోపాన్ని పట్టుకుంటాయి, కానీ వాటికి భిన్నంగా, ControlFlag రెడీమేడ్ నియమాలను ఉపయోగించదు, దీనిలో సాధ్యమయ్యే అన్ని ఎంపికలను ఊహించడం కష్టం, కానీ పెద్ద సంఖ్యలో ప్రాజెక్ట్లలో అన్ని రకాల నిర్మాణాలను ఉపయోగించడం యొక్క గణాంకాలపై ఆధారపడి ఉంటుంది. .
ఒక ప్రయోగంగా, CURL యుటిలిటీ యొక్క సోర్స్ కోడ్లో ControlFlagని ఉపయోగించడం, ఇది తరచుగా అధిక-నాణ్యత మరియు ధృవీకరించబడిన కోడ్కు ఉదాహరణగా పేర్కొనబడింది, "s->keepon" నిర్మాణ మూలకాన్ని ఉపయోగిస్తున్నప్పుడు స్టాటిక్ ఎనలైజర్లచే గుర్తించబడని లోపం కనుగొనబడింది, ఇది సంఖ్యా రకాన్ని కలిగి ఉంది, కానీ బూలియన్ విలువ TRUEతో పోల్చబడింది. OpenSSL కోడ్లో, "(s1 == NULL) ∧ (s2 == NULL)"తో పైన పేర్కొన్న సమస్యతో పాటు, "(-2 == rv)" (మైనస్ అక్షర దోషం) వ్యక్తీకరణలలో కూడా క్రమరాహిత్యాలు ఉన్నాయి. ) మరియు "BIO_puts(bp, ":")
మూలం: opennet.ru