Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
flow.ci ³ÖÐø¼¯³É¼¼Êõʵ¼ù
 
À´Ô´£ºÔËάÅÉ ·¢²¼ÓÚ 2017-6-19
  3369  次浏览      40
 

³ÖÐø¼¯³É×öʲô

³ÖÐø¼¯³ÉµÄ¸ÅÄî³öÏÖÔÚ 2001 Ä꣬ËüÆäʵÊÇÒ»¸ö XP ¼«ÏÞ±à³ÌµÄ¹¤³Ìʵ¼ù¡£ÄÇô³ÖÐøµÄÊÇʲô£¬¼¯³ÉÊÇÊ²Ã´ÄØ£¬·Ç³£¼òµ¥¾ÍÊÇ¡°Ò»Ö±²»Í£µØ¼¯³É´úÂ롱¡£

³ÖÐø¼¯³ÉÊǰѴúÂëÆµ·±µÄºÏ²¢µ½Ö÷¸É£¬Í¨¹ý×Ô¶¯¹¹½¨µÄ·½Ê½ÑéÖ¤Èí¼þµÄÖÊÁ¿£¬ÈÃÍŶӿìËÙµÄÏìÓ¦ÖÊÁ¿£¬¿ìËÙµÄÐÞ¸´ÎÊÌ⣬¿ìËٵĸø¿Í»§½â¾öÎÊÌ⣬¿ìËٵؽ»¸¶¸üºÃµÄÈí¼þÖÊÁ¿¡£

ÎÒÃÇΪʲôҪ×ö³ÖÐø¼¯³É

¿ª·¢ÈËÔ±¶ÔÏÂÃæµÄÈí¼þ¿ª·¢³¡¾°ºÜÊìϤ£¬±ÈÈ磺

  • ³¡¾°Ò»£º¿ª·¢ÁËй¦ÄÜ£¬ÀϹ¦ÄܲúÉúÐ嵀 bug£»
  • ³¡¾°¶þ£ºÐÞºÃÒ»¸ö bug£¬ÓÖ²úÉúÆäËû bug£¬ÉõÖÁ³öÏÖÁ¬»· bug£»
  • ³¡¾°Èý£º³öÏÖµÄ bug ±È½Ï¶à£¬Ð޸ĴúÂëÒªºÜ½÷É÷£¬²»ÊìϤµÄÄ£¿éÒ»°ã²»¸Ò¶¯£¬ÅÂÒýÆðÎÊÌ⣻

³ÖÐø¼¯³ÉÊÇÈçºÎ»º½âÕâ¸öÎÊÌâµÄ£¬Martin Fowler ´óÊ¦Ôø¾­Ëµ¹ý£º

¡°Continuous Integration doesn¡¯t get rid of bugs, but it does make them dramatically easier to find and remove.¡± ¡ª Martin Fowler

ÈçÉÏÃæËù˵£¬³ÖÐø¼¯³É²»ÄÜÏû³ý bug £¬µ«ÄܸüÈÝÒ׵ط¢ÏÖ bugÇÒ¸ü¿ìËÙµØÐÞ¸´£¬ÌáÉý²úÆ·ÖÊÁ¿¡£ÄÇô£¬³ÖÐø¼¯³ÉÄܸøÎÒÃÇ´øÀ´ÄÄЩ¼ÛֵĨ£¿

´ÓÕâÕÅͼÉÏ¿ÉÒÔ¿´µ½£¬³ÖÐø¼¯³ÉÐγÉÒ»¸öÍêÃÀµÄ±Õ»·¡£Í¨¹ý³ÖÐøµÄ¼¯³É½øÐв»¶ÏµØ¼ì²é¡¢µ÷Õû£¬Í¬Ê±ÏîÄ¿µÄ͸Ã÷ÐÔÒ²µÃµ½ÁË×î´óµÄÌåÏÖ¡£

fir.im ÈçºÎ½øÐгÖÐø¼¯³Éʵ¼ù

ÕâÊÇÒ»¸ö³£¼ûµÄ³ÖÐø¼¯³ÉÁ÷Ë®Ïߣº

