MoinMoin   TDD UserPreferences
 
Help Info Print View Search Diffs Edit
 À妽º   µµ¿ò¸»   Ã£±â   ´ë¹®   ¹Ù²ï±Û 

  1. ¸ñÀû
  2. TDD
    1. ±âÁ¸ ÄÚµå Unit Test
    2. TDD ¼ö·Ã
  3. TDD ±³À°
  4. °ü·Ã ¼­Àû
  5. °ü·Ã »çÀÌÆ®
Since 2009. 1. 25.

¸ñÀû

TDD

TDD ÀÌÇØ¸¦ À§ÇÑ ½Ç½À
  1. TDD»ýȰ¹é¼­
      ¿ì¸® ÀÏ»óÀÇ Æ¯Á¤ÇÑ ÀÏÀ» TDD·Î ÇÏ¸é ¾î¶² ¸ð½ÀÀϱî? ½ÇÁ¦ ÇÁ·Î±×·¡¹ÖÀ¸·Î µé¾î°¡±âÀü TDD °³³äÀ» ÀÌÇØÇϴµ¥ µµ¿òÀÌ µÈ´Ù.
  2. »çÄ¢¿¬»ê
      »çÄ¢¿¬»êÀ» Á÷Á¢ TDD·Î ±¸ÇöÇÑ´Ù. ÇÁ·Î±×·¡¹Ö ±â¹ýº¸´Ù´Â ½ÇÁ¦ ÇÁ·Î±×·¡¹Ö¿¡¼­ Àû¿ëÇÏ´Â ¹æ¹ýÀ» ÀÍÈú ¼ö ÀÖ´Ù.
  3. string°ü·Ã ó¸®
      ÀÚÁÖ »ç¿ëÇÏ´Â string °ü·Ã 󸮸¦ TDD·Î ±¸ÇöÇØ º»´Ù.
  4. ÀÛÀº °³¹ß
      ½ÇÁ¦ °³¹ßÇϰí ÀÖ´Â ÀÏ¿¡ ´ëÇØ¼­ ¿ä±¸»çÇ×À» ´Ü¼øÈ­ÇÏ¿© TDD·Î ±¸ÇöÇØ º»´Ù.

½ÇÁ¦ TDDº¸´Ù Çö½ÇÀûÀ¸·Î ´õ ¼ö¿ä°¡ ¸¹Àº °ÍÀÌ ÀÌ¹Ì Á¸ÀçÇÏ´Â ÄÚµå(Legacy Code)¿¡ ´ëÇÑ unit testÀÌ´Ù.
ȸ»ç¿¡¼­ ÇÏ´Â ¾÷¹«ÀÇ ´ëºÎºÐÀÌ »õ·Î¿î ±â´ÉÀ» ±¸ÇöÇϱ⠺¸´Ù´Â ±âÁ¸¿¡ Á¸ÀçÇÏ´Â Äڵ带 Çʿ信 µû¶ó ¾à°£¾¿ ¼öÁ¤ÇÏ´Â °æ¿ì°¡ ´õ ¸¹´Ù.

±âÁ¸ ÄÚµå Unit Test

1. ±âÁ¸ Äڵ忡 ´ëÇÑ ¼öÁ¤¾øÀÌ ÁøÇàÇØ ´Þ¶ó
1. Å×½ºÆ® Äڵ尡 Àß
1. Å×½ºÆ®¿¡ ´ëÇÑ ¸®Æ÷ÆÃÀÌ µÇµµ·Ï ÇØ ´Þ¶ó

  1. ½ºÆå¿¡ ´ëÇÑ ÀÌÇØÀÇ ºÎÁ·.
  2. Àü¿ªº¯¼öÀÇ »ç¿ëÀÌ ¸¹À½.
  3. Äڵ庹Àâµµ°¡ ³ôÀ½.(if¹®ÀÌ ¸¹À½)
  4. ÇÔ¼öÀÇ À̸§À¸·Î ÇÔ¼öÀÇ ÇÏ´Â ÀÏÀ» À¯ÃßÇϱ⠾î·Á¿ò.
  5. ÇÔ¼öÀÇ »çÀÌÁî°¡ Å©°í ÇϳªÀÇ ÇÔ¼ö¿¡¼­ ¿©·¯°¡Áö ÀÏÀ» ¼öÇàÇϹǷΠºÐ¸®°¡ µÇ¾îÀÖÁö ¾ÊÀ½.

±âÁ¸Äڵ忡¼­ Unit Test¸¦ ÇÏ´Ùº¸¸é °¥µîÀ» ÇÏ°Ô µÇ´Â ºÎºÐÀÌ ¸®ÆÑÅ丵ÀÌ ¸ÕÀú³Ä ¾Æ´Ï¸é Unit Test¸¦ ÇÏ°í ³­ ÈÄ¿¡ ¸®ÆÑÅ丵À» ÇØ¾ß ÇÏ´À³Ä¿¡ ¹®Á¦¿¡ Á÷¸éÇÏ°Ô µÈ´Ù.
½ÇÁ¦·Î ±âÁ¸ ÇÔ¼öÀÇ ¸¹Àº ºÎºÐµéÀÌ ¸®ÆÑÅ丵À» ÇÏÁö ¾ÊÀ¸¸é Unit Test¿¡ ¸î ¹èÀÇ ³ë·ÂÀÌ µå´Â °æ¿ì°¡ ¸¹±â ¶§¹®ÀÌ´Ù. ÇÏÁö¸¸ ¸·»ó ¸®ÆÑÅ丵À» ¸ÕÀú ÇÏ·Á°í ÇÏ¸é °í°´À¸·ÎºÎÅÍÀÇ Ç×Àǰ¡ µé¾î¿Ã °ÍÀÌ »·ÇÏ´Ù.
'±âÁ¸¿¡ Àß µ¹¾Æ°¡´Â Äڵ忡 ´ëÇØ¼­ ¿Ö ±¸Å¿© ¼öÁ¤À» ÇØ¾ßÇϴ°¡?'
'±×°Å ¼öÁ¤ÇÏ°í ¹®Á¦ »ý±â¸é ´ç½ÅÀÌ Ã¥ÀÓÁú²¨³Ä' µîÀÇ ¸»À» µè°Ô µÈ´Ù.
¾ÆÁÖ °£´ÜÇÑ ºÎºÐÀÇ ¸®ÆÑÅ丵ÀÌÁö¸¸ ÀúÇ×ÀÌ ¿ö³« °­ÇÏ¿© ¼ÕÀ» ¸ø´ë´Â °æ¿ì°¡ ¸¹´Ù.

°í°´°ú ½Å·Ú¸¦ ½×±â Àü¿¡´Â ¸®ÆÑÅ丵º¸´Ù´Â ÈûÀÌ µé´õ¶óµµ ±âÁ¸ Äڵ忡 ´ëÇÑ Unit Test¸¦ ¸ÕÀú ÁøÇàÇÏ´Â°Ô ¹Ù¶÷Á÷(?) ÇÏ´Ù°í »ý°¢ÇÑ´Ù.
¾ðÁ¨°¡ ³ªÀÇ ½Ã°£°ú ³ë·ÂÀÌ º¸»ó ¹ÞÀ» ¶§°¡ ¿Ã°ÍÀ̶ó´Â Èñ¸ÁÀ» °¡Áö¸ç...

Legacy Code¿¡ ´ëÇÑ Unit Test¸¦ ÇÏ´Â °æ¿ì TDD·Î unit test¸¦ ÀÛ¼ºÇÏ´Â °æ¿ì¿¡ ºñÇØ¼­ Unit Test Äڵ尡 º¹ÀâÇÏ´Ù.
µû¶ó¼­ ¸®ÆÑÅ丵(refactoring)ÀÌ ÇÊ¿äÇÑ °æ¿ì°¡ ´õ ¸¹´Ù.

²Ï º¹ÀâÇÑ ÇϳªÀÇ ÆÄÀÏ¿¡ ´ëÇØ¼­ unit test¸¦ ÀÛ¼ºÇÑ ÈÄ 'ÀÌ°Ç Á¤¸» ÇÊ¿äÇϰڴÙ'¶ó°í »ý°¢µÇ´Â °ÍµéÀ» Á¤¸®ÇØ º¸ÀÚ.

  1. Naming rule
      test group ¹× test ÇÔ¼ö¿¡ ´ëÇÑ À̸§ Á¤ÇÏ´Â ¹æ¹ý
  2. fake ÇÔ¼ö ¹æ¹ý
    • fake ÇÔ¼ö¸¦ Á»´õ ¼¼·ÃµÇ°Ô »ç¿ëÇÏ´Â ¹æ¹ý
    • fake ÇÔ¼ö ÆÄÀϸí Á¤Çϱâ
  3. setup ¹æ¹ý
      test group¿¡ ´ëÇØ¼­ µ¿ÀÏÇÏ°Ô setup, teardown Àû¿ëÀÌ °¡´ÉÇÏ´Ù. ÄÚµåÀÇ Áߺ¹ ¹× ÄÚµåÀÇ ±ò²ûÇÔÀ» À§Çؼ­ setup ¹× teardownÀ» Àß È°¿ëÇϵµ·Ï

  1. verify º¯¼ö ¼±¾ð
  2. condition setting
  3. test

°³¹ßÀÚ <-> °í°´ »óÈ£°£ ´ëÈ­ ¹æ¹ý.
°³¹ßÀÚ°¡ ¾Æ´Ñ »ç¶÷ÀÇ ¿ä±¸»çÇ×À» °³¹ßÀÚ°¡ ÀÛ¾÷ÇÒ ¼ö ÀÖ´Â unit test ÄÚµå·Î ¿Å±â´Â ¹æ¹ý ã±â.

