±¾ÎĽ«½éÉÜÔÚÃô½Ý¿ª·¢¹ý³ÌÖÐÈçºÎͨ¹ý²ÉȡһϵÁеIJ½ÖèÀ´±£Ö¤ºÍÌá¸ßÕû¸öÏîÄ¿µÄ´úÂëÖÊÁ¿£¬²ûÊöÁËÿһ²½¿ÉÒÔÀûÓõŤ¾ßºÍ×î¼Ñʵ¼ù£¬´Ó¶øÊ¹¿ª·¢¹ý³Ì¸ü¼Ó¹æ·¶»¯£¬³É¾Í¸ßÖÊÁ¿µÄ´úÂë¡£
¸ÅÊö
Java ÏîÄ¿¿ª·¢¹ý³ÌÖУ¬ÓÉÓÚ¿ª·¢ÈËÔ±µÄ¾Ñé¡¢´úÂë·ç¸ñ¸÷²»Ïàͬ£¬ÒÔ¼°È±·¦Í³Ò»µÄ±ê×¼ºÍ¹ÜÀíÁ÷³Ì£¬ÍùÍùµ¼ÖÂÕû¸öÏîÄ¿µÄ´úÂëÖÊÁ¿½Ï²î£¬ÄÑÓÚά»¤£¬ÐèÒª½Ï´óµÄ²âÊÔͶÈëºÍÖÜÆÚµÈÎÊÌâ¡£ÕâЩÎÊÌâÔÚÒ»¸öÏîÄ¿×é³õ½¨¡¢ÐèÇóºÍÉè¼Æ¾ù¾ßÓв»ÍêÈ«¿ÉÔ¤ÆÚÐÔºÍÍ걸ÐÔµÄÈ«ÐÂÏîÄ¿Öн«ÓÈΪͻ³ö¡£±¾ÎĽ«½áºÏÃô½Ý¿ª·¢ÖÜÆÚ¶Ì£¬±ä»¯¿ìµÈÌØµã£¬½éÉÜÈçºÎͨ¹ýÔÚ¿ª·¢¹ý³ÌÖвÉȡһϵÁв½ÖèÀ´±£Ö¤ºÍÌá¸ßÕû¸ö¿ª·¢ÍŶӵĴúÂëÖÊÁ¿£¬²¢²ûÊöÁËÿһ²½¿ÉÒÔÀûÓõŤ¾ßºÍ×î¼Ñʵ¼ù£¬´Ó¶øÊ¹¿ª·¢¹ý³Ì¸ü¼Ó¹æ·¶»¯£¬³É¾Í¸ßÖÊÁ¿µÄ´úÂ룬¼õÉÙ²âÊÔµÄͶÈ룬²¢´Ù½øÕû¸öÍŶӵļ¼ÄÜÌá¸ß£¬×îÖÕÌá¸ß¿ª·¢Ð§ÂʺÍÖÊÁ¿¡£
Èçͼ 1 Ëùʾ£¬Ãô½Ý¿ª·¢¹ý³Ì¾ÀúÐèÇóµ÷ÑУ¬ÓÃÀý·ÖÎöºÍÓÃÀý·Ö½â£¬½øÈ뿪·¢µü´ú½×¶Î¡£ÔÚÿ¸öµü´ú¹ý³ÌÖУ¬¿ÉÒÔ²ÉÓÃÒÔÏÂÎå¸ö²½ÖèÀ´±£Ö¤ºÍÌá¸ßÕû¸öÏîÄ¿µÄ´úÂëÖÊÁ¿£ºÍ³Ò»±àÂë¹æ·¶¡¢´úÂëÑùʽ£»¾²Ì¬´úÂë·ÖÎö£¨static
code review£©£»µ¥Ôª²âÊÔ£»³ÖÐø¼¯³É£»´úÂëÆÀÉóºÍÖØ¹¹£¨Review & Refactor£©¡£ÏÂÎĽ«Õë¶Ôÿ¸ö²½ÖèºÍÆäËùʹÓõŤ¾ß¡¢·½·¨½øÐÐÏêϸÃèÊö¡£

