¦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ªº°ÝÃD

        XP³o®M¤èªk¶}©l´¶¹M¨ü¨ì³nÅé¬Éªº­«µø¤§«á¡A³\¦h³nÅé¶}µoªÌ¬°¤F¹ê²{¦Û°Ê¤Æ´ú¸Õªº¥Ø¼Ð¡A¶}µo¤F³\¦h¤u¨ã¡CJavaªºProgrammer«Ø¥ß¤F¤@­Ó¥s§@JUnitÃþ§O¡A­YÄ~©Ó¦¹Ãþ§O¨Ó¹ê§@´ú¸Õµ{¦¡¡A´N¥i¥H¥Î´ú¸Õ³nÅé¨Ó§å¦¸°õ¦æ©Ò¦³ªºJUnit¡C³oºØ¤èªk¥D­n¬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Åé¨Ó»¡¡A­n¼¶¼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¥»¤å¥D­n¬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¡I­Y±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­ÓÄæ¦ì´y­z¨Ï¥ÎªÌªº¨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 )

 

 

¡@


¦b¶}©lCoding¤§«e¡A¨Ì´`XPºë¯«¡A¥ý¼g´ú¸Õµ{¦¡¡C­Y¬O¥Î¸}¥»»y¨¥¨Ó¼g¡A«hºÙ¬°´ú¸Õ¸}¥»(Test Script)¡C¼gªk¦p¤U¡G

  Timer = 10

 

  b_Cancel 

  b_1

  b_Add

  b_2

  b_Enter

 

  verify =

  [

    result = 3

  ]

¸}¥»»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ºÙ¡A­Y´ú¸Õµ{¦¡Åª¨ì¤¸¥óªº¦WºÙ¡A·íµo²{¥¦¬O¤@­ÓButton®É¡A´N·|¹ï¸Ó«ö¶sIJµoClick¨Æ¥ó¡C

3.          verify«ü¥O¬O¥Î¨ÓÅçÃÒµ²ªG¡A¬°¤F­nÅý³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§_¤@¼Ë¡A­Y¤£¤@¼Ë¡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¦êÅܼơC­Y³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§_¤@¼Ë¡C­Y¬Û¦P¡A«hªí¥Ü´ú¸Õ³q¹L¡C


±qUse CaseªºÆ[ÂI¨Ó¬Ý¡A³o­Ó¸}¥»¬O¥[ªk¹Bºâªº¥D­n¬yµ{¡C§Ú­ÌÁÙ­n¼¶¼g¤@¨Ç¸}¥»¨Ó¼ÒÀÀ¨Ò¥~ªºª¬ªp(§Y¥[ªk¹Bºâªº´À¥N¬yµ{)¡G

  Timer = 10

 

  b_Cancel 

  b_Add

  b_2

  b_Enter

 

  verify =

  [

    result = 2

  ]

³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¡A­pºâµ²ªG¬°¹s¡C§Ú­Ì¦b¼g³oºØ¨Ò¥~ªº¸}¥»®É¡A·|°Ý¦Û¤v©Î«È¤á³oºØµ²ªG¬O§_¦X²z¡H­Y¦X²z¡A«h¦C¬°¥[ªk¹Bºâ¨Ï¥Î®×¨Òªº´À¥N¬yµ{¡G

  Timer = 10

 

  b_Cancel 

  b_Add

  b_Enter

 

  verify =

  [

    result = 0

  ]

¥Ø«e¬°¤î¡A§Ú­Ì¤w¸g«Ø¥ß3­Ó´ú¸Õ¸}¥»ÀɤF¡AÀɦW¤À§O¬O¡G

¡u01 ¡V ¥[ªk¹Bºâ ¡V ¥D­n¬yµ{.txt¡v

¡u02 ¡V ¥[ªk¹Bºâ ¡V ´À¥N¬yµ{ - A.txt¡v

¡u03 ¡V ¥[ªk¹Bºâ ¡V ´À¥N¬yµ{ - B.txt¡v

Àɦ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

  Timer = 10

 

  b_Cancel

  b_Div

  b_Enter

 

  verify =

  [

    result = ¨ç¼Æµ²ªG¥¼©w¸q¡C

  ]


³o­Ó¸}¥»¡A·|°õ¦æ 0 / 0 ªº¹Bºâ¡A³o­Óµ²ªG·|¥X²{¡u¨ç¼Æµ²ªG¥¼©w¸q¡C¡vªº°T®§¡C§Ú­Ì¥i¥H±N³o­Ó¸}¥»¦sÀɬ°¡u03 ¡V ­Ë¼Æ¹Bºâ ¡V ´À¥N¬yµ{ ¡V B.txt¡v©ñ¦b¡u°£ªk¹Bºâ¡vªº¥Ø¿ý¤U¡C
¡@

§Ú­Ì¥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 ¥D­n¬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 ¥D­n¬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¨Ó¤§«á¡A­Yı±oµ{¦¡½X¦³ÂI¶Ã¡A·Q­n°µ­«¾ã(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¥u­n¯àµ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¥u­n§ï¸}¥»ÀÉ¡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¥u­nGUIªº°õ¦æµ²ªG¥¿½T¡A³nÅé¤~ºâ¬O¨S°ÝÃD¡C¥H©¹JUnit¤j³¡¥÷¬O¥Î¨Ó´ú¸Õ³nÅ骺Logic¡A©Ò¥H¦b³]­p³nÅé®É¡A´N­n±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®É­Ô¶Ç²Îªº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

¡@

¡@

¡@

¡@