¿øÇÏ´Â µ¿ÀÛ : 2°³ ¼öÀÇ ÀÔ·ÂÀ» ¹Þ¾Æ ÇÕÀ» ±¸Çϱâ
ÀÔ·Â : 2°³ÀÇ ÀÔ·ÂÀ¸·Î 1, 3
°á°ú : °á°ú°¡ 4°¡ ³ª¿À´ÂÁö È®ÀÎÇÑ´Ù.

  1. verify º¯¼ö ¼±¾ð: result = 4, firstInput = 1, secondInput = 3
  2. test : CHECK(result, Add(firstInput, secondInput))

300 ¶óÀÎÀÌ ³Ñ´Â Äڵ忡 unit test¸¦ ºÙÀÌ´Â ÀÛ¾÷.
if¹®, Àü¿ªº¯¼ö, linked list, ·çÇÁ¹®, break µîÀÌ ¸¹´Ù.
°¢°¢¿¡ ´ëÇØ¼­ inputÀ» ¸¸µé±â°¡ ½±Áö ¾Ê´Ù.

fake ÇÔ¼ö¸¦ °£°áÇÏ°Ô Ç¥ÇöÇϱâ.
int fake_A(int param1)
{
    if (param1 == 0)
      return 10;
    else if(param1 == 1)
      return 11;
    else if(param1 == 2)
      return 22;
    ....
}
ÀÌ·±½ÄÀ¸·Î ÀÛ¼ºÇÏ´Â °Íº¸´Ù´Â
int fake_A(int param1)
{
    return expected_return_fake_A[];
}
À¸·Î ÀÛ¼ºÇÏ¿© expected_return_fake_A[ ]¿¡ ´ëÇÑ expected return¿¡ ´ëÇÑ °ªÀ» ¹Ì¸® ¼³Á¤ÇÏ¿© return¹Þµµ·Ï ÇÏ´Â °ÍÀÌ ±ò²ûÇÏ´Ù. (idea from ÇÑÁÖ¿µS)

void Func_A()
{

    //Àü¿ªº¯¼ö¿¡ °ªÀ» ÇÒ´çÇϰųª return°ªÀÌ ÀüÇô ¾ø´Â °æ¿ì
    ....
    ....
    ....
    if(condition_A == 1)
      fake_A(input1);
    else
      fake_A(input2);
}

ÀÌ·± °æ¿ì¿¡ ´ëÇØ¼­
void fake_A(int param1)
{

    fake_A_?ParameterSave = param1;
}

int Getfake_A_?ParameterSave()
{

    return fake_A_?ParameterSave;
}

CHECK_EQUAL(expected_value, Getfake_A_?ParameterSave()); ·Î üũÇÔ.

ÀϹÝÀûÀ¸·Î TDD ±³À°À¸·Î °£´ÜÇÑ ÇÁ·Î±×·¥À» TDD·Î ±¸ÇöÇÏ´Â °ÍÀ» ½Ç½ÀÇÑ´Ù.
ÃÖ±Ù¿¡ Legacy Code¿¡ Unit Test¸¦ Ãß°¡Çϸ鼭 ´À³¤Á¡Àº TDD ±³À°ÀÇ ½ÃÀÛÀº Legacy Code¿¡ Unit Test ´Þ±â·Î ½ÃÀÛÇØ¾ß °Ú´Ù´Â »ý°¢À» Çß´Ù.

óÀ½ TDD¸¦ ½Ç½ÀÇÏ´Â °æ¿ì °¡Àå ¸¹Àº Áú¹®Áß¿¡ Çϳª°¡ '²À ÀÌ·¸°Ô±îÁö °³¹ßÇØ¾ß Çϳª¿ä?' ÀÌ´Ù.
ÇöÀç ÀÚ½ÅÀÌ °³¹ßÇÏ´Â ¹æ¹ý¿¡¼­ Å×½ºÆ® ÇÏ´Â ¹æ¹ý°ú Å« Â÷À̸¦ ¸ø´À³¢°í È¿°ú¿¡ ´ëÇÑ ÀDZ¸½ÉÀ» ¸¹ÀÌ ´À³¤´Ù.
Legacy code¸¦ target¿¡ uploadÇÏÁö ¾Ê´õ¶óµµ µ¿ÀÛÀ» È®ÀÎÇÒ ¼ö ÀÖ°í ¼öÁ¤À¸·Î ÀÎÇÑ ºÎÀÛ¿ë(side effect)À» ¹Ù·Î È®ÀÎÀÌ °¡´ÉÇÏ´Ù¸é È¿°ú¸¦ ´À³¥ ¼ö ÀÖÁö ¾ÊÀ»±î?
Legacy code¿¡ unit test¸¦ ´Þ´Ùº¸¸é Å×½ºÆ®¸¦ À§Çؼ­ ¾î¶² ½ÄÀ¸·Î ÇÔ¼ö¸¦ ÀÛ¼ºÇØ¾ß ÇÏ´ÂÁö ½º½º·Î ±ú¿ìÄ¡Áö ¾ÊÀ»±î?

unit test¸¦ ÅëÇÑ ¼Ò½ºÀÇ coverage¸¦ È®ÀÎÇϵµ·Ï ÇÏ¿´´Âµ¥ º¹ÀâÇÑ ÄÚµåÀÇ °æ¿ì Å×½ºÆ® ÄÚµå ÀÛ¼ºÀÌ Èûµé´Ù. Àú³á¿¡ Åð±ÙÇϸ鼭 ¿Ö ±×·²±î¸¦ »ý°¢ÇغôÙ
º¹ÀâÇÑ ÇÔ¼ö¸¦ ó¸®ÇÏ´Â °æ¿ì ÀÏ´Ü coverage¸¦ ³ôÀ̰íÀÚ ÇÏ´Â ¸¶À½ÀÌ ¸ÕÀú µç´Ù. ÇÔ¼öÀÇ ³»¿ëÀ» ÆÄ¾ÇÇϱ⠺¸´Ù´Â °¡Àå ½±°Ô coverageÀÇ ¼öÄ¡¸¦ ¿Ã¸®´Â ¹æ¹ýÀ» ¸ÕÀú ã°Ô µÈ´Ù. ±×·¯´Ù º¸´Ï ÇϳªÀÇ ÇÔ¼ö¿¡ unit test¸¦ Ãß°¡ÇÏ´Â ÀÛ¾÷¿¡ ¼Ò¿äµÇ´Â ½Ã°£ÀÌ ¿ÀÈ÷·Á ´õ ±æ°Ô µÈ´Ù.
coverage ¼öÄ¡¸¦ °»½ÅÇÏ´Â À¯È¤¿¡¼­ ¹þ¾î³ª¾ß°Ú´Ù.

¼±Çà°³¹ßÆÀ¿¡¼­ ÀÛ¾÷ÇÑ ¼Ò½ºÄڵ带 ¹Þ¾Æ¼­ °³¹ßÀ» ¿Ï·áÇÏ´Â ÃÖÁ¾ °³¹ßÆÀÀÌ ÀÖ´Â °æ¿ì ¾÷¹« À̰üÀÌ ½±Áö ¾Ê´Ù.
¼±Çà°³¹ßÆÀÀº °£´ÜÇÑ ±â´ÉÀÇ °ËÁõ¸¸À» Çϰí ÃÖÁ¾°³¹ßÆÀ¿¡ ¾÷¹«¸¦ À̰üÇÑ´Ù.
À̰ü ¹ÞÀº ¼Ò½ºÄÚµå´Â ¾ó¸¶³ª °ËÁõµÇ¾ú³ª? ½ÇÁ¦·Î ¾à 20% Á¤µµÀÇ coverage¿¡ ´ëÇÑ test¸¸ ÁøÇàµÇ°í ÃÖÁ¾ °³¹ßÆÀ¿¡ Àü´ÞµÈ´Ù.
¼±Çà°³¹ßÆÀÀº ÃÖÁ¾ °³¹ßÆÀ°ú QE, QA ºÎ¼­¿¡°Ô ÄÚµåÀÇ °ËÁõ±îÁöµµ À̰üÇÑ´Ù.

ÃÖÁ¾ °³¹ßÆÀ¿¡¼­ °³¹ßÁß¿¡ ȤÀº QE, QA¿¡¼­ ¹ö±×(bug)¸¦ ¹ß°ßÇÑ °æ¿ì ÃÖÁ¾ °³¹ßÆÀ¿¡¼­ ¹®Á¦¸¦ ¼öÁ¤ÇÏ°Ô µÈ´Ù.
ÀÌ¹Ì º¹Àâµµ°¡ ³ôÀº Äڵ忡 ¼öÁ¤À» ÇÏ°Ô µÇ´Âµ¥ ¼öÁ¤Áß¿¡ ºÎÀÛ¿ë(side effect)·Î ÀÎÇØ ¼öÁ¤ÀÌ ½±Áö ¾Ê´Ù. µû¶ó¼­ ÃÖÁ¾ °³¹ßÆÀÀº ÄÚµå ¼öÁ¤ÀÌ ¹ß»ýÇÏ´Â °æ¿ì ¾ÆÁÖ ¿¹¹ÎÇÏ°Ô ¹ÝÀÀÇÑ´Ù. ½Ã°£ÀÌ ºÎÁ·Çϰųª ¼öÁ¤ÀÌ ¾î·Á¿î °æ¿ì ¼±Çà°³¹ßÆÀ¿¡ ¼ÕÀ» ³»¹Î´Ù. ¼±Çà°³¹ßÆÀÀº ¿ø·¡ ¼Ò½º¿¡¼­ ¾à°£ÀÇ ¼öÁ¤ÀÌ °¡ÇØÁø Äڵ带 º¸°í '¿Ö ÀÌ·¸°Ô ¼öÁ¤Çß¾î¿ä? ÀÌ·±½ÄÀ¸·Î ¼öÁ¤ÇÏ¸é ¾î¶»°Ô Çմϱî?'¶ó°í ¼Ò¸® ³ôÀδÙ.
½ÇÁ¦ Á¦Ç°À¸·Î ³ª°¡´Â Äڵ忡 ´ëÇÑ Ã¥ÀÓÀº ÃÖÁ¾°³¹ßÆÀÀÌ ÁöÁö¸¸ ¼Ò½º¿¡ ´ëÇÑ ¼ÒÀ¯±ÇÀº ¼±Çà°³¹ßÆÀÀÌ °¡Áö¸ç ¼öÁ¤À» À§Çؼ­´Â Ç×»ó ¼±Çà°³¹ßÆÀÀÇ µµ¿òÀ» ¹Þ¾Æ¾ßÇÏ´Â °æ¿ì°¡ ¹ß»ýÇÑ´Ù.

