Airac Family Seal QnA on Airac5
for expert C programmers

Airac5 ´Â ¹«¾ùÀΰ¡?
"Array Index Range Analyzer for C"ÀÇ ¾àÀÚ·Î ÇÁ·Î±×·¥ ºÐ¼® ±â¼úÀ» »ç¿ëÇؼ­ ¸Þ¸ð¸® Á¢±Ù ¿À·ù(buffer overrun)°¡ ÀϾ ¼ö ÀÖ´Â C ¼Ò½ºÀÇ À§Ä¡¸¦ ¹Ì¸® ¸ðµÎ ÀÚµ¿À¸·Î ã¾ÆÁÖ´Â ¼ÒÇÁÆ®¿þ¾î ½Ã½ºÅÛÀÌ´Ù.

C ÇÁ·Î±×·¥¿¡¼­ ¸Þ¸ð¸® Á¢±ÙÀº Ç×»ó ÇÒ´çµÈ ¸Þ¸ð¸®ÀÇ ³»ºÎ¿¡ ±¹ÇÑµÇ¾ß ÇÑ´Ù. Airac5´Â ÁÖ¾îÁø C ÇÁ·Î±×·¥ÀÇ ¸ðµç ½ÇÇà »óȲÀ» ºÐ¼®Çؼ­, ÇÒ´çµÈ ¸Þ¸ð¸®¸¦ ¹þ¾î³ª¼­ Á¢±ÙÇÏ´Â °æ¿ì(buffer overrun)µéÀ» ¹Ì¸® ¸ðµÎ ã¾ÆÁØ´Ù.

Å×½ºÆ®¿Í ¾î¶»°Ô ´Ù¸¥°¡?
Å×½ºÆ®ÀÇ ¹®Á¦Á¡µéÀ» º¸¿ÏÇØ ÁØ´Ù. Å×½ºÆ®´Â ÇÁ·Î±×·¥À» ½ÇÇà½ÃÄÑ¾ß ÇÑ´Ù´Â °Í°ú, ã°íÀÚ ÇÏ´Â ¿À·ù¸¦ ¸ðµÎ ãÀ» ¼ö ¾ø´Ù´Â ¹®Á¦°¡ ÀÖ´Ù. Airac5´Â ´ë»ó ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ°Áö ¾ÊÀ¸¸é¼­ ã°íÀÚ ÇÏ´Â ¿À·ùµéÀº ¸ðµÎ ã¾ÆÁØ´Ù. ÇÁ·Î±×·¥ÀÇ ¼Ò½º¸¸ ÀÖÀ¸¸é µÈ´Ù.

ÇÁ·Î±×·¥À» ½ÇÇà½Ãų ¼ö Àִ ȯ°æÀÌ ÁغñµÉ ¶§ ±îÁö ¿À·ù °ËÃâÀÌ ´ÊÃçÁö´Â °ÍÀº ¹Ù¶÷Á÷ÇÏÁö ¾Ê´Ù. Å×½ºÆ®´Â ¶Ç À¯ÇÑ°³ÀÇ ÀԷ¿¡ ´ëÇؼ­¸¸ Á¦´ë·Î ÀÛµ¿µÈ´Ù´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖÀ» »ÓÀÌ´Ù. °¡´ÉÇÑ ÀÔ·ÂÀÌ ¹«¼öÈ÷ ¸¹´Ù¸é Å×½ºÆ®´Â ¸ðµç »óȲÀ» Ä¿¹öÇÒ ¼ö ¾ø´Ù.

ÇÙ½É ±â¼úÀÌ ¹«¾ùÀΰ¡?
Á¤Àû ÇÁ·Î±×·¥ ºÐ¼® (static program analysis) ±â¼úÀÌ´Ù. ÀÌ ±â¼úÀº ÁÖ¾îÁø ÇÁ·Î±×·¥ÀÇ ¸ðµç ½ÇÇà»óȲÀ» ½ÇÇàÇϱâ Àü¿¡ ¹Ì¸® ¾ö¹ÐÇÏ°Ô È®ÀÎÇÏ´Â ±â¼úÀÌ´Ù.

