Nagoya.Tesing 参加してきた

2月26日に行われたNagoya.Testingに参加してきました。その後私生活でいろいろどたばたあり、なかなかレポート書けませんでしたが、今のうちに一気にまとめてしまいます。

セッション1 : TDDとかBDDとかについて

主催者である@kyon_mmさんのセッションでした。TDDにもいろいろな種類があることを知りました。TDDとBDDはさほど差はなく、客先主導で行われるのがBDDだというお話も聞きました。詳しくは@kyon_mmさんのスライドで。今回の勉強会は、こういった話を@kumagiさんとしようって話からスタートしたようですね。

LT1 関数型or証明駆動について @mzpさん

@mzpさんによるOcamlの型安全メインのお話でした。内容はJavaOcamlの比較をしながら、型チェックを強制するOcamlではぬるぽが起きないとの事。考えてみると、#なごやこわい の代表的メンバーの皆さんを実際に拝見するのは初めてのことで、皆さんやっぱり詳しいなという感じがしました。@mzpさんのブログを見てみても、発表や実際のプログラミングを数々こなされていますし、開発者向けのツールも作られているみたいですね。デブサミで話されていた@bleisさんも初めて拝見しましたが、噂どおりイケメンでした^^

LT2 ソフトウェアテストに関する団体TEFの紹介など @masaoaprilさん

@masaoaprilさんにTEF東海や、Jasst、WAKATEなど団体やイベントについて紹介していただきました。今回の主催の@kyon_mmさんやサポートメンバーでいろいろ教えて頂いた@masaoaprilさんや@kumagiさんも参加されているようですね。以下に一覧します。様々な有益な情報がありそうです。

LT3 TDDに関するアンケートに関する中間報告と協力のお願い @pocketberserkerさん

現役の大学院生である@pocketberserkerさんによるTDDに関するアンケートの中間報告を説明していただきました。質問内容は
  1. TDDを知る・学ぶきっかけになった物事はなんですか?
  2. どのような方法でTDDを学び、習得しましたか?
  3. TDDは、人の手を借りず1人で習得可能だと思いますか?(2択:はいorいいえ)
  4. プログラミング言語によってTDDプロセス(TDDする、しない部分の判断など)は異なると思いますか?理由もあわせてお答えください。
  5. xUnit系とSpec系、どちらを先に習得しましたか?
  6. どんな人にTDDを学んでもらいたいですか?
様々な意見がありました。私自身TDDと呼べる物はまだ習得できてないと思っています。TDDBCなどのイベントがまたあったら参加してみたいです。

ハンズオン1 テスト技法ポジショニングマップ

しまった。自分たちの分写真撮っておくの忘れました^^;
これは、テスト技法をブラックボックス←相対→ホワイトボックス網羅的←相対→ピンポイントのポジショニングマップに対して、付箋に書いて貼り付けるという形でした。確かお題は「一般的なWebアプリケーション」だったはずです。そのWebアプリケーションに対して、どんなテストを行った方がいいのかあげていき、それを付箋に書いてポジショニングマップに貼っていくという感じでした。
まず、私自身がテスト技法について勉強不足であり、あまりあげられませんでした。印象に残ったのは、@masaoaprilさんに教えて頂いた、いじわるテストのお話です。普段行わないようなことを敢えてやってみて、バグをあぶり出すというテストの考え方です。以前@kyon_mmさんのブログ記事にあった、以下の本を読んで勉強しておきたいです。

ハンズオン2 サンプルWebアプリケーションに対するテスト計画、実施

@kyon_mmさんが準備してくださったWebアプリケーションに対し、実際にテストを計画し、テストしてみるハンズオンでした。テスト計画はスライドシェア上に用意してあったスライドで最低限の要件を把握し、マインドマップ等を使って予測される隠れた要件や、当てはめるテスト手法を計画する形になります。このマインドマップを利用するテスト計画は、こちらも@kyon_mmさんのブログ記事に紹介されていた以下の書籍に沿ったものだと思います。

ちょうど、私も@kyon_mmさんのブログ記事を読んでから、上記本を読んでいたので、マインドマップを使って要件を掘り下げたり、テスト計画の概要を作ったりするのは抵抗なくできました。この書籍に関する事は、別記事にまとめたいと思います。
テスト計画の立案が終了した事を@kyon_mmさんに伝えると、テスト用WebアプリケーションのURLをもらうことができ、実際のテストをそこで行うことができます。このテストアプリケーションはgrailsを使って立てられており、非常に少ないコードで作られているようです。ただ、このサンプルアプリケーションを作るために(Herokuがダウンしていた事もあって)@kyon_mmさんは徹夜を余儀なくされたと聞きました。頭が下がりますm(_ _)m

私たちのグループは、テストの時間計画を立てていなかったために、テスト計画の項目のテストをすべて行うことができませんでした。また、全員で同じテストに取りかかって順番に意見を出しながら行っており、作業割り振りができてなかったのも時間がかかった原因でした。いい勉強になりました。
時間になると、各チームでどのようなテストを行ったか発表し合いました。まず、驚いたのが、テストするツールやスクリプトをうまく使いこなせている点です。例えば負荷に関するテストで、「データベースに高速で1000件登録するとエラーになる」を実現するために、wiresharkで送るパケットを把握し、そのパケットをcurlを使って送信するのをRubyスクリプト書いて1000回テストしたという@kumagiさんのやり方が、印象に残っています。「テストのためにツールやスクリプトを使いこなす」ということはこういう事か、と認識しました。また、状態遷移図を書いて画面の移り変わりを記述したり、Google Docにとても綺麗なレポートをまとめられていたり、いろいろなグループがいて、自分のレベルに関してもベンチマークできました。まだまだ、習得しなくてはならないことは多いですね。

まとめ

全体として、とても勉強になりました。今まで経験した事のない領域というのもあるのですが、やはりテスト、つまりソフトウェアの品質保証は非常に大事ですし、プログラマーから設計者、PMまで共通の課題だと思いますので、このような勉強会はとても参考になりました。TDD、BDDあたりはまだまだ勉強不足ですが、その辺はソフトウェア開発の理想型の一部なんでしょうね。今後も少しずつですが、この領域にも足を踏み入れておきたいです。最後になりましたが、@kyon_mmさんを筆頭に、スタッフの皆様、どうもありがとうございましたm(_ _)m