| TDD | UserPreferences |
TDD ÀÌÇØ¸¦ À§ÇÑ ½Ç½À
|
|
½ÇÁ¦ TDDº¸´Ù Çö½ÇÀûÀ¸·Î ´õ ¼ö¿ä°¡ ¸¹Àº °ÍÀÌ ÀÌ¹Ì Á¸ÀçÇÏ´Â ÄÚµå(Legacy Code)¿¡ ´ëÇÑ unit testÀÌ´Ù. ȸ»ç¿¡¼ ÇÏ´Â ¾÷¹«ÀÇ ´ëºÎºÐÀÌ »õ·Î¿î ±â´ÉÀ» ±¸ÇöÇϱ⠺¸´Ù´Â ±âÁ¸¿¡ Á¸ÀçÇÏ´Â Äڵ带 Çʿ信 µû¶ó ¾à°£¾¿ ¼öÁ¤ÇÏ´Â °æ¿ì°¡ ´õ ¸¹´Ù. |
|
1. ±âÁ¸ Äڵ忡 ´ëÇÑ ¼öÁ¤¾øÀÌ ÁøÇàÇØ ´Þ¶ó 1. Å×½ºÆ® Äڵ尡 Àß 1. Å×½ºÆ®¿¡ ´ëÇÑ ¸®Æ÷ÆÃÀÌ µÇµµ·Ï ÇØ ´Þ¶ó |
|
|
±âÁ¸Äڵ忡¼ Unit Test¸¦ ÇÏ´Ùº¸¸é °¥µîÀ» ÇÏ°Ô µÇ´Â ºÎºÐÀÌ ¸®ÆÑÅ丵ÀÌ ¸ÕÀú³Ä ¾Æ´Ï¸é Unit Test¸¦ ÇÏ°í ³ ÈÄ¿¡ ¸®ÆÑÅ丵À» ÇØ¾ß ÇÏ´À³Ä¿¡ ¹®Á¦¿¡ Á÷¸éÇÏ°Ô µÈ´Ù. ½ÇÁ¦·Î ±âÁ¸ ÇÔ¼öÀÇ ¸¹Àº ºÎºÐµéÀÌ ¸®ÆÑÅ丵À» ÇÏÁö ¾ÊÀ¸¸é Unit Test¿¡ ¸î ¹èÀÇ ³ë·ÂÀÌ µå´Â °æ¿ì°¡ ¸¹±â ¶§¹®ÀÌ´Ù. ÇÏÁö¸¸ ¸·»ó ¸®ÆÑÅ丵À» ¸ÕÀú ÇÏ·Á°í ÇÏ¸é °í°´À¸·ÎºÎÅÍÀÇ Ç×Àǰ¡ µé¾î¿Ã °ÍÀÌ »·ÇÏ´Ù. '±âÁ¸¿¡ Àß µ¹¾Æ°¡´Â Äڵ忡 ´ëÇØ¼ ¿Ö ±¸Å¿© ¼öÁ¤À» ÇØ¾ßÇϴ°¡?' '±×°Å ¼öÁ¤ÇÏ°í ¹®Á¦ »ý±â¸é ´ç½ÅÀÌ Ã¥ÀÓÁú²¨³Ä' µîÀÇ ¸»À» µè°Ô µÈ´Ù. ¾ÆÁÖ °£´ÜÇÑ ºÎºÐÀÇ ¸®ÆÑÅ丵ÀÌÁö¸¸ ÀúÇ×ÀÌ ¿ö³« °ÇÏ¿© ¼ÕÀ» ¸ø´ë´Â °æ¿ì°¡ ¸¹´Ù.
°í°´°ú ½Å·Ú¸¦ ½×±â Àü¿¡´Â ¸®ÆÑÅ丵º¸´Ù´Â ÈûÀÌ µé´õ¶óµµ ±âÁ¸ Äڵ忡 ´ëÇÑ Unit Test¸¦ ¸ÕÀú ÁøÇàÇÏ´Â°Ô ¹Ù¶÷Á÷(?) ÇÏ´Ù°í »ý°¢ÇÑ´Ù. |
|
Legacy Code¿¡ ´ëÇÑ Unit Test¸¦ ÇÏ´Â °æ¿ì TDD·Î unit test¸¦ ÀÛ¼ºÇÏ´Â °æ¿ì¿¡ ºñÇØ¼ Unit Test Äڵ尡 º¹ÀâÇÏ´Ù. µû¶ó¼ ¸®ÆÑÅ丵(refactoring)ÀÌ ÇÊ¿äÇÑ °æ¿ì°¡ ´õ ¸¹´Ù.
²Ï º¹ÀâÇÑ ÇϳªÀÇ ÆÄÀÏ¿¡ ´ëÇØ¼ unit test¸¦ ÀÛ¼ºÇÑ ÈÄ 'ÀÌ°Ç Á¤¸» ÇÊ¿äÇϰڴÙ'¶ó°í »ý°¢µÇ´Â °ÍµéÀ» Á¤¸®ÇØ º¸ÀÚ.
|
|
|
°³¹ßÀÚ <-> °í°´ »óÈ£°£ ´ëÈ ¹æ¹ý. °³¹ßÀÚ°¡ ¾Æ´Ñ »ç¶÷ÀÇ ¿ä±¸»çÇ×À» °³¹ßÀÚ°¡ ÀÛ¾÷ÇÒ ¼ö ÀÖ´Â unit test ÄÚµå·Î ¿Å±â´Â ¹æ¹ý ã±â.
¿øÇÏ´Â µ¿ÀÛ : 2°³ ¼öÀÇ ÀÔ·ÂÀ» ¹Þ¾Æ ÇÕÀ» ±¸Çϱâ
|
|
300 ¶óÀÎÀÌ ³Ñ´Â Äڵ忡 unit test¸¦ ºÙÀÌ´Â ÀÛ¾÷. if¹®, Àü¿ªº¯¼ö, linked list, ·çÇÁ¹®, break µîÀÌ ¸¹´Ù. °¢°¢¿¡ ´ëÇØ¼ inputÀ» ¸¸µé±â°¡ ½±Áö ¾Ê´Ù. |
|
fake ÇÔ¼ö¸¦ °£°áÇÏ°Ô Ç¥ÇöÇϱâ. int fake_A(int param1) {
ÀÌ·±½ÄÀ¸·Î ÀÛ¼ºÇÏ´Â °Íº¸´Ù´Â int fake_A(int param1) {
À¸·Î ÀÛ¼ºÇÏ¿© expected_return_fake_A[ ]¿¡ ´ëÇÑ expected return¿¡ ´ëÇÑ °ªÀ» ¹Ì¸® ¼³Á¤ÇÏ¿© return¹Þµµ·Ï ÇÏ´Â °ÍÀÌ ±ò²ûÇÏ´Ù. (idea from ÇÑÁÖ¿µS) |
|
void Func_A()
.... .... .... if(condition_A == 1)
ÀÌ·± °æ¿ì¿¡ ´ëÇØ¼
int Getfake_A_?ParameterSave()
CHECK_EQUAL(expected_value, Getfake_A_?ParameterSave()); ·Î üũÇÔ. |
|
ÀϹÝÀûÀ¸·Î TDD ±³À°À¸·Î °£´ÜÇÑ ÇÁ·Î±×·¥À» TDD·Î ±¸ÇöÇÏ´Â °ÍÀ» ½Ç½ÀÇÑ´Ù. ÃÖ±Ù¿¡ Legacy Code¿¡ Unit Test¸¦ Ãß°¡ÇÏ¸é¼ ´À³¤Á¡Àº TDD ±³À°ÀÇ ½ÃÀÛÀº Legacy Code¿¡ Unit Test ´Þ±â·Î ½ÃÀÛÇØ¾ß °Ú´Ù´Â »ý°¢À» Çß´Ù.
óÀ½ TDD¸¦ ½Ç½ÀÇÏ´Â °æ¿ì °¡Àå ¸¹Àº Áú¹®Áß¿¡ Çϳª°¡ '²À ÀÌ·¸°Ô±îÁö °³¹ßÇØ¾ß Çϳª¿ä?' ÀÌ´Ù. |
|
unit test¸¦ ÅëÇÑ ¼Ò½ºÀÇ coverage¸¦ È®ÀÎÇϵµ·Ï ÇÏ¿´´Âµ¥ º¹ÀâÇÑ ÄÚµåÀÇ °æ¿ì Å×½ºÆ® ÄÚµå ÀÛ¼ºÀÌ Èûµé´Ù. Àú³á¿¡ Åð±ÙÇÏ¸é¼ ¿Ö ±×·²±î¸¦ »ý°¢Çغô٠º¹ÀâÇÑ ÇÔ¼ö¸¦ ó¸®ÇÏ´Â °æ¿ì ÀÏ´Ü coverage¸¦ ³ôÀ̰íÀÚ ÇÏ´Â ¸¶À½ÀÌ ¸ÕÀú µç´Ù. ÇÔ¼öÀÇ ³»¿ëÀ» ÆÄ¾ÇÇϱ⠺¸´Ù´Â °¡Àå ½±°Ô coverageÀÇ ¼öÄ¡¸¦ ¿Ã¸®´Â ¹æ¹ýÀ» ¸ÕÀú ã°Ô µÈ´Ù. ±×·¯´Ù º¸´Ï ÇϳªÀÇ ÇÔ¼ö¿¡ unit test¸¦ Ãß°¡ÇÏ´Â ÀÛ¾÷¿¡ ¼Ò¿äµÇ´Â ½Ã°£ÀÌ ¿ÀÈ÷·Á ´õ ±æ°Ô µÈ´Ù. coverage ¼öÄ¡¸¦ °»½ÅÇÏ´Â À¯È¤¿¡¼ ¹þ¾î³ª¾ß°Ú´Ù. |
|
¼±Çà°³¹ßÆÀ¿¡¼ ÀÛ¾÷ÇÑ ¼Ò½ºÄڵ带 ¹Þ¾Æ¼ °³¹ßÀ» ¿Ï·áÇÏ´Â ÃÖÁ¾ °³¹ßÆÀÀÌ ÀÖ´Â °æ¿ì ¾÷¹« À̰üÀÌ ½±Áö ¾Ê´Ù. ¼±Çà°³¹ßÆÀÀº °£´ÜÇÑ ±â´ÉÀÇ °ËÁõ¸¸À» Çϰí ÃÖÁ¾°³¹ßÆÀ¿¡ ¾÷¹«¸¦ À̰üÇÑ´Ù. À̰ü ¹ÞÀº ¼Ò½ºÄÚµå´Â ¾ó¸¶³ª °ËÁõµÇ¾ú³ª? ½ÇÁ¦·Î ¾à 20% Á¤µµÀÇ coverage¿¡ ´ëÇÑ test¸¸ ÁøÇàµÇ°í ÃÖÁ¾ °³¹ßÆÀ¿¡ Àü´ÞµÈ´Ù. ¼±Çà°³¹ßÆÀÀº ÃÖÁ¾ °³¹ßÆÀ°ú QE, QA ºÎ¼¿¡°Ô ÄÚµåÀÇ °ËÁõ±îÁöµµ À̰üÇÑ´Ù.
ÃÖÁ¾ °³¹ßÆÀ¿¡¼ °³¹ßÁß¿¡ ȤÀº QE, QA¿¡¼ ¹ö±×(bug)¸¦ ¹ß°ßÇÑ °æ¿ì ÃÖÁ¾ °³¹ßÆÀ¿¡¼ ¹®Á¦¸¦ ¼öÁ¤ÇÏ°Ô µÈ´Ù.
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ÁÙ Á¤µµ ¼öÁ¤Çϸé ÇØ°áµÇ´Â ¹®Á¦¸¦ ¾ÆÁ÷±îÁö ¼öÁ¤ÇÏÁö ¸øÇϰí ÀÖ´Ù. |
°úÁ¤
|
±âÁ¸ code¿¡ unittest¸¦ Ãß°¡ÇÏ´Â ÀÛ¾÷À» óÀ½ ½ÃÀÛÇÒ¶§¿Í À߸ø ¿¹ÃøÇÑ Á¡µé
|
|
unittest°¡ ¾î·Á¿î °æ¿ì void foo_bar() {
... ... if(count == 0) {
}
} static intÇüÀÎ countº¯¼ö °ª¿¡ µû¶ó branch°¡ ÀϾ´Â °æ¿ì.
?SetStaticCount(int value); |
|
ÇöÀç ´ã´çÇϰí ÀÖ´Â Á¶Á÷¿¡¼ unittestÀÇ ÅõÀÔ ³ë·Â¿¡ ´ëºñ output¿¡ ´ëÇÑ À̽´¸¦ ¸¹ÀÌ Á¦±âÇÑ´Ù. ¼öÄ¡ÀûÀ¸·Î ºñ±³ ºÐ¼®ÇÒ ¼ö ÀÖ´Â ÀڷḦ ¸¸µé¾î¾ß °Ú´Ù´Â »ý°¢ÀÌ µç´Ù.
|
|
¾îÁ¦ °³¹ßÀÚ¸¦ ´ë»óÀ¸·Î Unittest ÁøÇà¿¡ °ü·ÃµÈ ȸÀÇÁøÇà. ´ë»óÀÚ : °³¹ßÆÀÀ¸·Î À̵¿ÇÑ °³¹ßÀÚ(°©ÀÚ±â ÆÀ À̵¿µÇ¸é¼ ¾÷¹«¸¦ ¸Ã°Ô µÊ) ¸ñÀû : ±â°£³»¿¡ UnittestÀÇ coverage¸¦ ´Þ¼º ¹æ¾È ã±â ³»¿ë : '½Ã°£¸¸ ÀÖÀ¸¸é Çϰڴµ¥ Áö±Ý ½Ã°£ÀÌ ¾ø´Ù.' 'Test ´Ù´Â°Å ´ë½Å ÇØÁÖ¸é ¾ÈµÇ°Ú´À³Ä?' ¾î·µç ¼³µæÇÏ¿© ÁøÇàÇϱâ·Î ÇÔ. °³¹ßÀÚ ´ã´ç ¸ðµâ¿¡¼ Unittest µ¹¾Æ°¡´Â°Å º¸¿©ÁÜ. ÀÚ½ÅÀÌ °³¹ßÇÑ ¸ðµâ¿¡ ¹®Á¦Á¡ ³ëÃâ. |
|
Legacy Code¿¡¼ TDD¸¦ ÇÏ´Â °æ¿ì ¸î°¡Áö ¾î·Á¿ò Á¡ÀÌ ¸¹´Ù.
µû¶ó¼ ¸®ÆÑÅ丵À» ÇÏÁö ¾Ê°í¼´Â TDD¸¦ ÁøÇàÇϱⰡ ¾î·Æ´Ù. ex) ÇÔ¼ö 1°³ ¶óÀμö°¡ ´ë·« 1500 ¶óÀÎ °³¹ßÀÚÀÇ ¿äûÀ¸·Î ¸®ÆÑÅ丵 ½ÃÇàÇÏ¿´À½. |
|
TDD ±³À°À» ÇÏ´Ùº¸¸é Ç×»ó ´À³¢´Â °ÍÀÌÁö¸¸ ±âÁ¸ ÀÚ½ÅÀÌ °³¹ßÇØ ¿À´ø ¹æ½ÄÀ» ¹ö¸®°í TDD¹æ½ÄÀ¸·Î °³¹ßÇÏ´Â °ÍÀÌ ½¬¿îÀÏÀÌ ¾Æ´Ï´Ù. ¼ö ³âÀ» °°Àº ¹æ½ÄÀ¸·Î ÀÏÀ» ÇØ¿À´Ù°¡ ¾î´À ¼ø°£ 'ÀÌ ¹æ½ÄÀÌ ÁÁ½À´Ï´Ù. ¾ÕÀ¸·Î ÀÌ·¸°Ô Çϼ¼¿ä'¶ó°í Çϸé ÀûÀÀÇϴµ¥ ²Ï ¸¹Àº ½Ã°£ÀÌ µå´Â°Å °°´Ù. ´Ü¼øÇÑ °¡À̵å Á¤µµ·Î´Â ½À°üÀ¸·Î üµæÇϱⰡ ½±Áö ¾Ê´Ù. Test¿¡ ´ëÇÑ °¨°¢µµ ÀÖ¾î¾ß ÇÏ°í °³¹ß ´É·ÂÀÌ µÞ¹ÞħµÇÁö ¾Ê´Â °æ¿ì TDD¸¦ Á¦´ë·Î µû¶óÇÏÁö ¸øÇϴ°Š°°´Ù.
¾Æ¹«¸® ÁÁÀº °ÍÀÌÁö¸¸ ±×°ÍÀÇ È¿°ú¸¦ Á¦´ë·Î ´À³¢°í ½Ç¹«¿¡ Àû¿ëÇÒ Á¤µµ·Î °¡À̵åÇØ ÁÖ´Â °ÍÀº Á¤¸» ¾î·Á¿î ÀÏÀΰŠ°°´Ù. |
'TDD¿¡ ÅõÀÔ´ëºñ È¿°ú¿¡ ´ëÇØ¼ Àǹ®ÀÌ µì´Ï´Ù.'
|
|
|
º¸Åë Ãâ½Ã°¡ µÈ Á¦Ç°¿¡ ¹®Á¦°¡ ¹ß»ýÇÏ¿© ¼öÁ¤ÇÑ Äڵ忡 ´ëÇØ¼ ´ëÃ¥¼¶õ °ÍÀ» ÀÛ¼ºÇÑ´Ù. ´ëÃ¥¼¿¡ µé¾î°¡´Â ³»¿ë
|
TDD ¼ö·Ã
|
¾ó¸¶³ª TDD¸¦ »ç¿ëÇØ¾ß ÆíÇϰÔ(?) »ç¿ëÇÒ ¼ö ÀÖÀ»±î? ÇöÀç TDD¸¦ ¾ÆÁÖ ÀÚ¿¬½º·´°Ô »ç¿ëÇÏ´Â °³¹ßÀÚÀÇ ¸»¿¡ ÀÇÇÏ¸é ¾à 2³â ~ 2³â ¹Ý Á¤µµÀÇ ±â°£ÀÌ ÇÊ¿äÇÏ´Ù°í ÇÑ´Ù. º¸Åë °³¹ßÀÚµéÀÇ °æ¿ì TDD¸¦ ÀÌÇØ´Â ÇÏÁö¸¸ ±×°ÍÀ» ÀÚ½ÅÀÌ °³¹ßÇÏ´Â ÇÁ·ÎÁ§Æ®¿¡ ´É¼÷ÇÏ°Ô »ç¿ëÇÏ´Â °æ¿ì´Â µå¹°´Ù. '¾ó¸¶³ª ÇØ¾ß TDD¸¦ ÀÚÀ¯ÀÚÀç·Î »ç¿ë°¡´É Çմϱî'¿¡ ´ëÇÑ Áú¹®¿¡ 2³â ÀÌ»óÀ̶ó´Â ½Ã°£ÀÌ ÁÖ´Â Àǹ̴ ¾ÆÁÖ Å©´Ù°í »ý°¢ÇÑ´Ù. °³ÀÎ ´É·ÂÀÇ Â÷À̵µ ÀÖ°ÚÁö¸¸ ´É¼÷ÇØÁö±â À§ÇÑ ÀΰíÀÇ ½Ã°£Àº ¹«½ÃÇÒ ¼ö ¾øÀ¸¸®¶ó.
¸¶Ä¡ Àü¹®°¡°¡ µÇ±â À§Çؼ ÁÖ 40½Ã°£ÀÌ ½Ã°£ ÅõÀÔ ³ë·ÂÀÌ µå´Â °Í°ú °°Àº ¿ø¸®°¡ ¾Æ´Ò±î? |
|
'»çÀå´Ô. TDD¸¦ ´É¼÷ÇÏ°Ô »ç¿ëÇϱâ À§Çؼ 2³â°£ÀÇ ½Ã°£ÀÌ µì´Ï´Ù. ÀúÈñÇÑÅ× 2³â°£ ÆÀÀ» ¸Ã°ÜÁÖ¼¼¿ä. ±×·¯¸é ÆÀ¿øµéÀÌ TDD·Î °³¹ßÇÒ ¼ö ÀÖµµ·Ï µÉ °ÍÀÔ´Ï´Ù' °ú¿¬ ÀÌ·± Á¦¾ÈÀ» ÇØ¾ßÇÏ´Â °ÍÀϱî? 2³â µÚ´Â ³Ê¹« ±î¸¶µæÇÏ°Ô ¸Ö°Ô ´À²¸Áø´Ù. 2³â µÚ¿¡ ¶Ç °³¹ßÀÚµéÀÌ TDD¸¦ Àß Çϰí ÀÖÀ¸¸®¶ó´Â º¸Àåµµ ¾øÁö ¾ÊÀº°¡? |
|
|
|
|
|
s/wÆÄÆ®¿¡ »õ·Î µé¾î¿Â °³¹ß °æÇèÀÌ ¾ø´Â µ¿·á¿¡°Ô ¾î¶»°Ô TDD¸¦ ÀÍÈú¼ö ÀÖµµ·Ï µµ¿òÀ» ÁÙ ¼ö ÀÖÀ»±î? ÀÏ´Ü C¾ð¾î¿¡ ´ëÇÑ ±âº»Àº ¾Æ·¡ Ã¥À» ÃßõÇÏ¿´´Ù. ![]() ±×·¸´Ù¸é TDD´Â ¾ðÁ¦ ½ÃÀÛÇÏÁö? C¾ð¾î¿¡ Àͼ÷ÇØ Áú¶§±îÁö ±â´Ù·Á¾ß ÇÒ±î? ÀÌ·± °í¹ÎÀ» ÇÏ´Ù°¡ ¾Æ¿¹ óÀ½ºÎÅÍ TDD¸¦ ÇÏ¸é ¾î¶³±î¸¦ »ý°¢Çß´Ù. C¾ð¾î¸¦ ÀÍÈ÷¸ç¼ Ã¥ÀÇ ¿¹Á¦µéÀ» µû¶ó ÇØº¼ÅÙµ¥ ±× °á°ú¸¦ ´Ü¼øÈ÷ printf·Î È®ÀÎÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó test assert·Î ¿øÇÏ´Â °á°ú¸¦ Å×½ºÆ® ÇÏ´Â °ÍÀÌ´Ù.
±×·¸´Ù¸é ³ª´Â ¾î¶² µµ¿òÀ» ÁÖ¸é µÉ±î?
|
|
Test Code¸¦ Clean ÇÏ°Ô ¸¸µé±â À§Çؼ °¡Àå Áß¿äÇÑ °ÍÀº ReadabilityÀÌ´Ù. Test Code´Â Àб⠽¬¿ö¾ß ÇÑ´Ù.
Clean Code 124Page |
Åä¿äŸ°ßÇÐÀ» ´Ù³à¿À½Å ºÐÀÇ ±³À° Èı⸦ µè°í.
|
|
À۳⿡ Áö¿øÇß´ø »ç¾÷ºÎÀÇ °æ¿ì ½Ã³ª¸®¿À ±â¹Ý(BDD)¶ó±â º¸´Ù´Â ÇÔ¼ö ´ÜÀ§ÀÇ Test·Î ÁøÇàÇß´Ù. Áö³ª°í ³ª´Ï ¸¹Àº ¾Æ½¬¿òÀÌ ³²´Ù. Áö±Ý ´Ù½Ã ±×¶§·Î µ¹¾Æ°£´Ù°í ÇØµµ ½Ã³ª¸®¿À ±â¹ÝÀ¸·Î´Â ÀÛ¾÷ÀÌ Èûµé°Ú´Ù´Â ´À³¦ÀÌ µå´Âµ¥ ¿Ö ÀÚ²Ù ÀÌ·± ´À³¦ÀÌ µå´ÂÁö Àá½Ã »ý°¢Çϰí Á¤¸®ÇØ º»´Ù.
|
|
Kent Beck TDD Intro Video http://vimeo.com/10789674 |
|
Áö³ÁÖ ±Ý¿äÀÏ¿¡ ¼¼Å¹±â »ç¾÷ºÎ¿¡ TDD ±³À°À» À§Çؼ ÃâÀåÀ» ´Ù³à¿Ô´Ù. ÀÌ·± ¹æ½ÄÀ¸·Î ÁøÇàÇß´Ù. (ÀÌ¹Ì ´ã´çÀÚ´Â TDD¿¡ ´ëÇÑ ±âº» ±³À°Àº ¹ÞÀº »óÅÂ)
|
|
.h¿Í °°ÀÌ headerÆÄÀÏ¿¡ ¼±¾ðµÈ register¿¡ ´ëÇÑ Ã³¸® ¹æ¹ý #define XXICR (*((volatile unsigned short *)0x00008908)) -> unsigned short XXICR;
|
|
´õÀ§¸¦ ÇÇÇϱâ À§Çؼ ½ºÅ¸¹÷½º¿¡ ¿Ô´Ù. Ã¥µµ ÀÐ°í °øºÎµµ ÇÒ°â ³ëÆ®ºÏµµ ì°Ü¿Ô´Ù. ¿ì¿¬È÷ ¿· Å×ÀÌºí¿¡¼ ÇÁ·Î±×·¡¹ÖÀ» °øºÎÇÏ´Â Ä¿ÇÃÀ» ¹ß°ßÇß´Ù. ÄÄÇ»ÅͰøÇÐÀ» Àü°øÇÏ´Â ´ëÇлýÁ¤µµ·Î º¸ÀδÙ. TDD Ã¥À» º¸¸é¼ À̰ÍÀú°Í ½ÃµµÇØ º¸°í ÀÖ´Ù.
¿ì¿¬¿¡ ³» Á¤¸é¿¡ ÀÖ´Â ³²ÀںР¹ß°ß. ÀÌ ºÐµµ °°Àº TDD Ã¥À» ÆîÃijõ°í °øºÎÇϰí ÀÖ´Ù. À̺ÐÀº ³ªÀ̰¡ Á» µé¾î º¸À̸ç Á÷ÀåÀÎÀ¸·Î ÆÇ´ÜµÈ´Ù.
TDDÀÇ ¿±â°¡ ÀÌ·¸°Ô ¶ß°Å¿ï ÁÙÀ̾ß.
|
TDD ±³À°
´ÜÁö °³¹ßIDE¿¡¼ TDD Framework¸¦ Á¤»óÀûÀ¸·Î »ç¿ë°¡´ÉÇÑ »óÅÂÀÎÁö¸¦ È®ÀÎÇϱâ À§ÇÔ
°ü·Ã ¼Àû
R. Martin The Bowling Game Kata June 2005
from Professionalism and TDD
Ignaz Semmelwiess
from Professionalism and TDD
Sabre takes extreme measures
from Professionalism and TDD
Workshare Technology and eXtreme Programming
from Professionalism and TDD
Painless Software Schedules
from Professionalism and TDD
Why is Software So Brittle?
from Professionalism and TDD
¸¶Æ¾ ÆÄ¿ï·¯ IEEE Software

0321146530

1932394850

0131016490

0131495054

0131482394

0955683602

0321269349

1933988274

0735619484

0974514020

0596007396
8991268048 Å×½ºÆ® ÁÖµµ °³¹ß
899126803x ½Ç¿ëÁÖÀÇ ÇÁ·Î±×·¡¸Ó¸¦ À§ÇÑ ´ÜÀ§ Å×½ºÆ® with JUnit
8979147260 Å×½ºÆ®ÁÖµµ°³¹ß °ü·Ã »çÀÌÆ®
xUnitPatterns ȨÆäÀÌÁö
android JUnit
Android JUnitÁ¤º¸
CppUTest Tutorial
Android JUnit Á¤º¸
¾Èµå·ÎÀ̵å Testing Á¤º¸
Hudson - Continuous testing and Monitoring System
Unity ȨÆäÀÌÁö
C¾ð¾î Unit Test ÇÁ·¹ÀÓ¿÷
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