s/w¸¦ À̰üÇÏ´Â °¡Àå ÁÁÀº ¹æ¹ýÀº unit test°¡ ´Þ¸° Äڵ忡 ´ëÇØ¼­¸¸ À̰üÇÏ´Â °ÍÀÌ´Ù. À̰ü ¹Þ´Â ÆÀ¿¡¼­´Â ¼Ò½º Äڵ忡 unit test·Î À̰ü ¹Þ´Â ÄÚµåÀÇ µ¿ÀÛÀ» °ËÁõÇÏ°í ¿øÇÏ´Â °æ¿ì Ãß°¡·Î unit test¸¦ Ãß°¡ÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù.
±¸Á¶¿¡ ´ëÇÑ ¼³¸í¸¸À¸·Î À̰üÀ» ¹Þ´Â ÇöÀç ½ÇÁ¤¿¡ ²À ÇÊ¿äÇÑ ºÎºÐÀÌ ¾Æ´Ò±î?

·Î¸¶´Â µµ½Ã Àüü°¡ ÇϳªÀÇ À¯ÀûÁö´Ù. ¸î õ³âÀÌ Áö³µÁö¸¸ ¾ÆÁ÷±îÁöµµ °ÇÀçÇÑ °Ç¹°µéÀÌ ¸¹°í ´õ¿í ³î¶ó¿î »ç½ÇÀº ¾ÆÁ÷±îÁö ÀÚ½ÅÀÇ ±â´ÉÀ» ´ÙÇϰí ÀÖ´Ù´Â °ÍÀÌ´Ù. ·Î¸¶½Ã³» ¿Ü°ûÀ¸·Î´Â ½Å½ÄÀÇ °Ç¹°µéÀÌ ÀÚ¸® Àâ°í ÀÖ´Ù.
ÄÚµå¿Í ·Î¸¶´Â À¯»çÇÑ Á¡ÀÌ ¸¹´Ù.
ÀÌÀü ¾ó±¼À̳ª À̸§À» ¸ð¸£´Â °³¹ßÀÚµéÀÌ ¸¸µé¾î ³õÀº À¯»êÀ» ¾ÆÁ÷±îÁö ¹°·Á¹Þ¾Æ¼­ Ȱ¿ëÇϰí ÀÖÁö ¾ÊÀº°¡?
·Î¸¶´Â ±âÁ¸ÀÇ ¹®È­À¯»êÀ» º¸È£Çϱâ À§Çؼ­ °³º¸¼ö¸¦ À§Çؼ­ ´ç±¹ÀÇ Çã°¡¸¦ ¹Þ¾Æ¾ß ÇÑ´Ù. ·Î¸¶¿¡ »ç´Â ½Ã¹ÎµéÀº »ó´çÇÑ ºÒÆíÇÔÀ» °¨¼öÇϸ鼭µµ ¿¾°ÍÀ» Áö۸ç ÇÏ·çÇϷ縦 »ì¾Æ°¡°í ÀÖ´Ù.
±âÁ¸ º¹ÀâÇÑ ÄÚµå·Î ÀÎÇØ ¾öû³­ ºÒÆíÀÌ ÀÖÁö¸¸ ¿ì¸® °³¹ßÀÚ´Â ÇÏ·çÇÏ·ç ±× Äڵ带 °¥¾Æ¾þÁö ¾Ê°í ÃÖ¼ÒÇÑÀÇ °³º¸¼ö¸¦ ÅëÇØ¼­ ÇÏ·çÇÏ·ç »ýȰÇÑ´Ù.

Àü¿¡ ¾Æ½Ã´Â ºÐÀÌ ÀÌ·± Áú¹®À» ÇϽŠÀûÀÌ ÀÖ´Ù.
'°³¹ßÀÚ´Â ÇöÀç Á÷Àå»ýȰ¿¡ ¸¸Á·µµ°¡ ³ôÀº°¡¿ä?'
'Á¦°¡ »ý°¢Çϱ⿡ ¸¸Á·µµ°¡ ³·À»²¨ °°¾Æ¿ä' Á¶±ÝÀÇ ¸Á¼³ÀÓµµ ¾øÀÌ ´ë´äÇß´Ù.
³ª´Â ºÒ¸¸Á·ÀÇ ¿øÀÎÀ» ±âÁ¸ÄÚµå(legacy code)¿¡¼­ ã°í ½Í´Ù.
°³¹ßÀ» ½ÃÀÛÇÒ ¶§ ´ëºÎºÐÀÇ °æ¿ì »õ·Î¿î ±â´ÉÀ» Á÷Á¢ °³¹ßÇѴٱ⠺¸´Ù´Â ¾öû³­ ¾çÀÇ base code¸¦ »ó¼Ó¹Þ´Â´Ù.
'ÀÌ¾ß ÁÁ¾Æ~ ÀÌ¹Ì »ó´çÈ÷ ¸¹Àº ºÎºÐÀÌ ±¸ÇöµÇ¾î ÀÖ³×. ³­ Æ÷ÆÃÇÏ°í ¾à°£ÀÇ ¼öÁ¤¸¸ ÇÏ¸é µÇ°Ú¾î.' ÇÏÁö¸¸ ½Ã°£ÀÌ °¡¸é¼­ ÀÌ·± ±â»Ýµµ Á¡Á¡ »ç¶óÁö°í ÀÌÀü Äڵ带 ÀÛ¼ºÇÑ »ç¶÷µé¿¡ ´ëÇÑ ¿ø¸ÁÀ¸·Î °¡µæÂ÷°Ô µÈ´Ù.
'¿Ö À̵û±¸·Î Äڵ带 Â¥³ª¼­... ¼öÁ¤µµ Èûµé°í..'
°³¹ß¸·¹ÙÁö QE °Ë¼ö¸¦ ¹ÞÀ¸¸é¼­µµ ¹«½¼ ¹®Á¦°¡ ³ª¿ÃÁö ¿¹ÃøÀÌ ºÒ°¡´ÉÇϰí Á¶¸¶Á¶¸¶ÇÏ´Ù. ¹®Á¦°¡ ³ª¿À¸é ±×¶§±×¶§ ´ëÀÀÇØ¼­ °íÄ¡´Â ¼ö¹Û¿¡ ¾ø´Ù. ±×·¡¼­ °³¹ßÀÚ´Â Ç×»ó ´ë±â¸ðµå ¿©¾ß ÇÑ´Ù. Áý¿¡ Åð±ÙÇÏ´Â ±æµµ ¸¶À½ÀÌ ÆíÇÏÁö ¾Ê´Ù. ÈÞ´ëÀüÈ­±â¿¡ º§ÀÌ¶óµµ ¿ï¸± ¶§¸é '¶Ç ÅÍÁ³³ªº¸±º ¿¡ÈÞ~'

°³¹ßÀÚµéÀÇ »îÀÇ ÁúÀ» Çâ»ó½Ã۱â À§ÇÑ ÃÖ¼±ÀÇ ¹æ¾ÈÀº ¿ª½Ã unit test°¡ ¾Æ´Ò±î?

Legacy Code¿¡¼­ Unittest ÀÛ¾÷À» ¸î ´Þ°£ Çϸ鼭 ´À³¢´Â Á¡Àº ÇöÀç Äڵ忡 Á¸ÀçÇÏ´Â ¹ö±×¸¦ ã¾ÆÁÖ±â´Â µµ±¸·Î »ý°¢ÇÏ´Â °æÇâÀÌ ÀÖ´Ù.
°ü¸®ÀÚÀÇ ÀÔÀå¿¡¼­ ´Ù¸¥ °¡Ä¡º¸´Ù ÇöÁ¸ÇÏ´Â ¹ö±×¿¡ ´ëÇØ¼­ ´ç¿¬È÷ °ü½ÉÀÌ ¸¹´Ù.
Áö±Ý±îÁö ´Ù¸¥ È¿°úµé¿¡ ´ëÇØ¼­µµ À̾߱⸦ ²¨³ÂÁö¸¸ °ü¸®ÀÚÀÇ ÀÔÀå¿¡¼­´Â ÇöÁ¸ ¹ö±×¿¡ ´õ ¸¹Àº °¡ÁßÄ¡¸¦ µÐ´Ù.

½Ã³ª¸®¿À³ª ½ºÆåÀÌ Á¸ÀçÇϰí input/output¿¡ ´ëÇÑ Á¤Àǰ¡ ÀÖ´Ù¸é °¡´ÉÇÏ´Ù. ÇöÁ¸ ¹ö±×¿¡ ´ëÇØ¼­ ½±°í ¸íÈ®ÇÏ°Ô ¹®Á¦Á¡À» °ËÃâÇÒ ¼ö ÀÖ°ÚÁö¸¸ ´ëºÎºÐÀÇ °æ¿ì Äڵ尡 º¹ÀâÇϰí ÇØ´ç ÇÔ¼ö¿¡¼­ÀÇ input/output¿¡ ´ëÇØ¼­ ´ã´çÀÚµµ Á¤È®È÷ ¾ËÁö ¸øÇÏ´Â °æ¿ì°¡ ¸¹´Ù.