ͼ 1. Ãô½Ý¿ª·¢ÖÐµÄ Java ´úÂëÖÊÁ¿±£Ö¤²½Öè
²½ÖèÒ»£ºÍ³Ò»±àÂë¹æ·¶¡¢´úÂëÑùʽ
¹æ·¶Í³Ò»µÄ±àÂë»áÔö¼ÓÏîÄ¿´úÂëµÄ¿É¶ÁÐԺͿÉά»¤ÐÔ£¬µ«Êµ¼ÊÇé¿öÍùÍùÊÇÏîÄ¿×éÄÚµÄ
Java ´úÂ뿪·¢ÈËÔ±µÄ±àÂë·ç¸ñ³£³£¸÷²»Ïàͬ£¬Õâ¿ÉÄÜÊÇÓÉÓÚ²»Í¬µÄ¾Ñéϰ¹ß»òÕßȱ·¦±àÂë¹æ·¶·½ÃæµÄѧϰÔì³ÉµÄ¡£ÕâÑùÒ»À´£¬ÆäËûÏîÄ¿³ÉÔ±»òÕßά»¤ÈËÔ±ÔÚÔĶÁÏîÄ¿´úÂëʱ¾ÍÐèÒª»¨·Ñ¸ü¶àµÄʱ¼äÀ´Àí½â´úÂë×÷ÕßµÄÒâͼ£¬ËùÒÔÖÆ¶¨²¢²ÉȡͳһµÄ±àÂë¹æ·¶¾ÍÏԵúÜÖØÒª¡£±àÂë¹æ·¶Ö÷ÒªÓ¦°üº¬ÒÔϼ¸¸ö·½Ã棺
1.Ò»°ã¹æÔòºÍ¸ñʽ¹æ·¶¡£ÀýÈç´úÂëËõ½ø¡¢³ÌÐò¿é¹æ·¶¡¢Ã¿ÐÐ×î´ó´úÂ볤¶ÈµÈ¡£
2.ÃüÃû¹æÔò¡£ÀýÈç°üÃû¡¢ÀàÃû¡¢±äÁ¿¡¢·½·¨¡¢½Ó¿Ú¡¢²ÎÊýµÈÃüÃû¹æ·¶
3.Îĵµ¹æ·¶¡£ÀýÈçÀàÎļþÍ·ÉùÃ÷¡¢Àà×¢ÊÍ¡¢³ÉÔ±±äÁ¿ºÍ·½·¨×¢Ê͵ȹ淶¡£
4.±à³Ì¹æ·¶¡£ÀýÈçÒì³£¡¢²¢·¢¡¢¶àÏ̵߳ȷ½ÃæµÄ´¦Àí·½Ê½¡£
5.ÆäËû¹æ·¶¡£ÀýÈçÈÕÖ¾¸ñʽ¡¢ÊôÐÔÎļþ¸ñʽ£¬·µ»ØÖµºÍÏûÏ¢¸ñʽ¡£
ÏîÄ¿µÄ±àÂë¹æ·¶¿ÉÒԲο¼ÒÑÓеÄһЩ Java ±à³Ì¹æ·¶Êé¼®ºÍÆäËûÏà¹Ø×ÊÁϲ¢½áºÏÏîÄ¿µÄ±¾ÉíÀ´Öƶ¨£¬¿É¹©²Î¿¼µÄÊé¼®ÓС¶
Java ±à³Ì·ç¸ñ¡·£¨Ó¢ÎÄÊéÃûΪ£ºThe Elements of Java Style£©¡£±àÂë¹æ·¶ÒªÐγÉÎĵµ£¬¶øÇÒÒª¼ò½àÃ÷ÁË£¬²¢×éÖ¯ÏîÄ¿³ÉÔ±Ò»Æðѧϰ£¬È·±£ËùÓгÉÔ±ÕýÈ·Àí½âËùÓÐÌõÄ¿¡£
Ò»µ©±àÂë¹æ·¶È·¶¨£¬¾Í¿ÉÒÔÀûÓà Eclipse ×ÔÉíÌṩµÄ¹¦ÄÜÀ´¿ØÖÆ´úÂëÑùʽºÍ¸ñʽ¡£¾ßÌå×ö·¨ÊÇ£¬µã»÷
Eclipse µÄ Windows -> Preference ²Ëµ¥ÏÔÚ´ò¿ªµÄ Preferences
¶Ô»°¿òµÄ×ó²àÀ¸ÖÐÕÒµ½ Java ½ÚµãϵÄ×ÓÏî Code Style£¨Èçͼ 2£©£¬¸ÃÏîºÍËüµÄ×ÓÏîÔÊÐíÄú¶Ô
Java ´úÂëµÄÑùʽ½øÐпØÖÆ¡£

ͼ 2. Eclipse ´úÂëÑùʽÉèÖô°¿Ú
ÀýÈ磬ΪÁËʹÓÃ×Ô¶¯¸ñʽ»¯¹¤¾ß£¬¿ÉÒÔÔÚ Eclipse ÌṩµÄĬÈÏ´úÂë¸ñʽÅäÖõĻù´¡ÉϽ¨Á¢×Ô¶¨ÒåµÄ¸ñʽ¡£ÔÚ
Formatter Ãæ°åÖУ¬µã»÷ New£¬ÊäÈëеÄÃû×Ö²¢Ñ¡ÔñÒ»¸öĬÈϵÄÅäÖÃ×÷Ϊ³õʼ»¯¸ñʽ£¬Èçͼ 3 Ëùʾ¡£

ͼ 3. ´´½¨ÐµĴúÂë¸ñʽÅäÖÃ
µ¥»÷ OK ºó¾Í¿ÉÒÔÔÚдò¿ªµÄ´°¿ÚÖнøÐÐÐ޸͍֯×Ô¼ºÐèÒªµÄ¸ñʽ¡£Èçͼ 4
Ëùʾ¡£