ÔÚÈÕ³£µÄ¿ª·¢¹ý³ÌÖУ¬³ÌÐòÔ±ÔÚ±¾µØÌá½»´úÂ룬³ÖÐø¼¯³ÉÁ÷Ë®ÏßÒªÇóÏÈ×öÒ»´Î±¾µØ¼¯³É£¬ÔÚ±¾µØ½øÐÐÑéÖ¤ºóÌá½»µ½Ô´´úÂë¹ÜÀí²Ö¿âÖУ¬Ö®ºóÔ´´úÂ빤¾ß»á·¢³ö webhook ´¥·¢µ½³ÖÐø¼¯³ÉϵͳÖС£µ±¹¹½¨/²âÊÔÍê³Éºó£¬»á¼°Ê±Í¨¹ý¶¤¶¤»òÓʼþ֪ͨÍŶӣ¨²âÊÔ/Ñз¢/boss/²úÆ·¾­Àí£©¼¯³É״̬£¬²úÆ·¾­Àí»òÏîÄ¿¾­ÀíÊÕµ½Í¨Öªºó»áÔÚ²âÊÔ»·¾³×öÑéÊÕ²âÊÔ£¬ÕâÊÇÒ»¸ö±È½ÏÍêÃÀµÄ·´À¡»·¡£

¼ÙÈç²âÊÔͨ¹ýÑéÊÕÍê±Ïºó£¬³ÖÐø¼¯³Éϵͳ»á×Ô¶¯´¥·¢²¿Êðµ½ÀàÉú²ú»·½Ú»ò²âÊÔ»·¾³£¬»òÓÉרÈËÊÖ¶¯²¿Êðµ½Éú²ú»·¾³¡£

ΪʲôҪ×ö±¾µØ¼¯³É

Ê×ÏÈ£¬´úÂëÔÚÔ¶³Ì½øÐйÜÀí£¬Ã¿¸öÈ˶¼»áÌá½»´úÂ룬Զ³ÌµÄ´úÂë²Ö¿â»á²úÉú±ä»¯£¬ËùÒÔÔÚ±¾µØ¼¯³ÉµÄʱºòÒªÇó½øÐдúÂëºÏ²¢£¬ÒÔÃâ³öÏÖ·ÖÖ§³åÍ»ºÍ´úÂë³åÍ»¡£Æä´Î£¬²»ÒªÒÀÀµÓÚ³ÖÐø¼¯³Éϵͳ¸øÄã½á¹û£¬¿ÉÄÜÐèÒª 30 ·ÖÖÓµÄʱ¼ä£¬²»ÒªÈÿª·¢ÈËÔ±µÈ´ý£¬Ò»¶¨ÒªÏÈ×ö±¾µØ¼¯³É¡£

ÈçºÎ×ö°æ±¾Ìá½»

ÔÙ˵һ¸öÌá½»µÄÎÊÌ⣬ÎÒÃǾ¡Á¿±£Ö¤Ã¿Ò»´ÎÌá½»¶¼ÊÇÒ»¸öÍêÕûµÄÌá½»£¬Ò²¾ÍÊÇÔ­×ÓÌá½»¡£

µ±´úÂë±ä¶¯ÄãÏë´´½¨Ìύʱ£¬Õâ¸öÌá½»Ó¦¸Ã¾¡¿ÉÄܵÄСÁ¿£¬²¢ÇÒ°üº¬Ò»¸ö²»¿É·Ö¸îµÄÌØÐÔ£¨feature£©¡¢ÐÞ¸´£¨fix£©»òÓÅ»¯£¨improved£©¡£