¿À´Ã Unittest·Î ¾ÈÀü¸ÁÀ» ¼³Ä¡ÇÑ ¸ðµâÂÊÀ» ´ã´çÀÚ°¡ »õ·Î¿î ÄÚµå¿Í mergeÇϸ鼭 test°¡ ±úÁö´Â °æ¿ì°¡ ¸î°¡Áö ¹ß»ýÇß´Ù. Á¤È®È÷ 4°³ÀÇ test°¡ fail³µ´Ù.

Áö±Ý±îÁö °ü¸®ÀÚ¿¡°Ô ¸»·Î¸¸ ¼³¸íÇß´ø UnittestÀÇ ¾ÈÀü¸Á ¿ªÇÒ¿¡ ´ëÇØ¼­ º¸¿©ÁÙ ¼ö ÀÖ´Â ÁÁÀº ±âȸ°¡ ÁÖ¾îÁø ¼ÀÀÌ´Ù.

´Ù¸¥ »çȸ¿Í °°ÀÌ °³¹ßÀÚµéÀÌ ¸ðÀÎ »çȸ¿¡¼­ Áö½Ä±Ç·ÂÀÌ ¾ø´Â °æ¿ì¿¡ ¾î¶»°Ô µÉ±î?
¼±Çà°³¹ßÆÀ¿¡¼­ ÀÛ¾÷ÇÑ Äڵ带 ¹Þ¾Æ¼­ °³¹ßÀ» ÁøÇàÇÏ´Â ÆÀ¿øµéÀº Äڵ忡 ´ëÇÑ ownershipÀÌ ¾ø´Ù.
¹®Á¦°¡ ¹ß»ýÇÏ¸é ¼±Çà°³¹ßÆÀÀÇ ´ã´çÀÚ¿¡°Ô
'xxxºÎºÐ¿¡ ¹®Á¦°¡ Àִ°Š°°Àºµ¥¿ä. °°ÀÌ ºÁÁÖ½Ç ¼ö ÀÖ³ª¿ä?'
ÀÚ±â Á¶Á÷ÀÇ PLº¸´Ù ÇØ´ç Äڵ带 °³¹ßÇÑ ´ã´çÀÚ¿¡°Ô ´õ ÁÖ´ªµç´Ù.

¿·¿¡¼­ º¸±â ¾ÈŸ±õ´Ù.

±âÁ¸Äڵ忡 unittest·Î ¹ö±×¸¦ ã°í ¹®Á¦Á¡±îÁö ¾Ë·ÁÁá´Ù. ¹®Á¦¸¦ ¼öÁ¤ÇÏ¿© unittest¸¦ µ¹¸®¸é Á¤»óÀûÀ¸·Î ¼öÁ¤µÇ¾ú´ÂÁö¸¦ È®ÀÎÇÒ ¼ö ÀÖ°Ô ÇÏ¿´´Ù.
ÀÌ·± ¾ÈÀü¸Á¿¡µµ ºÒ±¸ÇÏ°í ´ã´çÀÚ´Â ÄÚµå¼öÁ¤¿¡ ÀڽۨÀÌ ¾ø´Â ´«Ä¡´Ù.
2´ÞÀü Âë¿¡ ´ã´çÀÚ¿¡°Ô ¾Ë·ÁÁá°í ½ÇÁ¦·Î 1-2ÁÙ Á¤µµ ¼öÁ¤Çϸé ÇØ°áµÇ´Â ¹®Á¦¸¦ ¾ÆÁ÷±îÁö ¼öÁ¤ÇÏÁö ¸øÇϰí ÀÖ´Ù.

°úÁ¤
  1. ¾îµð¿¡ ¾²´Â ¹°°ÇÀΰí
  2. ±âÁ¸ codeÀÇ °áÇÔ ¹ß°ßÀ» À§ÇÑ tool·Î¼­ ÀÎÁö
  3. ¿ì¸° ¸øÇϰÚÀ¸´Ï ÀÚ³×µéÀÌ ÇØº¸°Ô
  4. µµ¿ÍÁÖÁö ¾Ê´Â °³¹ßÀÚ
  5. ¿ì¸®³¢¸® ¿­½ÉÈ÷ testÄÚµå »ðÀÔ
  6. ±âÁ¸ codeÀÇ °áÇÔ ¹ß°ß
  7. °³¹ßÀÚ ¹× °ü¸®ÀÚÀÇ Åµµ º¯È­
  8. test code¿¡µµ ºÒ±¸ÇÏ°í ½±°Ô ¼öÁ¤ÇÏÁö ¸øÇÔ
  9. ¼öÁ¤ÇÏÁö ¸øÇÏ´Â ÀÌÀ¯ : Äڵ庹Àâµµ, °³¹ßÀÚ ¿ª·®
  10. Prevent Åø·Î °áÇÔÀ» Á¶±â¿¡ ãÀ» ¼ö ÀÖÁö ¾Ê´À³Ä(prevent °á°ú °áÇÔÀ» ãÁö ¸øÇÔ)
  11. test code´Â °³¹ßÀÚ°¡ Ãß°¡ ¹× ¼öÁ¤ÀÌ °¡´ÉÇØ¾ß ÇÔ
  12. ´Ê°Ô ãÀ» ¼ö·Ï ¼öÁ¤ÀÌ ½±Áö ¾Ê´Ù. ±×³É ±×´ë·Î °¥·Á°í ÇÏ´Â ¼ºÁúÀÌ ÀÖÀ½.

±âÁ¸ code¿¡ unittest¸¦ Ãß°¡ÇÏ´Â ÀÛ¾÷À» óÀ½ ½ÃÀÛÇÒ¶§¿Í À߸ø ¿¹ÃøÇÑ Á¡µé
  1. ´ã´ç ¸ðµâ ´ã´çÀÚ´Â ÇØ´ç ¸ðµâ¿¡ ´ëÇÑ ¾î´À Á¤µµÀÇ Áö½ÄÀ» °¡Áö°í ÀÖ´Ù.
      ¹Ìµé¿þ¾îÀÇ °æ¿ì ¸ðµâ ´ã´çÀÚ´Â ½ºÆåÀ̳ª µ¿ÀÛ¹æ½Ä¿¡ ´ëÇØ¼­ Á¦´ë·Î ¾Ë°í ÀÖÁö ¸øÇÏ´Ù. ´ÜÁö ¹®Á¦°¡ »ý±â¸é ±×°ÍÀ» ã¾Æ¼­ ¶«»§À¸·Î ÇØ°áÇÏ´Â ¹æ½ÄÀ¸·Î ÀÏÀ» ÁøÇàÇϰí ÀÖ¾ú´Ù. -> ÇØ°á¹æ¹ý¿¡ ´ëÇÑ ¿©·¯°¡Áö °¡À̵带 Á¦°øÇÑ´Ù.
  2. °³¹ßÀÚ´Â ¹®Á¦ÀÇ Äڵ带 ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.
      ¹®Á¦°¡ µÇ´Â ºÎºÐÀ» ÁöÀûÇØµµ ºü¸¥ ´ëÀÀÀÌ ºÒ°¡´ÉÇÏ´Ù. Ã¥ÀÓ¼ÒÀçÀÇ ¹®Á¦·Î ÀڱⰡ ¼±¶æ °íÄ¡´Â °ÍÀ» µÎ·Á¿ö ÇÑ´Ù. Àڱ⠸ðµâÀÌÁö¸¸ ¹®Á¦Á¡À» ÆÄ¾ÇÇÏ´Â ¼Óµµµµ ´À¸®´Ù. -> °øµ¿ÀÇ ÄÚµå·Î ÀÛ¾÷µÇ´Â °æ¿ì¿´À¸¸ç Ã¥ÀÓÀÌ ºÐ»êµÇ¾î ÇØ´ç ±â´É ´ã´çÀÚµéÀÇ ¸ðÀÓ¿¡¼­ ¼öÁ¤À» °áÁ¤ÇÔ. ȸÀǸ¸ ¸î Â÷·Ê ÁøÇàµÇ¾úÁö¸¸ 1´Þ ³Ñ°Ô ÀÏÀÇ ÁøÇàÀÌ µÇÁö ¾ÊÀ½. °ü¸®ÀÚ¿¡°Ô ¹®Á¦ÀÇ ½É°¢¼ºÀ» ¾Ë¸®°í f/u µÇµµ·Ï ÇÑ´Ù.
  3. °³¹ßÀÚÀÇ Åµµ
      ¼öÁ¤À̳ª ¹®Á¦Á¡ÀÇ ÁöÀû¿¡ ´ëÇØ¼­ °ú¹Î¹ÝÀÀÀ» º¸ÀÓ.
  4. ÀÚ½ÅÀÇ ¾÷¹« ¿µ¿ª¿¡ ´ëÇÑ °øÀ¯°¡ ¾ø´Ù
      ¹«¾ð°¡ ÀÏÀ» Çϰí ÀÖ´Ù°í´Â ÇÏÁö¸¸ µµ´ëü ¾î¶² ÀÏÀ» Çϰí ÀÖ´ÂÁö ¸ð¸£°Ú´Ù. ±¸Ã¼ÀûÀ¸·Î ¹àÈ÷Áö ¾Ê°í ÇÔ²² ¹®Á¦¸¦ ÇØ°áÇÏ´Â ½Ãµµ¿¡ ´ëÇØ¼­µµ °ÅºÎ°¨ÀÌ ÀÕÀ½. ȸ»ç¿¡¼­ ¾÷¹«·®ÀÇ ÆÄ¾Ç°ú °ü¸®ÀÇ ¸ñÀûÀ¸·Î ŸÀÓÅ×À̺íÀ» ÀÛ¼ºÇϱ⵵ ÇÏÁö¸¸ Ãß»óÀûÀÎ ¾÷¹« ³»¿ëÀ¸·Î ÀÚ½ÅÀÇ ¾÷¹«¿µ¿ª¿¡ ´ëÇÑ °øÀ¯¸¦ ȸÇÇÇÒ ¼ö ÀÖÀ½.