ͼ 4. ´´½¨ÐµĴúÂë¸ñʽÅäÖÃ
ÐÞ¸ÄÍê³Éºóµã»÷ Apply ±£´æËù×÷Ð޸ġ£Í¬Ê±¿ÉÒÔµã»÷ Export ½«µ±Ç°µÄ¸ñʽ¶¨Òåµ¼³ö³ÉÒ»¸ö
XML Îļþ£¬ÕâÑùÏîÄ¿×éµÄÆäËû³ÉÔ±¾Í¿ÉÒԺܷ½±ãͨ¹ýµã»÷ͼ 3 ÖÐµÄ Import °´Å¥À´µ¼Èë¸Ã XML
ÎļþÀ´Ê¹ÓÃͬһ¸ö´úÂë¸ñʽ¶¨Òå¡£
ÕâÑùÿ´ÎÔÚÌá½»´úÂëµ½°æ±¾¿ØÖÆ·þÎñÆ÷ǰ¾Í¿ÉÒÔͨ¹ý Eclipse ½çÃæÀïµÄ
Source->Format ²Ëµ¥À´¶Ô´úÂë½øÐиñʽ»¯£¬´Ó¶øÊ¹Õû¸öÏîÄ¿µÄ´úÂë¾ßÓÐÏàͬµÄ¸ñʽ¡£Í¬Ñù¿ÉÒÔͨ¹ý¶Ô
Code Style ÏÂµÄÆäËûÏîÄ¿½øÐÐÉèÖÃÀ´°ïÖú¶Ô Java ´úÂëµÄÑùʽ½øÐпØÖÆ¡£½«ËùÓÐÕâЩÑùʽÎļþµ¼³ö³É
XML Îļþºó£¬Í¬±àÂë¹æ·¶Ò»Æð¹éµµ£¬¹©ËùÓÐÏîÄ¿³ÉԱʹÓá£
²½Öè¶þ£º¾²Ì¬´úÂë·ÖÎö
ÔÚÍê³ÉÔ´´úÂëµÄ¿ª·¢ÒÔºó£¬ÏÂÃæÒª½øÐеŤ×÷¾ÍÊÇÉóÊӺͲâÊÔ´úÂë¡£³ýÁËͨ¹ýÔËÐвâÊÔ´úÂëÀ´¼ì²é¹¦ÄÜÖ®Í⣬»¹ÄÜÀûÓÃһЩ¾²Ì¬·ÖÎö¹¤¾ßÀ´¿ìËÙ¡¢Ö±½ÓµØÌá¸ß´úÂëÖÊÁ¿¡£¾²Ì¬´úÂë·ÖÎö¹¤¾ß²¢²»ÐèÒªÔËÐдúÂ룬¿ÉÒÔÖ±½Ó¶Ô
Java ÎļþºÍ Class Îļþ½øÐзÖÎö£¬Í¨¹ýһЩ¼ì²éÌõ¼þµÄÉèÖ㬿ìËÙÕÒµ½´úÂëÖеĴíÎóºÍDZÔÚȱÏÝ¡£ÏÖÔڵľ²Ì¬·ÖÎö¹¤¾ßºÜ¶à£¬ÓÐ
FindBugs¡¢PMD¡¢IBM Rational Tool£¬µÈµÈ¡£ÔÚÕâÀѡÔñ FindBugs ×÷Ϊ¾²Ì¬´úÂë·ÖÎö¹¤¾ß¡£FindBugs
¿ÉÒÔºÍÈÕ³£¿ª·¢¹¤¾ß Eclipse ½øÐм¯³É£¬ÔÚ¿ª·¢¹ý³ÌÖУ¬¾Í¿ÉÒÔ·½±ãµÄ¿ªÊ¼¾²Ì¬´úÂëµÄ¼ì²é¡£Í¨¹ý¼ì²é Class
Îļþ»òÕß JAR Îļþ£¬½«×Ö½ÚÂëºÍÒ»×éȱÏÝģʽ½øÐжԱȣ¬À´·¢ÏÖ¿ÉÄÜ´æÔڵĴúÂëÎÊÌâ¡£ÔÚ Eclipse µÄ¿ª·¢»·¾³ÖУ¬Óòå¼þ°²×°µÄ·½Ê½°²×°ÁË
Findbugs ºó£¬ÔÚ Eclipse µÄÅäÖÃÑ¡ÏîÖоͻá¶à³öÀ´ FindBugs µÄÅäÖÃÑ¡Ïî¡£¿ÉÒÔ¶Ô×Ô¼ºµÄÏîÄ¿½øÐÐÅäÖã¬Ñ¡ÔñÐèÒªµÄ
Detector ¼ì²é´úÂë¡£

ͼ 5. FindBugs µÄÅäÖÃÑ¡Ïî
ÉèÖúÃ×Ô¼ºµÄ¹æÔòºó£¬ÔÚÐèÒª¼ì²éµÄ´úÂëÎļþ¼ÐÉϵã»÷ÓÒ¼ü£¬¾Í¿ÉÒÔÆô¶¯ FindBugs
¼ì²é¡£´úÂë¿ÉÒÔÊÇÒ»¸öÏîÄ¿£¬Ò²¿ÉÒÔÖ»ÊǼ¸¸öÎļþ¡£

ͼ 6. ÔËÐÐ FindBugs
¼ì²éÍê±Ïºó£¬»á³öÏÖ FindBugs ÊÓͼ£¬°ÑËùÓмì²éµÄ½á¹û¸ù¾Ý´íÎó·Ö×éչʾ¡£µã»÷½á¹ûÀïÃæµÄÿһ¸ö´íÎ󣬻á×Ô¶¯´ò¿ª¶ÔÓ¦µÄ´úÂë¡£µ±¸ù¾Ý¹æÔò¸ÄÕýÁËËùÓеĴíÎ󣬻òÕß˵DZÔÚ´íÎó£¬ÕâЩ´úÂëÒ²¾Íͨ¹ýÁ˾²Ì¬´úÂë¼ì²é¡£FindBugs
µÄ¼ì²é½á¹û¿ÉÒÔÊÇ XML Îļþ£¬Ò²¿ÉÒÔÊÇÎı¾Îļþ£¬±ãÓÚÏîÄ¿µÄ¼¯³É¹ÜÀíºÍ¼ì²é±£´æ¡£