Á¤Àû ÇÁ·Î±×·¥ ºÐ¼®(static program analysis) ±â¼úÀº ´Ù¾çÇÑ À̸§À¸·Î ´Ù¾çÇÑ ¼öÁØ¿¡¼­ ´Ù¾çÇÑ ÇÊ¿ä¿¡ ¸ÂÃß¾î °í¾ÈµÈ ¸¹Àº ±â¼úµéÀ» ¸ðµÎ Æ÷¼·ÇÑ´Ù: "static analysis", "abstract interpretation", "type system", "software model checking", "data-flow analysis", "program logics and proof system" µî.

ÀÌ ±â¼úÀº Áö³­ 30³â µ¿¾È ¿¬±¸°¡ ¹«¸£À;î ÀÌÁ¦ ºñ·Î¼­ ½ÇÁ¦ ¿À·ù°ËÁõ¿¡ Àû¿ëµÇ±â ½ÃÀÛÇÏ¿´´Ù. ¿ì¸®´Â Áö³­ 10³â ÀÌ»ó ÀÌ ºÐ¾ß ¿¬±¸¸¦ ¼öÇàÇØ¿Ô°í, Áö³­ÇØ ºÎÅÍ »ó¿ëÀ» ¸ñÇ¥·Î °³¹ßÇØ ¿Â ½Ã½ºÅÛÀÌ Airac5ÀÌ´Ù. ¿ä¾àÇؼ®(abstract interpretation) ±â¼úÀ» ±â¹ÝÀ¸·Î ÇÑ´Ù.

Valgrind³ª Rational PurifyPlus¿Í´Â ¾î¶»°Ô ´Ù¸¥°¡?
Valgrind³ª PurifyPlus´Â ½ÇÇà½ÃÅ°¸é¼­ ¿À·ù¸¦ ã¾ÆÁÖ´Â µµ±¸µéÀÌ´Ù. Å×½ºÆ®¸¦ ÅëÇØ ¿À·ù¸¦ ã´Â °Í°ú °°´Ù. "runtime program analysis"¶ó°í ÇÑ´Ù. Å×½ºÆ®ÀÇ ¹®Á¦Á¡µéÀ» °í½º¶õÈ÷ °¡Áø´Ù.

Airac5´Â ½ÇÇà½ÃÅ°Áö ¾Ê°í ¸ðµç ¿À·ùµéÀ» ¼Ò½º¸¦ ºÐ¼®Çؼ­ ã¾ÆÁØ´Ù. "static program analysis"±â¼úÀÇ Æ¯Â¡ÀÌ´Ù.

±× ±â¼ú¿¡ ±â¹ÝÇÑ °æÀï Á¦Ç°µé°ú ºñ±³Çϸé?
Á¤Àû ÇÁ·Î±×·¥ ºÐ¼®±â¼ú¿¡ ±â¹ÝÇؼ­ ¿À·ù ÀÚµ¿°ËÁõ±â¿¡ ƯȭµÈ ȸ»çµéÀº ´ëÇ¥ÀûÀ¸·Î µÎ°³°¡ ÀÖ´Ù. ÇÁ¶û½º Ecole Polytechnique Ãâ½ÅÀÇ Polyspace¿Í ¹Ì±¹ ½ºÅÄÆ÷µå´ë Ãâ½ÅÀÇ CoverityÀÌ´Ù.

CoverityÀÇ Á¦Ç°Àº ¸ñÇ¥ÇÑ ¿À·ù(buffer overrun)¸¦ ¸ðµÎ ã¾ÆÁÖÁöµµ ¸øÇÏ°í ÇãÀ§°æº¸µµ ÀÖ´Ù. PolyspaceÀÇ Á¦Ç°Àº ºÐ¼®ºñ¿ëÀÌ Å©°í ÇãÀ§°æº¸°¡ ¸¹´Ù. Airac5´Â Coverity°¡ ã¾Æ³»´Â ¿À·ù¸¦ Æ÷ÇÔÇؼ­ Coverity°¡ ³õÄ¡´Â °Í±îÁö ¸ðµÎ ã¾ÆÁÖ°í, Polyspaceº¸´Ù´Â ºÐ¼®ºñ¿ë°ú ÇãÀ§°æº¸°¡ Àû´Ù.

