java script development by agile and scrum 201310

36
JavaScript development by Agile and Scrum Nov/09/2013 Hisafumi Kikkawa(@shinjukujohnny) .

Upload: hisafumi-kikkawa

Post on 24-May-2015

208 views

Category:

Technology


4 download

DESCRIPTION

2013年10月にDevLove甲子園で発表した際に使用した資料になります。

TRANSCRIPT

Page 1: Java script development by agile and scrum 201310

JavaScript development by Agile and Scrum

Nov/09/2013Hisafumi Kikkawa(@shinjukujohnny)

.

Page 2: Java script development by agile and scrum 201310

2

Agenda

• About me• Introduction• Summary of our project• Our solutions• Summary

Page 3: Java script development by agile and scrum 201310

3

About me

吉川 久文( @shinjukujohnny ) :

Work:ソフトウェアエンジニア某社アフィリエイトシステムフロントエンド開発チーム 開発リーダー

Study:産業技術大学院大学情報アーキテクチャ専攻修士過程1年

Expertise :Java, PHP, JavaScript,ActionScript and so on…

Page 4: Java script development by agile and scrum 201310

4

Introduction

私達のチームは Agile & Scrum でのシステム開発を 2012 年頃から本格的に取り入れ、システム開発をしています。

その中でも今回は Agile & Scrum を JavaScript 開発に適用したプロジェクト事例をご紹介します。

Page 5: Java script development by agile and scrum 201310

5

Summary of our project

2013 年 4 月、弊社アフィリエイトサービスフロントエンド開発チームは新しい広告配信エンジンの開発を開始しました。

Requirements1. 充分なテストを行うこと2. 納期までにリリースすること(約 2 ヶ月)3. 開発メンバーは 3 人固定4. ビジネス側の人間が使える簡易プログラミング言

語( DSL )を開発すること5. 仕様はビジネス側と話しながら決めること6. 拡張可能な設計とすること

Page 6: Java script development by agile and scrum 201310

6

Summary of our project

2013 年 4 月、弊社アフィリエイトサービスフロントエンド開発チームは新しい広告配信エンジンの開発を開始しました。

Requirements1. 充分なテストを行うこと2. 納期までにリリースすること(約 2 ヶ月)3. 開発メンバーは 3 人固定4. ビジネス側の人間が使える簡易プログラミング言

語( DSL )を開発すること5. 仕様はビジネス側と話しながら決めること6. 拡張可能な設計とすること

仕様は常に変化し得る!時間、品質、お金のスコープは動かせない!

DSL 開発ってマジか!ノウハウねーよ!

Page 7: Java script development by agile and scrum 201310

7

Our solutions

1. Scrum の導入a. スプリント計画ミーティングb. デイリースクラムc. レトロスペクティブ( KPT )

2. 自動化a. npm による開発環境作成自動化b. Mocha によるサーバサイド UnitTest 自動化c. grunt-contrib-watch によるソース監視&自動テストd. Mocha によるクライアントサイド UnitTest 自動化e. CI ( Jenkins ) + git による自動テスト

3. 複雑化を回避a. 開発言語を CoffeeScript にb. JQuery.Defferd で非同期処理実装

Page 8: Java script development by agile and scrum 201310

8

Scrum の導入

Page 9: Java script development by agile and scrum 201310

9

Why Scrum?

複雑で変化の激しい問題に対応するためのフレームワークであり、可能な限り価値の高いプロダクトを生産的かつ創造的に届けるためのものである。 (from The Scrum Guide)In case of our team• 我々のプロジェクトは、ビジネス要望によって常に変

化し得るものである。• 技術検証できていないプロダクトも多数導入を検討。• メンバーのスキル・ナレッジも充分でなかった。

Page 10: Java script development by agile and scrum 201310

10

Why Scrum?

複雑で変化の激しい問題に対応するためのフレームワークであり、可能な限り価値の高いプロダクトを生産的かつ創造的に届けるためのものである。 (from The Scrum Guide)In case of our team• 我々のプロジェクトは、ビジネス要望によって常に変

化し得るものである。• 技術検証できていないプロダクトも多数導入を検討。• メンバーのスキル・ナレッジも充分でなかった。

プロジェクトは複雑で、その状態は日々変化する!だからこそ Scrum !

Page 11: Java script development by agile and scrum 201310

11

Sprint 計画 MTG

スプリントの作業は、スプリント計画ミーティングで計画する。計画はスクラムチームの共同作業である。• スプリントの成果であるインクリメントに何を入