ͼ 7. FindBugs ¼ì²é½á¹û
²½ÖèÈý£ºµ¥Ôª²âÊÔ
µ¥Ôª²âÊÔÓÃÀýÉè¼ÆºÍÆÀÉó
µ¥Ôª²âÊÔÊÇÈí¼þ¿ª·¢¹ý³ÌÖÐÖØÒªµÄÖÊÁ¿±£Ö¤»·½Ú£¬ÔÚ´Ë»·½ÚÖУ¬Éè¼ÆºÍÆÀÉó¶ÔÓÚ±£Ö¤Õû¸öµ¥Ôª²âÊÔ¹ý³ÌµÄÍêÕûÐÔºÍÓÐЧÐÔÀ´ËµÊ®·ÖÖØÒª¡£Éè¼Æ½×¶ÎÐèÒª¾ßÌ忼ÂÇÒª¶ÔÄÄЩ´úÂëµ¥Ôª½øÐвâÊÔ£¬±»²âµ¥ÔªÖ®¼äµÄ¹ØÏµ£¬²âÊÔ²ßÂÔ£¬ÒÔ¼°µ¥Ôª²âÊÔÓÃÀýÉè¼ÆµÈ£¬²¢×îÖÕÊä³ö¡¶µ¥Ôª²âÊÔÓÃÀýÉè¼Æ¡·Îĵµ£¬ÓÃÀ´Ö¸µ¼¾ßÌåµÄµ¥Ôª²âÊÔÖ´ÐС£ÔÚÓÃÀýÉè¼ÆÖУ¬Í¨¹ý¶Ô´úÂëµ¥ÔªÊäÈëºÍÆÚ´ýÊä³öµÄ¶¨ÒåÀ´±£Ö¤¸Ãµ¥ÔªµÄ¹¦ÄÜÕýÈ·ÐÔ£¬±ß½çÖµµÄ²âÊÔºÍÒì³£²âÊԷdz£ÖØÒª¡£Í¬Ê±Ò²ÅäºÏ²âÊÔÓÃÀýºÍ¹¦ÄÜ¿éµÄÆ¥Åä·½·¨À´ºâÁ¿ÓÃÀýÉè¼ÆµÄÍêÕûÐÔ¡£
ÔÚÓÃÀýÉè¼ÆÍê³ÉÖ®ºó£¬ÏÂÒ»²½µÄ¹¤×÷¾ÍÊǽøÐвâÊÔÓÃÀýµÄÆÀÉ󡣸öÈ˵ÄÀí½âºÍ¾ÑéʼÖÕÊÇÓÐÏ޵ģ¬ÓÃÀýÆÀÉó¿ÉÒԽ輯ÌåÖ®Á¦£¬¶ÔÓÃÀýÉè¼Æ½øÈë²é©²¹È±£¬½øÒ»²½±£Ö¤²âÊÔÓÃÀýµÄÓÐЧÐÔ¡£ÓÉÓÚµ¥Ôª²âÊÔÊôÓڰ׺вâÊÔ·¶³ë£¬ËüÖ÷Ҫͨ¹ý¶Ô´úÂëµÄÂß¼½á¹¹½øÐзÖÎöÀ´Éè¼Æ²âÊÔÓÃÀý£¬Òò´Ë£¬ÆÀÉóÔ±µÄÑ¡Ôñ×îºÃÒÔÀí½â´úÂëÂß¼½á¹¹ÎªÇ°ÌᣬÈç¹ûÆÀÉóÔ±À´×ÔÏà¹ØÄ£¿é£¬»¹Äܹ»ÓÐЧµÄ·¢ÏÖÄ£¿éÏà¹ØÐÔºÍÒÀÀµÐÔËù´øÀ´µÄÎÊÌâ¡£
Ä£Äâ¶ÔÏó¼¼Êõ
ÔÚʵ¼ÊÏîÄ¿ÖУ¬¿ª·¢ÈËÔ±×Ô¼ºµÄ´úÂëÍùÍùÐèÒªºÍÆäËûµÄ´úÂëÄ£¿é»òϵͳ½øÐн»»¥£¬µ«ÔÚ²âÊԵĹý³ÌÖУ¬ÕâЩÐèÒª±»µ÷ÓõÄÕæÊµ¶ÔÏó³£³£ºÜÄѱ»ÊµÀý»¯£¬»òÕßÕâЩ¶ÔÏóÔÚijЩÇé¿öÏÂÎÞ·¨±»ÓÃÀ´²âÊÔ£¬ÀýÈç£¬ÕæÊµ¶ÔÏóµÄÐÐΪÎÞ·¨Ô¤²â£¬ÕæÊµ¶ÔÏóµÄÐÐΪÄÑÒÔ´¥·¢£¬»òÕßÕæÊµ¶ÔÏóµÄÔËÐÐËٶȺÜÂý¡£Õâʱºò£¬¾ÍÐèҪʹÓÃÄ£Äâ¶ÔÏó¼¼Êõ£¨Mock£©£¬ÀûÓÃÒ»¸öÄ£Äâ¶ÔÏóÀ´Ä£ÄâÎÒÃǵĴúÂëËùÒÀÀµµÄÕæÊµ¶ÔÏó£¬À´°ïÖúÍê³É²âÊÔ£¬Ìá¸ß²âÊÔ¸²¸ÇÂÊ£¬´Ó¶øÌá¸ß´úÂëÖÊÁ¿¡£Ä£Äâ¶ÔÏó¼¼ÊõÀûÓÃÁËÔÚÃæÏò½Ó¿ÚµÄ±à³ÌÖУ¬ÓÉÓÚ´úÂëÖ±½Ó¶Ô½Ó¿Ú½øÐе÷Óã¬ËùÒÔ´úÂë²¢²»ÖªµÀÒýÓõÄÊÇÕæÊµ¶ÔÏó»¹ÊÇÄ£Äâ¶ÔÏó£¬ÕâÑù¾Í¿ÉÒÔ˳ÀûµÄÍê³É¶Ô´úÂëµÄ²âÊÔ¡£
Ä£Äâ¼¼ÊõÓкܶàÖÖ£¬Èç jMock£¬EasyMock£¬Mockito£¬PowerMock
µÈµÈ¡£ÆäÖÐ Mockito Ïû³ýÁË¶ÔÆÚÍûÐÐΪµÄÐèÇ󣬱ÜÃâÁËÕâЩ´úÂëµÄ´óÁ¿³õʼ»¯¡£

