¦p¦ó¦Û°Ê´ú¸Õ¨Ï¥ÎªÌ¤¶±¡H | ||||
§@ªÌ¡G¤p¦t«e¨¥³Ìªñ¬y¦æ¤@ºØ³nÅé³]p¤èªk¡A¥s§@XP(eXtreme Programming)¡A³oºØ¤èªk±j½Õ³nÅé¶}µo¹Lµ{¤¤¡A´ú¸Õn¤ñ¶}µoÀu¥ý¡A¨Ã¥BÅý´ú¸Õ¦Û°Ê¤Æ¡A¨C¤Ñ¤£Â_¦a´ú¸Õ¡A¥i½T«O³nÅé¨C¦¸§ïª©ªº«~½è¡A«~½è´£¤É«á¡A¥i¥H¸`¬Ù³\¦h®É¶¡»P¦¨¥»(¤×¨ä¬OºûÅ@¤è±)¡A¨Ã¥B¤£©È±¹ï«È¤á»Ý¨DªºÅܧó¡A¤]¤£©È¬°¤F¨}¦n¬[ºc¦Ó¹ïµ{¦¡½X©Ò°µªº«¾ã(Refactoring)¡C ¥ÎJUnit´ú¸ÕGUIªº°ÝÃDXP³o®M¤èªk¶}©l´¶¹M¨ü¨ì³nÅé¬Éªº«µø¤§«á¡A³\¦h³nÅé¶}µoªÌ¬°¤F¹ê²{¦Û°Ê¤Æ´ú¸Õªº¥Ø¼Ð¡A¶}µo¤F³\¦h¤u¨ã¡CJavaªºProgrammer«Ø¥ß¤F¤@Ó¥s§@JUnitÃþ§O¡AYÄ~©Ó¦¹Ãþ§O¨Ó¹ê§@´ú¸Õµ{¦¡¡A´N¥i¥H¥Î´ú¸Õ³nÅé¨Ó§å¦¸°õ¦æ©Ò¦³ªºJUnit¡C³oºØ¤èªk¥Dn¬O¥Î¨Ó´ú¸Õ³nÅ骺Logic¡A¦ý¹ï©óGUIªº´ú¸Õn¦p¦ó¶i¦æ©O¡HTest-Driven Development In .Net¡A³o½g¤å³¹¦³´£¨ì¥²¶·¬°¨CÓGUIªºView Class¹ê§@¦s¨ú¸ê®Æ¥ÎªºInterface¡A²Ó¸`½Ð°Ñ¦Ò¸Ó½g¤å³¹¡C³oºØ°µªk¹ï©ó¾Ö¦³³\¦hµøµ¡¤¶±ªº³nÅé¨Ó»¡¡An¼¶¼gªº´ú¦¡µ{¦¡·Q¥²´N«ÜÁcº¾¡C ¸Ñ¨M¤è®×¬°¤F¸Ñ¨M³oÓ°ÝÃD¡A¥Ø«e¥«±¤W¦³³\¦h¦Û°Ê¤Æ´ú¸ÕGUIªº³nÅé¡A¦pQuickTest¡A¥i±N´ú¸Õªº¬yµ{¼g¦b¸}¥»ÀÉùØ¡AµM«á°õ¦æ¸}¥»ÀɨӶi¦æGUIªº´ú¸Õ¡CÃö©ó¦Û°Ê¤Æ´ú¸Õ»P¬ÛÃö³nÅ骺¤¶²Ð¡A¥i°Ñ¦Òºô¯¸¡Ghttp://www.oldsidney.idv.tw¡Aùر¦³¬Û·íÂ×´Iªº¸ê®Æ¡C¥»¤å¥Dn¬O²³æ¦a¤¶²Ð¦Û°Ê¤Æ´ú¸ÕGUIªº·§©À¡A¨Ã¥Î¤@Ó½d¨Ò»¡©ú´ú¸Õ¸}¥»¦b³nÅé¶}µoªº¥Í©R¶g´Á¤¤¡A¯à±a¨Ó¤°»ò¼Ëªº¦n³B¡C
¹ïGUIªº´ú¸Õ¡A¤ñ¸û¦nªº°µªk´N¬O¥Î²³æªº¸}¥»»y¨¥¨ú¥N¤@¯ëªºµ{¦¡»y¨¥¨Ó¼g´ú¸Õµ{¦¡¡A³o¼Ë¥i´î»´¤@¨Ç´ú¸Õµ{¦¡ªººûÅ@¦¨¥»¡C¬°¤°»ò¥i¥H¥Î²³æªº»yªk¨Ó¼g´ú¸Õµ{¦¡¡H¦]¬°¤j³¡¥÷ªº³nÅé¡A³£¬OWindow-basedÀô¹Ò¤U¶}µoªº¡C³nÅ餣ºÞ³]pªº¦h½ÆÂø¡A±q¨Ï¥ÎªÌ»PGUI¤§¶¡ªºÃö«Y¨Ó¬Ý¡A´N¥u¬O¨Ï¥ÎªÌµo°e¤@³s¦êªº°T®§µ¹GUI¦Ó¤w¡IY±N³oӨϥΪ̴«¦¨¾÷¾¹¤H¡A¥Ñ¾÷¾¹¤Hµo°T®§µ¹GUI¡A¤£´N¬O§¹¦¨¦Û°Ê¤Æ´ú¸Õ¡H©Ò¥HProgrammer¥i¥H¨Æ¥ýn±Nµo°eªº°T®§¼g¦n¦s¦¨¤@Ó¸}¥»ÀÉ¡A³oºØ¸}¥»Àɪº®æ¦¡Ãþ¦üTable-Driven Testingªº¼Ë¤l(°Ñ¦ÒTable Driven Testing: Making Automation Accessible )¡A¬O¥HItem¡BOperation¡BValue³o¤TÓÄæ¦ì´yz¨Ï¥ÎªÌªº¨C¤@¶µ°Ê§@¡A¦A¥áµ¹¾÷¾¹¤H¥H«D±`§Öªº³t«×¨Ì¸}¥»°õ¦æ¡A¥H¨ú¥N¤H¤uªº´ú¸Õ¡I ¥H¶}µo¤pºâ½L¬°¨ÒÁ|¤@Ó¨Ò¤l¡A¦b¬°«È¤á¶}µo¤@¤ä¤pºâ½Lµ{¦¡¡A©M«È¤á°Q½×¸Ó¦³¨º¨Ç¥\¯à«á¡A§ÚÌ·|¥ý³]pGUIªø¦p¤U³oӼˤl(¥HWindowsªº¤pºâ½L§@¬°¨Ò¤l)¡AµM«á©M«È¤á½T»{GUI¦U¶µ¥\¯à²Ó¸`¡C(¥»¤åªì½Z¼g§¹¤§«á¤~µo²{¡A¤w¸g¦³¤HÁ|¹LÃþ¦üªº¨Ò¤l¤F¡GChoosing a test automation framework )
¡@
¸}¥»»yªk¸Ñ»¡¡G 1. Timer = 10 ªí¥Ü³oÓ¸}¥»·|¥H¨C¦æ0.01¬íªº³t«×°õ¦æ¡C 2. b_Cancel¡Bb_1¡Bb_Add¡Bb_2¡Bb_Enter¡A³£¬Oµe±¤W«ö¶sªº¦WºÙ¡A¶}ÀY¡ub¡vªºButtonªºÁY¼g¡C¶}µoµ{¦¡¦b¬°¤¸¥ó©R¦W®É¡A¦Ò¶q¨ì¬°¤FÅý´ú¸Õ¸}¥»®e©ö½s¼g¡A·|ºÉ¶q±N¦WºÙ¨ú²µu¨Ã¥B©öŪ¡C¦b¸}¥»ùØ«ü¦W¤¸¥ó¦WºÙ¡AY´ú¸Õµ{¦¡Åª¨ì¤¸¥óªº¦WºÙ¡A·íµo²{¥¦¬O¤@ÓButton®É¡A´N·|¹ï¸Ó«ö¶sIJµoClick¨Æ¥ó¡C 3. verify«ü¥O¬O¥Î¨ÓÅçÃÒµ²ªG¡A¬°¤FnÅý³nÅé¦b°õ¦æ¬Y¶µ¥\¯à«áªºµ²ªG¯à°÷³QÅçÃÒ¡A¥²¶·±N°õ¦æ¸Ó¶µ¥\¯àªºµ{¦¡«á±¥[¤W¤@¬q¯à±N¨t²Î¥Ø«e«nªºª¬ºA¦s¤U¨Óªº¦r¦ê¡A³oÓ¦r¦ê·|³Q¦s¤U¨Ó¡A¨Ñ´ú¸Õµ{¦¡»Pverifyùتº¦r¦ê¤ñ¹ï¡A¬Ý¬Ý¬O§_¤@¼Ë¡AY¤£¤@¼Ë¡A´Nªí¥Üµ{¦¡©Î´ú¸Õµ{¦¡¦³Bug¡A«h¸Ó¶µ´ú¸Õ´N¤£³q¹L¡C
¥HDelphi¨Ó²³æ¸ÑÄÀ´ú¸Õµ{¦¡¬O¦p¦óÅçÃÒ³nÅ骺°õ¦æµ²ªG¡G
procedure TForm1.b_EnterClick(Sender: TObject); begin ....¶i¦æ¦UºØ¹Bºâªºµ{¦¡½X verify := verify += Format(¡¥result = %d¡¦, [result]); end;
¤W±¬O³nÅ骺¤@¬qµ{¦¡½X¡A¥Î¨ìverify³oÓglobal¦r¦êÅܼơCY³nÅé¬O³Q´ú¸Õµ{¦¡ÅX°Êªº¡A·í´ú¸Õµ{¦¡°õ¦æ¸}¥»Åª¨ì b_Enter®É¡A·|¹ïb_EnterIJµoClick¨Æ¥ó¡A§@·~¨t²Î¦¬¨ì³oӨƥó«á¡A·|¥h°õ¦æb_EnterClick³oÓMethod¡C¸ÓMethod³Ì«á·|±N¹Bºâ«áªºÈ°O¿ý¦bverify¦r¦êùØ¡C´ú¸Õµ{¦¡Åª¨ì¤U¤@¦æ verify®É¡A´N·|±N¥¦»P¨t²ÎªºverifyÅܼƤñ¹ï¬Ý¬O§_¤@¼Ë¡CY¬Û¦P¡A«hªí¥Ü´ú¸Õ³q¹L¡C
³oÓ¸}¥»¬O¶i¦æ 0 + 2 = 2ªº¹Bºâ¡A½Ðª`·N¡A ¨Ã¨S¦³±Nb_1³oÓ¶s¼g¶i¥h¡C³oªí¥Ü¨Ï¥ÎªÌ´N¥u«ö¡u+¡v¶s¡A¦A«ö¡u2¡v¶s¡A¤£ºÞ¨Ï¥ÎªÌ·|¤£·|³o¼Ë¥Î¡A¤@Ó§¹µ½ªº¨t²ÎÀ³±N¦UºØ¥i¯àªºª¬ªp¦Ò¼{¶i¥h¡A©Ò¥H§ÚÌ¥ý¬°³oÓ¨Ò¥~±¡ªp¼g¤F´ú¸Õ¸}¥»¡C
¥t¤@Ó´À¥N¬yµ{¬O¡Ab_1»Pb_2³£¨S³Q«ö¨ì¡A¥u«ö¡uC¡v¡B¡u+¡v»P¡u=¡v¡Apºâµ²ªG¬°¹s¡C§Ú̦b¼g³oºØ¨Ò¥~ªº¸}¥»®É¡A·|°Ý¦Û¤v©Î«È¤á³oºØµ²ªG¬O§_¦X²z¡HY¦X²z¡A«h¦C¬°¥[ªk¹Bºâ¨Ï¥Î®×¨Òªº´À¥N¬yµ{¡G
¥Ø«e¬°¤î¡A§Ṳ́w¸g«Ø¥ß3Ó´ú¸Õ¸}¥»ÀɤF¡AÀɦW¤À§O¬O¡G
ÀɦW«e¥[¤W½s¸¹¡A¬O¬°¤FÅý§å¦¸´ú¸Õ³nÅé¨Ì·Ó¦P¤@¥Ø¿ý¤Uªº½s¸¹¶¶§Ç°õ¦æ¸}¥»ÀÉ¡C³o¦b«á¤å·|¦³¸Ô²Óªº»¡©ú¡C
§ÚÌ¥i¯à·|±q¥[ªk¹Bºâªº03³oºØ¯S®íªº´ú¸Õ®×¨Ò¡AÂX¥R¨ì©Ò¦³¹Bºâ¡A³o¼Ë¼g¥X¨Óªº³nÅé¤~ºâ§¹³Æ¡A¨Ò¦p°£ªk¹Bºâ¡G
§ÚÌ¥i¥H±N¥[ªk¹Bºâªº©Ò¦³¸}¥»½Æ»s«á¡Aק令²Å¦X°£ªk¹Bºâªº¸}¥»¡A©ó¬O¦b§Ú̪ºUnit Test¥Ø¿ý¤U¦³³o¨Ç¸}¥»ÀÉ¡G
[Unit Test] [1. ¥[ªk¹Bºâ] ¡u01 ¡V ¥[ªk¹Bºâ ¡V ¥Dn¬yµ{.txt¡v ¡u02 ¡V ¥[ªk¹Bºâ ¡V ´À¥N¬yµ{ - A.txt¡v ¡u03 ¡V ¥[ªk¹Bºâ ¡V ´À¥N¬yµ{ - B.txt¡v [2. °£ªk¹Bºâ] ¡u01 ¡V °£ªk¹Bºâ ¡V ¥Dn¬yµ{.txt¡v ¡u02 ¡V °£ªk¹Bºâ ¡V ´À¥N¬yµ{ - A.txt¡v ¡u03 ¡V °£ªk¹Bºâ ¡V ´À¥N¬yµ{ - B.txt¡v
¥H³o¼ËªºÀÉ®×µ²ºc¨Ó¦w±Æ¸}¥»Àɪº¦n³B¦b©ó¡A´ú¸Õµ{¦¡´N¥i¥H¿ï¨ä¤¤¤@ӥؿý©Î¬Y¥Ø¿ý¤U¤@өΦhÓÀɮרӰõ¦æ¸}¥»ÀÉ¡C
²{¦b§ÚÌ¥i¥H¶}©l¬°³o6Ó´ú¸ÕÀɼ¶¼gµ{¦¡¤F¡C§ÚÌ¥i¯à·|¥HOOªº¤è¦¡¨Ó³]p¨t²Î¡A©Î¥H¶Ç²Îµ²ºc¤Æªº¤è¦¡¨Ó³]p¡A¬Æ©Î¤£°µ¥ô¦ó³]p¤Wªº¦Ò¶q¡A´Nª½±µ¶}©lCoding¤F¡C¤£ºÞµ{¦¡«ç»ò¼g¡A³Ì«áªºµ²ªG³£n¯àº¡¨¬³o6Ó´ú¸ÕÀÉ¡C²Ä¤@Ó¯à°÷º¡¨¬³o¨Ç´ú¸ÕÀɪºª©¥»¼g¥X¨Ó¤§«á¡AYı±oµ{¦¡½X¦³ÂI¶Ã¡A·Qn°µ«¾ã(Refactoring)¡A³oÓ®ÉÔ´N¥i¥H¶}©l°µ¤F¡C·íµM¡A«¾ã«áªºµ{¦¡¡A¤]¥²¶·¯à³q¹L´ú¸Õ¡A¤~ºâ«¾ã¦¨¥\¡C
¦b³o¬q¶}µo¶g´Áµ²§ô¤§«e¡A¥²»Ý±N³nÅ饿µ¹«È¤áÅ禬¡C©ó¬O§Ú̶]¨ì«È¤á±«e¡A±N©Ò¦³´ú¦¡¸}¥»¶]¹L¤@¹M(°õ¦æ¸}¥»ªº³t«×¥i¥H½ÕºC)¡A¦P®É¦V«È¤á¸Ñ»¡(©Î±Ð¨|°V½m)¡A¨Ã¦V«È¤á½T»{¨C¦¸´ú¸Õªºµ²ªG¬O§_¬°«È¤á·íªì©Ò¹w´Áªº¡C¦]¬°§Ų́ƥý·Ç³Æ¤F¸}¥»ÀÉ¡A¥i¥H±Ð¾Ç¿ý¼v±a¤@¼Ë¼½©ñ¨t²Î¹B§@ªº±¡§Î¡A³o¼Ë¥i¥H¸`¬Ù³\¦h±Ð¾Çªº®É¶¡¡C
¹ê»Ú¹B¥Î±¡§Î¦]¬°¥»¤H©Ò°Ñ»Pªº±M®×³£¬O¥ÎDelphi¶}µoªº¡A©Ò¥H°w¹ïDelphi¶}µoªºÀ³¥Î³nÅé¡A«Ø¥ß¤@®M¥i°õ¦æ¸}¥»ªºªí®æÅX°Ê´ú¸Õ¨t²Î(Table-Driven Testing System)¡C³o®M¨t²Î¥Ø«e¥u¥Î¨Ó´ú¦¡Delphi¶}µoªºWindowsµ{¦¡¡A¤£¹L²z½×¤W³o®M¨t²ÎÀ³¸Ó¥i¥HÂX¥R¦Ü¥ô¦ó»y¨¥¶}µoªºWindowsÀ³¥Î³nÅé¤W¡A¬Æ¦ÜWeb¤]¦æ¡A´N¹³¨ä¥¦ªº´ú¦¡³nÅé¤@¼Ë¡C¦]¬°¦bWindowsÀô¹Ò¤U°õ¦æªº³nÅé³£¬O¾a°T®§ÅX°Êªº¡A¥un¯àµo°e¾A·íªº°T®§¡Aµ¹¾A·íªºµøµ¡¤Wªº¤¸¥ó¡A´N¯à¶i¦æGUIªº¦Û°Ê¤Æ´ú¸Õ¡C³o¤@ÂI§Ú´N¨S¦³¦A°µ§ó²`¤Jªº¬ã¨s¡A©Ò¥H¥Ø«eTDT¥u¾A¥Î©óDelphi¶}µoªºÀ³¥Î³nÅé¡C
TDTªºµe±¦p¤U¹Ï©Ò¥Ü¡G
»P¨ä¥¦JUnitªº´ú¸Õµ{¦¡¤£¦P¡ATDT´N¥u¦³³oÓ²³æªºµøµ¡¡A³oÓµøµ¡¥i¥H¿ï¨ú´ú¸Õ¸}¥»ÀÉ¡A©Î¥Ø¿ý¨Ó°µ§å¦¸°õ¦æ¡C±N´ú¸Õµ{¦¡»P´ú¸Õ¸}¥»¤À¶}¨Óªº¦n³B¦³¡G 1. ³o¼Ë¤@¨Ó¡A¥un§ï¸}¥»ÀÉ¡A¤£¥Î§ï´ú¸Õµ{¦¡¡A´N¥i¥H°¨¤W°õ¦æ´ú¸Õ¤F¡C 2. ¥H²³æªº»yªk¨Ó¼¶¼g´ú¸Õªº¬yµ{¡A³o»P¥H©¹¥Îµ{¦¡»y¨¥¦pJava©ÎDelphi¨Ó¼g´ú¸Õµ{¦¡¬Û¤ñ¡A·|§ó¬°ºë²¡C 3. ¹ï¨Ï¥ÎªÌ°µ±Ð¨|°V½m®É¡A¥i¥H¸ûºCªº³t«×°õ¦æ³o¨Ç¸}¥»ÀÉ¡C°w¹ï¨Ï¥ÎªÌ¤£À´ªº¦a¤è¥i¥HÀH®É«Âм½©ñ¡C¦bÁ¿¸Ñ®É¤]·|§ó¦³«H¤ß¡A¦]¬°¨Æ¥ý³£¤w¸g¶]¹L¦n´X¹M¤F¡I 4. ¸}¥»Àɸg¹LÂà´««á¥i°µ¬°±Ð¨|°V½mªº±Ð§÷¤å¥ó¡A©Ò¥H¥i¥H¤£¥²¥t¥~¦A¼g±Ð§÷¡Aª½±µ±q¸}¥»ÀÉÂà´«§Y¥i¡C³o¬O¥H©¹¥Îµ{¦¡»y¨¥¨Ó¼g´ú¸Õµ{¦¡©ÒÃø¥H°µ¨ìªº¡I
µ²½×ª½±µ±qGUI´ú¸Õ¡A´N¥i¥HCover¤j³¡¥÷LogicªºUnit Test¤F¡I¦]¬°¹ï©ó¨Ï¥ÎªÌ¨Ó»¡¡AGUI¤~¬O¥L̨ϥγnÅ骺¤¶±¡C©Ò¥H¤£ºÞ³nÅ餺³¡ªºLogic¦p¦ó³]p¡A¥unGUIªº°õ¦æµ²ªG¥¿½T¡A³nÅé¤~ºâ¬O¨S°ÝÃD¡C¥H©¹JUnit¤j³¡¥÷¬O¥Î¨Ó´ú¸Õ³nÅ骺Logic¡A©Ò¥H¦b³]p³nÅé®É¡A´Nn±NGUI»PLogic¤À¶}¡CÁöµM¦³¤H´£¥XJUnit¤]¯à¥Î¨Ó´ú¸ÕGUI¡A¦ýn³z¹L¶¡±µªº¤èªk(¥ÎOOªº§Þ³N)±NGUIÂà´«¦¨Logic¨Ó´ú¸Õ¡C¦ýY¯àª½±µ¦Û°Ê¤Æ´ú¸ÕGUI¡A¬O§_´N¥i¥H§¹¥þ¬Ù²¤Logicªº´ú¸Õ¡H¥H¥»¤H¶}µo±M®×ªº¸gÅç¨Ó»¡¡A¤j¬ù90%¥i¥H³o¼Ë°µ¡C³Ñ¤Uªº10%µLªk³o¼Ë°µªºì¦]¬O´£¨Ñµ¹¨ä¥¦¨t²Î©I¥sªºInterface¬O¨S¦³GUIªº¡A¥¿½T¦a»¡¡AGUI¬Oªø¦b¨ä¥¦¨t²Î¨¤Wªº¡A§Ú¤]¤£ª¾¹D¬O¤°»ò¼Ë¤l¡A¥u¦³¸Ó¨t²Îªº³]pªÌª¾¹D¡I¬°¤F½T«O´£¨Ñµ¹¨ä¥¦¨t²ÎªºInterface¬O¨S¦³Bugªº¡A³o®ÉԶDzΪºJUnit¤èªk´N¬£¤W¥Î³õ¡A¤£¹L³q±`§Ú·|¦Û¤v¼gÓGUI¦nÅýTDT´ú¸Õ¡I
¤é«á¦³¾÷·|ªº¸Ü¡A§Ú¦A¬°TDTªº¨t²Î¬[ºc»P¦Û¤v³]pªº¸}¥»»yªk§@§ó²`¤Jªº±´°Q¡I ¡@ ¡@ ¡@ ¡@ |