ÄÃÿ¸ö²úÆ·¿ª·¢¶¼»áÓöµ½µÄ login ¹¦ÄÜ¿ª·¢¾ÙÀý£¬µ±ÌîÍêµÄÓû§ÃûºÍÃÜÂë´«µ½Êý¾Ý¿â£¬×öÍêÑéÖ¤ºó¸øÓû§·µ»ØÒ»¸ö½á¹û¡£ÄÇʲôÊÇÒ»¸öÔ­×ÓÌá½»£¿±ÈÈ磬Ìá½»ÑéÖ¤Ò»¸öÓû§Ãû£¬ÕâÊÇÒ»¸öÍêÕûµÄ feature £»ÑéÖ¤ÃÜÂëÊÇ·ñ·ûºÏ¸ñʽ£¨6λ/8룩£¬ÕâÒ²ÊÇÒ»¸öÍêÕûµÄ feature £»µ±ÎÒÑéÖ¤ÍêÓû§ÃûºÍÃÜÂëºóÔÙ´«µ½Êý¾Ý¿âÖ®ºó£¬²éѯÕýÈ·Óë·ñ£¬ÕâÒ²ÊÇÒ»¸öÍêÕûµÄ feature £»±£Ö¤Ã¿´ÎÌá½»ÊÇÒ»¸öÍêÕûµÄ feature »òÐÞ¸´ÁËÒ»¸ö bug£¬²»Òª´úÂëд³É°ë½Ø¡£

³ÖÐø¼¯³Éϵͳ

ÕâÀï½²µÄÊÇÏÁÒåµÄ³ÖÐø¼¯³Éϵͳ£¬Í¨³£µÄ CI ϵͳÊÕµ½Ìá½»Ö®ºó»á´¥·¢¹¹½¨£¬¹¹½¨»áÓÐÐÅÏ¢·µ»Ø±ÈÈç commit id ¡¢commit ÐÅÏ¢¡¢´úÂë±ä¸üµÈ£¬ÊÕµ½´úÂëÌá½»ºó»á´¥·¢×Ô¶¯¹¹½¨£¬½Ó×Ű²×°ÒÀÀµ½øÐбàÒ룬²¢´¥·¢ÖÊÁ¿±£Ö¤Á÷³Ì£¬Ò²¾ÍÊÇ˵×Ô¶¯»¯²âÊÔ¼¯¡£

×Ô¶¯»¯²âÊÔ¼¯°üÀ¨´úÂ뾲̬¼ì²é£­µ¥Ôª²âÊÔ£­¼¯³É²âÊÔ£­ÑéÊÕ²âÊÔ£­ÐÔÄܲâÊÔ£¬Ò²»áÓÐѹÁ¦²âÊÔ¡¢»Ø¹é²âÊÔ¡¢monkey testµÈµÈһϵÁеIJâÊÔ¡£

½ÓÏÂÀ´£¬ÎÒÃǾßÌ彲һϠfir.im ÍŶÓÈçºÎ½øÐгÖÐø¼¯³Éʵ¼ùµÄ¡£

fir.im µÄÃô½Ý»·¾³

fir.im ÊÇÒ»¸öÄÚ²â·Ö·¢Æ½Ì¨£¬ÎÒÃÇÒ²×öÁËÒ»¸ö³ÖÐø¼¯³É CI ²úÆ·£­flow.ci¡£ÏÈÀ´¿´Ò»ÏÂÎÒÃÇÕýÔÚʹÓõÄÃô½Ý»·¾³£º

  • Trello ¿´°å;
  • Èý¸ö»·¾³£¨ÀàÉú²ú»·¾³£¬²âÊÔ»·¾³£¬Éú²ú»·¾³£©;
  • CI ¹¤¾ß£¨Jenkins/flow.ci£©

˵һÏ Git ·ÖÖ§¹ÜÀí

ÎÒÃÇÔÚÓ¦Óà 3 ¸ö·ÖÖ§ ¡ª¡ª master£¯develop£¯feature ·ÖÖ§£¬¶Ô feature ÃüÃû»áÓÐһЩҪÇ󣬳ÖÐø¼¯³Éϵͳһ¶¨»á·´À¡µ½ trello µÄ kanban ÀËùÒÔ¶ÔÓÚ feature ·ÖÖ§ÎÒÃÇÒ²ÓÐÕâÑùµÄÃüÃû feature/fci-{card number} ÒÔ·½±ãÇø·Ö¡£

¶à·ÖÖ§ÈçºÎ×öƵ·±µØ³ÖÐø¼¯³É£¿

