ひつじのにっき

mhidakaのにっきです。たまに長文、気が向いたとき更新。

【13-A-5】CodeZineスペシャルセッション モダン Perl テスト 〜 テストで業務効率改善

Perlをつかったテスティングについて。
特に設計者観点のユニットテストを中心にPerlを紹介。

  • Perlでのテストコード生成の生産性の高さ
  • 他言語でのPerlを使ったテストの可能性

など気になりました。


"基本的なテストの充実が一番コストパフォーマンスが高い"というスライドに共感。


ST,QAではまた別の観点があるので別問題としても、
UnitTestはどれほども手間をかけられないので手動で実施するよりは
最初から自動化ありき、で考える方がよいですね。

13-A-5 CodeZineスペシャルセッション モダン Perl テスト 〜 テストで業務効率改善 牧大輔

◆自己紹介
Endeworks 代表取締役・エンジニア・
Japan Perl Association 理事

◆モダンPerl入門
 Perl言語の今の使われ方を紹介
 もっとも時間をかけた部分はテスティングの部分
 → プロジェクトマネージャの視点から効率的に合理的に。

◆単位テスト
 基本的なテストの充実が一番コストパフォーマンスが高い
 
 テストは追加作業ではない!★
 ⇒ エンジニアリング上、必須な機能

 テストの建前と本質
  建前:生産性向上がむにゃむにゃ
  本質:エンジニアがまともな生活をするためのもの
        品質の高いコードを書いて、あとで泣きをみないように。

 テストの前提
  必ず間違いを起こす=バグ=追加工数=納品後は瑕疵・・・
  エンジニアの消耗を避けるため
 
 起こってから対応するのでは後手後手。
 予防手段としてテストをとらえる ⇒ 将来への投資

 現実的な落としどころを考える
  無理に100%を目指さない、目標を80%に。

◆テストの問題
 Excelでの手順の羅列をもってテストとしていることが多い。⇒ これはテストではない★
 
 テストとは再現性を持つこと★
  同じことを何回もできることがテスト。
  人間の技能に頼る手動テストでは人にテストクオリティが左右されてしまう。

 テストの自動化が必要
 ・テスト内容のノウハウがたいてい口伝。
 ・手動ではさらに実施する手間がかかる。

◆自動テストが必要

 ・だれが実行しても一緒
 ・自動化したあと、コストはほぼゼロ。
 ・バグを見つけたらそれをさらに組み込めば将来同じ問題を防げる

 テストの準備
  フレームワークの活用
  JUnit xUnit TestNGなどが有名。

 これらはコストが高く、フレームワークに縛られる(すでに使っていれば、それはそれでOK) 
  ⇒ フレームワークは面倒

 テストは存在して、機能を検証してくれる、ということが重要★
 そこでPerlの出番

◆Perlでテスト?
 PerlCGIに利用、貧弱なイメージ。
 最近のModern Perlは違う。

 Perl = CGIPerl 5.5まで。
 総合テスト環境としてとらえよう。

 Perlアプリのテストは簡単。すべて3行でテストできる
 ・make test t/ ディレクトリのテストをすべて実行
 ・proveによる自動実行

 そしてPerlコミュニティはテスト好き
  CPANでは いろんなPF、OSでテストしまくる。
  ※CPANPerlのライブラリ・モジュールソフトウェアやその他のPerlで書かれたソフトウェアを集めた巨大なアーカイブ

 外部コマンドとの連携も簡単にできる。
  my $out = qx/cmd/ :シンプル。
 
 テストファイル
  モダンパールの本を読んで。テストはシンプルがよい。
  だれでもかけるテストがうれしい

 Test Anything Protocol -TAP
  Perlのモジュールをテストする際に利用。テキストベースのインターフェイス
  出力されるのは総テスト数、テスト名、出力、解析のみ、とシンプル。
  シンプルさから、Perl以外の他言語での利用も可能。

◆よくある風景
 開発サーバー(Apache)
 ↑
 A B C (開発者)
 
 サーバ利用者(A,B,C)重複してテストすると失敗する事がある。
  例:AとBが同時にテスト → サーバ側のApache上での結果は不定に。
 
 そういうときはPerl上では
 Apache::Test モジュールを使う。設定は数行、実行するだけ。
 → 開発サーバにApacheが1台だけでも別々にインスタンスを立ち上げる。
 A B C の3名は同じリソースを同時に使える。

 mod_perl系アプリ、PHPでもなんでもいい。Cハンドラでもよい。
  TAPの出力さえあればテストは可能。

◆理想は理想
 TDDとかExtreme、Eclipseがうんたら
 現実は様々な環境・部品から成るヘテロジニアスな環境。
 → 現実的な落としどころをPerlは担える

 某社
  製品のテストがPerl
  コミットがあるたびにテストがスケジュールされている。
  リグレッションテスト、ストレステスト、全部入ってる。

 やらなくてはいけないことを より簡単にできることが重要★
 テストを充実されるとリスクの計算ができる。

 Happy Testing :)

◆Japan Perl Association
 言語内に縛られずに、現実的な技術を求める
 最新技術を伝える団体
  Perlをつかった開発へのとりくみをまじめに。