ͼ 8. Mockito ʾÀý
ÔÚÄ£Äâ¶ÔÏó¹ý³ÌÖУ¬ÏÈÄ£ÄâÒ»¸öÐèÒªµ÷ÓÃµÄ List ¶ÔÏó LinkedList£¬ÔÙÉ趨Õâ¸ö¶ÔÏóµÄÐÐΪ£¬µ±µ÷ÓÃ
get(0) µÄʱºò£¬·µ»Ø¡±first¡±¡£ÕâÑù£¬²âÊÔ´úÂë¾Í¿ÉÒÔÀûÓÃÕâ¸ö¶ÔÏóÀ´²âÊÔÎÒÃǵŦÄÜ´úÂ룬ÐèÒªµ÷Óúͷµ»ØÖµµÄʱºò£¬¿ÉÒÔ˳ÀûµÄµÃµ½Ä£Äâ¶ÔÏóµÄ·µ»ØÖµ¡£Ò²ÐèÒª¶ÔÄ£Äâ¶ÔÏó½øÐдíÎóÇé¿öµÄÄ£Ä⣬±£Ö¤´úÂë¶Ô´íÎóµÄ´¦ÀíµÄÕýÈ·ÐÔ¡£
²âÊÔ¸²¸ÇÂÊ·ÖÎö
ΪÁ˺âÁ¿µ¥Ôª²âÊÔµÄÖÊÁ¿ºÍ¸²¸ÇµÄ·¶Î§£¬ÐèÒª¶Ôµ¥Ôª²âÊԵĴúÂë½øÐвâÊÔ¸²¸Ç·ÖÎö¡£³£ÓõĺâÁ¿²âÊÔ¸²¸ÇÂʵÄÖ¸±êÖ÷ÒªÓÐÓï¾ä¸²¸ÇÂÊ¡¢·ÖÖ§¸²¸ÇÂÊ¡¢Â·¾¶¸²¸ÇÂÊ¡¢Ìõ¼þ¸²¸ÇÂʺͷ½·¨¸²¸ÇÂʵȡ£¾ßÌå²ÉÓÃÄÄЩָ±ê¿ÉÒÔ¸ù¾ÝÏîÄ¿µÄʵ¼ÊÇé¿öÀ´¶¨£¬ÒÔ±ÜÃâÒò¹ý¸ßµÄÖ¸±êÔö¼ÓÁË´úÂ뿪·¢ÈËÔ±µÄ¹¤×÷Á¿¶øÓ°ÏìÁËÏîÄ¿ÕûÌåµÄ½ø¶È¡£
EMMA ÊÇÒ»¿î±È½ÏÁ÷ÐеĿªÔ´ Java ²âÊÔ¸²¸ÇÂÊ·ÖÎö¹¤¾ß£¬Ö§³ÖÀà¡¢·½·¨¡¢´úÂëÐС¢»ù±¾´úÂë¿éµÈ¶àÖÖÀàÐ͵IJâÊÔ¸²¸ÇÂÊ·ÖÎö£¬Ö§³Ö½«¸²¸ÇÂÊ·ÖÎö½á¹ûµ¼³öΪ¶àÖÖ¸ñʽµÄ±¨¸æ£¬²¢²ÉÓöàÖÖÑÕÉ«À´¸ßÁÁÏÔʾ²»Í¬µÄ¸²¸ÇÂÊ״̬¡£EclEmma
ÊÇÒ»¿î»ùÓÚ EMMA µÄ Eclipse ²å¼þ£¬·½±ãÔÚ Eclipse IDE ÖнøÐвâÊÔ¸²¸ÇÂÊ·ÖÎö¡£Èçͼ
9£¬ÔÚ²âÊÔÓÃÀýдºÃºó£¬¿ÉÒÔÔÚÓÒ¼üµã»÷²âÊÔÀ࣬ѡÔñ Coverage As -> JUnit Test.

ͼ 9. ÔËÐвâÊÔ¸²¸Ç·ÖÎö
µ¥Ôª²âÊÔÅÜÍêºó£¬CoverageÊÓͼÖлáÏÔʾËùÑ¡ÔñµÄ²âÊԵĸ²¸ÇÂÊ¡£Ë«»÷´ò¿ªÄ³Ò»¾ßÌåµÄÀàºó£¬¿ÉÒÔ¿´µ½¸ßÁÁÏÔʾµÄ¸²¸Ç·ÖÎö½á¹û£¬Èçͼ
10 Ëùʾ¡£ºìÉ«´ú±í²âÊÔûÓи²¸Çµ½¸ÃÐУ¬»ÆÉ«±íʾ²¿·Ö¸²¸Ç£¬ÂÌÉ«µÄÐбíʾ¸ÃÐÐÔÚ±¾´Î²âÊÔÖб»¸²¸Çµ½¡£

ͼ 10. ²é¿´²âÊÔ¸²¸Ç·ÖÎö½á¹û
ÔÚ Coverage ÊÓͼÖпÉÒÔͨ¹ýµã»÷Êó±êÓÒ¼ü½«²âÊÔ¸²¸Ç·ÖÎöµÄ½á¹ûµ¼³ö³ÉÐèÒªµÄ¸ñʽ£¬ÀýÈç
HTML¡£

ͼ 11. µ¼³ö²âÊÔ¸²¸Ç·ÖÎö½á¹û
ͼ 12 ÏÔʾÁ˵¼³öµÄ report¡£

