愛妮不變

          為了小妮的夢想而努力奮斗!

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            3 隨筆 :: 14 文章 :: 13 評論 :: 0 Trackbacks
          轉自javaeye

          我覺得推行一個新技術最大的阻力還是來自程序員自身
          管理層一般不會關心開發方法和技術細節的問題
          struts的流行恐怕主要也是技術人員發自內心的認可和推崇造成的吧
          畢竟這牽涉到他的切身利益(工作效率、成就感、樂趣。。。)
          同樣的道理,單元測試和其他敏捷方法也要首先打動技術人員的心,然后想不流行都難
          目前的情況與這兩種技術本身的特點也有關,單元測試是陽春白雪,struts是下里巴人

          初次接觸,本能的抗拒

          我自己的經歷就是這樣:03年中期時,我們技術總監讓我研究一下junit和eclipse
          那時候我用struts和jbuilder用的正爽,瞟了一眼覺得eclipse太簡陋了(其實是自己被jb這種傻瓜相機慣壞了)
          junit就更無法接受,那時覺得程序員寫業務代碼天經地義,寫測試就是自虐
          于是就丟在一邊不再看了(可是如今,這兩樣東西已經是我工作中最重要的工具了)

          大多數人都走過的彎路

          現在每次看到缺少測試的代碼以及還在不停制造這種代碼的程序員,我就會感嘆前幾年自己走的彎路:
          04年我經歷了一個項目,20人在客戶現場開發,到了后期的時候,整個項目就像一座沙子堆起的巨大城堡,稍有不慎就會跨塌
          于是,程序員們開始變得消極、焦慮、易怒、神經質。。。。(似乎還沒有人到更年期 )

          • 消極:不愿意修改bug,不愿意改代碼以滿足用戶新提出的需求
          • 焦慮:擔心剛剛修改的代碼會破壞已有功能,對下一個版本能否正常工作毫無信心,夢到測試人員報告其大量bug
          • 易怒:經常對測試mm發火,私下里詛咒客戶,抱怨別人弄壞了自己的程序
          • 神經質:系統偶爾出現奇怪行為就胡亂猜測,改了不該改的地方導致更多奇怪現象出現
          • 那段日子簡直不堪回首,是對程序員身心的雙重折磨!

          走上敏捷之路,相見恨晚 

          時間到了2005年的春天,單元測試(連帶著輕量級架構Spring和敏捷方法)真正走進了我的世界
          從那以后,我發現我變得快樂了并且再也離不開它了
          編程不再是一件痛苦的事,至少不那么痛苦了,反而增添了很多樂趣和滿足感,秘密就在于:

          • 勇氣:單元測試是自動化的回歸測試,她讓我對自己的代碼充滿自信,每一個測試就像攀巖者釘在峭壁上的一個楔子,沒有了程序衰退的擔心,于是我可以大膽的重構、積極的擁抱變化;
          • 快速反饋:每寫一段代碼,我都可以在幾秒鐘之內看到他的運行效果,免去了打包、部署、重起server以及在一堆日志里找結果的工作,開發的效率極大提高;
          • 測試驅動設計:通過編寫測試可以準確的理解需求、發現問題、發現接口,在不知不覺間做出最合理的設計;
          • 文檔:測試是最好的詳細設計文檔,不會過時、可運行。

          對于新事物的懷疑總是不可避免的,很多人最主要的是擔心寫測試會降低開發效率------寫測試代碼時間+寫功能代碼時間〉〉寫功能代碼時間
          對于這個問題,marting有過回答,大致的意思是:如果軟件開發的主要工作是敲鍵盤的話,那個命題是成立的。
          事實大家都知道,這個敲鍵盤的時間只占很小比例,但畢竟也是多用了,那么在哪兒又節省了呢,答案就是快速反饋
          快速反饋:每寫一段代碼,我都可以在幾秒鐘之內看到他的運行效果,免去了打包、重新部署以及在一堆日志里找結果的工作;
          寫測試3+寫代碼3+跑測試看結果1=7
          寫代碼3+打包2+重新部署10+用ie訪問程序2+在一堆日志里找結果并確認5=22
          我一點也沒夸張,那個was5重新部署一次真的很慢,有時還需要重起服務。

          不斷實踐,終獲回報 

          來到e-ma以后,我繼續在工作中實踐著敏捷方法

          包括在技術論證階段極力推薦Spring框架; 在編碼開始之前做了項目原型和開發模板;配置luntbuild持續集成服務器;提倡編寫單元測試。。。

          經過國檢項目的考驗,我更加堅信:敏捷方法是快速開發高質量軟件的一把鑰匙,因為它所承諾的那些好處全都得到了兌現:

          我所開發的支付、沖正、清單模塊全都按時完成,并且bug很少

          雖然需求、接口一改再改,但是有密集的單元測試作保證,我總能毫無顧忌的快速的去調整程序

          像國檢項目這樣的系統結構復雜、通信方式多種多樣、需求變化頻繁、質量要求高、工期緊張的分布式系統,對于任何開發方法都是個嚴峻的挑戰,

          但是我驚訝的發現,相比那種簡單的本地數據庫應用,敏捷方法在這樣的系統里能夠更充分的發揮出威力 ,看看它是如何應對這些挑戰的:

          •  系統結構復雜:TDD正好可以產生一個簡單、松耦合、可測試的設計,極大的降低系統復雜度,防止過度設計
          •  分布式系統、通信方式多種多樣:這對程序員是個巨大挑戰,但是mock單元測試讓事情變得簡單許多,mock可以輕松模擬任何外部資源和接口
          • 需求變化頻繁:敏捷的口號就是"擁抱變化",有單元測試作保障,讓變化來的更多些吧
          • 質量要求高:有單元測試作保障,每一段代碼都有一個測試用例守護,同一個bug不會出現兩次或以上
          • 工期緊張:還記得"快速反饋"吧

          敏捷方法很簡單

          它不是軟件天才專用的難以理解和掌握的神秘方法,它只是一些普遍原理和經驗的總結、一種理念和一組最佳實踐。

           "I'm not a great programmer; I'm just a good programmer with great habits"
                                                                                          ------Kent Beck
           

          結語

           經過了那么多沒日沒夜加班的日子,我們建立了深厚的戰斗友誼,也都被折磨得身心俱疲:)

          我始終堅信,軟件開發是一項偉大的、創造性的勞動,它應該是一件充滿樂趣的事,同時給我們帶來成就感和體面的收入;

          程序員應該是一群快樂的家伙,每天享受著自己喜歡的工作,有足夠的時間去打籃球、跟哥們兒喝啤酒、陪女朋友看電影;

          雖然現實還與此相去甚遠, 但這是我們要努力達到的境界,希望這篇文章介紹的方法能有所幫助。

          最后,祝你們身體健康、編程快樂!


          posted on 2007-06-28 16:22 李志洋 閱讀(275) 評論(6)  編輯  收藏

          評論

          # re: 對敏捷軟件開發方法的一些體會 2007-07-12 16:54
          每天享受著自己喜歡的工作,有足夠的時間去打籃球、跟哥們兒喝啤酒、陪女朋友看電影,你做到了嗎?  回復  更多評論
            

          # re: 對敏捷軟件開發方法的一些體會 2007-07-12 16:55
          我抗議!我抗議!我抗議!  回復  更多評論
            

          # re: 對敏捷軟件開發方法的一些體會 2007-07-12 16:57
          前幾項你可能每天都在做,但最后一項你壓根就沒做過,好好反省一下吧!  回復  更多評論
            

          # re: 對敏捷軟件開發方法的一些體會 2007-08-02 21:39 .
          這個姐姐好有意思哦~  回復  更多評論
            

          # re: 對敏捷軟件開發方法的一些體會 2007-08-09 15:27
          樓上的是誰啊?  回復  更多評論
            

          # re: 對敏捷軟件開發方法的一些體會 2007-08-16 22:35 .
          不認識滴~就看到你照片了 面善 回一句 hoho~  回復  更多評論
            


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


          網站導航:
           
          主站蜘蛛池模板: 崇明县| 武汉市| 正镶白旗| 郧西县| 荣昌县| 山西省| 监利县| 会宁县| 将乐县| 麻城市| 清丰县| 红河县| 武宣县| 麻江县| 蓬溪县| 宜阳县| 永新县| 桦南县| 清流县| 吐鲁番市| 环江| 峨眉山市| 西和县| 莱州市| 饶阳县| 贡觉县| 光山县| 宁夏| 始兴县| 大石桥市| 聂拉木县| 庆元县| 全州县| 霍城县| 永安市| 高安市| 广汉市| 报价| 迁安市| 郯城县| 榆林市|