Hatena::ブログ(Diary)

anfangsのログ

2011-07-21

社内向けにTDDの講習会を行いました 01:35

勤め先でTDDの講習会を行ったので、その内容について書きます。

この記事がTDD導入を検討している方の力になれば幸いです。

経緯

私はとあるSIerに務めており、部内ではテストの工数を削減することが課題となっています。

以前からTDDを同僚や先輩に宣伝していたこと、また、理解ある上司に恵まれたこともあって、

テストコードの書き方を講習する時間をもらえました。

そこで、TDDBCの要領で楽しみながらTDDを学んでもらうことにしました。

一人ではつらいので、TDDBCの参加経験がある先輩と二人で講習を行いました。

参加者について

講習の目的

二人で話しあい、講習の目的を以下のように決めました。

講習の内容

TDDBCをベースに、今回の参加者向けにアレンジしました。

午前に講義、午後に演習を行いました。

午前の講義は以下のような構成にしました。

午後の演習は以下の内容です。

本物のTDDBCに参加する方々は意欲溢れる技術好きですが、

私たちの講習の参加者はあくまでも仕事として参加するので、モチベーションが全然違います。

本物と全く同じやり方では失敗するだろうと判断し、一部アレンジしました。

工夫点をいくつか挙げます。

  • 自分たちの業務が具体的にどう良くなるかイメージしてもらえるよう、他社事例を紹介しました
  • ペアプロの効果を具体的な数値で示しました
  • 脱落者を出さないように、本物のTDDBCの内容に加え、参加者をフォローするためのスライドや資料を作成しました
  • 業務でよく使うC#で快適にTDDできるよう、開発環境を整えました

結果

「テスト自動化を業務に導入すべきか?」という質問には、5人全員の賛成を頂きました。

TDDを業務に導入できそうか?」という質問には、5人中3人ができそうだと答えてもらえました。

また、個別に以下のような意見を頂きました。短く翻訳して紹介します。

  • 業務では長いメソッドばかり書いていたが、それではテストコードが書けないと気づいた。
  • ペアプロたのしい!
  • 業務でTDDすれば、品質のいいコードが書けそう。
  • 再テストが楽!
  • テストコードが開発のセーフティネットになることを実感できた。
  • テスト対象のメソッドの独立性、テストケースの独立性が大事。
  • 業務にペアプロ導入するとスケジュール管理するの大変そう。
  • テストはアナログじゃないとダメだと思っていたが、案外自動テストも使えそうだと感じた。
  • ペアプロすごく疲れる。業務でやるのはしんどい。
  • 実業務で単体テストをどこに導入するべきか、わからない。

一緒に講師をしてくれた先輩にも意見を聞いてみました。

  • 講義はみんな真剣にきいてくれていたようだ。
  • みんながペアプロ楽しそうにやってた。俺もやりたかった!
  • TDD以外の技術の話はイメージがわきづらかったが、その後の事例紹介でうっすら理解してくれたようだった。
  • 筆者はしゃべりすぎ。
  • 今回の講習やってよかった。

筆者の感想

講習の目的を振り返ります。

  • NUnitを使ったテストコードの書き方は覚えてもらえました。
  • 技術習得のモチベーションについては、少なくとも今回の講習はモチベーションを上げて楽しく学んでもらえたようです。
    今後のフォローが大事になってくるだろうと思います。
  • ソフトウェア開発ツール3本柱の有用性については、あまり理解してもらえてなかったようです。
    講習の短かい時間の中に内容を盛り込み過ぎてしまいました。

以下、雑感です。

  • TDDBCに参加するのも楽しいけど、講習の準備をするのも、講師やるのもけっこう楽しいです。
  • TDDの効果を全員が体感できたようで、とても嬉しい。
  • TDDBCの構成はとても良くできているなと、感心しました。
  • 講義の主題は一つに絞るべき。全体としてまとまりがなくなって、主題がぼやけてしまう。
  • ペアプロのチームを決める際は、相性をよくよく考えましょう。
  • デモは短時間で華麗に見せられるよう、何度か練習しておいたほうがいい。

他にも細かい反省点はたくさんありますが、以上にします。

最後に

TDD伝道師の@t_wadaさんにはTDDBCを通してたくさんの技術・スキルを教わりました。技術者としての姿勢を尊敬しています。
講師役の先輩も@t_wadaさんファンになったようです。

TDDBC Sapporo主催の@shuji_w6eさんには、始めてTDDを教わっただけでなく、TDDBCやJava Conferenceに参加させてもらいました。
また、業務経験を踏まえて教えていただいた知識は、現在進行形でとても役立っています。

TDDBCのスタッフの方、参加者の皆さんのおかげで、楽しく、深くTDDを学ぶことができました。

また、講習会を許可してくださった私の上司や、参加してくださった方々、講師役の先輩にもお礼を申し上げます。

今回講習会を行えたのは皆さんのおかげです。ありがとうございました。

