品味持續集成與《古典》交響曲的新古典二重奏----“Jolt大獎精選叢書”有獎徵文

     初次讀Paul M.Duvall的《持續集成軟件質量改進和風險降低之道》(以下簡稱《持續集成》)是在大約一年前,剛涉足敏捷開發的時候。那時候對敏捷、對持續集成還是一知半解的狀態--當然,現在也未必了了--通過對全文的閱讀,也只是對敏捷開發有了大致的印象和了解,或者說,覺得敏捷和持續集成在國內是更合適的項目開發模式。通過這一年多的實踐和逐步理解,再讀此書,對CI(持續集成)、對自動化有了更深入的認識。後文我用本書中每一章節的引言來展開這本書的導讀,大家僅做了解,如有興趣深入討論,可以聯繫我。

    
    首先,要掌握基本功。
                    ----Larry Bird
     
    Larry Bird是NBA赫赫有名的球星,這句話不僅對於持續集成,對所有知識的學習都適用;這便是掌握基本功。在這裏這個基本功就是了解CI,瞭解CI在項目過程中的作用。總結起來,在我的理解裏,CI是一種實踐,可以讓團隊在持續的基礎上收到反饋並進行改進,不必等到開發週期後期才尋找和修復缺陷。通俗一點兒說,就是指對於開發人員的每一次代碼提交,都自動地把Repository中所有代碼Check out到一個空目錄,並且自動運行所有Test Case。 
 
    假定是所有麻煩之母
                    ---Wethern's Law of Suspended Judgment
 
    假定是軟件開發中最重要的問題之一。項目中我們假定成立的所有條件最終都有可能引發項目中各種大問題。例如我們假定一個方法將得到正確的調用參數,那麼這個方法就有可能失敗。如果出現了一個問題,我們假定服務器沒問題、配置文件沒問題,那麼可能就會花費大量時間來排查代碼中本不存在的問題。所以想當然的假定,絕對是開發中的大忌。
    而CI在每次版本控制系統發生變更時就執行構建,這樣有助於減少項目中的假定。這是基礎,而我們需要想的將更多。
 
    品質意味着在沒人看的時候也把事情做對。
                     ---Henry Ford
 
    沒有不出現問題的項目,當發現問題時排查問題、定位問題的效率地下往往掣肘着項目的健康發展。CI提供的最大優勢就在這裏。我們可以通過最後一次構建清晰的發現很多關鍵問題,例如軟件完成度,單元測試覆蓋率等等,同樣也可以緩解一些軟件開發中經常遇到的風險:如缺乏項目可見性,軟件品質低下或者很晚才能發現缺陷等等。
 
    整個該死的宇宙必須分解成一小塊一小塊的,然後重新構造。
                     ---Henry Miller
 
    不破不立。CI本身就是強力的衝擊着傳統的開發流程。當我們真正做到自動化構建的那一刻,我們纔會發現,一切都變得似乎更簡單,更有效。每個team都在CI中追尋着最適合自己的一套構建方案,無論是手工、服務器還是快速構建,當找到了正確的路子,也許我們會感慨,其實沒那麼難。
    
    如果說上述內容是持續集成的基礎的話,後面就是持續集成的昇華和思想。我換個方式總結,把所有的思想以“我認爲”的方式總結給大家:

    a. 縱覽全局(打破職責界限)
    dev,tester,pm,po,如果大家把角色標籤限定的非常死,那麼就像聖經裏的巴別塔一樣,不同的語言不同的方式,永遠沒辦法團結起來。那麼我們不妨看的遠一些,不再爲趕代碼而把質量保障完全交給tester,不再爲測出bug而與dev持續正路,不再爲了圖省事而拒絕項目裏的變化。我們要積極的適應變更,積極的響應質量保障,每個人都是質量保障的一份子。

    b. 渾然一體
    研發(開發,測試,發佈,部署)全過程被管理起來。所有角色在一個界面下工作,使用共同的平臺,統一的源碼管理,共享。大家都在一個平臺上工作,所有的任務都在這個平臺下,各角色間對互相的工作有更深入的瞭解,並且,工作狀態也可以共享。
   
    c. 用簡單的方法解決問題
    持續集成的解決方案是簡潔的。產品由SVN去管理,構建過程由CI server負責,而構建過程包含了編譯,測試,發佈,部署過程。沒有封閉的系統,沒有蹩腳的流程,配合開放的系統(Code Review/wiki)所有的信息被自然的整合在一起。而一切都是以提高變更速度,提高產品質量爲目標。
  當解決方案讓你覺得不自然(或有很多內容無法囊括,或需要人爲干預)的時候,那這個方案就不是一個完美的方案,必定在某一些方面受到了限制,這些限制有可能是歷史造成的。要勇於質疑,擴展角度,提升高度。去掉角色的限制,站在產品的角度去思考,對於整體的優化的解決方案就產生了。
 
    似乎寫着寫着,不完全像一個導讀,更像一個讀書筆記了。這次徵文的主題是“聆聽音樂,品讀經典”,那麼我就結合着古典音樂來評點一下持續集成吧。
 
    說起來CI或者敏捷,都談不上古典,反而是對“古典的”開發模型的衝擊,但是又不脫離其根本目的,或許可以稱之爲“新古典”注意。在西方古典樂派中,恰好也存在着新古典主義,而我唯一聽過並且印象深刻的便是普羅科菲耶夫的《古典交響曲》。和持續集成相似的是,《古典》也是一部將“過去”的風格同時代新穎的表現手法完美結合的產物,這種巧妙的結合即讓人看到普氏創作紮實的傳統功底,同時又反應出他才華橫溢,力求創新的非凡之處。《古典》交響曲最突出特徵就在於承悉傳統與追求個性兩個方面。我們來仔細瞭解一下:
 
     對《古典》交響曲這部作品篇幅簡短到嚴格的曲式;從清新典雅的風格到抒情優美的歌唱性,都基本上體現了維也納古典樂派的手法。同時又有着新個性的歡快自由,從其四大樂章中凸顯無疑:
    第一樂章:快板。開始便突顯出氣勢恢宏的第一主題,並伴由長笛的演奏推進動機的發展。這一樂章很類似海頓、莫扎特典型的第一樂章曲式的壓縮,但是 普羅科菲耶夫轉而用戲謔的態度進行模仿,彷彿一幅帶有嘲諷意味的漫畫。
    第二樂章:小行板,三部曲式。在其它絃樂器伴奏下,小提琴奏出一條優美而莊重的旋律線,而後長笛加入。整個樂章的結構近乎是完全古典的。
    第三樂章:加沃特舞曲,中速。主題由絃樂和木管樂器奏出,音響純淨而簡潔,有進行曲的意味。這裏作者用古典組曲裏的“加沃特舞曲”代替了古典時代交響曲中的“小步舞曲”。
     第四樂章:生動的,奏鳴曲式。整個樂章極爲詼諧幽默,充滿了急促而連續的跳動,是充分體現作者風格的樂章。
 
    縱觀全曲,其承前啓後、調性轉換也異常明顯。第一樂章主部主題陳述時的調性安排就恨有代表性:第一樂句在主調D大調上陳述,第二樂句突然轉到C大調,而後又自然返回D大調。這種突然轉調的手法,給人以調性色彩無比清新的感覺。同時,第四樂章極爲豐富的調性變幻也同樣以極大的藝術魅力給人留下深刻的印象。
    事實上,各種富有個性的新穎手法在這部作品中遍佈全曲,隨處可見,而這正是構成這部作品通體給人以新穎別緻印象的原因。
   
    提到《古典》交響曲,就不得不說其對後世的影響。普羅科菲耶夫畢生追求音樂風格的創新,他曾經說到:“在我生活中,主要的優點是一直追求創新。我討厭模仿,我討厭平庸的理論,我不希望去戴任何人的面具,我希望永遠是我自己”。
    如果我們說普羅科菲耶夫早期的創作是與斯特拉文斯基一起反映古典主義的,那麼從《古典》開始,他們已經走向了不同的道路:普羅科菲耶夫離開了古典主義,成了雖愛好古典形式但具有浪漫主義傾向的作曲家。其音樂通俗易懂,同時又具有古典風格般精湛的作曲技巧,既能受到愛好音樂的現代聽衆歡迎,又受到專業行家們的讚譽。經常帶有大跳進行的寬廣的旋律,結合像運動員進行曲似的節奏是他的風格特徵之一。以簡潔、明朗的古典風格表明了其反應浪漫主義的堅定立場,這一立場讓他與新古典主義不知不覺地站在了一起,預示了新古典主義這股風潮的來臨。
 
    同樣的,持續集成在未來,甚至是現在已經越來越多的應用在項目建設中,成爲一股不可抵禦的風潮。我相信未來,持續集成會像普羅科菲耶夫這部《古典》交響曲一樣,如同湖水在晚霞的照耀下閃爍五彩的光輝,透出了閃亮的光彩。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章