ͼ 12. ²âÊÔ¸²¸Ç·ÖÎö±¨¸æ
ΪÁ˱£Ö¤µ¥Ôª²âÊÔµÄÓÐЧÐÔºÍÖÊÁ¿£¬¿ÉÒԹ涨һ¸ö²âÊÔ¸²¸ÇÂʵÄÏÂÏÞ£¬ÀýÈçËùÓеİüºÍÀàµÄ¸²¸ÇÂʱØÐë´ïµ½
80% ÒÔÉÏ¡£²»¹ýÖµµÃ×¢ÒâµÄÊÇ£¬²»Òªµ¥´¿×·Çó¸ß¸²¸ÇÂÊ£¬ÒªÍ¬Ê±×¢Òâ²âÊÔÓÃÀýµÄÖÊÁ¿£¬Èç¹û²âÊÔÓÃÀý±¾Éí¾ÍдµÄÓдíÎó£¬ÄÇô¼´Ê¹²âÊÔ¸²¸ÇÂʺܸßҲûÓÐÒâÒå¡£
²½ÖèËÄ£º³ÖÐø¼¯³É
³ÖÐø¼¯³É£¨Continuous Integration£©ÊÇÀûÓÃһϵÁеŤ¾ß£¬·½·¨ºÍ¹æÔò£¬×öµ½¿ìËٵĹ¹½¨¿ª·¢´úÂ룬×Ô¶¯µÄ²âÊÔ»¯£¬À´Ìá¸ß¿ª·¢´úÂëµÄЧÂʺÍÖÊÁ¿¡£ÀûÓÃ×Ô¶¯¹¹½¨¹¤¾ß£¬ËæÊ±¶¼ÄܰÑÌá½»µÄ´úÂë¹¹½¨³öÀ´£¬Ìṩһ¸ö¿ÉÒÔ²âÊÔʹÓõİ汾£¬ÈÃÓû§ºÍ¿ª·¢ÈËԱͬʱ¿´µ½ÏàͬµÄ¹¦ÄÜ£¬¾¡ÔçµÄ·¢ÏÖÎÊÌâºÍ´íÎó£¬Ò²¿ÉÒÔ¾¡¿ìµÄµÃµ½²âÊÔÈËÔ±ºÍÓû§µÄ·´À¡¡£
Òª×öµ½³ÖÐø¼¯³É£¬¾ÍÒªÀûÓÃһϵÁй¤¾ß£¬°Ñ¿ª·¢¹ý³ÌÖеÄÖØ¸´¹¤×÷×Ô¶¯»¯¡£´î½¨×Ô¶¯µÄ¹¹½¨·þÎñÆ÷£¬×Ô¶¯µÄ½øÐе¥Ôª²âÊԺͷ¢²¼Ð°汾£¬Ò»¸ö¼¯³ÉµÄ·þÎñÆ÷¿ÉÒÔÌṩ¹¹½¨¹ý³ÌµÄ½á¹û±¨¸æ£¬×Ô¶¯Í¨Öª¿ª·¢ÈËÔ±¹¹½¨½á¹û£¬²¢ÇÒ±£´æÀúÊ·Êý¾Ý¡£IBM
Rational Team Concert (RTC) ¿ÉÒÔÌṩ¹¤×÷ÈÎÎñµÄ¹ÜÀí£¬ÏîÄ¿¼Æ»®µÄ°²ÅÅ£¬´úÂë°æ±¾¹ÜÀí¿ØÖÆ£¬×Ô¶¯¹¹½¨¿ÉÓð汾£¬Éú³É¹¹½¨½á¹û±¨¸æ¡£ÕâЩ¹ý³Ì¹¹³ÉÁËÏîÄ¿µÄ³ÖÐø¼¯³É¹ý³Ì£¬ÆäÖУ¬°æ±¾µÄ×Ô¶¯¹¹½¨ºÍ´úÂëµÄ×Ô¶¯µ¥Ôª²âÊÔÊdzÖÐø¼¯³ÉµÄ¹Ø¼ü¹ý³Ì£¬RTC
ÔÚÕâЩ¹ý³ÌÉÏÌṩÁËÓÐÁ¦µÄÖ§³Ö¡£
×Ô¶¯¹¹½¨
RTC ÌṩÁË build engine À´¸ºÔð¹¹½¨ build£¬Ê×Ñ¡£¬Æô¶¯
build engine£¬²¢ºÍ RTC ·þÎñÆ÷½¨Á¢ÁËÁ¬½Ó¡£ÔÙ´´½¨ÏîÄ¿µÄ build ¶¨Òå¡£ÔÚÕâ¸ö¶¨ÒåÖУ¬ÐèÒªÉ趨±àÒëÄÄЩģ¿éµÄ´úÂ룬ÐèÒªÌø¶¯Äĸö
ANT ÎļþÀ´Æô¶¯±àÒ룬ºÍһЩ±àÒë¹ý³ÌÖеIJÎÊýµÄÉ趨¡£µ±ÕâЩ¶¼×¼±¸ºÃÁË£¬±àÒë¶ÔÓÚÏîÄ¿¶øÑÔ£¬¾Í±ä³ÉÒ»¸ö¼òµ¥µÄÊÂÇé¡£
¿ÉÒÔ¿´µ½£¬Í¨¹ýÔÚ build ¶¨ÒåÉÏ£¬µã»÷ÇëÇó¹¹½¨£¬¾Í¿ÉÒÔ´¥·¢Ò»´Î¹¹½¨¹ý³Ì¡£Ñ¡ÔñÐèÒªµÄ¹¹½¨²ÎÊý£¬Õâ¸ö¹ý³Ì¾Í»áÔÚºǫ́ÔËÐС£Ã¿Ò»¸ö¿ª·¢ÈËÔ±£¬×öÁËÉÔÐíµÄ´úÂë¸Ä±äºÍÌá½»£¬¶¼¿ÉÒÔ´¥·¢ÐµĹ¹½¨¹ý³Ì£¬À´±£Ö¤ÎÒÃÇ´úÂëµÄÓÐЧÐÔ¡£ÉêÇëÒ»¸öÐµĹ¹½¨µÄ¹ý³ÌÈçͼ
13¡¢Í¼ 14 Ëùʾ¡£

ͼ 13. ÉêÇëÒ»¸öÐµĹ¹½¨

ͼ 14. ¹¹½¨ÉêÇë½çÃæ
µ±¹¹½¨½áÊøºó¡£RTC ·þÎñÆ÷»áÌṩ¹¹½¨½á¹û±¨¸æ¡£¿ª·¢ÈËÔ±¿ÉÒÔ²éѯµ½Õâ´Î¹¹½¨µÄÏêϸÐÅÏ¢¡£

ͼ 15. ¹¹½¨½á¹û
Õû¸ö¿ª·¢¹ý³ÌÖУ¬¹¹½¨°æ±¾µÄ¹ý³ÌÓ¦¸ÃÊÇÎÞÊý´ÎµÄ£¬Í¨¹ýÿ´Î¹¹½¨£¬¶¼¿ÉÒԵõ½µ±Ê±´úÂëµÄ±àÒëÇé¿ö£¬²¢ÇÒ¿ÉÒԵõ½Ò»¸ö¿ÉÔËÐеÄÈí¼þ°æ±¾¡£ÔÚ¹¹½¨¶¨ÒåÉÏ£¬RTC
Ö§³ÖÉèÖù¹½¨¼Æ»®¡£¶¨Ê±×Ô¶¯µÄ´¥·¢Ò»´Î¹¹½¨¡£