master ·ÖÖ§£¬¼´ÏßÉÏ·ÖÖ§¡£ÏßÉÏͨ³£»áÓÐһЩ hotfix, ÈκβúÆ·¶¼²»¿ÉÄܱÜÃâÏßÉ쵀 bug ,ÕâЩ bug ÐèÒªÔÚ master ·ÖÖ§½øÐÐÐÞ¸´£¬ÐÞ¸´Íê³Éºó³ÖÐø¼¯³Éϵͳ»á¸æÖªÒÑÉÏÏߣ¬ÊÕµ½ÍŶӷ´À¡£¬ÕâЩ´úÂë»áÒªÇó¸üÐÂÔÚ develop ·ÖÖ§ÉÏ£¬Ö®ºóËùÓÐÍŶÓÒ²»áÊÕµ½Ïà¹ØÍ¨Öª£¬ÄÇô feature ·ÖÖ§»áÓб仯Â𣿴ð°¸Êǿ϶¨µÄ£¬ÒòΪƵ·±µÄ¼¯³É¿ÉÒÔ·ÀÖ¹´úÂëÆ«Àë¡£Õâ¾ÍÊÇÎÒÃǶà·ÖÖ§¹¹½¨µÄ²ßÂÔ¡£

»¹ÓÐÒ»¸ö²ßÂÔ¡ª¡ª²»Í¬µÄ·ÖÖ§²»Í¬µÄ¹¹½¨£¬³ÖÐø¼¯³ÉϵͳÅÜÍêÕû¸öÁ÷³Ì»áºÜ³¤£¬ËùÒÔÔÚ feature ·Ö֧Ƶ·±¶È»á±ÈÔÚ±¾µØ¹¹½¨Òª¸ßһЩ£¬µ«ÊÇҲûÓÐÄÇô¸ß¡£ÎªÁ˱£Ö¤³ÖÐø¼¯³ÉϵͳÄÜ¿ìËÙµØÊÕµ½·´À¡£¬ÐèÒªÔÚ feature ·ÖÖ§ÉÏ×öһЩ¶¨ÖÆµÄ workflow ,ËùÒÔÎÒÃÇ×öÁË´úÂ뾲̬·ÖÎöºÍµ¥Ôª²âÊÔ¡£

µ± feature ·ÖÖ§µÄ card ×öÍêÖ®ºó£¨scrum ÖÐ done µÄº¬ÒåÊÇÖ¸²âÊÔÑéÊÕÍê±Ï£©£¬¼¯³Éµ½ develop ·ÖÖ§£¬develop ·ÖÖ§»á×Ô¶¯²¿Êðµ½²âÊÔ»·¾³£¬»áÅÜÒ»¸öÕû¸ö×Ô¶¯»¯²âÊÔ¼¯£¬ÎªÊ²Ã´ÊÇÕâÑùµÄ¹¹½¨²ßÂÔÄØ£¿

±¾µØ¼¯³ÉµÄƵÂʷdz£¸ß£¬Ô¶³Ì¹¹½¨¶ÔÓ¦µÄÊÇ feature ·ÖÖ§£¬»áÏà¶ÔµÍһϡ£QA »·¾³¶ÔÓ¦µÄÊÇ develop ·ÖÖ§µÄ¹¹½¨Á£¶È¡£ÕâÑùµÄ¹¹½¨Ã¿Ìì¶¼»á²úÉú£¬ËùÒÔ×öÍêÖ®ºó²»Òª»ýѹ£¬Ò»¶¨Òª±£³ÖÉÏÏß½Ú×à¡£

kanban + scrum ½áºÏµÄ·½Ê½¹¹³ÉÎÒÃÇÿÈÕ¹¹½¨£¬ÕâÊÇÒ»¸öÕûÌåµÄ¹¹½¨²ßÂÔºÍÉÏÏ߯µÂÊ¡£

fir.im µÄ³ÖÐø¼¯³ÉϵͳÑݱä¹ý³Ì