Airac5 ȨÀ» ¹æ¹®Çϸé Airac5 ÀÚüÀÇ ¼º´É»Ó ¾Æ´Ï¶ó Coverity¿ÍÀÇ ºñ±³ ¼º´ÉÀ» »ìÆ캼 ¼ö ÀÖ´Ù.

Á¦ÇÑÁ¡À̳ª ¼ûÀº ºñ¿ëÀº?
´ë»ó ¿À·ùµéÀÌ ÀÖÀ¸¸é ¸ðµÎ ã¾ÆÁÖÁö¸¸, ½ÇÁ¦ ¿À·ù°¡ ¾Æ´Ñµ¥µµ ¿À·ù¶ó°í ÆÇ´ÜÇÏ´Â °æ¿ì(false alarm)°¡ ÀÖ´Ù. ¿¹¸¦µé¾î, ½ÇÁ¦ ¿À·ù°¡ 10±ºµ¥¶ó¸é ±× Àå¼ÒµéÀ» Æ÷ÇÔÇؼ­ 15±ºµ¥¸¦ ã¾ÆÁÖ´Â °ÝÀÌ´Ù.

ÀÌ·¯ÇÑ ÇãÀ§°æº¸¸¦ 0°³·Î ÁÙÀÌ´Â °ÍÀº ºÒ°¡´ÉÇÏ´Ù. ¿À·ù¶ó°í ÆÇÁ¤µÈ ÁöÁ¡¸¶´Ù ÇãÀ§°æº¸ÀÎÁö ¾Æ´ÑÁö¸¦ »ç¶÷ÀÌ È®ÀÎÇÏ´Â °úÁ¤Àº ÇÊ¿äÇÏ´Ù.