ͼ 16. ¹¹½¨¶¨Òå
×Ô¶¯µ¥Ôª²âÊÔ
¹¹½¨¿ÉÒÔ×Ô¶¯ÁË£¬ÖصãÌá¸ß´úÂëÖÊÁ¿µÄµ¥Ôª²âÊÔÄØ£¿Èç¹ûÿһÌìµÄ´úÂ룬ÿһ¸ö°æ±¾µÄ´úÂ룬¶¼ÒѾͨ¹ýÁËÎÒÃǵĵ¥Ôª²âÊÔ£¬ÕâÑùÎÒÃǾÍÄܶԴúÂëµÄÖÊÁ¿ÓÐÁË»ù±¾µÄ±£Ö¤¡£ÔÚ¹¹½¨½Å±¾µÄ×Ô¶¯µ÷Óùý³ÌÖУ¬Í¨¹ý
ANT µÄ½Å±¾£¬¿ÉÒÔ¼ÓÉÏ JUnit£¬EMMA£¬FindBugs µÄ ANT ½Å±¾µ÷Óã¬Ã¿Ò»´ÎµÄ¹¹½¨£¬¶¼¿ÉÒÔ°ÑÕâЩ¼ì²é¹¤×÷×Ô¶¯µÄ½øÐÐÒ»±é²âÊÔ¡£ÕâЩ²âÊÔ¶¼ÒªÉú³É²âÊÔ½á¹û±¨¸æ£¬
RTC ²»ÄÜÌṩÕâЩ±¨¸æµÄչʾ£¬¾Í¿ÉÒÔÀûÓà Hudson Õâ¸ö¿ªÔ´¹¤¾ß£¬¼¯³É²âÊÔ±¨¸æÀ´·½±ã²éÔÄ¡£

ͼ 17. ×Ô¶¯²âÊÔ±¨¸æ
²½ÖèÎ壺´úÂëÆÀÉóºÍÖØ¹¹
´úÂëÆÀÉó£¨Code Review£©ÊÇ Java ÏîÄ¿¿ª·¢¹ý³ÌÖеÄÒ»¸öÖØÒª²½Ö裬´úÂëÆÀÉó¿ÉÒÔ°ïÖú·¢ÏÖ¾²Ì¬´úÂë·ÖÎö¹ý³ÌÖÐÎÞ·¨·¢ÏÖµÄһЩÎÊÌ⣬ÀýÈç´úÂëµÄ±àдÊÇ·ñ·ûºÏ±àÂë¹æ·¶£¬´úÂëÔÚÂß¼ÉÏ»òÕß¹¦ÄÜÉÏÊÇ·ñ´æÔÚ´íÎ󣬴úÂëÔÚÖ´ÐÐЧÂʺÍÐÔÄÜÉÏÊÇ·ñÓÐÐèÒª¸Ä½øµÄµØ·½£¬´úÂëµÄ×¢ÊÍÊÇ·ñÍêÕûÕýÈ·£¬´úÂëÊÇ·ñ´æÔÚÈßÓàºÍÖØ¸´¡£´úÂëÆÀÉ󻹿ÉÒÔ°ïÖúнøÈëÏîÄ¿×éµÄ³ÉÔ±¿ìËÙѧϰºÍÁ˽âÏîÄ¿£¬´Ù½ø¾Ñé·ÖÏí£¬Í¬Ê±Ò²Äܱ£Ö¤ÏîÄ¿³ÉÔ±µÄÁ¼ºÃ¹µÍ¨¡£´úÂëÆÀÉóÖ÷Òª°üÀ¨Á½ÖÖÐÎʽ£¬Í¬¼¶ÆÀÉó£¨Peer
Review£©ºÍС×éÆÀÉó£¨Group Review£©¡£Í¬¼¶ÆÀÉóÖ÷ÒªÖ¸ÏîÄ¿³ÉÔ±¼äµÄ»¥ÏàÆÀÉó£¬Ð¡×éÆÀÉóÊÇָͨ¹ýÕÙ¿ªÆÀÉó»áÒ飬ÏîÄ¿³ÉÔ±Ò»Æð¶ÔÏîÄ¿´úÂë½øÐÐÆÀÉó¡£
ΪÁËÌá¸ß´úÂëÆÀÉóµÄÓÐЧÐÔºÍЧÂÊ£¬¿ÉÒÔ½èÖúһЩÍⲿ¹¤¾ß£¬±È½Ï³£ÓõĴúÂëÆÀÉ󹤾ßÓÐ
Jupiter ºÍ Code Striker¡£Jupiter ÊÇÒ»¿î¿ªÔ´µÄ Eclipse ²å¼þ£¬ÔÊÐí³ÉÔ±½«ÆÀÉóÒâ¼û¶¨Î»µ½ÕæÊµ´úÂëµÄ¾ßÌåÐУ¬ÓÉÓÚ´úÂëÆÀÉóµÄ½á¹ûÒÔ
XML ÎļþµÄÐÎʽ±£´æ£¬ËùÒÔ¿ÉÒ԰ѽá¹ûÌá½»µ½°æ±¾¹ÜÀí·þÎñÆ÷½øÐй²Ïí¡£Í¼ 18 ÏÔʾÁËʹÓà Jupiter
½øÐдúÂëÆÀÉóµÄ½çÃæ¡£