unittest°¡ ¾î·Á¿î °æ¿ì
void foo_bar()
{
    static int count = 0;
    ...
    ...
    if(count == 0)
    {

    }
    else if(count == 2)
    {

    }
    else
    {
    }
    count = temp - count;

}
static intÇüÀÎ countº¯¼ö °ª¿¡ µû¶ó branch°¡ ÀϾ´Â °æ¿ì.

?SetStaticCount(int value);
static int count = 0 ; -> count = ?GetStaticCount();
ÇüÅ·Π¼öÁ¤

ÇöÀç ´ã´çÇϰí ÀÖ´Â Á¶Á÷¿¡¼­ unittestÀÇ ÅõÀÔ ³ë·Â¿¡ ´ëºñ output¿¡ ´ëÇÑ À̽´¸¦ ¸¹ÀÌ Á¦±âÇÑ´Ù.
¼öÄ¡ÀûÀ¸·Î ºñ±³ ºÐ¼®ÇÒ ¼ö ÀÖ´Â ÀڷḦ ¸¸µé¾î¾ß °Ú´Ù´Â »ý°¢ÀÌ µç´Ù.

  1. ±âÁ¸ Code¿¡ unittest¸¦ ´Þ¾Æ¼­ ¹®Á¦Á¡À» ã¾Æ³»°í ¼öÁ¤Çϴµ¥ °É¸®´Â ³ë·Â.(½Ã°£, Àοø, °ËÁõ ½Ã°£, ...)
  2. ÇØ´ç ÆÄÀÏ¿¡ ¹®Á¦Á¡ÀÌ ¹ß°ßµÇ¾ú´Ù´Â °ÍÀ» ¾Ë·ÁÁÖ°í °³¹ßÀÚ°¡ ¹®Á¦Á¡À» ã°í ÇØ°áÇϴµ¥ µå´Â ³ë·Â.

¾îÁ¦ °³¹ßÀÚ¸¦ ´ë»óÀ¸·Î Unittest ÁøÇà¿¡ °ü·ÃµÈ ȸÀÇÁøÇà.
´ë»óÀÚ : °³¹ßÆÀÀ¸·Î À̵¿ÇÑ °³¹ßÀÚ(°©ÀÚ±â ÆÀ À̵¿µÇ¸é¼­ ¾÷¹«¸¦ ¸Ã°Ô µÊ)
¸ñÀû : ±â°£³»¿¡ UnittestÀÇ coverage¸¦ ´Þ¼º ¹æ¾È ã±â
³»¿ë :
'½Ã°£¸¸ ÀÖÀ¸¸é Çϰڴµ¥ Áö±Ý ½Ã°£ÀÌ ¾ø´Ù.'
'Test ´Ù´Â°Å ´ë½Å ÇØÁÖ¸é ¾ÈµÇ°Ú´À³Ä?'
¾î·µç ¼³µæÇÏ¿© ÁøÇàÇϱâ·Î ÇÔ.
°³¹ßÀÚ ´ã´ç ¸ðµâ¿¡¼­ Unittest µ¹¾Æ°¡´Â°Å º¸¿©ÁÜ. ÀÚ½ÅÀÌ °³¹ßÇÑ ¸ðµâ¿¡ ¹®Á¦Á¡ ³ëÃâ.

  1. ÇÔ²² È®ÀÎ
  2. ÇÔ²² ¿Ã¸®±â
  3. ÀÏÀÇ ¹üÀ§ Á¤Çϱâ

Legacy Code¿¡¼­ TDD¸¦ ÇÏ´Â °æ¿ì ¸î°¡Áö ¾î·Á¿ò Á¡ÀÌ ¸¹´Ù.
  1. ±âÁ¸¿¡ ±¸ÇöµÈ ÄÚµåÀÇ º¹Àâµµ°¡ ³ôÀº °æ¿ì
  2. ÇØ´ç ÇÔ¼öµé¿¡ ´ëÇÑ ½ºÆåÀ» °³¹ßÀÚµµ Á¦´ë·Î ÀÌÇØÇÏÁö ¸øÇÏ´Â °æ¿ì

À§¿¡ ¾ð±ÞµÈ °æ¿ìµéÀÌ TDD¸¦ ¾î·Æ°Ô ÇÒ »Ó¸¸ ¾Æ´Ï¶ó ¹ö±×µµ °¡Àå ¸¹´Ù.
µû¶ó¼­ ¸®ÆÑÅ丵À» ÇÏÁö ¾Ê°í¼­´Â TDD¸¦ ÁøÇàÇϱⰡ ¾î·Æ´Ù.
ex) ÇÔ¼ö 1°³ ¶óÀμö°¡ ´ë·« 1500 ¶óÀÎ
°³¹ßÀÚÀÇ ¿äûÀ¸·Î ¸®ÆÑÅ丵 ½ÃÇàÇÏ¿´À½.

TDD ±³À°À» ÇÏ´Ùº¸¸é Ç×»ó ´À³¢´Â °ÍÀÌÁö¸¸ ±âÁ¸ ÀÚ½ÅÀÌ °³¹ßÇØ ¿À´ø ¹æ½ÄÀ» ¹ö¸®°í TDD¹æ½ÄÀ¸·Î °³¹ßÇÏ´Â °ÍÀÌ ½¬¿îÀÏÀÌ ¾Æ´Ï´Ù.
¼ö ³âÀ» °°Àº ¹æ½ÄÀ¸·Î ÀÏÀ» ÇØ¿À´Ù°¡ ¾î´À ¼ø°£ 'ÀÌ ¹æ½ÄÀÌ ÁÁ½À´Ï´Ù. ¾ÕÀ¸·Î ÀÌ·¸°Ô Çϼ¼¿ä'¶ó°í Çϸé ÀûÀÀÇϴµ¥ ²Ï ¸¹Àº ½Ã°£ÀÌ µå´Â°Å °°´Ù.
´Ü¼øÇÑ °¡À̵å Á¤µµ·Î´Â ½À°üÀ¸·Î üµæÇϱⰡ ½±Áö ¾Ê´Ù.
Test¿¡ ´ëÇÑ °¨°¢µµ ÀÖ¾î¾ß ÇÏ°í °³¹ß ´É·ÂÀÌ µÞ¹ÞħµÇÁö ¾Ê´Â °æ¿ì TDD¸¦ Á¦´ë·Î µû¶óÇÏÁö ¸øÇϴ°Š°°´Ù.

¾Æ¹«¸® ÁÁÀº °ÍÀÌÁö¸¸ ±×°ÍÀÇ È¿°ú¸¦ Á¦´ë·Î ´À³¢°í ½Ç¹«¿¡ Àû¿ëÇÒ Á¤µµ·Î °¡À̵åÇØ ÁÖ´Â °ÍÀº Á¤¸» ¾î·Á¿î ÀÏÀΰŠ°°´Ù.

'TDD¿¡ ÅõÀÔ´ëºñ È¿°ú¿¡ ´ëÇØ¼­ Àǹ®ÀÌ µì´Ï´Ù.'
  1. ÀÌ¹Ì ¸¹Àº ¼±Áø s/w °³¹ß ¾÷üµéÀÌ ÅõÀÔ´ëºñ È¿°ú¸¦ Áõ¸íÇØ ÁÖ°í ÀÖ´Ù.
  2. ±×·¸´Ù¸é ¿Ö ¿ì¸®¿¡°Ô´Â ÅõÀÔ´ëºñ È¿°ú°¡ ´À²¸ÁöÁö ¾ÊÀ»±î?
    1. ½ÃÀÛÀ» ¾î¶»°Ô ÇØ¾ßÇÒ±î?
    2. Ãʱ⠽ÃÇàÂø¿À¿¡ ´ëÇÑ È¸°í¸¦ ÅëÇØ ¾÷±×·¹ÀÌµå ½ÃÄÑ ³ª°¡¾ßÇÒ »çÇ×
    3. °¢ °³¹ßÀÚ¸¶´Ù °³¹ß´É·ÂÀÇ ÆíÂ÷°¡ Á¸ÀçÇϵíÀÌ ÇØ´ç s/w°³¹ßÁ¶Á÷ÀÇ ¿ª·®°ú °ü·ÃÀÌ ±í´Ù. (¼³°è ¹× ÄÚµù ´É·ÂÀÇ ÆíÂ÷)
    4. ±âÁ¸ ÄÚµåÀÇ º¹Àâµµ¿¡ µû¸¥ Ãʱ⠵µÀÔÀÇ ¾î·Á¿ò

  • TDD¸¦ ÅëÇÑ Ç°Áú Çâ»ó
      Software Architecture Improvement through Test-Driven Development (David Janzen, ACM Press 2005)

  • TDD¸¦ ÆÀ¿¡ Àû¿ëÇßÀ» ¶§ »ý»ê¼º
      An Initial Investigationof Test Driven Development in Industry

  • Test¸¦ ¸ÕÀú ÀÛ¼ºÇϸé...
      Aim, Fire (Kent Beck, IEEE Software Sept/Oct 2001)

  • IEEE/ACM¿¡¼­´Â ´ëÇÐ s/w °øÇÐ °ú¸ñ¿¡ ´ëÇÑ °¡ÀÌµå ¶óÀÎÀ» Á¦½ÃÇϴµ¥ 2004³â¿¡ TDD¸¦ 'desirable skill'·Î ÁöÁ¤.