C++ Ç¥ÁØ ¶óÀ̺귯¸®³ª Java¿¡¼­ ½ÇÇàÁß ¿¹¿Ü¸¦ ¹ß»ý½ÃÄÑÁÖ´Â °Í°ú ´Ù¸¥°¡?
±× ¹æ½ÄÀº ¿¡·¯°¡ ¹ß»ýÇÏ´Â °ÍÀ» ¹Ì¿¬¿¡ ¹æÁöÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ½ÇÇà Áß¿¡ ¿¡·¯°¡ ¹ß»ýÇßÀ» ¶§ ¿¹¿Ü¸¦ ¹ß»ý½ÃÅ°°í ÇÁ·Î±×·¡¸Ó´Â ±×·¯ÇÑ ¿¹¿Ü»óȲÀ» Àß Ã³¸®ÇÒ ¼ö ÀÖµµ·Ï ÇÁ·Î±×·¥ÇØ¾ß ÇÑ´Ù. ¶ÇÇÑ, ±×·± ¹æ½ÄÀº ¾ÈÀü¼ºÀ» º¸ÀåÇϱâ À§ÇØ ½ÇÇà Áß¿¡ ¸Þ¸ð¸® Á¢±Ù ¹üÀ§¸¦ ¸Å¹ø °Ë»çÇϱ⠶§¹®¿¡ ÇÁ·Î±×·¥ÀÇ Àüü ½ÇÇà ¼Óµµ°¡ ´À·ÁÁø´Ù.
mallocÀ¸·Î ÇÒ´çµÈ ¸Þ¸ð¸® °ø°£¿¡ ´ëÇؼ­µµ ºÐ¼®Çϴ°¡?
¹°·ÐÀÌ´Ù. ¹è¿­·Î ¼±¾ðµÇÁö ¾ÊÀº ÇÒ´çµÈ ¸Þ¸ð¸® °ø°£µé¿¡ ´ëÇؼ­µµ ±× ¹üÀ§¸¦ ¹þ¾î³ª´Â ¿À·ù(buffer overrun)¸¦ ã¾ÆÁÖ¸ç, ¸Þ¸ð¸® °ø°£¿¡ Á¢±ÙÇÏ´Â ´Ù¾çÇÑ ¹æ¹ý¿¡ ´ëÇؼ­µµ ¸ðµÎ ó¸®ÇÑ´Ù.
ANSI C·Î Â¥¿©Áø ¸ðµç ÇÁ·Î±×·¥À» Áö¿øÇϴ°¡?
¸ðµç ANSI C ÇÁ·Î±×·¥À» Áö¿øÇÑ´Ù.
µ¥¸ó(demon) ÇÁ·Î±×·¥Ã³·³ ½ÇÇàÀÌ ³¡³ªÁö ¾Ê´Â ÇÁ·Î±×·¥¿¡ ´ëÇؼ­´Â?
Airac5´Â ½ÇÇàÀÌ ³¡³ªÁö ¾Ê´Â ÇÁ·Î±×·¥¿¡ ´ëÇؼ­µµ À¯ÇÑÇÑ ½Ã°£ ³»¿¡ Ç×»ó ºÐ¼®À» ¸¶Ä£´Ù.
ÀÎÅÍ·´Æ® Çڵ鷯(interrupt handler) ¸¦ »ç¿ëÇÏ´Â °æ¿ìµµ °¡´ÉÇÑ°¡?
±×·¸´Ù. ÇØ´ç C ¼Ò½ºµéÀÌ ¸ðµÎ Àֱ⸸ ÇÏ¸é µÈ´Ù.
º´·Ä ¾²·¹µå(thread)µéÀ» °¡Áö´Â C ÇÁ·Î±×·¥µµ ºÐ¼® °¡´ÉÇÑ°¡?
º´·Ä ¾²·¹µåµéÀÌ ¼­·Î ±³Â÷(dependence/interference)Çϸ鼭 »ý±æ ¼ö ÀÖ´Â ¸Þ¸ð¸® Á¢±Ù ¿À·ùµéÀº ãÁö ¸øÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª, °³º° ¾²·¹µåµéÀÌ µ¶¸³ÀûÀ¸·Î °¡Áú ¼ö ÀÖ´Â ¿À·ù´Â ¸ðµÎ ã´Â´Ù.
ÀԷ°ªÀ̳ª ¿ÜºÎ ÀÚ·á¿¡ ÀÇÇØ Á¿ìµÇ´Â ¸Þ¸ð¸® Á¢±ÙÀº ¾î¶»°Ô 󸮵dzª?
ÀԷ°ªÀÌ Á¤ÀǵÇÁö ¾Ê¾Ò´Ù¸é °¡´ÉÇÑ ¸ðµç °æ¿ì¸¦ °í·ÁÇÑ ºÐ¼®°á°ú¸¦ ³»³õ´Â´Ù. ¸¸¾à ¿Ã¹Ù¸£Áö ¾ÊÀº ÀԷ°ªÀÌ µé¾î¿ÔÀ» ¶§ ±× °ªÀ» »ç¿ëÇÏÁö ¾Ê°Ô ÇÏ´Â ·çƾÀÌ Æ÷ÇԵǾî ÀÖ´Ù¸é ¿Ã¹Ù¸¥ ÀԷ°ªÀ¸·Î ÆÇÁ¤µÇ¾î ½ÇÁ¦ ¼öÇàµÇ´Â °æ¿ì¸¸À» °í·ÁÇÏ¿© ºÐ¼®ÇÑ´Ù.
ºÐ¼® ¼Óµµ´Â ¾ó¸¶³ª µÇ´Â°¡?
´ë°Ô ÄÄÆÄÀÏ·¯ ¼ÓµµÀÇ 50¹è À̳»°í, ´õ ¸¹Àº ½Ã°£ÀÌ °É¸®´Â °æ¿ìµµ ÀÖ´Ù. ºÐ¼® ¼Óµµ´Â ÄÄÆÄÀÏ ¼Óµµ¿Í ´Þ¸® ÇÁ·Î±×·¥ ¼Ò½ºÀÇ Å©±â¿¡ ºñ·ÊÇÏÁö ¾Ê°í ³í¸®Àû º¹Àâµµ¿¡ ºñ·ÊÇÑ´Ù. µû¶ó¼­, ÀÛÀº ¼Ò½ºÀÌÁö¸¸ ºÐ¼®ÀÌ ¿À·¡°É¸± ¼ö ÀÖ°í Å©Áö¸¸ »¡¸® ³¡³¯ ¼ö ÀÖ´Ù. Airac5 Ȩ¸¦ ¹æ¹®ÇÏ¸é ±¸Ã¼ÀûÀÎ ¼º´É µ¥ÀÌŸ¸¦ »ìÆ캼 ¼ö ÀÖ´Ù. ±×°÷¿¡¼­ ¿Â¶óÀÎ µ¥¸ð¸¦ ÇØ º¼ ¼öµµ ÀÖ°í, ½ÇÁ¦·Î ³»·Á¹Þ¾Æ »ç¿ëÇØ º¼ ¼öµµ ÀÖ´Ù.
Àüü ÇÁ·Î±×·¥ÀÇ Å©±â°¡ Å©´Ù¸é »ç¿ëÇϱâ ÈûµéÁö ¾Ê³ª?
ÄÄÆÄÀÏ·¯°¡ ¸ðµâÈ­¸¦ Áö¿øÇϱâ À§ÇØ °³º° ÆÄÀÏ¿¡ ´ëÇØ ÄÄÆÄÀÏÇÒ ¼ö ÀÖµíÀÌ Airac5µµ °³º° ÆÄÀÏ ´ÜÀ§·Î °Ë»çÇÒ ¼ö ÀÖ´Ù.
¾ó¸¶³ª Å« ÆÄÀϱîÁö ºÐ¼®ÇÒ ¼ö Àִ°¡?
ºÐ¼® °úÁ¤¿¡¼­ ¸Þ¸ð¸®ÀÇ Á¦¾àÀÌ ÀÖÀ¸³ª ÀÎÅÚ ÆæƼ¾ö4 3.2GHz 4GB RAM ȯ°æ¿¡¼­ ¾à 1¸¸ ¶óÀÎÀÇ ¼Ò½ºÆÄÀÏÀ» ÇÑ ¹ø¿¡ ºÐ¼® °¡´ÉÇÏ´Ù. ´ëÇü ÇÁ·Î±×·¥ÀÇ °æ¿ì °¢ °³º° ÆÄÀÏ, ¶Ç´Â ¼Ò½ºÀÇ ºÎºÐ º°·Î ºÐ¼®À» ¼öÇàÇÒ ¼ö Àֱ⠶§¹®¿¡ »ç½Ç»ó Å« Á¦¾àÀº ¾ø´Ù.
±×·¸´Ù¸é, ¿©·¯ ÆÄÀÏ·Î ±¸¼ºµÈ ÇÁ·Î±×·¥ ¼Ò½º¸¦ ±×´ë·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â ¸»Àΰ¡?
ÀϹÝÀûÀ¸·Î ±×·¸´Ù. Makefile ÀÌ ÀÖ´Ù¸é Airac5 ÀÌ ¾Ë¾Æ¼­ ÇÊ¿äÇÑ ÆÄÀÏÀ» ã¾Æ main ÇÔ¼öºÎÅÍ ºÐ¼®À» ½ÃÀÛÇÏ°Ô µÈ´Ù. ¸¸¾à main ÇÔ¼ö°¡ ¾ø´Â °æ¿ì¿¡´Â °¡»óÀÇ È£Ã⠽󪸮¿À¸¦ °®Ãá main ÇÔ¼ö¸¦ Á¦°øÇØ¾ß ÇÑ´Ù. Makefile ÀÌ ¾ø´Ù¸é *.c ÆÄÀϵéÀ» Àüó¸® ÇÑ ÈÄÀÇ ¼Ò½ºÄڵ带 ÀÔ·ÂÀ¸·Î ÁÖ¸é µÈ´Ù.
Airac5ÀÇ ºÐ¼®°á°ú ¿À·ù·Î ÁöÀûµÈ ºÎºÐÀÌ ½ÇÁ¦·Î´Â ¿À·ù°¡ ¾Æ´Ï¾ú´Ù. ¾î¶°ÇÑ Çö»óÀΰ¡?
¸ðµç »óȲÀ» À¯ÇÑÇÏ°Ô Æ÷¼·ÇÏ´Ùº¸¸é, ¿À·ùÀÎÁö¸¦ È®½ÇÈ÷ ¾Ë ¼ö ¾ø´Â °æ¿ì°¡ ÀÖ´Ù. ÀÌ·¯ÇÑ °æ¿ì¿¡´Â ¾ÈÀüÇÑ °á·ÐÀ» À§Çؼ­ ¿À·ù°¡ ÀÖ´Â °ÍÀ¸·Î ÆǺ°ÇÑ´Ù.
Airac5ÀÇ ±×·¯ÇÑ ÇãÀ§ °æº¸(false alarm)¸¦ ¾î¶»°Ô ±¸º°ÇÒ ¼ö Àִ°¡?
Airac5°¡ ÀÚµ¿À¸·Î ¿Ïº®ÇÏ°Ô ±¸º°ÇÏ´Â °ÍÀº ºÒ°¡´ÉÇÏ´Ù. ´ë½Å¿¡, ¿À·ù °æº¸µéÀÌ ÁøÂ¥ÀÏ È®·üÀ» °è»êÇؼ­ °¡Àå ³ôÀº È®·üÀ» °¡Áø ¿À·ù °æº¸µé ºÎÅÍ »ç¿ëÀÚ°¡ »ìÆ캸µµ·Ï ÇÑ´Ù. °ø°³¹öÁ¯¿¡¼­´Â ã¾ÆÁø ¿À·ùµé Áß¿¡¼­ ÁøÂ¥ ¿À·ùÀÏ È®·üÀÌ °¡Àå ³ôÀº »óÀ§ 5°³ÀÇ ¿À·ù¸¸ º¸¿©ÁØ´Ù. Ç® ¹öÁ¯Àº ¸ðµç ¿À·ùµéÀ» ÁøÂ¥ÀÏ È®·üÀÇ ¼ø¼­´ë·Î º¸¿©ÁØ´Ù.
½ÃÇèÀûÀ¸·Î »ç¿ë °¡´ÉÇÑ°¡?
Airac5 Ȩ ¿¡¼­ ½ÇÇàÈ­ÀÏÀ» ³»·Á¹Þ¾Æ »ç¿ëÇØ º¼ ¼ö ÀÖ´Ù. ¿Â¶óÀÎ µ¥¸ðµµ ±×°÷¿¡¼­ Á¦°øµÈ´Ù. °ø°³µÈ ¹öÁ¯Àº ½ÇÁ¦ ¹öÁ¯º¸´Ù Á¦ÇÑÁ¡ÀÌ ÀÖ´Ù. ºÐ¼®ÇÒ ¼ö ÀÖ´Â ¼Ò½ºÀÇ Å©±â°¡ ÇÁ·Î½ÃÁ® 100°³ À̳»¿©¾ß ÇÏ°í, ºÐ¼®°á°ú ã¾ÆÁø ¿À·ùµéÁß¿¡¼­ 5°³¸¸ ¾Ë·ÁÁØ´Ù.
¿ÏÀüÇÑ ¹öÁ¯À» »ç¿ëÇÏ·Á¸é?
´Ù¾çÇÑ ¶óÀ̼¾½º °è¾àÀ» ÅëÇØ ±¸¸ÅÇÒ ¼ö ÀÖ´Ù. Airac5 ÀÚü»Ó ¾Æ´Ï¶ó Àå±âÀûÀÎ "whole product service"¸¦ ±¸¸ÅÇÒ ¼ö ÀÖ´Ù. ¿¬¶ôó.

© Copyright 2005, 2006 RopasWork Inc., Programming Research Lab., Seoul National University