TDDBC in Tokyo2011 和田さんのスライド超訳 あと、最後のQAまとめ

現代ソフトウェアの技術要素

  • バージョン管理
  • テスティング
  • 自動化

この3つを開発者は身につけるべきで、必須のスキルである。
バージョン管理がまずは大事。これがないとお話にならない。
できるだけ分散バージョン管理の方がいい
SCMBCがあるので参加してみるとかも良い
次にテスティングこれは今回の話のスコープなんで、ここではあまり語らない
最後に自動化
ジェンキンスでもいいし、cronで回ってるシェルでもいい。
# Stagehand_TestRunnerとかいいかなと思う。
https://wiki.jenkins-ci.org/display/JA/Meet+Jenkins
http://iteman.jp/blog/2009/10/php---stagehand-testrunner.html
とにかく、なんでもいい。
人間は人間にしか出来ない事をするように。単純作業は機械にやらせましょう。

この3つの技術要素は3種の神器ではない
3種の仁義は例えば



みたいな感じで、割と剣だけでなんとかなるなんてこともある。

この3つの技術要素は3脚椅子であり、一個でもないと転倒してしまうと心得よう

TDDを語る前に
テストって言葉には混乱がある。
テストという言葉がさすものがバラバラ単体テストユニットいろいろあるよね?
組織や文化によってそのマッピングが異なってくる。
テストの範囲によって、分量、粒度は曖昧さ、が生じてしまう。
限界がある。

「誰が何のためにテストを行うのか」という観点で考えると以下のようにまとめることができる。

Debelopper Testing 開発者の開発促進のためのテスト
CustomerTesting 顧客の進捗管理のためのテスト
QATesting 品質保証の担当者の品質保証のためのテスト


プログラマ
プログラマによる
プログラマのためのテスト。
それがDebelopperTest。

TDDとはなにか
動作するきれいなコードへの道は
「きれいな設計によってしか、動作するきれいなシステムはできない!」
と教育では教えているかもしれないが実際はそんな事ない。
まず動作させてから、美しくして行くシステムもある。
オブジェクト指向の完璧さの呪いにハマってはならない

動作するソースをきれいにしてゆくと良い事は
動かしてみて初めて分かる事が多いから。

いくら要件時に完璧な設計だと思っても、作ってゆくうちに、それが最善ではない事が判明する事が多い。

TDDのサイクルとは

  1. テストを書き
  2. そのテストを実行して失敗させ
  3. 目的のコードを書き
  4. 1で書いたテストを成功させ
  5. テストがとおるまでリファクタリングを行う
  6. 1−5を繰り返すサイクルの事をいう

尚、リファクタリングだけが、ソースをきれいに持って行けるのだから、手を抜いてはならない。

TDDのこころ
1つずつ、少しずつ行う。
日々相手にするのは大きな相手である。少しずつ倒そう。
1日かけて通らないようなテストをするのは大変だ。
大きな問題を小さな問題に分割するというプログラミングの基本中の基本がテストでもやはり重要

ひとりずつ仕留める
宮本武蔵五輪書に書いていて、1対1であれば負けない方法を説いている
逆説的に言えば1対多では負ける!のである。

素早くまわす

回転のスピードのリズムについては早ければ早いだけ良い。
1時間、1時間、5時間ではTDDとは言えない。
5分で書いて4分で書いてというのがTDD

自分が最初のユーザーである

テストから先に書くということは、自分が一番始めのユーザーとなる。
自分が使いにくいな…と思うようなコードを人に見せてはいけない
自分が最初に使う事によって問題が明らかになる
中の人目線ではなく、お客さん目線を得る事が出来る
Google的には「ドッグフードを食べる」と言う

道具にこだわる
速度をあげて行くために必要
エディタにこだわる。

不安をテストにする
自分が不安に思っている事をテストにする。
GetterやSetterに対してテストを書くのはおかしいっちゃおかしい。
そんな所に不安をもつことは無いから。
だからムラを推奨する。
自分の不安の量と人の不安の量は違う。
祈るのでは駄目
テストが1行も書かれていないというのは不安
リリースを早く回すとしても、システムすべてを把握するのは難しいから

テストは命綱
緊急リリースなので…となった時、テストが出来ていないと不安で仕方がない。
テストは確信を育てるための物である
さぁ飛び込め!といわれてからテストを書くのでは遅すぎる

なぜTDDやっているのか?
私たちは完璧なプログラマではない
最初から思い通りのコードがかけるほど私たちは賢くない
最初から思い通りに動作するほど対象は単純ではない

