不同於美國雅虎在網路市場的撤退,以日系股東為首的日本雅虎向來是日本入口網站龍頭,單月瀏覽人次超過650億次,近幾年為了擴大行動布局,日本雅虎更是積極擁抱多項IT自動化新策略,來加速服務推出的腳步,也找來不少業界DevOps或敏捷專家加入。曾在日本樂天一手重建了大規模自動化CI團隊的關鍵人物伊藤宏幸,也在去年底加入了日本雅虎,擔任敏捷教練(Agile Coach)以及自動化教練(Automation Coach)的職務。
不同於一般導入DevOps常按CALMS五大策略(文化、自動化、精實、測量及分享)來進行的作法。
伊藤宏幸認為,DevOps要成功,必須改變企業文化,而要實現這個目標的關鍵,「得依靠IT自動化以及持續整合。」他進一步解釋,DevOps必須以IT自動化以及持續整合(CI)、持續部署(CD)為基礎,來優化程式開發、測試、系統維運等所有程序。
進入日本雅虎後,伊藤宏幸的任務是幫助產品團隊引進自動化、持續整合等作法,來培養雅虎團隊具備DevOps的體質。他負責先幫4個團隊導入DevOps。
不過,伊藤宏幸只有3個月的時間,他計畫以1個月為單位分階段來改革。
他表示,第1個月是準備階段,首先要了解這些雅虎團隊開發的產品,並且開始撰寫簡單的腳本程式。第2個月時,他則開始進行授課、開設工作坊讓團隊了解CI相關知識和觀念,並且以2名開發者為單位,兩人共用一部電腦共同開發(Pair Programming)。最後,則是開始嘗試移除系統架構設計瓶頸,從源頭來排除IT自動化的障礙。
他觀察到,這幾個團隊除了有不少開發經驗不夠老練的成員外,程式碼整合也發生過不少問題,另外他們也鮮少利用自動化測試。
伊藤宏幸解釋,經驗不足的工程師常常無法釐清工作的重點,例如,不了解工作自動化的重要性,或是不懂得如何撰寫測試腳本。
另外一個問題是,這些團隊中的前端工程師、API工程師,或是資料庫工程師,也都抱持被動態度,等待主管指示。
不僅如此,負責各系統元件的團隊各自為政,也引發了企業界中常見的穀倉效應(Silo Effect):團隊間缺乏溝通,導致多頭馬車的狀況,「這些都是文化上的問題。」他說。
除此之外,日本雅虎仍有許多缺乏測試腳本程式的老舊程式碼,伊藤宏幸比喻,這些老舊程式就像是那些被稱為棕地(Brownfield)的市郊老舊工業區一樣,必須更有效的利用。
雅虎開發團隊並沒有撰寫測試腳本的習慣,「是我們碰到最大的挑戰。」
因此,伊藤宏幸認為,導入自動化測試是首要之務。當開發團隊將自動化測試視為技術的基礎,才能逃離一再反覆修改程式碼的輪迴,也能改善設計流程和程式碼,甚至可以進行重構。
單元測試是自動化的關鍵
不過程式碼測試的作法很多,例如涵蓋了效能測試、接受度測試(Acceptance Testing)、安全性測試等,伊藤宏幸則是直接鎖定單元測試,作為幫助雅虎團隊導入自動化測試的關鍵。他解釋,單元測試除了執行簡單之外,也可以很有效率地改善軟體開發的品質。
為了讓團隊習慣自動化單元測試,伊藤宏幸提出了5個作法。第一,讓團隊成員從簡單的測試腳本開始著手,等待習慣自動化流程後,伊藤宏幸再正式導入測試驅動開發(Test Driven Development,TDD)。
不過,想要說服開發者習慣測試驅動開發不大容易,所以,伊藤宏幸反其道而行,他直接使用隨機破壞程式功能的猴子測試,來考驗團隊的開發成果,要求團隊快速找出問題點,藉此向團隊證明測試腳本的重要性。「若沒有事先撰寫測試腳本,就很難快速找出問題。」他認為,為了團隊習慣TDD理念,給予他們震撼教育也是個好方法。此外,伊藤宏幸也推薦了一個線上學習網站Cyber Dojo,幫助成員有效學習單元測試和TDD。
接著,使用測試替身(Test Double)來進行Mock單元測試,第四步是在必要時撰寫特徵測試(Characterization Test)。最後一步則是進行軟體程式碼和架構的重構。
伊藤宏幸將CI流程化簡,從過去複雜、不清楚的作業流程,利用版本控制系統作為開發流程的核心樞紐,讓組態設定檔透過版本控制系統,部署至網頁伺服器、資料庫伺服器或是應用程式伺服器。(圖片來源/伊藤宏幸)
三大步驟導入CI
在團隊養成在開發中進行測試的習慣後,接著伊藤宏幸要開始導入持續整合(CI)。導入CI的過程中,伊藤宏幸也碰上了不少問題,例如程式碼雖然可成功部署至Staging階段,但是正式環境階段中卻失敗。
而伊藤宏幸依序採取3個行動,讓團隊開始導入CI。第一,讓敏捷教練與開發者一同用樣本程式碼進行練習。
同時,他也借鏡共同開發(Pair Programming)的想法,兩人一起對CI伺服器進行組態設定。再者,伊藤宏幸也再三教育開發者,CI程序中加入自動化測試的重要性。
伊藤宏幸導入CI的最後一步是簡化部署流程。伊藤宏幸則是大刀闊斧地把原有複雜、部署動線多軌且不清楚的交付流程,改為以版本控制系統作為開發流程的核心,所有組態設定檔,只能透過版本控制系統來派送到網頁伺服器、資料庫伺服器或是應用程式伺服器,來簡化架構造成的發布瓶頸。
團隊開始發展自己習慣的CI、CD程序
伊藤宏幸表示,截至今年3月底,也就是導入CI後的2個月,這四個日本雅虎團隊,總共新增了27個單元測試項目,並因此在測試階段發現了10個軟體臭蟲和24個基礎架構的配置錯誤,甚至找出了3個未來可能發生的問題。
但伊藤宏幸表示,看似成效不是很好,但這些都是「扎扎實實的成果。」他認為,如果企業要改善開發流程,或是導入敏捷開發,必須循序漸進地進步。
幾個月過去,這幾個原先不諳CI、自動化測試的團隊,也開始出現轉變。
伊藤宏幸表示,團隊不只建立了自己習慣的一套測試規則,以及自己的CI和CD策略,甚至,團隊開始自動自發地撰寫單元測試。而產品負責人(Product Owner,PO)也了解測試的重要性,將完成單元測試視為產品完成度的重要指標,「自動化測試和CI真的改變了這四個雅虎團隊的開發文化。」他說。