れるか?• インクリメントを届けるためにどのように作業を

するか?(from The Scrum Guide)

In case of our team• Planning porker による、チームでの見積もり• プロダクトバックログからチームのヴェロシティ

分のタスクを取り出し、次のスプリントで消化するタスクとする

• マイルストーンに達するには何を守り、何を諦めるかを議論する

Page 12: Java script development by agile and scrum 201310

12

Sprint 計画 MTG

スプリントの作業は、スプリント計画ミーティングで計画する。計画はスクラムチームの共同作業である。• スプリントの成果であるインクリメントに何を入

れるか?• インクリメントを届けるためにどのように作業を

するか?(from The Scrum Guide)

In case of our team• Planning porker による、チームでの見積もり• プロダクトバックログからチームのヴェロシティ

分のタスクを取り出し、次のスプリントで消化するタスクとする

• マイルストーンに達するには何を守り、何を諦めるかを議論する

現実的で、チームの実態を反映したスケジューリング

Page 13: Java script development by agile and scrum 201310

13

Daily Scrum

デイリースクラムは、開発チームが活動の状況を確認し、次の 24 時間の計画を作る 15 分のタイムボックスである。デイリースクラムでは、開発チームメンバが次のことを説明する。• 前回のデイリースクラムから行ったこと• 次回のデイリースクラムまでに行うこと• 問題点

( from The Scrum Guide )In case of our team• 前回のデイリースクラムから行ったこと• 次回のデイリースクラムまでに行うこと• 問題点• レトロスペクティブで上がった改善点の確認

Page 14: Java script development by agile and scrum 201310

14

Daily Scrum

デイリースクラムは、開発チームが活動の状況を確認し、次の 24 時間の計画を作る 15 分のタイムボックスである。デイリースクラムでは、開発チームメンバが次のことを説明する。• 前回のデイリースクラムから行ったこと• 次回のデイリースクラムまでに行うこと• 問題点

( from The Scrum Guide )In case of our team• 前回のデイリースクラムから行ったこと• 次回のデイリースクラムまでに行うこと• 問題点• レトロスペクティブで上がった改善点の確認

毎朝の MTG は短く前スプリントの改善点も毎朝確認

Page 15: Java script development by agile and scrum 201310

15

スプリント レトロスペクティブ

スプリントレトロスペクティブは、スクラムチームの検査とスプリントの改善計画を作成する機会である。• 人・関係・プロセス・ツールの観点から今回のスプリン

トを検査する。• うまくいった項目や今後の改善点を特定・整理する。• スクラムチームの改善実施計画を作成する。

( from The Scrum Guide )

In case of our team• KPT を使って問題点・改善点を洗い出し、次のスプ

リントから改善を実践• 一番変えたのはプロジェクトの進め方

Page 16: Java script development by agile and scrum 201310

16

スプリント レトロスペクティブ

スプリントレトロスペクティブは、スクラムチームの検査とスプリントの改善計画を作成する機会である。• 人・関係・プロセス・ツールの観点から今回のスプリン

トを検査する。• うまくいった項目や今後の改善点を特定・整理する。• スクラムチームの改善実施計画を作成する。

( from The Scrum Guide )

In case of our team• KPT を使って問題点・改善点を洗い出し、次のスプ

リントから改善を実践• 一番変えたのはプロジェクトの進め方

振り返りは超重要!チームの改善エンジン

Page 17: Java script development by agile and scrum 201310

17

What’s changed by Retrospective?

まずは全員で設計だ!ホワイトボード前集合!

あれ?何か設計おかしくね?も一回ホワイトボード前集合!

最小モジュールからTDD で開発回してこーぜ!

今度こそいけるだろ!あれ?やっぱまだおかしいかも・・・。

Page 18: Java script development by agile and scrum 201310

18

What’s changed by Retrospective?

まずは全員で設計だ!ホワイトボード前集合!

あれ?何か設計おかしくね?も一回ホワイトボード前集合!

最小モジュールからTDD で開発回してこーぜ!

今度こそいけるだろ!あれ?やっぱまだおかしいかも・・・。

で、結局どんなものが

できあがるの!?( By ビジネスサイ

ド)

Page 19: Java script development by agile and scrum 201310

19

What’s changed by Retrospective?

• 当初はモジュール単位で設計し、モジュール単位で完璧に作りこんでいくスタイルだった。