hokuhoku 2011/07/23 00:43 一緒に講義した先輩っぽい人です。
反省点はやはり色々つめこみすぎて、テスト駆動は演習でその効果を実践してもらえたが
それ以外の開発の三本柱なんかは詳細の説明を省きすぎたので理解が薄かった印象です。
プレゼンをするときはテーマを絞ったほうがいいなと感じました。
また、適度に突っ込みをいれてくれる人がいると、皆の理解が深まるので助かるなあと感じました。

演習はペアプロを通じて設計を楽しんでやってもらった印象でした。
ソロプロだと難しく感じてしまい、うまくいかなかったと思います。

実業務にTDDやテストコードを書くのは難しいと感じた人は、既存の概念のまま考えているような気がしました。
それを壊すようなことをしないとイメージがしずらく、使えない技術と判断してしまうのかな。。。
そこはOOPやTDDを身に付けてもらわないと、実感までは難しいのかも。

OOPも社内でまた勉強会を実施していかないかんかな。
自分も未熟なので、そこだけに構ってもいられないけど。。。

yujioramayujiorama 2011/08/26 15:44 今度社内でTDDBCの初歩的な段階(バージョン管理、テスト駆動開発)を体験するワークショップを開催しようと考えています。

業務における意味を考えるなど、この記事はとても参考になりました。

機会がありましたら、ぜひ一度対面お話を聞かせていただきたいです。

2011-01-12

MacBook Air 11インチ欲しい! 00:10

MacBook Air 11インチ欲しい!

今回はMacBookAir11インチ。のどから手がでるほど欲しい。

プログラム勉強会に行くのに現状の2kg超のノートは重すぎる。

メインマシンが5年前のノートだから、Eclipse動かすのでさえ精一杯。

CPUもメモリもHDDも限界まで引き上げたので、これ以上スペックあがらない。

そろそろ、このノートも現役引退させたい。

2010-05-23 [JavaScript] DateオブジェクトからMMとDDを取得する

function getTodayNowDD() {
	var date = new Date().getDate();
	var dateStr;
	if( date < 10 ) {
		dateStr = "0" + date.toString();
	} else {
		dateStr = date.toString();
	}
	return dateStr;
}

function getMonthNowMM() {
        // getMonth()は0から数える
	var month = new Date().getMonth() + 1; 
	var monthStr;
	if( month < 10 ) {
		monthStr = "0" + month.toString();
	} else {
		monthStr = month.toString();
	}
	return monthStr;
}

通りすがり通りすがり 2010/12/18 23:45 <pre>
var getTodayDD, getTodayMM;
(function() {
getTodayDD = function() {
return appendZero(new Date().getDate());
};

getTodayMM = function() {
// getMonth()は0から数える
return appendZero(new Date().getMonth() + 1);
};

var appendZero = function(n) {
return n < 10 ? "0" + n.toString()
: n.toString();
};
})();
</pre>
とか…すみません、汚くなってますね。
というかコメント欄では多分タグ使えませんよね、ごめんなさい。

anfangsanfangs 2010/12/19 19:15 こちらのほうがjavascriptっぽい書き方ですね。なるほど。

2009-07-24

[]Mercurial Eclipse plugin のインストール 03:48

現在、通常のプラグインインストール方法で失敗する。

回避策を見つけたのでメモ。

com.vectrace.MercurialEclipse_バージョン.jarダウンロード

http://bitbucket.org/mercurialeclipse/main/downloads/

これをpluginフォルダにドラッグアンドドロップ

使い方は下のリンク先を参照。

チラシの裏 21:55

同期の技術ブログをついさっき、リンクした。

トラックバック送っておこう。

2009-07-17

[]VirtualBox3.0.2 インストールメモ 01:52

そのうちまとめたい。

参考リンク

VirtualBox概観

http://www.katch.ne.jp/~kakonacl/douga/virtualmachine/mac_vbox.html

http://d.hatena.ne.jp/p4life/20090413/1239624784

http://d.hatena.ne.jp/wadap/20090322/1237702055

http://www2.nsknet.or.jp/~micco/vmware/vbox30.htm

VirtualBoxファイル共有

http://d.hatena.ne.jp/ishikawa89/20080605/1212669590

(追記)

2processer分使えるのか?

WindowsXP ○

Fedora11 ×

(追記2)

ゲストのFedora11にGuestAdditions をインストール

http://fedorasolved.org/Members/realz/VB_Guest_Addition

(追記3)

Software Designの9月号および10月号にVirtualBoxの特集があった。

それによると、まだ仮想マシンに複数のプロセッサを与えるSMPの技術はまだ不安定だそうだ。

ゲストに与えるSMPの数の目安は

(ホストのプロセッサ数)- ( 1 もしくは 2 )

だそうだ。

デュアルコアCPUだからといってゲストマシンに2CPU割り当てても処理能力が上がるわけではない、ということ。

コアを複数使うプロセスであれば複数のプロセッサを割り当てた方が有利なのだけれど、

シングルプロセスの処理の場合は複数のプロセッサを割り当てると逆に遅くなってしまうそうだ。

興味深い記事なのでSoftwareDesign10月号をごらんあれ。