º¸Åë Ãâ½Ã°¡ µÈ Á¦Ç°¿¡ ¹®Á¦°¡ ¹ß»ýÇÏ¿© ¼öÁ¤ÇÑ Äڵ忡 ´ëÇØ¼­ ´ëÃ¥¼­¶õ °ÍÀ» ÀÛ¼ºÇÑ´Ù.
´ëÃ¥¼­¿¡ µé¾î°¡´Â ³»¿ë
  1. ´ã´çÀÚ (or ÇÔ²² È®ÀÎÇÑ »ç¶÷)
  2. ¹®Á¦ Çö»ó
  3. ¹®Á¦Á¡
  4. ÇØ°á¹æ¹ý
  5. ¿¹»ó side effect

Ãß°¡·Î µé¾î°¬À¸¸é ÇÏ´Â ³»¿ëµé
  1. ½Ã³ª¸®¿À level¿¡¼­ÀÇ ¹®Á¦Á¡ ±â¼ú
  2. À¯»ç ½Ã³ª¸®¿À »óȲ ±â¼ú
  3. function level¿¡¼­ÀÇ ¹®Á¦Á¡ ±â¼ú
  4. À¯»ç function »óȲ ±â¼ú
  5. manual test ¹æ¹ý
  6. unit test Ãß°¡ ¹× ¹æ¹ý

TDD ¼ö·Ã

¾ó¸¶³ª TDD¸¦ »ç¿ëÇØ¾ß ÆíÇϰÔ(?) »ç¿ëÇÒ ¼ö ÀÖÀ»±î?
ÇöÀç TDD¸¦ ¾ÆÁÖ ÀÚ¿¬½º·´°Ô »ç¿ëÇÏ´Â °³¹ßÀÚÀÇ ¸»¿¡ ÀÇÇÏ¸é ¾à 2³â ~ 2³â ¹Ý Á¤µµÀÇ ±â°£ÀÌ ÇÊ¿äÇÏ´Ù°í ÇÑ´Ù.
º¸Åë °³¹ßÀÚµéÀÇ °æ¿ì TDD¸¦ ÀÌÇØ´Â ÇÏÁö¸¸ ±×°ÍÀ» ÀÚ½ÅÀÌ °³¹ßÇÏ´Â ÇÁ·ÎÁ§Æ®¿¡ ´É¼÷ÇÏ°Ô »ç¿ëÇÏ´Â °æ¿ì´Â µå¹°´Ù.
'¾ó¸¶³ª ÇØ¾ß TDD¸¦ ÀÚÀ¯ÀÚÀç·Î »ç¿ë°¡´É Çմϱî'¿¡ ´ëÇÑ Áú¹®¿¡ 2³â ÀÌ»óÀ̶ó´Â ½Ã°£ÀÌ ÁÖ´Â Àǹ̴ ¾ÆÁÖ Å©´Ù°í »ý°¢ÇÑ´Ù. °³ÀÎ ´É·ÂÀÇ Â÷À̵µ ÀÖ°ÚÁö¸¸ ´É¼÷ÇØÁö±â À§ÇÑ ÀΰíÀÇ ½Ã°£Àº ¹«½ÃÇÒ ¼ö ¾øÀ¸¸®¶ó.

¸¶Ä¡ Àü¹®°¡°¡ µÇ±â À§Çؼ­ ÁÖ 40½Ã°£ÀÌ ½Ã°£ ÅõÀÔ ³ë·ÂÀÌ µå´Â °Í°ú °°Àº ¿ø¸®°¡ ¾Æ´Ò±î?

'»çÀå´Ô. TDD¸¦ ´É¼÷ÇÏ°Ô »ç¿ëÇϱâ À§Çؼ­ 2³â°£ÀÇ ½Ã°£ÀÌ µì´Ï´Ù. ÀúÈñÇÑÅ× 2³â°£ ÆÀÀ» ¸Ã°ÜÁÖ¼¼¿ä. ±×·¯¸é ÆÀ¿øµéÀÌ TDD·Î °³¹ßÇÒ ¼ö ÀÖµµ·Ï µÉ °ÍÀÔ´Ï´Ù'
°ú¿¬ ÀÌ·± Á¦¾ÈÀ» ÇØ¾ßÇÏ´Â °ÍÀϱî? 2³â µÚ´Â ³Ê¹« ±î¸¶µæÇÏ°Ô ¸Ö°Ô ´À²¸Áø´Ù.
2³â µÚ¿¡ ¶Ç °³¹ßÀÚµéÀÌ TDD¸¦ Àß Çϰí ÀÖÀ¸¸®¶ó´Â º¸Àåµµ ¾øÁö ¾ÊÀº°¡?

  • Outside-In
      high-level functional test -> low-level unit test
      state-based test
  • Inside-Out
      high-level analysis & design -> technology-facing programmer supporting tests
      interaction-based test

Âü°í : [WWW]Avatars of TDD

  1. ù Test ÀÛ¼º
      ±ÛÁþ±â¸¦ ÇÒ ¶§ °¡Àå ¾î·Á¿î °ÍÀÌ Ã³À½ ½ÃÀÛÀ» ¾î¶»°Ô ÇÒ °ÍÀΰ¡ÇÏ´Â °ÍÀÌ´Ù.
      TDDµµ ¸¶Âù°¡Áö·Î ù Test¸¦ ÀÛ¼ºÇÏ´Â°Ô ¾î·Æ´Ù. ù Test ÀÛ¼ºÀÌ ¾î·Á¿î ÀÌÀ¯´Â ¹«¾ùÀ» TestÇØ¾ß ÇÏ¸ç ¶Ç ¾î´À ¼öÁØÀ¸·Î ÇØ¾ßÇÏ´À³Ä´Â °ÍÀδÙ. °³¹ßÀÚµéÀ» º¸¸é simpleÇÑ °ÍºÎÅÍ ½ÃÀÛÇÏ´Â °Í¿¡ ¾î·Á¿òÀ» ´À³¤´Ù. Àâ»ý°¢ÀÌ ¸¹ÀÌ µç´Ù. µû¶ó¼­ simpleÇÑ Test ÀÚü¸¦ »ý°¢ÇØ ³»´Âµ¥ ¾î·Á¿òÀ» ´À³¤´Ù. »ý°¢ÀÌ ¸¹´Ù. µû¶ó¼­ ¹«¾ùºÎÅÍ ½ÃÀÛÇұ ´ëÇØ¼­ ÃÊÁ¡À» ¸ÂÃ߱⵵ ½±Áö ¾Ê¾Æ º¸ÀδÙ.
  2. Interface -> Implementation
      ù Test ÀÛ¼º ÈÄ ÇØ´ç Test¸¦ ¸¸Á·½ÃŰ´Â Äڵ带 ÀÛ¼ºÇÏ¿© Test¸¦ Åë°ú½ÃÄ×´Ù. ÀÌ·¸°Ô 2, 3¹øÀÇ Test´Â Interface¿¡ ÇØ´çÇÑ´Ù. ÀÌÈÄ Test¸¦ ¸¸Á·½Ã۱â À§Çؼ­ ´Ü¼ø Interface¸¸À¸·Î´Â Test¸¦ Åë°ú½Ãų ¾øÀ¸¸ç ÀÌ ´Ü°è¿¡´Â ImplementationÀ» ÀÛ¼ºÇØ¾ß ÇÑ´Ù. Interface¿¡¼­ ³­À̵µ¿¡¼­ ImplementationÀ¸·Î ÀüÀ̵Ǵ ¼ø°£ÀÇ ³ªÀ̵µÀÇ Â÷À̰¡ Å©°Ô ´À²¸Áø´Ù. '±×Àú Test¸¦ ¸¸Á·½ÃÄѶó'¶ó´Â ¿ä±¸Á¶°ÇÀÌ ´õÀÌ»ó ½±°Ô ´À²¸ÁöÁö ¾Ê±â ¶§¹®ÀÌ´Ù. ÀÌ ´Ü°è¿¡´Â ½ÇÁ¦ ±¸ÇöÇÒ ¶§¿Í µå´Â ´À³¦ÀÌ ´Ù¸£Áö ¾Ê´Ù.
  3. À¯Áöº¸¼ö
      Test Äڵ嵵 À¯Áö º¸¼ö°¡ ÇÊ¿äÇÏ´Ù. TestÀÇ °³¼ö°¡ ´Ã¾î³ª¾ß ´À³¢´Â ¾î·Á¿òÀ̶ó óÀ½¿¡´Â °¡½¿¿¡ ¿Í´êÁö ¾ÊÀ» ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ½ÇÇàÄÚµåÀÇ º¯°æ¿¡ µû¸¥ À¯Áöº¸¼ö »Ó¸¸ ¾Æ´Ï¶ó ½Ã°£ÀÌ Áö³­ ÈÄ¿¡ »õ·Î¿î Å×½ºÆ®¸¦ Ãß°¡ÇÒ °æ¿ì¿¡ ´À³¢´Â ¾î·Á¿ò Áß¿¡ Çϳª´Ù.

  • s/w Áغñ
    • Eclipse
    • MinGW
    • MSYS
    • CppUTest
  • ¼³Ä¡
  • Path¼³Á¤
    • À©µµ¿ì Path ȯ°æº¯¼ö¿¡ Ãß°¡ (MinGW\bin, MSYS\1.0\bin)
  • CppUTest import
  • CppUTest Build

  • ±â¾÷Àû¿ëµ¿Çâ
    • TDD¸¦ Àû±ØÀûÀ¸·Î Ȱ¿ëÇϴ ȸ»ç´Â ´ëºÎºÐ 30ÀÎ ÀÌÇÏ s/w °³¹ß ȸ»ç
    • ¿Ü±¹ ´ë±â¾÷ÀÇ °æ¿ìµµ TDD¸¦ Àû¿ëÇϴ ȸ»ç°¡ °ÅÀÇ ¾øÀ½
        Àû¿ëÀº ¿øÇϳª È®»ê¿¡ ¹®Á¦°¡ ÀÖ´Ù°í ÇÔ.
    • ¸¹Àº »ç¶÷µéÀ» º¯È­½ÃŰ±â¿¡ ¿ªºÎÁ· TDD°¡ ³ì¾Æµé±â¿¡´Â ¾î·Á¿î »óȲÀ̶ó ÆÇ´ÜµÊ
  • TDD ¼ö·Ã½Ã°£
    • TDD ¼¼¼Ç ¹ßÇ¥ÀÚÀÇ °æ¿ì 2³âÀÇ °æÇèÀ̳ª ¼ö·ÃÀ̸é TDD¸¦ ÀÚ¿¬½º·´°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù°í ÇÔ. => ¾Æ¹«¸® ÁÁÀº °æÇèÀÌ¶óµµ ½Ã°£À¸·Î ¼º¼÷½ÃÄÑ¾ß Àǹ̸¦ °¡Áú ¼ö ÀÖ´Ù.
    • °øÀ¯È¸¿¡ Âü¼®ÇÑ ºÐµé¿¡°Ô ¹¯´Ù. (ÇöÀç TDD¸¦ Àû±ØÈ°¿ëÇϰí ÀÖ´Â »ç¶÷Àº?)
      • ÇöÀç TDD¸¦ Àû¿ëÇϰí ÀÖ´Ù°í ÇÑ Âü¼®ÀÚµéÀÇ °æ¿ì Àü¿øÀÌ 2³â ÀÌ»ó Àû¿ëÇÏ¿© ÁøÇà ÁßÀ̶ó°í ÇÑ´Ù. 2³â ÀÌÇÏÀÇ ÇÑ ¸íµµ ¾ø´Ù. ÀÌ°Ô ¾îÂîµÈ ÀÏÀϱî?
    • Ç×»ó TDD·Î »ç°íÇϰí TDD¸¦ Àû¿ëÇØ º¸±â
  • °³¹ß°ü¸® Tool
    • Story·Î °ü¸®ÇÏ¸ç °¢ StoryÀÇ ¿Ï·á(done) ¿©ºÎ´Â Ç×»ó ÀÚµ¿È­µÈ Test¸¦ ÅëÇØ È®ÀÎÇÏ°í °ü¸®µÇ¾î¾ß ÇÑ´Ù.
    • °á±¹ ÃÖ±Ù¿¡ °³¹ßµÈ °³¹ß°ü¸® ToolÀ» ÆÀÀ̳ª Á¶Á÷¿¡¼­ Ȱ¿ëÇÏ¿© È¿°ú¸¦ º¸±â À§Çؼ­´Â ¹Ýµå½Ã TDD³ª BDD, AT°¡ ÇÊ¿äÇÏ´Ù.
  • ÀÌÀü TDD¿Í ´Þ¶óÁø Á¡Àº?
    • ¿ì¸®°¡ ÀÌÀü±îÁö Ã¥À¸·Î º¸°í ¹è¿î TDD¿Í ºñ±³Çؼ­ »ö´Ù¸¥ ¹æ¹ýÀ̳ª »ö´Ù¸¥ µµÀüÀÇ º¯È­´Â ´À³¥ ¼ö ¾ø¾ú´Ù.
    • TDDÀÇ Test½ÇÇà ½Ã°£À» ÁÙÀÌ·Á´Â ³ë·Â°ú Test Code À¯Áöº¸¼ö¿¡ ´ëÇÑ ¹ßÇ¥°¡ ÀÖ¾ú´Ù.
    • TDD¸¦ ¾î¶² ½ÄÀ¸·Î ¹ßÇ¥Çϰųª ±³À°ÇÒ °ÍÀ̳Ŀ¡ ´ëÇÑ ¼¼¼ÇÀÌ ÀÖ¾ú´Ù.
    • BDD ¹æ½ÄÀÇ ±³À°µµ ÁÁÀ» µí.