• モジュール単位で完璧に作りこんでいくスタイルだと、完成品をイメージしにくい上に、結合してみて初めてわかる問題もあることがわかった。

• ソフトウェア工学から、反復的プロセスモデル(プロトタイプを作ってブラッシュアップするのを繰り返す)の開発手法を参考に、動くソフトウェアをスプリント毎にブラッシュアップしていくやり方へ変更。

Page 20: Java script development by agile and scrum 201310

20

What’s changed by Retrospective?

まずは全員で設計だ!ホワイトボード前集合!

とりあえず最低限の機能だけで動くシステムを作り切る!

もう見れるの?どれどれ、なるほど。

ここをこう変えられる?

Page 21: Java script development by agile and scrum 201310

21

What’s changed by Retrospective?

まずは全員で設計だ!ホワイトボード前集合!

とりあえず最低限の機能だけで動くシステムを作り切る!

もう見れるの?どれどれ、なるほど。

ここをこう変えられる?

動くものを見せることができれば、ユーザーからのフィードバックを受けることができ、

早急に認識のズレを埋めることができる。

Page 22: Java script development by agile and scrum 201310

22

自動化

Page 23: Java script development by agile and scrum 201310

23

npm の導入

• npm で開発環境構築自動化• git clone → npm install で開発環境が揃う!• package.json に記載されているモジュールが自

動 installされる。

どこでも同じ開発環境を簡単に用意可能!

Page 24: Java script development by agile and scrum 201310

24

Page 25: Java script development by agile and scrum 201310

25

UnitTest 自動化

• ローカル環境自動 UnitTest 実行による効率化a. Mocha/Chai によるローカル環境 UnitTest 実行b. grunt-contrib-watch による自動 UnitTest

ブラウザを介さないので効率的に開発・テストができる!

Page 26: Java script development by agile and scrum 201310

26

Page 27: Java script development by agile and scrum 201310

27

ブラウザテスト自動化

• Browser testa. ローカルテスト用に作った Mocha/Chai の

UnitTest をブラウザ用に変換して、クライアントサイドで実行。

b. 成果物の JavaScript コードがブラウザでも正常動作することを、 UnitTest を流すことで確認。

UnitTest をブラウザで流すだけで動作することを証明できるので、テストが簡単!

Page 28: Java script development by agile and scrum 201310

28

Page 29: Java script development by agile and scrum 201310

29

Jenkins による自動化

• Jenkinsa. Git push をトリガーとして以下の処理を行う。b. git clone -> nvm で node のバージョン指定

-> npm install -> grunt で build 実行 & テスト -> coverage測定

Page 30: Java script development by agile and scrum 201310

30

Page 31: Java script development by agile and scrum 201310

31

複雑化を回避

Page 32: Java script development by agile and scrum 201310

32

CoffeeScript でコードをシンプルに

• CoffeeScripta. JavaScript にコンパイルされる Object志向言

語。 Rubyや Python のような感覚でJavaScript を実装できる。

Page 33: Java script development by agile and scrum 201310

33

JQuery.Defferd で非同期処理をシンプルに

• JQuery.Defferd で非同期処理実装a. コールバックにより、ネストが多くなりがちな JavaScript の非同期処理をシンプルに書ける。

説明が難しいので省略 orz

Page 34: Java script development by agile and scrum 201310

34

やってみてわかったこと

• ハマった点・学んだこと• Scrum master は結構気を使う。人間関係、

プロジェクトの進捗など。• JavaScript コードを1枚に結合して難読化す

ると UnitTest が通らなくなった。原因不明 -> 難読化は諦めた。

• IE に対応していないモジュールがあって、パッチをあてて対応。

• ローカル実装で UT/ 実装だけに集中していると、結合段階で、ブラウザの仕様で不可解な動きをするケースがある。

Page 35: Java script development by agile and scrum 201310

35

Summary

• Agile 開発では振り返りでガッツリ改善するのが大事。毎回何か改善を TRY すべし。

• JavaScript で Agile 開発する場合も、 UnitTest がかなり重要。 TDD で実装するのが良い。設計、仕様の変更に対応しやすくなる。

• ローカルで UnitTest 回せると格段に効率が上がる。

• 最終的には各種ブラウザでの結合テストが必要

• スプリントの終わりには常に動くソフトウェアを届けるべし。

• 時間が許すなら、コードの品質を上げられるライブラリは積極導入すべき

Page 36: Java script development by agile and scrum 201310

36

ご清聴ありがとうございました。