[Áöµð³ÝÄÚ¸®¾Æ]Äڵ带 ÀÛ¼ºÇÏ´Â °³¹ßÀÚ°¡ ÀÚ½ÅÀÌ ÀÛ¼ºÇÑ Äڵ忡 ´ëÇÑ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Â ¹æ¹ýÀ» Å©°Ô µÎ°¡Áö·Î ³ª´ ¼ö ÀÖ´Ù. ù ¹øÂ° ¹æ¹ýÀº Á¤Àû(static) ºÐ¼® ¹æ¹ýÀ̸ç, ´Ù¸¥ ¹æ¹ýÀº µ¿Àû(dynamic) ºÐ¼® ¹æ¹ýÀÌ´Ù. Á¤Àû ºÐ¼® ¹æ¹ýÀº Äڵ带 ½ÇÇàÇÏÁö ¾Ê°í Äڵ带 ºÐ¼®ÇÏ´Â °ÍÀ¸·Î ÁÖ·Î ÄÄÆÄÀÏ ¼öÁØ¿¡¼ Äڵ带 ºÐ¼®ÇÏ°Ô µÈ´Ù. ¿¹¸¦ µé¸é, ÄÚµåÀÇ ±¸Á¶¸¦ ºñÁÖ¾óÇÏ°Ô º¸¿©ÁÖ´Â ±â´ÉÀÌ ÀÌ¿¡ ÇØ´çÇÑ´Ù. ¹Ý¸é¿¡ µ¿ÀûÀÎ ºÐ¼® ¹æ¹ýÀº Äڵ带 ½ÇÇàÇÔÀ¸·Î½á ¾òÀº °á°ú¸¦ º¸¿©ÁÖ´Â °ÍÀ¸·Î È£Ãâ Æ®¸®(call tree)¸¦ º¸¿©Áְųª µð¹ö°Å¸¦ ÅëÇÑ ºÐ¼® ¹æ¹ýÀÌ ÀÌ¿¡ ¼ÓÇÑ´Ù.
À̹ø¿¡ ¼Ò°³ÇÒ Code Analysis´Â Á¤ÀûÀÎ ºÐ¼® ¹æ¹ý¿¡ ÇØ´çÇÏ´Â °ÍÀ¸·Î Äڵ带 ½ÇÇàÇÔÀ¸·Î½áÄڵ忡 ³»Á¦µÇ¾î ÀÖ´Â ¹®Á¦Á¡À» ¾Ë·ÁÁØ´Ù. ÀÌ¿Í ¹Ý´ë·Î µ¿ÀûÀÎ ºÐ¼® µµ±¸¿¡´Â ÇÁ·ÎÆÄÀÏ·¯(Profiler)°¡ ÁÖ·Î »ç¿ëµÈ´Ù. ¾Õ¿¡¼ ¸»ÇßµíÀÌ, Á¤ÀûÀÎ ºÐ¼® µµ±¸´Â Äڵ带 ½ÇÇàÇÏÁö ¾Ê±â ¶§¹®¿¡ ÄÚµåÀÇ ¼º´É¿¡ ´ëÇÑ ±¸Ã¼ÀûÀÎ ÀڷḦ Á¦½ÃÇÒ ¼ö ¾ø´Ù. ´ë½Å ÀÛ¼ºµÈ ÄÚµå ÀÚü¿¡ ´ëÇÑ ºÐ¼®ÀÌ ÁÖ¿ä ±â´ÉÀÌ´Ù.
Code Analysis´Â ±âÁ¸¿¡ FxCopÀ̶ó´Â À̸§À¸·Î CLR ÆÀ¿¡¼ °ø°³ÇؿԴø ÅøÀÌ Visual Studio Team System(VSTS)¿¡ ÅëÇÕµÈ ¹öÀüÀÌ´Ù. FxCopÀÇ ±¸Ã¼ÀûÀÎ ±â´ÉÀº °ü¸®µÇ´Â ÄÚµå(Managed Code)°¡ Microsoft .NET FrameworkÀÇ µðÀÚÀÎ °¡À̵å¶óÀÎÀ» µû¸£°í ÀÖ´ÂÁö °Ë»çÇÏ´Â ÄÚµå ºÐ¼® ÅøÀ̸ç,
http://www.gotdotnet.com/team/fxcop¿¡¼ ´Ù¿î·Îµå ¹ÞÀ» ¼ö ÀÖ´Ù. º¸´Ù ±¸Ã¼ÀûÀ¸·Î ¼³¸íÇϸé, FxCopÀº ÀÛ¼ºµÈ Äڵ尡 COM interop¸¦ Á¦´ë·Î »ç¿ëÇϰí ÀÖ´ÂÁö, ¶Ç´Â °í¼º´É Äڵ带 ÀÛ¼ºÇϱâ À§ÇÑ ±ÔÄ¢µéÀ» Áö۰í ÀÖ´ÂÁö¿Í °°Àº 200°³°¡ ³Ñ´Â ±ÔÄ¢µé¿¡ ´ëÇØ¼ Äڵ带 °Ë»çÇÑ´Ù.
FxCopÀÌ VSTS ÀÌÀüºÎÅÍ ¸¹ÀÌ »ç¿ëµÇ¾î ¿ÔÁö¸¸(°³¹ßÀÚ¿¡°Ô °ø°³µÇ´Â µµ±¸), VSTS¿¡ ¿Í¼ Code Analysis¶ó´Â À̸§À¸·Î ¿ë¾î°¡ º¯°æµÇ¾ú±â ¶§¹®¿¡ MSDN µµ¿ò¸»¿¡¼ FxCop¿¡ ´ëÇÑ µµ¿ò¸» ã±â À§Çؼ´Â Code Analysis¶ó´Â À̸§À¸·Î °Ë»öÀ» ÇØ¾ß ÀûÀýÇÑ µµ¿ò¸»À» È®ÀÎÇÒ ¼ö ÀÖ´Ù. Code Analysis¿Í FxCop°úÀÇ °ü°è¿¡ ´ëÇØ¼´Â, °ÅÀÇ ´ëºÎºÐÀÇ ±â´ÉÀÌ ¹«·á·Î ¹èÆ÷µÇ´Â FxCop ¹öÀü°ú µ¿ÀÏÇÏÁö¸¸, CLR ÆÀ¿¡ ÀÇÇÏ¸é ¹«·á ¹öÀü¿¡¼ Áö¿øÇÏÁö ¾Ê´Â ±â´ÉÀ» Code Analysis¿¡¼ Áö¿øÇÑ´Ù. ÇÏÁö¸¸ µÎ ±â´ÉÀÇ Â÷À̰¡ ºÐ¸íÇÏÁö ¾Ê±â ¶§¹®¿¡ ¾î´À ¹öÀüÀ» »ç¿ëÇÏ´õ¶óµµ ´ëºÎºÐÀÇ ¿À·ù¸¦ ã¾Æ³»´Â µ¥¿¡´Â ÀüÇô ¹®Á¦°¡ ¾øÀ» °ÍÀÌ´Ù.
±×·³ °£´ÜÇÑ ¿¹Á¦¸¦ ÅëÇØ¼ Code AnalysisÀÇ ±â´ÉÀ» »ìÆìº¸µµ·Ï ÇÏÀÚ.
¾ÕÀ¸·Î »ç¿ëÇÒ ¿¹Á¦ ¼Ò½º ÄÚµå ´Â ´ÙÀ½°ú °°´Ù.
#region Using directives
using System;
#endregion
namespace testCode
{
public class demo : Exception
{
public static void Initialize(int size) { }
protected static readonly int _item;
public static int item { get { return _item; } }
}
}
Code Analysis Ȱ¼ºÈ Çϱâ
ÇÁ·ÎÁ§Æ®¸¦ »ý¼ºÇÏ¸é ±âº»ÀûÀ¸·Î Code Analysis ±â´ÉÀÌ ºñȰ¼ºÈµÇ¾î ÀÖ´Ù(ÀÌ ±â´ÉÀº ÀÚµ¿ ½ÇÇà ±â´É¿¡ ´ëÇÑ È°¼ºÈ À¯¹«ÀÌÁö »ç¿ë °¡´É¼º¿¡ °üÇÑ ±â´ÉÀº ¾Æ´Ï´Ù). ¸¸¾à Code Analysis ±â´ÉÀ» Ȱ¼ºÈÇϸé, Visual Studio´Â ÇÁ·ÎÁ§Æ®¸¦ ºôµåÇÒ ¶§¸¶´Ù ¸Å¹ø Code Analysis¸¦ ¼öÇàÇÒ °ÍÀÌ´Ù. ¹°·Ð Code Analysis ±â´ÉÀ» Ȱ¼ºÈÇÏÁö ¾Ê´õ¶óµµ Run Code Analysis ¸Þ´º¸¦ ¼±ÅÃÇÏ¿© ¼öµ¿À¸·Î Code Analysis¸¦ ½ÇÇàÇÒ ¼ö ÀÖ´Ù. ¸¸¾à ÇÁ·ÎÁ§Æ®¸¦ ºôµåÇÒ ¶§¸¶´Ù Code Analysis¸¦ ¼öÇàÇÏ°í ½Í´Ù¸é, ¼³¸íÇÑ °Íó·³ ¼Ó¼º â¿¡¼ Code Analysis ±â´ÉÀ» Ȱ¼ºÈÇÒ ¼ö ÀÖ´Ù. ÀÌ ¶§, ÇÁ·ÎÁ§Æ®ÀÇ Á¾·ù¿¡ µû¶ó¼ Code Analysis¸¦ ¼³Á¤ÇÏ´Â À§Ä¡°¡ ´Ù¸£±â ¶§¹®¿¡ ¾à°£ÀÇ ÁÖÀǸ¦ ÇÊ¿äÇÏ´Ù. ÀÏ¹Ý °ü¸®µÇ´Â ÄÚµåÀÎ °æ¿ì¿¡´Â ´ÙÀ½ ±×¸²°ú °°ÀÌ ÇÁ·ÎÁ§Æ®ÀÇ ¼Ó¼º âÀ» ¶ç¿î ÈÄ Code Analysis ÅÇÀ» ¼±ÅÃÇÏ¿© Enable Code Analysis üũ »óÀÚ¸¦ ¼±ÅÃÇÏ¸é µÈ´Ù.
¹Ý¸é¿¡ ASP.NET ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ °æ¿ì¿¡´Â Website âÀ» ¶ç¿î ÈÄ Code Analysis Configuration ÅÇÀ» ¼±ÅÃÇÏ¿© Enable Code Analysis üũ »óÀÚ¸¦ ¼±ÅÃÇÑ´Ù. ¾Æ¸¶µµ ÇÁ·ÎÁ§Æ®¸¦ »ý¼ºÇÏ¿© Äڵ带 ÀÛ¼ºÇÑ ÈÄ Ã³À½À¸·Î Code Analysis¸¦ ½ÇÇàÇÏ¸é »ó´çÈ÷ ¸¹Àº °æ°í°¡ ¹ß»ýÇÒ °ÍÀÌ´Ù. ¹ß»ýÇÑ °æ°íµéÀ» Áö±Ý ¹Ù·Î ÇØ°áÇÏÁö ¾Ê¾Æµµ µÈ´Ù¸é, ¾Æ¸¶µµ ºôµåÇÒ ¶§¸¶´Ù Code Analysis¸¦ ½ÇÇàÇÏ´Â °³¹ßÀÚ´Â ¸¹Áö ¾ÊÀ» °ÍÀÌ´Ù. »Ó¸¸ ¾Æ´Ï¶ó ÇÁ·ÎÁ§Æ®ÀÇ Å©±â°¡ Ä¿Áú¼ö·Ï Code Analysis¸¦ ½ÇÇàÇϴµ¥ ¸¹Àº ½Ã°£ÀÌ °É¸®±â ¶§¹®¿¡ ÀæÀº ºôµå¸¦ ¼öÇàÇÏ´Â °³¹ßÆÀ¿¡¼´Â ¿ÀÈ÷·Á ºÎ´ãÀÌ µÉ ¼öµµ ÀÖ´Ù. ÇÏÁö¸¸ ÀϺ° ºôµå(Daily build)¸¦ ¼öÇàÇÏ´Â ÆÀÀº ºôµå°¡ ³¡³ ÈÄ ÀÚµ¿À¸·Î Code Analysis¸¦ ½ÇÇàÇÔÀ¸·Î½á ÀÚµ¿À¸·Î Äڵ带 °ËÁõÇÒ ¼ö ÀÖ´Ù. ÀÚ½ÅÀÌ ¼ÓÇÑ ÆÀÀÇ ºôµå Á¤Ã¥¿¡ ¸Â°Ô ¿É¼ÇÀ» ¼³Á¤Çϵµ·Ï ÇÑ´Ù.
Enable Code Analysis üũ »óÀÚ¸¦ ¼±ÅÃÇÏ´Â °Í°ú °ü·ÃÇØ¼ ÁÖÀÇÇØ¾ß ÇÒ Á¡Àº ¿ÜºÎ·Î ¹èÆ÷µÉ ¸±¸®Áî ºôµå¿¡´Â ÀÌ ±â´ÉÀ» Ȱ¼ºÈÇØ¼´Â ¾ÈµÈ´Ù´Â Á¡ÀÌ´Ù. ÀÌ ±â´ÉÀ» Ȱ¼ºÈÇϸé À§ÀÇ ±×¸²¿¡¼ È®ÀÎÇÒ ¼ö ÀÖ´Â ¹Ù¿Í °°ÀÌ CODE_ANALYSIS »ó¼ö¸¦ Á¤ÀÇÇÏ°Ô µÇ´Âµ¥, CODE_ANALYSIS »ó¼ö°¡ Á¤ÀǵǸé SuppressMessage ¾ÖÆ®¸®ºäÆ®°¡ ¹ÙÀ̳ʸ®¿¡ Ãß°¡µÇ¾î ÀÚÄ© ¼º´É¿¡ ¿µÇâÀ» ¹ÌÄ¥ ¼ö Àֱ⠶§¹®ÀÌ´Ù.
Code Analysis ½ÇÇàÇϱâ
¿ì¼± ¾Õ¼ ¼Ò°³ÇÑ ManagedDemo ¼Ö·ç¼ÇÀ» MSDN µµ¿ò¸»¿¡¼ ´Ù¿î·Îµå¸¦ ¹Þ°Å³ª »õ·Î¿î C# ÇÁ·ÎÁ§Æ®¸¦ »ý¼ºÇÏ¿© ManagedDemo Äڵ带 ÀÛ¼ºÇÑ´Ù. »õ·Î¿î ÇÁ·ÎÁ§Æ®°¡ »ý¼ºµÇ¾ú´Ù¸é ¼Ó¼º âÀ» ¿°í Enable Code Analysis (defines CODE_ANALYSIS constant) üũ »óÀÚ¸¦ ¼±ÅÃÇÏ°í ¼Ó¼ºÀ» ÀúÀåÇÑ´Ù. Code Analysis°¡ Ȱ¼ºÈµÇ¾î Àֱ⠶§¹®¿¡ ºôµå¸¦ ¼öÇàÇÏ¸é ´ÙÀ½°ú °°ÀÌ Error List â¿¡ ºôµå ¿À·ù°¡ º¸°íµÉ °ÍÀÌ´Ù.
¸¸¾à ManagedDemo¿Í µ¿ÀÏÇÑ Äڵ带 ÀÛ¼ºÇß´Ù¸é, ÃÑ 15°³ÀÇ ¿À·ù¸¦ È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. Error List âÀÇ »ó´Ü¿¡ º¸¸é, ErrorÀÇ ¼ö¿Í WarningÀÇ ¼ö, ±×¸®°í MessageÀÇ ¼ö¸¦ È®ÀÎÇÒ ¼ö ÀÖÀ¸¸ç, ¹öưÀ» Ŭ¸¯ÇÏ¿© ƯÁ¤ ŸÀÔÀÇ ¿À·ù°¡ Ç¥½ÃµÇ°Å³ª Ç¥½ÃµÇÁö ¾Êµµ·Ï ÇÒ ¼ö ÀÖ´Ù. ±âº»ÀûÀ¸·Î Error List âÀº ¸ðµç ŸÀÔÀÇ ¿À·ù¸¦ Ç¥½ÃÇÑ´Ù.
¿À·ù ºÐ¼®Çϱâ
Code Analysis¸¦ ½ÇÇàÇÏ¿© ¹ß»ýÇÑ ¿À·ù´Â °íÀ¯ÇÑ ¿À·ù ¹øÈ£¸¦ °®´Â´Ù. ¿¹¸¦ µé¸é, À§ÀÇ ±×¸²¿¡¼ 6¹ø °æ°í´Â CA1709¶ó´Â ¿À·ù ¹øÈ£¸¦ °®´Â´Ù. Description Ä®·³Àº °¢°¢ÀÇ °æ°í°¡ ¹ß»ýÇÑ ÀÌÀ¯¿¡ ´ëÇØ¼ ¼³¸íÇϰí, File°ú LineÀº °¢°¢ ¼Ò½º ÆÄÀϰú ÁÙ ¹øÈ£¸¦ Ç¥½ÃÇÑ´Ù. ¸¹Àº °æ¿ì¿¡ Description¿¡ ¼³¸íµÈ ³»¿ë¸¸À¸·Îµµ °æ°í¸¦ ¾î¶»°Ô Á¦°ÅÇÒ °ÍÀÎÁö¸¦ ¾Ë ¼ö ÀÖÁö¸¸, ¸¸¾à ´õ ¸¹Àº Á¤º¸°¡ ÇÊ¿äÇÏ´Ù¸é °æ°í¸¦ ¼±ÅÃÇÑ ÈÄ F1À» ´·¯ ¿À·ù ¹øÈ£¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ µµ¿ò¸»À» »ìÆìº¼ ¼ö ÀÖ´Ù. µµ¿ò¸»À» óÀ½ ÀÌ¿ëÇÏ´Â °æ¿ì¿¡´Â ´ÙÀ½°ú °°ÀÌ µµ¿ò¸»À» ¼±ÅÃÇÒ ¼ö Àִ âÀÌ ¶ß´Âµ¥, ÀϹÝÀûÀ¸·Î ¿Â¶óÀÎ µµ¿ò¸»À» ÀÌ¿ëÇÏ´Â °Íº¸´Ù´Â ÄÄÇ»ÅÍ¿¡ ¼³Ä¡µÈ µµ¿ò¸»ÀÌ ´õ ºü¸£±â ¶§¹®¿¡ ´ÙÀ½ ±×¸²¿¡¼¿Í °°ÀÌ Use Local Help as primary source¸¦ ¼±ÅÃÇÑ ÈÄ, OK ¹öưÀ» Ŭ¸¯ÇÏ¿©, µµ¿ò¸»À» ½ÇÇàÇϵµ·Ï ÇÑ´Ù.
±×¸®°í ´ÙÀ½ ±×¸²°ú °°ÀÌ CA1709 °æ°í¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. ¾Õ¼ ¼Ò°³ÇÑ ±×¸²¿¡´Â ³ªÅ¸³ªÁö ¾Ê¾ÒÁö¸¸, How to Fix Violations¶ó´Â Ç׸ñÀ» ÅëÇØ¼ ¹ß»ýÇÑ °æ°í¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» ÀÚ¼¼ÇÏ°í ¼Ò°³Çϰí ÀÖ´Ù. ÀÌ °æ¿ì¿¡´Â "Change the name so that it is cased correctly."¿Í °°ÀÌ ÇØ°áÃ¥À» Á¦½ÃÇϰí ÀÖ´Ù.
µµ¿ò¸»À» »ç¿ëÇϰųª DescriptionÀ» ÅëÇØ¼ °æ°í¿¡ ´ëÇÑ ¿øÀÎÀ» ÆÄ¾ÇÇϰí ÇØ°áÃ¥ÀÌ ¶°¿Ã¶ú´Ù¸é, °æ°í°¡ ¹ß»ýÇÑ ÄÚµå·Î À̵¿ÇÏ¿© °æ°í¸¦ Á¦°ÅÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ¸¸¾à ƯÁ¤ÇÑ °æ°íÀÇ °æ¿ì ±»ÀÌ Äڵ带 º¯°æÇÏ¿© Á¦°ÅÇÒ Çʿ䰡 ¾ø´Ù¸é, ´ÙÀ½°ú °°ÀÌ °æ°í¸¦ ¼±ÅÃÇÑ ÈÄ, ¸¶¿ì½º ¿À¸¥ÂÊ ¹öưÀ» ´·¯ Suppress Message(s) ¸Þ´º¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù.
6¹øÂ° °æ°í¿¡¼ Suppress Message¸¦ ¼±ÅÃÇϸé, ´ÙÀ½°ú °°Àº Äڵ尡 demo Ŭ·¡½º À§¿¡ Ãß°¡µÈ´Ù.
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly")]
public class demo : Exception
{
public static void Initialize(int size) { }
protected static readonly int _item;
public static int item { get { return _item; } }
}
±×¸®°í ´ÙÀ½ ±×¸²°ú °°ÀÌ 6¹ø ÁÙÀº °æ°í°¡ »èÁ¦µÇ¾ú´Ù´Â Àǹ̷ΠÁÙÀÌ ±×¾îÁø´Ù.
ÇÏÁö¸¸ ¾Õ¼ ¼³¸íÇÑ °Íó·³ ÀÌ¿Í °°ÀÌ SuppressMessage ¾ÖÆ®¸®ºäÆ®¸¦ »ç¿ëÇÏ¸é ¼º´É¿¡ ¿µÇâÀ» ¹ÌÄ¥ ¼ö Àֱ⠶§¹®¿¡ °¡´ÉÇÏ´Ù¸é, ÀûÀýÇÑ Á¶Ä¡¸¦ ÃëÇØ¼ °æ°í¸¦ ¾ø¾Ö´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù.
Áö¸é»ó, °¢°¢ÀÇ ¸ðµç ¿À·ù¸¦ Á¦°ÅÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼ ¼Ò°³ÇÏÁö´Â ¾Ê¾ÒÁö¸¸(´ëºÎºÐÀÇ ÇØ°á ¹æ¹ýÀº µµ¿ò¸»À» ÅëÇØ¼ ¾òÀ» ¼ö ÀÖ´Ù), Code Analysis¸¦ ½ÇÇàÇØ¼ ¾òÀº ´ëºÎºÐÀÇ °æ°í´Â °³¹ßÀÚ°¡ ÁÖÀǸ¦ ÇÑ´Ù¸é »çÀü¿¡ ¿¹¹æÀÌ °¡´ÉÇÏ´Ù. ¹°·Ð Àͼ÷ÇØ Áö±â À§Çؼ´Â ¾î´À Á¤µµÀÇ ½Ã°£ÀÌ ÇÊ¿äÇÒ °ÍÀÌ´Ù. ƯÈ÷ À̸§ ±Ô¾àÀÇ °æ¿ì¿¡´Â À̸§ ±Ô¾àÀ» Áö۱â À§Çؼ Áö±Ý±îÁöÀÇ ½ÃµµµÇ¾î¿Ô´ø ¸¹Àº ¹æ¹ýµé Áß °¡Àå °·ÂÇÑ ±â´ÉÀÌ´Ù. Code Analysis¸¦ »ç¿ëÇÏ¿© ³ª»Û ÄÚµåÀÇ ÈçÀûÀ» ¿Ïº®ÇÏ°Ô Á¦°ÅÇØ º¸ÀÚ~!
ÇÊÀÚ ¼¿ì¼®´ÔÀº Microsoft MVPÀ̸ç, ÇöÀç Ä«À̽ºÆ® ´ëÇпø ÀçÇÐ ÁßÀ̸ç, C°ü·Ã ÇÁ·Î±×·¡¹Ö¿¡ ´ÉÅëÇÏ´Ù.