20120512 アジャイルサムライ読書会第8回

29
アジャイルサムライ 第五部 アジャイルなプログラミング 2012.5.12 株式会社コネクトスター サービス開発者の読書会

Upload: connectstar-co-ltd

Post on 17-Jul-2015

378 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 20120512 アジャイルサムライ読書会第8回

アジャイルサムライ第五部 アジャイルなプログラミング

2012.5.12 株式会社コネクトスター

サービス開発者の読書会

Page 2: 20120512 アジャイルサムライ読書会第8回

これはなに

• アジャイルサムライ読書会

• 第5部を読んだ前提で議論する資料

Page 3: 20120512 アジャイルサムライ読書会第8回

第五部

• 12.ユニットテスト:動くことが分かる

• 13.リファクタリング:技術的負債の返済

• 14.テスト駆動開発

• 15.継続的インテグレーション:リリースに備える

今回は12と13をやります。

Page 4: 20120512 アジャイルサムライ読書会第8回

問答無用で実践すべきプラクティス

• ユニットテスト

• リファクタリング

• テスト駆動開発(TDD)

• 継続的インテグレーション

Page 5: 20120512 アジャイルサムライ読書会第8回

12.ユニットテスト:動くことが分かる

Page 6: 20120512 アジャイルサムライ読書会第8回

デグレードの例

デグレードとは、ソフトウェア開発において、プログラムを手直しした際に修正部分以外の個所で不整合・不具合が発生したり、バージョン管理の手抜かりなどによって以前の状態に戻ってしまい、修正済みだったバグが再発したりすること

Page 7: 20120512 アジャイルサムライ読書会第8回

デグレードの例• 「バグだ と勘違い」したのが問題

• なんでそう思ったんだろう?testがない!

• 修正されたバグが二度とコードに現れないようにするためには?testを書こう!

Page 8: 20120512 アジャイルサムライ読書会第8回

テストを書く

• テストとは何かブラウザで検証するアレexcelシートに◯、×

• どんなイメージがあるか辛い、面倒くさい、コツコツ

Page 9: 20120512 アジャイルサムライ読書会第8回

テストを書く

• 今までどうやってきた?みんなでがんばった!、アルバイト?

だめだね

Page 10: 20120512 アジャイルサムライ読書会第8回

本来のテスト

• バグを修正する前に、失敗するテストを書く

• 自動化して簡単に実行できる

• とはいえブラウザでのテストは必要だよね!

• 見た目はむしろ目で見たほうがイイ!

Page 11: 20120512 アジャイルサムライ読書会第8回

テストコードをたくさん書くと?

• 素早いフィードバックが得られる

• 極めて低コストにリグレッションテストを実行できる

• デバッグ時間を大幅に削減できる

• 自信を持ってデプロイできる(サーバへ上げる時に祈ってませんか?)

Page 12: 20120512 アジャイルサムライ読書会第8回

どこまで書けばいいの?

• ソフトウェアがちゃんと動いていると確信を持つに足るだけのテストを書き、労力に見合ったテストになっていることを判断する基準が「危なっかしい所をすべてテストする」だ

• カバレッジは100%を目指すべきか

Page 13: 20120512 アジャイルサムライ読書会第8回

カバレッジは100%を目指すべきか

• 程よいところまでやろう!

• リーンにやるには?

• MVPなところは必ず書く

• 改修の生産性が一番よいところまで!

• エンジニアの精神衛生を保つ

Page 14: 20120512 アジャイルサムライ読書会第8回

testで実感したこと

• 機能を足した時に、古い機能のtestが落ちた!

• めっちゃいいな、と思った。

• 新しいエンジニアが加わった時!

Page 15: 20120512 アジャイルサムライ読書会第8回

危なっかしい箇所とは?

• 決済周り

• 複雑な処理

みんなで考えよう

Page 16: 20120512 アジャイルサムライ読書会第8回

レガシーコード

• なにそれ

• レガシーコード改善ガイドを読もう

Page 17: 20120512 アジャイルサムライ読書会第8回

引用:レガシーコード改善ガイド

• レガシーコードとは、単にテストのないコードである

Page 18: 20120512 アジャイルサムライ読書会第8回

引用:レガシーコード改善ガイド

• テストのないコードは悪いコードである。 どれだけうまく書かれているかは関係ない。 どれだけ美しいか、 オブジェクト指向か、 きちんとカプセル化されているかは関係ない。 テストがあれば、 検証しながらコードの動きを素早く変更できる。 テストがなければ、 コードが良くなっているのか悪くなっているのかが本当には分からない。

Page 19: 20120512 アジャイルサムライ読書会第8回

13.リファクタリング:技術的負債の返済

Page 20: 20120512 アジャイルサムライ読書会第8回

技術的負債• コードのコピーアンドペースト

• 手抜き、ハック、重複により技術的負債はたまってく

• 組織で共有されない知識や、複雑すぎて変更が難しいコードも

Page 21: 20120512 アジャイルサムライ読書会第8回

リファクタリングで技術的負債を返済する

Page 22: 20120512 アジャイルサムライ読書会第8回

リファクタリング• 外部からみたソフトウェア全体の振る舞いを変えることなく、少しずつ継続的に設計を改善していく手順

• 振る舞いを変えることないことを担保する = テスト

• テストがない状態ではリファクタリングは不可能

Page 23: 20120512 アジャイルサムライ読書会第8回

技術的負債の影響• もし君が変更しづらく、仕事として楽しめないソフ トウェアを書いてしまったとしよう。もし、後になってその機能を更新したり、 新機能を追加したりといったせっかくの機会がめぐってきたとする。その時にどんな気分になるだろうか? ちっともわくわくしないんじゃないだろうか。そんな ことじゃだめなんだ

Page 24: 20120512 アジャイルサムライ読書会第8回

リファクタリングの仕方

• 一日を通じてたゆまず、継続的にリファクタリングする

• 技術的負債の返済は後になればなるほど難しくなる

Page 25: 20120512 アジャイルサムライ読書会第8回
Page 26: 20120512 アジャイルサムライ読書会第8回

リファクタリングのポイント

• 変数やメソッド に適切な名前がついているかを確かめる

• 似ている箇所をメソッドに抽出してみ

たらどうだろう?

Page 27: 20120512 アジャイルサムライ読書会第8回

大掛かりなリファクタリング

• 外部要因によって変更が発生して、自分たちでも対処が必要だと判断したなら、そのリファクタリングを他のユーザーストーリーと同様に扱おう

• プロジェクトの終了は近いか?

• 少しずつやれないか?

Page 28: 20120512 アジャイルサムライ読書会第8回

テスト駆動開発の実例

• C#の例、普段見慣れない

• rubyのコードで実感したい

• sinatraみんな書いたことあるよね

• というわけで以下の実例を見せますhttps://github.com/ppworks/rspec_sample