Feeling

              三人行,必有我師焉

             ::  :: 新隨筆 :: 聯系 ::  :: 管理 ::
            185 隨筆 :: 0 文章 :: 392 評論 :: 0 Trackbacks
          假如你是一個Leader,那么你敢對你的自己的項目Refactor嗎?當然我這兒所說的Refactor不是僅僅修改幾個Class而已,而是將舊有的框架完全拋棄,而建立一個全新的框架。你能面對Release的壓力,還有項目成敗的挑戰嗎?

          當一個Project越來越大,Logic越來越復雜的時候,就有的框架體系往往不能滿足新Feature的要求,于是程序員們有兩種選擇,要么重構,要么打補丁。對于后者,如果開發人員水平高一點,補丁的痕跡還不會很明顯,如果水平一般的話,這段代碼往往就會形成一個惡夢。久而久之,整個項目都會積重難返,直至崩潰。

          很幸運的是,我所在的Team從一開始就定位于堅持Refactor。基本上每個MileStone,都會有1-2個人手上的活不是new feature,而是refactor。也許剛剛開始refactor的時候會無從下手,畢竟很大的一塊,不是說動就動的。但是不管怎么樣,refactor之后的效果是顯而易見的,新的擴展很容易實現,往往只要覆寫某個方法就可以實現一個新的feature。磨刀不誤砍柴工,refactor很好的詮釋了這一點。

          看過《重構》這本書的人,都會知道重構須從小處做起,不斷堅持,但這樣的重構也只僅僅局限于某些功能點的重用性而已。真正的重構,是需要大刀闊斧的。一個項目,你很難知道后期的行為,因此代碼框架也很難一直適應新的需求。當需求不斷變更的同時,如果固步自封,渾身打上狗皮膏藥,補丁越多,維護越累。當量變達到質變的時候,也就是項目崩潰的時候。只有堅持對框架進行調整,才能夠不斷的滿足新的需求。

          說到這兒就不得不說到團隊間的合作問題,一個產品,往往是由幾個Team共同協作完成的。基本上每個Team都只需要負責自己的模塊,并且根據工作量的大小有相應的人手。那么你認為在這兒Team之間,大家工作的感覺會想差不多嗎?實際上,每個Team內部的情況完全不一樣,有的Team,一個人平均每天只能該1個Bug,有的Team能夠該3-5個。歸根結底,還是由于框架的問題。如果框架結構清晰明了,改起來自然簡單,往往一行代碼的修改就能解決問題。框架結構復雜的話,那就不好收拾了。框架的作用就是增加重用性,降低耦合度。我們這兒有一個Team,框架3年都沒有什么改變了,而且由于人員的更迭,很多代碼都和黑盒一樣,沒有人能夠看明白。我敢說,我一天改10個Bug都不在話下,他們能說嗎?

          一個Leader要維護Team之間的平衡真得很累,結構好了,自然就做的快了,可那又不是自己的錯,做得慢的Team不但拖累自己,到頭來還硬要說你出風頭。開發人員第一個需要擁有的素質就是能夠不斷自省,要學會先懷疑自己。把所有的責任都推卸出去了,到最后問題沒解決那還是自己的。一個項目的成敗也往往是由Leader的管理水平來決定的。如果Leader都怕失敗,不敢去承擔責任,那么手下的人自然也沒有這個義務了。

          我只想說一句,不敢對自己現有的框架體系做出挑戰的,不能夠自省的Leader,都是對自己的項目,自己的手下不負責任。一個項目最終的成敗,也可能就毀在這些人手上。
          posted on 2007-05-02 18:51 三人行,必有我師焉 閱讀(852) 評論(4)  編輯  收藏

          評論

          # re: 你敢對自己的項目Refactor嗎? 2007-05-02 19:12 dennis
          Refactor是建立在完備的單元測試的基礎上,沒有完備的單元測試,Refactor是一種冒險。  回復  更多評論
            

          # re: 你敢對自己的項目Refactor嗎? 2007-05-02 19:30 三人行,必有我師焉
          不幸的是,我們組是GUI組,是不具備單元測試的。而那個3年沒有重構的Team是Model組,有完備的單元測試,可惜從來沒有利用過。難道在沒有單元測試這個概念之前,人們是不會去重構的嗎?還有QA是用來干什么的?QA也有完備的測試方案,在GUI部分應當是可以替代單元測試的。我很難想象現在還有很多公司居然只有可憐的幾個QA,根本無法維護一個產品的開發進度,隨之而來的后果就是每次進行客戶演示的時候,Bug層出不窮的展現出來(所謂的演示綜合癥)。

          也許WEB應用對重構并沒有什么太多的體驗機會。但是如果開發的是像Eclipse這樣完全靠擴展機制來吃飯的體系,那么要求一切都是可擴展的,重構的重要性才能最大化的體現出來。

          Refactor的另外一個因素應當和人有關吧,框架的重新設計、代碼的實現都是對開發人員的一種考驗。

          除了小步前進的敏捷開發模式,當然還有模塊完全替代的case。一切都由人來決定,不需要那么教條主義。關鍵是能否做出精確的判斷,這需要一個Leader的魄力了。  回復  更多評論
            

          # re: 你敢對自己的項目Refactor嗎? 2007-06-07 19:00 qililhjcn
          無語,目前貌似還沒有進到這一步  回復  更多評論
            

          # re: 你敢對自己的項目Refactor嗎? 2007-09-10 16:56 蘿卜頭
          個人觀點:小步的重構是基礎,如果把原來的代碼一下子全部推翻重來的話,那不如不叫重構,直接稱之為重寫得了。
          盡管沒有unit testing 也可以進行重構, 但是重構的過程會比較危險.
          領導人的魄力固然很重要,但更多的時候我們需要的是制度保證,而不是依靠人治.  回復  更多評論
            


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          GitHub |  開源中國社區 |  maven倉庫 |  文件格式轉換 
          主站蜘蛛池模板: 蒙山县| 开江县| 贡嘎县| 芒康县| 田阳县| 乐清市| 巴楚县| 都昌县| 镇平县| 台山市| 义乌市| 云安县| 开阳县| 富源县| 天水市| 定兴县| 调兵山市| 淮北市| 赞皇县| 伊宁市| 徐汇区| 邹城市| 巨野县| 武邑县| 曲阳县| 太康县| 交口县| 彩票| 阳西县| 汤阴县| 澄城县| 奈曼旗| 连州市| 临江市| 赤水市| 黄龙县| 海晏县| 晋中市| 新沂市| 太仓市| 天峻县|