摘要:日本雅虎敏捷教练伊藤宏幸认为,DevOps要成功, 必须改变企业文化,而要实现这个目标的关键,得依靠IT自动化以及持续整合

雅虎日本御用敏捷教练的 DevOps 练成术-品味雅虎

日本雅虎敏捷教练伊藤宏幸表示,DevOps必须以IT自动化以及持续整合(CI)、持续部署(CD)为基础,来优化程式开发、测试、系统维运等所有程序。 (图片来源/iThome)

不同于美国雅虎在网路市场的撤退,以日系股东为首的日本雅虎向来是日本入口网站龙头,单月浏览人次超过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)。最后一步则是进行软体程式码和架构的重构。

雅虎日本御用敏捷教练的 DevOps 练成术-品味雅虎

伊藤宏幸将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真的改变了这四个雅虎团队的开发文化。」他说。

文/王立恒

Via iThome

历史上的今天:

  1. 2015:  雅虎邮箱推出包裹抵达及待办事项通知服务(0)
  2. 2015:  雅虎日本与新闻聚合网站 BuzzFeed 建立合资公司(0)
  3. 2014:  雅虎朱凌:移动平台是未来发展中心(0)
  4. 2014:  雅虎亚太区高级副总裁邹开莲完成 ALS 冰桶挑战(0)
  5. 2014:  雅虎 CEO 梅耶尔8月第二次小宗抛售:套现30万美元(0)