s/wÆÄÆ®¿¡ »õ·Î µé¾î¿Â °³¹ß °æÇèÀÌ ¾ø´Â µ¿·á¿¡°Ô ¾î¶»°Ô TDD¸¦ ÀÍÈú¼ö ÀÖµµ·Ï µµ¿òÀ» ÁÙ ¼ö ÀÖÀ»±î?
ÀÏ´Ü C¾ð¾î¿¡ ´ëÇÑ ±âº»Àº ¾Æ·¡ Ã¥À» ÃßõÇÏ¿´´Ù.

[ISBN link]0131103628

±×·¸´Ù¸é TDD´Â ¾ðÁ¦ ½ÃÀÛÇÏÁö? C¾ð¾î¿¡ Àͼ÷ÇØ Áú¶§±îÁö ±â´Ù·Á¾ß ÇÒ±î?
ÀÌ·± °í¹ÎÀ» ÇÏ´Ù°¡ ¾Æ¿¹ óÀ½ºÎÅÍ TDD¸¦ ÇÏ¸é ¾î¶³±î¸¦ »ý°¢Çß´Ù.
C¾ð¾î¸¦ ÀÍÈ÷¸ç¼­ Ã¥ÀÇ ¿¹Á¦µéÀ» µû¶ó ÇØº¼ÅÙµ¥ ±× °á°ú¸¦ ´Ü¼øÈ÷ printf·Î È®ÀÎÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó test assert·Î ¿øÇÏ´Â °á°ú¸¦ Å×½ºÆ® ÇÏ´Â °ÍÀÌ´Ù.

±×·¸´Ù¸é ³ª´Â ¾î¶² µµ¿òÀ» ÁÖ¸é µÉ±î?

  1. TDD ȯ°æ¼³Á¤ÇØ ÁÖ±â
  2. ¸î °¡Áö ¿¹Á¦¸¦ ÅëÇØ »ç¿ë ¹æ¹ý ¼³¸í

³ªµµ »õ·Î¿î ¾ð¾î¸¦ ÀÍÈú ¶§ TDD±â¹ÝÀ¸·Î ÇнÀÇØ ³ª°¡´Â ¹æ¹ýÀ» Àû¿ëÇØ ºÁ¾ß°Ú´Ù.
Test Code¸¦ Clean ÇÏ°Ô ¸¸µé±â À§Çؼ­ °¡Àå Áß¿äÇÑ °ÍÀº ReadabilityÀÌ´Ù.

Test Code´Â Àб⠽¬¿ö¾ß ÇÑ´Ù.

Clean Code 124Page

Åä¿äŸ°ßÇÐÀ» ´Ù³à¿À½Å ºÐÀÇ ±³À° Èı⸦ µè°í.
  1. Àڱ⠰øÁ¤ÀÇ Å×½ºÆ®´Â ÀڱⰡ Ã¥ÀÓÁø´Ù.
      s/w °³¹ßÀÇ °æ¿ì °³¹ßÀÚº¸´Ù´Â Å×½ºÆ®ºÎ¼­³ª ǰÁúºÎ¼­¿¡¼­ ½Ç½ÃÇϰí ÀÖÀ½.
  2. ÀÚ»ç»Ó¸¸ ¾Æ´Ï¶ó Çù·Â»ç±îÁö Just In Time
  3. Push or Pull¹æ½Ä ½Ç½À üÇè
      Pull¹æ½ÄÀÌ È¿°úÀû. ½Ç½À ÈÄ °á°ú¸¦ ÅëÇØ ½Ã°£, Á¦°í, cost ºÐ¼®ÇÏ¿© ³ª¿Â °á·Ð
  4. ±â°èó·³ ÀÏÇϴµ¥ ÇູÇѰ¡?¶ó´Â Áú¹®¿¡ ´ëÇÑ Åä¿äŸ Á÷¿øÀÇ ´äº¯
      ÇູÇÏ´Ù. ÀÌÀü ¹æ½Ä¿¡¼­´Â È­Àå½Ç°¡±âµµ Èûµé¾úÁö¸¸ Áö±ÝÀº °¡´ÉÇÏ´Ù. Á¤È®È÷ ¾î¶»°Ô °¡´ÉÇÑÁö´Â ¸ð¸£°ÚÁö¸¸ ÇöÀç ¹æ½Ä¿¡ ¸¸Á·°¨À» Ç¥½ÃÇß´Ù°í Çß´Ù.

  • UI Layer:
    • ½Ã³ª¸®¿À ±â¹Ý BDD ÀÛ¼º
  • Middle Layer:
    • UI LayerÀÇ ½Ã³ª¸®¿À ±â¹ÝÀ¸·Î Middle LayerÀÇ APIµéÀÌ Á¤ÀÇ µÇ¾ú´Ù´Â °¡Á¤.
    • Middle API °¢°¢ÀÇ input¿¡ ´ëÇÑ outputÀ» Test ÇÑ´Ù.
  • System Layer:
    • Middle LayerÀÇ API¿¡ ÀÇÇØ System LayerÀÇ API°¡ Á¤ÀÇ µÇ¾ú´Ù´Â °¡Á¤.
    • System API °¢°¢ÀÇ input¿¡ ´ëÇÑ outputÀ» Test ÇÑ´Ù.

