Go for it!

モーターサイクルと自転車とキャンプの日々。

bpstudy #29 TDD

弊社主催の勉強会、BPStudy #29に行ってきました。本日のお題目は「テスト駆動開発」ということで、TDDの伝道師和田さんを講師にお招きしての開催です。

はじめに和田さんによる「TDDとはなんたるか」をジョジョ風にアレンジしたプレゼンを聞き、次にペアプロ、最後にコードレビューという、いつもの講義型勉強会とは一風変わった無いようで面白かったです。

evernoteでもりもり記録を取ったので公開。 →bpstudy#29のメモ

TDDペアプロのお題目は「LRU Cacheを実装する」という内容でした。

隣にいた神速さんと組んでpythonでやることにしたのだけど、神速さんも自分もpythonが不自由…(笑)。あーだこーだと言いながらdoctestを使って進めたけど、いまいち上手く行かなかったようなかんじ。

doctestってこういう感じで書く。

[code lang=“python”] def hoge(): ‘’‘ >>> hoge() 'hogehoge’ ‘’‘ return 'hogehoge’ [/code]

‘’‘でくくられているコメントがdoctestに読み込まれて実行される。>>>がついていない行は結果を期待しているところ。つまりこれは、hoge()という関数がhogehogeを返すことを想定(テスト)する内容。

で、doctestは関数の中にしか書けないと思い込んでいて、先にテストを書かないといけないのに関数を作ってるよ…という微妙な状態に。

実はモジュールレベルでもかけるので、ファイルの行頭あるいは別ファイルにdoctestを並べておいて、あとから実行するということが可能だった。

それに気付いたのはペアプロが終わった後だったので、みんながコードレビューしているのを横目で眺めつつ、クラスベースで書き直してみた。バグってたらごめんなさい。 →bpstudy29_lrucache.py

いろいろ気付いたことまとめ。

  • TDD勘違いしてた
  • TDDは設計。テストを検討しつつ設計する
  • スタンドは才能、波紋は技術
  • TDDも技術だから学習できるよ!
  • TDDで得られるのは品質ではなく安心感
  • 健康的にプログラミングに取り組める
  • チームが健康になる
  • python習熟不足

たいへん面白い勉強会でした。

UPDATE: 和田さんのおすすめでレガシーコード改善ガイドを注文してみました。レガシーコードとは、テストの無いコードのことだそうです。周辺の効能を聞く限り「自分のハマり具合とその解決策が解る」、「この本のおかげで軟禁生活から解放されました」などの劇的な変化が現れるらしいので楽しみです。

[ad#text_wide]