ÂÞÂí²»ÊÇÒ»Ì콨³ÉµÄ£¬³ÖÐø¼¯³É²»ÊÇÒ»¿ªÊ¼¾ÍÊÇÍêÃÀµÄ£¬Ã¿¸ö¿ª·¢ÕßÐÄÖж¼ÓÐÒ»¸ö±È½ÏÀíÏëµÄ×Ô¶¯»¯¹¤×÷Á÷¡ª¡ª³ÖÐø²¿Ê𣬴ó¸Å»á¾­ÀúÕ⼸¸öÑݱä½×¶Î£º

  • ×î³õ½×¶Î£ºÌá½»´úÂ룭×Ô¶¯²¿Êð£»
  • Ò»°ã½ø½×£ºÌá½»´úÂ룭´úÂ뾲̬·ÖÎö£­×Ô¶¯²¿Êð£¬×î¼òµ¥ÏÈÔÙ¼ÓÈë´úÂ뾲̬·ÖÎö£»
  • ¸ß¼¶½ø½×£ºÌá½»´úÂ룭´úÂ뾲̬·ÖÎö£­×Ô¶¯»¯²âÊÔ¼¯£­×Ô¶¯²¿Êð£»

ÕâÊÇÎÒÃÇÔÚÓõÄ×Ô¶¯»¯²âÊÔ¼¯£¬ÏÂÃæ·Ö±ð˵Ͼ²Ì¬¼ì²é·ÖÎö¡¢µ¥Ôª²âÊÔ¡¢ÑéÊÕ²âÊÔ¡¢ÐÔÄܲâÊԵľßÌåÓÃ;¡£

Step 1. ¾²Ì¬´úÂë·ÖÎö

ÿ¸ö¹«Ë¾¶¼»áÓÐ×Ô¼ºµÄ´úÂë¹æ·¶£¬´úÂ뾲̬·ÖÎö¹¤¾ßÄܹ»±£Ö¤´úÂëÖÊÁ¿£¬ÏֳɵŤ¾ßÓÐ java µÄ FindBugs£¬ruby µÄ rubocop µÈ¡£ÀûÓôúÂë¼ì²é¹¤¾ß¿ÉÒÔ°ïÖúÍŶӷ¢ÏÖ¿ÉÖØ¹¹µÄµØ·½£¬Êä³ö²ú³ö ¨C HTML ±¨¸æ£¬Ò²»á·¢ÏÖDZÔÚ bug£»ÓеĴúÂë¼ì²é¹¤¾ß»¹»á¼ì²é³öһЩ°²È«Â©¶´¡£