À۳⿡ Áö¿øÇß´ø »ç¾÷ºÎÀÇ °æ¿ì ½Ã³ª¸®¿À ±â¹Ý(BDD)¶ó±â º¸´Ù´Â ÇÔ¼ö ´ÜÀ§ÀÇ Test·Î ÁøÇàÇß´Ù. Áö³ª°í ³ª´Ï ¸¹Àº ¾Æ½¬¿òÀÌ ³²´Ù. Áö±Ý ´Ù½Ã ±×¶§·Î µ¹¾Æ°£´Ù°í ÇØµµ ½Ã³ª¸®¿À ±â¹ÝÀ¸·Î´Â ÀÛ¾÷ÀÌ Èûµé°Ú´Ù´Â ´À³¦ÀÌ µå´Âµ¥ ¿Ö ÀÚ²Ù ÀÌ·± ´À³¦ÀÌ µå´ÂÁö Àá½Ã »ý°¢Çϰí Á¤¸®ÇØ º»´Ù.
  1. ¹Ìµé¿þ¾î
      System°ú UI Layer Áß°£¿¡ ÀÖ´Â ¹Ìµé¿þ¾î¶ó¼­ »ç¿ëµÇ´Â ½Ã³ª¸®¿À¸¦ º¼·Á¸é UI¿¡¼­ »ç¿ëÇÏ´Â °ÍÀ» ±âÁØÀ¸·Î ½ÃÀÛÇØ¾ß ÇÑ´Ù.
  2. ÇÔ¼öµéÀÌ º¹ÀâÇÏ´Ù.
      ÇÔ¼ö°¡ ±æ°í ¸¹Àº ÀÏÀ» ÇØ¼­ ³Ê¹« º¹ÀâÇÏ´õ¶ó.
  3. ÀÌÇØÇϱ⠾î·Á¿î »óÅÂÀÇ ÄÚµå
      ÇÔ¼ö°¡ º¹ÀâÇѰŠÀ̿ܿ¡ DTV ½ºÆå°ú °ü·ÃµÈ ¿ë¾îµéÀÌ º¯¼ö¸íÀ̳ª ÇÔ¼ö¸íÀ¸·Î »ç¿ëµÇ¾î µ¿ÀÛÀ» ÀÌÇØÇϱâ À§Çؼ­´Â Domain Knowledge°¡ ÇÊ¿äÇß´Ù.
  4. °³¹ßÀÚµµ ½Ã³ª¸®¿À¸¦ Àß ¸ð¸¥´Ù.
      °³¹ßÀÚµéÀº Áö±Ý±îÁö À¯Áöº¸¼ö¸¸ ÇØ¿Ô´Ù. ¹®Á¦°¡ »ý±â¸é ±×¶§ ¹®Á¦Á¡À» ã±â À§Çؼ­ µð¹ö±ëÇÑ´Ù. ÀÌ´Â Äڵ尡 º¹ÀâÇϱ⿡ ÀÌÇØÇÏ´Â ÀÛ¾÷À» Æ÷±âÇÑ°Ô ¾Æ´Ò±î ½Í´Ù. º¸±â ½±°Ô °íÄ¡´Â °Íµµ ¾î·Á¿î »óȲ.
  5. Ã˹ÚÇÑ ½Ã°£
      100,000 lineÀÇ Äڵ忡 95%ÀÇ coverage ǰÁúÀÇ Test¸¦ ´Þ¾Æ¾ß Çϱ⿡ ½Ã³ª¸®¿À ÇϳªÇϳª¸¦ µûÁö¸é¼­ ÇÒ ¼ö ÀÖ´Â »óȲÀÌ ¾Æ´Ï¿´´Ù.
  6. °³¹ßÇÏ´Â »ç¶÷ µû·Î Test CodeÀÛ¼ºÇÏ´Â »ç¶÷ µû·Î
      °³¹ßÀÚµéÀÌ Test Code ÀÛ¼ºÀº ÀÚ±âÀÇ ÀÏÀÌ ¾Æ´Ï¶ó°í »ý°¢Çß´Ù. Çϱ⠽ÈÀº ÀÏÀ» ¾ïÁö·Î ÇÏ´Â ´À³¦µµ ¹Þ¾Ò´Ù. °á±¹ ¿ì¸®ÆÀ¿øÀÌ °ÅÀÌ ´ëºÎºÐÀÇ ÀÏÀ» ÇÒ ¼ö ¹Û¿¡ ¾ø¾ú´Ù.

±× ÀÏÀ» Áö±Ý ´Ù½Ã ÇÑ´Ù¸é :
  1. 100,000 line Äڵ忡 ´ëÇØ¼­ ¹®Á¦°¡ ÀÚÁÖ ¹ß»ýÇÏ´Â ½Ã³ª¸®¿À¿¡ ´ëÇØ¼­ Test Code¸¦ ÀÛ¼ºÇÑ´Ù.
  2. ¹®Á¦°¡ ÀÚÁÖ ¹ß»ýÇÏ´Â ½Ã³ª¸®¿À¿¡ ´ëÇØ¼­¸¸
  3. º¹Àâµµ°¡ ³ôÀº ºÎºÐ¿¡ ´ëÇØ¼­¸¸

Kent Beck TDD Intro Video
http://vimeo.com/10789674

Áö³­ÁÖ ±Ý¿äÀÏ¿¡ ¼¼Å¹±â »ç¾÷ºÎ¿¡ TDD ±³À°À» À§Çؼ­ ÃâÀåÀ» ´Ù³à¿Ô´Ù.
ÀÌ·± ¹æ½ÄÀ¸·Î ÁøÇàÇß´Ù. (ÀÌ¹Ì ´ã´çÀÚ´Â TDD¿¡ ´ëÇÑ ±âº» ±³À°Àº ¹ÞÀº »óÅÂ)
  1. ´ã´çÀÚ¿Í °£´ÜÇÑ Àλç
  2. TDD Å×½ºÆÃ 4°¡Áö ¹æ¹ý
    1. ÇÔ¼öÀÇ return°ªÀ» Å×½ºÆ®
    2. state°¡ ¹Ù²î´Â º¯¼ö¸¦ Å×½ºÆ®
    3. fakeÇÔ¼öÀÇ º¯¼ö¸¦ Å×½ºÆ®
    4. 1, 2, 3¹ø È¥¿ë
  3. °³¹ßÀÚ°¡ ¿øÇÏ´Â ±ä ÇÔ¼ö¿¡ ´ëÇØ¼­ ¸®ÆÑÅ丵
  4. ¸®ÆÑÅ丵ÇÑ ÇÔ¼ö¿¡ ´ëÇØ¼­ Unit Test ´Þ±â

.h¿Í °°ÀÌ headerÆÄÀÏ¿¡ ¼±¾ðµÈ register¿¡ ´ëÇÑ Ã³¸® ¹æ¹ý
#define XXICR (*((volatile unsigned short *)0x00008908))
-> unsigned short XXICR;

´õÀ§¸¦ ÇÇÇϱâ À§Çؼ­ ½ºÅ¸¹÷½º¿¡ ¿Ô´Ù. Ã¥µµ ÀÐ°í °øºÎµµ ÇÒ°â ³ëÆ®ºÏµµ ì°Ü¿Ô´Ù.
¿ì¿¬È÷ ¿· Å×ÀÌºí¿¡¼­ ÇÁ·Î±×·¡¹ÖÀ» °øºÎÇÏ´Â Ä¿ÇÃÀ» ¹ß°ßÇß´Ù. ÄÄÇ»ÅͰøÇÐÀ» Àü°øÇÏ´Â ´ëÇлýÁ¤µµ·Î º¸ÀδÙ.
TDD Ã¥À» º¸¸é¼­ À̰ÍÀú°Í ½ÃµµÇØ º¸°í ÀÖ´Ù.

¿ì¿¬¿¡ ³» Á¤¸é¿¡ ÀÖ´Â ³²ÀںР¹ß°ß. ÀÌ ºÐµµ °°Àº TDD Ã¥À» ÆîÃijõ°í °øºÎÇϰí ÀÖ´Ù. À̺ÐÀº ³ªÀ̰¡ Á» µé¾î º¸À̸ç Á÷ÀåÀÎÀ¸·Î ÆÇ´ÜµÈ´Ù.

TDDÀÇ ¿­±â°¡ ÀÌ·¸°Ô ¶ß°Å¿ï ÁÙÀ̾ß.
È®»ê¼Óµµ°¡ ²Ï ºü¸¥°Å °°´Ù.

TDD ±³À°

  1. ȯ°æ¼³Á¤
    1. °³¹ß¾ð¾î ¼±ÅÃ
      • C, C++
      • Java
    2. °³¹ß IDE¼±ÅÃ
      • Eclipse (C, C++, Java)
      • Visual Studio (C, C++)
    3. TDD Framework ¼±ÅÃ
      • CUnit
      • CppUTest (Ãßõ)
      • JUnit (Ãßõ)
      • Android JUnit (¾Èµå·ÎÀÌµå °³¹ß½Ã Ãßõ)
    4. TDD Framework¿Í °³¹ß IDE ¿¬°áÇϱâ
  2. First Test ÀÛ¼º
      ´ÜÁö °³¹ßIDE¿¡¼­ TDD Framework¸¦ Á¤»óÀûÀ¸·Î »ç¿ë°¡´ÉÇÑ »óÅÂÀÎÁö¸¦ È®ÀÎÇϱâ À§ÇÔ
  3. Test assert
    • Test Group
    • Test Name

°ü·Ã ¼­Àû

°ü·Ã »çÀÌÆ®


PythonPowered EditText of this page (last modified 2010-10-08 14:19:23)
FindPage by browsing, searching, or an index
Or try one of these actions: DeletePage, DeleteUploadedFile, LikePages, SpellCheck, UploadFile