素早く対象に近づきき、フィードバックを得手から方向修正をおこないながら進んでゆける。
TDDは目的ではなく手段
即座にフィードバックを得るため
書いたコードに自信を持つため
これから各コードに自信を持つため
即座に知る事が出来る事は大切である。

真の目的は健康(怪しいけどきにしない)
コードの健康
自分の書くコードに対応できるかどうか
無駄の無い体になっているかどうか
リファクタリングが必要
リファクタリングをするためにはテストが必要
チームの健康
健康な人間は、様々な所を把握できる人
不安の克服
勝ち続ける事で成功体験を積む
これがTDDの目的



事例から分かること
http://blogs.itmedia.co.jp/morisaki/2010/02/tdd-ebd9.html
実装時間は2割増える。バグは半分以下になる。

半分の技術者は開発工数を減らすと感じるらしい。
2割実装が増えてるのになぜか?
デバッグ工数が激減するので、結果的に工数としては短くなったように感じる。
デバグは推論の時間。だから時間が読めない。
TDDで実施すると予想外の挙動が出たときにバグへの突き止めが楽になる。

デバッガはデバグをするための道具ではなく、リーディングの道具に使おう!


応用
テストの無いコードが既にたくさんある
レガシーコード改善ガイドを読む

レガシーコード改善ガイド (Object Oriented SELECTION)

レガシーコード改善ガイド (Object Oriented SELECTION)

既にデータの入ったデーターベースがある
データーベースリファクタリングを読む

データベース・リファクタリング

データベース・リファクタリング

  • 作者: スコット W アンブラー,ピラモド・サダラージ,梅澤真史,越智典子,小黒直樹
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2008/03/26
  • メディア: 単行本
  • 購入: 10人 クリック: 211回
  • この商品を含むブログ (53件) を見る

テストが脆い
ちょっと変更するとテストがぼこぼこ落ちる
テストが遅い
DB接続とかやっちゃう
XUNIT TEST PATTERNS

xUnit Test Patterns: Refactoring Test Code (Addison-Wesley Signature Series (Fowler))

xUnit Test Patterns: Refactoring Test Code (Addison-Wesley Signature Series (Fowler))

WEB+DB PRESS Vol.63号
WEB+DB PRESS Vol.63

WEB+DB PRESS Vol.63

  • 作者: 竹迫良範,和田卓人,おにたま,中島聡,角田直行,はまちや2,上谷隆宏,青木俊介,大塚知洋,生尾剛士,大和田純,永安悟史,馬場俊彰,久保達彦,白土慧,じゅんいち☆かとう,太田昌吾,小野修司,ミック,嶋田裕二,個々一番,みやけん,清水亮,WEB+DB PRESS編集部
  • 出版社/メーカー: 技術評論社
  • 発売日: 2011/06/24
  • メディア: 大型本
  • 購入: 20人 クリック: 434回
  • この商品を含むブログ (22件) を見る

モダンTDD
Growing Object-Oriented Software, Guided by Tests を読むのも良い
http://www.amazon.co.jp/dp/0321503627/

Growing Object-Oriented Software, Guided by Tests (Addison-Wesley Signature Series (Beck))

Growing Object-Oriented Software, Guided by Tests (Addison-Wesley Signature Series (Beck))

acts_as_professional!

グリーンバンドをつける。それをみて、テストを書かねばならない事を思い出す。

                    • -