ͼ 18. Jupiter ´úÂëÆÀÉó½çÃæ
ÔÚ´úÂëÆÀÉóÈÎÎñ´´½¨ºó£¬Jupiter ½«´úÂëÆÀÉó·Ö³ÉÈý¸ö½×¶Î£¬¸öÈËÆÀÉó½×¶Î
(Individual Phase)¡¢ÍŶӯÀÉó½×¶Î£¨Team Phase£©ºÍÎÊÌâÐÞ¸´½×¶Î£¨Rework
Phase£©¡£ÔÚ¸öÈËÆÀÉó½×¶Î£¬ÆÀÉó³ÉÔ±½«·¢ÏֵĴúÂëÎÊÌâ»òÕßȱÏݼǼÏÂÀ´£¬Ã¿¸öÎÊÌâ¶¼»á×÷Ϊһ¸ö¼Ç¼±£´æÔÚÆÀÉó±í¸ñÖС£ÔÚÍŶӯÀÉó½×¶Î£¬ÍŶӵÄÈ«²¿»òÕß²¿·Ö³ÉÔ±»áÒ»Æð¶Ô¸öÈËÆÀÉó½×¶Î·¢ÏÖµÄÎÊÌâ½øÐж¨ÐÔ£¬Èç¹ûÎÊÌâȷʵ´æÔÚ£¬¾Í½«¸ÃÎÊÌâ·ÖÅ䏸ij¸ö³ÉԱȥ½â¾ö£¬²¢ÔÚ
Jupiter Öн«¸ÃÎÊÌâÉèÖóÉÏàÓ¦µÄ״̬¡£ÔÚÎÊÌâÐÞ¸´½×¶Î£¬ÍŶӳÉÔ±»áÐÞ¸´ÊôÓÚ×Ô¼ºµÄÎÊÌ⣬²¢½«ÏàÓ¦µÄ¼Ç¼ÉèÖóÉÒѽâ¾öµÈÕýÈ·µÄ״̬¡£
Codestriker ÊÇÒ»¿î»ùÓÚ Web µÄ³£ÓôúÂëÆÀÉ󹤾ߣ¬¶Ô´úÂëµÄÆÀÉó¿ÉÒÔÕë¶Ôijһ¾ßÌåÐУ¬Ò²¿ÉÒÔÕë¶ÔÕû¸ö´úÂëÎļþ£¬ÆÀÉóÒâ¼û»á±»±£´æÔÚÊý¾Ý¿âÖС£ÆÀÉóÈËÔ±¿ÉÒÔͬʱ¿´µ½ÆäËûÈËµÄÆÀÂÛ£¬´úÂë×÷ÕßÒ²¿ÉÒÔÕë¶Ôijһ¾ßÌåµÄÆÀÂۻظ´¡£Codestriker
Ö§³ÖÓʼþ֪ͨ£¬»¹¿ÉÒÔͬ°æ±¾¿ØÖÆ·þÎñÆ÷½øÐм¯³É£¬ÒÔ¸ú×ÙºÍÏÔʾÎļþÄÚÈݵĸı䡣ͼ 19 ÏÔʾÁË Codestriker
µÄ½çÃæ¡£

ͼ 19. Codestriker ±¨¸æ½çÃæ
ÔÚʵ¼ùÖжÔËùÓдúÂë½øÐÐС×éÆÀÉó»á±È½Ï·Ñʱ£¬ËùÒÔ¿ÉÒÔ¸ù¾Ýʵ¼ÊÇé¿öÀ´ÌôѡһЩºËÐÄ´úÂë½øÐÐС×éÆÀÉ󣬻òÕßÔÚÏîÄ¿µÄǰÆÚ°²ÅŽ϶àµÄС×éÆÀÉ󣬵ÈÏîÄ¿×éµÄ³ÉÔ±¶Ô´úÂëÆÀÉóµÄ±ê×¼ºÍÒªÇóÓнϺõÄÀí½â£¬½øÐдúÂëÆÀÉóµÄ¾ÑéÌá¸ßºó£¬¾Í¿ÉÒÔÖð½¥¼õÉÙС×éÆÀÉóµÄ´ÎÊý£¬´Ó¶ø´ïµ½´ó²¿·Ö´úÂ뼴ʹֻ½øÐÐͬ¼¶ÆÀÉóÒ²Äܱ£Ö¤ºÜºÃµÄÖÊÁ¿¡£
ͨ¹ý´úÂëÆÀÉó·¢ÏÖµÄÎÊÌâҪͨ¹ý´úÂëÖØ¹¹¼°Ê±½â¾öµô£¬½ÏСµÄ²»Éæ¼°¶àÈË´úÂëµÄÖØ¹¹¿ÉÒÔÓÉÏîÄ¿³ÉÔ±×Ô¼º½èÖú
Eclipse µÄÖØ¹¹¹¦ÄÜÍê³É£¬²»Í¬ÏîÄ¿³ÉԱдµÄʵÏÖÏàͬ¹¦ÄܵIJ»Í¬´úÂëҪͨ¹ýÌÖÂÛÕûºÏ³É¹«¹²µÄÀà»òÕß·½·¨¡£±È½Ï¸´ÔӵĻòÕ߱Ƚϸ߲ã´ÎµÄÖØ¹¹¹¤×÷£¬ÀýÈçÕû¸öÏîÄ¿²ãÃæµÄ´úÂë×éÖ¯ÐÎʽµÄ¸Ä±äÐèÒªÓÉÕû¸öÏîÄ¿×鹲ͬÌÖÂÛÍê³É¡£
½áÂÛ
Èí¼þ¿ª·¢Ã»ÓÐÒ»³É²»±ä¡¢ÍòÄÜͨÓõÄÁ÷³ÌºÍ·½·¨£¬Ï£Íû´ó¼ÒÄÜ´Ó±¾Îĵõ½Æô·¢ºÍÊÕÒæ£¬½áºÏÄúµÄʵ¼ÊÏîÄ¿ÌØµã£¬Êµ¼ùÒÔÉϲ½ÖèºÍ·½·¨£¬²¢¼ÓÒÔÍêÉÆºÍ¸Ä½ø£¬¹²Í¬´òÔì¸ßЧ¸ßÖÊÁ¿µÄ
Java ´úÂ룬ΪÄúµÄÏîÄ¿³É¹¦µì¶¨¼áʵµÄ»ù´¡¡£
|