ÕâÈýµãÊÇ´úÂ뾲̬·ÖÎö×îÖØÒªµÄ×÷Óá£ÕâÀïÒ²·ÖÏíÒ»¸ö GitHub µØÖ·(https://github.com/mre/awesome-static-analysis)£¬ÁгöһЩÖ÷Á÷ÓïÑԵĴúÂë·ÖÎö¹¤¾ß£¬¿ÉÒԲο¼Ò»Ï¡£

Step 2. ¡°µ¥Ôª²âÊÔ¡±

ÕâÀïµÄ ¡°µ¥Ôª²âÊÔ¡±Ò²¼ÓÉÏÁ˼¯³É²âÊÔ£¬±Ï¾¹´´Òµ¹«Ë¾ÒªÇó×ÊÔ´×î´ó»¯¡£³ÌÐòÔ±Ò»¶¨ÒªÐ´µ¥Ôª²âÊÔ£¬Òª¿Ë·þ¿ª·¢µÄ¹ßÐÔ˼ά£¬²»ÒªË¦¹ø¡£ÏÂÃæÓÐһЩעÒâµÄµãºÍ´ó¼Ò·ÖÏí£º

  • ²âÊÔÒì³£¡ª¡ª²»½ö½ö²âÊÔÕýÈ·Çé¿ö£¬Ò²ÒªÖ÷¶¯²âÊÔÒì³££»
  • ¼õÉÙñîºÏ¡ª¡ª±£Ö¤¶ÀÁ¢µÄ¿É²âÊÔÐÔ£»
  • ¹¦ÄÜ·ÖÀ롪¡ªµ¥Ôª²âÊÔÁ÷Ì«³¤£¬³¬¹ý 20 ·ÖÖӵĻ°ÒªÏêϸÏëÒ»ÏÂÈçºÎ½«¹¦Äܵ¥¶À²ð¿ª£¬Ð§Âʸü¸ß£»
  • ²âÊÔ£½ÐèÇ󡪡ª´Ó²âÊÔ´úÂë¿´µ½Ã¿¸ö class ÊǸÉʲôµÄ£¬Í¬Ê±³öÏÖ bug ʱ£¬µÚһʱ¼äÊÇ¿´²âÊÔ£¬ÏëÏëÈçºÎ´Ó²âÊÔÖи´ÏÖ£»

Step 3. ÑéÊÕ²âÊÔ

ÑéÊÕ²âÊÔÊǶ˶Զ˵IJâÊÔ£¬´ÓÊÕµ½Óû§ÃûÃÜÂëµ½·µ»Ø½á¹û£¬ÊDz»ÊÇÎÒÃÇËùÆÚÍûµÄÒ»¸öÖµ£¬ÕâÊÇÑéÊÕ Acceptance Test£¬ÆäʵÊÇÑéÊÕÁËÕû¸ö¹¦ÄÜ¡£´úÂ뾲̬¼ì²éºÍµ¥Ôª²âÊÔ£¬±£Ö¤ÁËÎÒÃÇÈçºÎÔõôȥд´úÂ룬ÑéÊÕ²âÊÔ±£Ö¤ÁËдÕýÈ·´úÂ룬·ûºÏ¿ª·¢ÐèÇó¡£

flow.ci ×öÑéÊÕ²âÊԱȽ϶࣬ÓõÄÊDZȽÏÁ÷ÐеĿò¼Ü Cucumber + Selenium WebDriver£¬Ä¿Ç°Ö§³Ö 3 ÖÖÊý¾Ý¿â£¬5 ÖÖ git ²Ö¿â£¬7 ÖÖ ¿ª·¢ÓïÑÔÅÜÔÚ docker ÈÝÆ÷ÔÆÉÏ£¬Ö§³Ö iOS ¹¹½¨ÅÜÔÚ mac »úÆ÷ÉÏ£¬Òª±£Ö¤ÕâЩÅÅÁÐ×éºÏÕý³£ÔËÐУ¬ÕâÊÇ flow.ci ×öÑéÊÕ²âÊÔ×îºËÐĵļÛÖµ¡£

Æäʵ£¬³ÖÐø¼¯³ÉÊÇÒ»¸ö¹¤×÷Á÷£¬µ± push ´úÂëµÄʱºò²Å»á run ÆðÀ´£¬µ«ÊÇ flow.ci ±¾ÉíϵͳҲÓÐÍⲿÒÀÀµµÄÌØÊâÐÔ£¬»áÒÀÀµÒ»Ð©µÚÈý·½µÄ sevice£¨±ÈÈç GitHub/GitLab µÈ£©£¬ÑéÊÕ²âÊÔÓ¦¸ÃÒ»Ö±±£³Ö²»¶ÏµØÔËÐУ¬Ò²¿ÉÒԽгÖÐø²âÊÔ°É¡£ÒòΪÎÒÃÇÓÀÔ¶²»Äܱ£Ö¤µÚÈý·½µÄ api »á²»»á¸Ä±ä¡£

Step 4. ÐÔÄܲâÊÔ

ÎÒÃǵÄÐÔÄܲâÊÔ×öµÄ±È½Ï¼òµ¥£¬Ö÷Òª²âÊÔ api.ÒòΪ fir.im ×ö app µÄÄÚ²â·Ö·¢£¬ÎÒÃÇÐèÒªÐÔÄܲâÊÔ±£Ö¤ app ÉÏ´«ÏÂÔØµÄÕý³£Îȶ¨¡£ÐÔÄܲâÊÔÊǵ¥Óû§µÄ£¬Ñ¹Á¦²âÊÔÊǶàÓû§µÄ£¬ÕâÊÇÁ½ÕßÖ®¼äµÄÇø±ð¡£

ÐÔÄܲâÊÔ»áÓÐһЩ²»È·¶¨ÐÔ£¬Óкܶàϵͳ»á²úÉú»º´æ¡£flow.ci µÄÐÔÄܲâÊÔÅÜÔÚ docker ÉÏ£¬ÊÇÒ»¸ö¸É¾»¶ÀÁ¢µÄ»·¾³£¬ÐèÒªÈÃϵͳԤÈÈÔËÐÐһϡ£Locust/JMeter/LoadRunnerÊÇĿǰ±È½ÏÁ÷ÐеÄÐÔÄܲâÊÔ¹¤¾ß¡£ flow.ciĿǰÓõÄÊÇ locust,¿ÉÒԲο¼Ò»Ï¡£

³ÖÐø¼¯³ÉµÄ¿ÉÊÓ»¯¡¢Êý¾Ý·ÖÎö

ÎÒÃÇÈÏΪһ¸öºÃµÄ³ÖÐø¼¯³ÉϵͳҲҪ×öµ½ÏîÄ¿½ø¶ÈµÄ͸Ã÷»¯£¬×ͳµÄ·½Ê½ÊÇ·¢ËÍÏà¹ØµÄÓʼþ£¬µ«ÊµÖÊÉÏÓм¸¸öÈËÈ¥¿´ÄØ£¿Îª´ËÎÒÃDzɹºÁËÒ»¸ö´óµÄÆÁÄ»À´½â¾öÕâ¸öÎÊÌ⣬ÓÃÀ´Ê±¿ÌÌáÐÑÍŶӵÄij¸ö¹¹½¨½á¹û¡£µ±È»Ò²¿ÉÒÔÓÃÉÁ˸µÆ»òÒôƵµÄ·½Ê½¡£

˵µ½Êý¾Ýͳ¼Æ·ÖÎö£¬Õû¸ö CIÁ÷³ÌÅÜÏÂÀ´²úÉúµÄºÜ¶àÊý¾ÝÒ²·Ç³£ÓÐÍÚ¾òµÄ¼ÛÖµ¡£±ÈÈ磬¶ÔÓÚ´úÂ뾲̬·ÖÎöÓжàÉÙ Offence¡¢Risk¡¢Bug£¬¶ÔÓÚµ¥Ôª²âÊÔÓÐʧ°ÜÂÊ¡¢²âÊÔ¸²¸ÇÂÊ£»¶ÔÓÚÑéÊÕ²âÊÔ»òÐÔÄܲâÊÔÓжàÉÙµÄʧ°ÜÂÊ£¬ÕâЩÊý¾Ý¶¼ÓпÉÄܳÉΪºâÁ¿Ò»¸ö³ÌÐòÔ±µÄ±ê×¼¡£

½áÓï

CI ¾ÍÏñ¸ÇÂ¥·¿µÄ½ÅÊÖ¼ÜÒ»Ñù£¬Ã»ÓнÅÊּܾÍû°ì·¨¸Ç³öÒ»¸ö×ã¹»¸ßµÄÂ¥£¬Ã»ÓÐ CI ¾ÍÎÞ·¨½»¸¶ÖÊÁ¿×ã¹»ºÃµÄÈí¼þ£¡

   
3369 ´Îä¯ÀÀ       40
Ïà¹ØÎÄÕÂ

ΪʲôҪ×ö³ÖÐø²¿Êð£¿
ÆÊÎö¡°³ÖÐø½»¸¶¡±£ºÎå¸öºËÐÄʵ¼ù
¼¯³ÉÓë¹¹½¨Ö¸ÄÏ
³ÖÐø¼¯³É¹¤¾ßµÄÑ¡Ôñ-×°ÔØ
Ïà¹ØÎĵµ

³ÖÐø¼¯³É½éÉÜ
ʹÓÃHudson³ÖÐø¼¯³É
³ÖÐø¼¯³ÉÖ®-ÒÀÀµ¹ÜÀí
IPD¼¯³É²úÆ·¿ª·¢¹ÜÀí
Ïà¹Ø¿Î³Ì

ÅäÖùÜÀí¡¢ÈÕ¹¹½¨Óë³ÖÐø¼¯³É
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
µ¥Ôª²âÊÔ¡¢Öع¹¼°³ÖÐø¼¯³É
»ùÓÚAndroidµÄµ¥Ôª¡¢ÐÔÄܲâÊÔ