ということでグリーンバンドを私も6つ注文してみました。(社内に布教して、写経した人にあげる予定!
写経スルホンはコレ。
http://www.amazon.co.jp/dp/4894717115

テスト駆動開発入門

テスト駆動開発入門

TDDの写経が終わり次第、付ける予定です。
グリーンバンドの注文はhttps://spreadsheets1.google.com/spreadsheet/viewform?formkey=dFlZU0xBMG5GR0g0cjhnM0ZzRmJGRkE6MQから!

                    • -

最後のQA

※TDDを組織やチームに導入して、失敗した経験を教えてくださいハードランディングは危険だしトップダウンで実施するのはブレイクスルーのばらつきを生む

※時間的な制約及びコスト面での制約がない場合で、絶対にTDD­しなくて良い場面はありますか?
プロトタイピングの最中は基本テストがいらない。
これで行ける!って思ったときにテストを実装してゆく。

速度は落ちるので、寿命がそもそも存在しないようなプログラミングであれば必要なし。1ヶ月の短期的なコンテンツとかも。

※TDDを実践していくにあたり、理解しておいた方が好ましい知­識・技術はどのような物があげられますか?
自動化についての考察が必要
オブジェクト指向プログラミングの知識や技術はあるにこした事が無い。
デザインパターンリファクタリングについての設計技法は知っておくと良い
テスト技法
テストの設計技法
TDDならではの名称
例えば:パラメータライズ とかいう言葉は特徴的。知っていればググりやすくなるからいいよね

※非web系のUIのテスト(マウスクリックやキー入力)にいつも困る。どう解決するのがスマートなのか?
人間でしかテストできないものは、人間が行えるようにする。要するにロジック部分を徹底的に自動化する

※TDDを社内で布教するに辺り自分1人しかTDDできる人がいない場合どうやって布教すればいいでしょうか?講演だと実際に身につかないし、ペアプロだと一度に多くは見られないので1人だけだと厳しいです
@HIROCASTさんがやっていることは
やり始めればやれる人を探して、やってもらう。
ここのテストだけ書きましょう!みたいな形。例えば課金ベースの所とか。
テストをしないと不安だと思わせる

※TDDを社内で布教するに辺り自分1人しかTDDできる人がいない場合どうやって布教すればいいでしょうか?講演だと実際に身につかないし、ペアプロだと一度に多くは見られないので1人だけだと厳しいです
テスト手法の底上げを行ってからTDDってのが良い。
例えばxUnitにいきなり行かずにSeleniumをやってもらう。わりと受けが良い。

テスト駆動開発をどこまでストイックに実践しているか教えてください。(逆に、どんなときにテスト駆動開発のルールを破りますか?)
先行者メリットがあるとき(スタートアップをやらなくちゃいけない時)は、チームで一気にやる。
得体のしれない技術が必要な案件、学習時はテスト開発ではなかったりもする。
でも、やらない場合の博打要素のが多い。基本やった方がいい。

※テストコードのリファクタリング必要?

必要。積極的にすべき。そして、いつもやっておくべき。これが一番低コスト。
テストコードのカバレッジ率を調べてみるとか。

Galaxy S2にEasyTetherを入れてみた


Galaxy S2にEasyTetherを入れてみた。
手順は以下の通り。

  • Galaxy S2の 設定-アプリケーション-設定-USBデバッグ をONにする

  • MacとGalaxyをUSBケーブルで繋ぐ
  • Macここをダウンロードしてインストール
  • アンドロイドマーケットの検索からEasyTetherを探してインストールする
  • EasyTetherを起動する
  • Macで、ネットワーク設定が起動してくるのでDHCP取得として起動

とりあえずUSBで接続して、テザリングOK。いやー簡単でヨロシイ!

次のN鯖の話をすこし。

次のN鯖を企画中。

■まずN鯖のユーザー層を振り返ってみる。
Nのユーザーの求める物は間違いなくPvP
だけど、日本人の採集癖というか、コレクター魂というか、そういった類の物はぬぐいきれないみたいで、やりこみの要素も欲しい。
そう言いながらも、古参有利になって欲しくない。実に矛盾してる。

■前回の鯖でやった事
アイテムを大きく2つに分けた事
・純粋なコレクションアイテム
PvPが有利に働くアイテム

PP、DD、PTP、PKPという独自のシステムによって、放置しておいても少人数でもPvPが発生しやすくした事

この2つのやった事はそれなりの成功を見た。とは言え、後半後者は飽きられてしまった感がある。
さらに、失敗したものとして、実験的に作成した「やりこみ要素がありつつ、PvPにも有利になるようなアイテム」を発生させる例のクエストがある。
あれはもうすべきではない。
また、インフレを人間の手によって起こして行き、飽きを防ごうとしたが、鯖官が多忙になっちゃって中途半端になってしまった。
これも大問題だった。

■じゃ、次はどうしよう
アイテムは同じく2つに分ける
PPシステムも生かして置く
廃OEシステムを廃する
かってに防具武器がインフレしてゆくEMシステム



==まぁ変わるかもしれないけどメモメモって事で。

Mac

買ったMACは以下の通り。

http://store.apple.com/jp/product/G0LX0J/A?mco=MjI5MDg4OTM

製品番号: G0LX0J/A
製品名: MacBook Pro 13インチ 2.7GHzデュアルコアIntel i7 / 128GB Solid State Drive [整備済製品]
¥123,619

今日はMacVimを調整中
基本はここ。
http://nanasi.jp/

インナー買わなくちゃ!

今日は面接と、体験入社ダッタ。

今日は面接と、体験入社ダッタ。大手に入れるチャンスがあるなら入っとけという同僚、嫁。
でも、あんまり変えられる感じがしなかったので困っています。
レガシーなコードとどう付き合うか・・・命題かな・