プレゼン資料をダウンロード

Limeを使ったユニットテストの実装方法
株式会社 ファーストロジック
http://www.firstlogic.co.jp
mailto:[email protected]
Tel: 03-3442-4331 Fax: 03-3442-4331
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
ユニットテストを行う利点は沢山あります。
ユニットテストって何?
単体の品質を担保するテスト
です
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
1
ユニットテストを行う利点は沢山あります。
問題点の究明が簡単
テストを追記する事でクオリ
ティアップ!
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
2
ユニットテストを行う利点は沢山あります。
バグ発見&テスト追加で品質
向上
仕様書が無くても品質を保ち
やすい
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
3
ユニットテストを行う利点は沢山あります。
MVCに沿ったプログラミング
で開発者を縛る
必然的にMVC的なプログラ
ミングで縛る
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
4
ユニットテストを行う利点は沢山あります。
結論。
長期的なメンテナ
ンスに必要
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
5
欠点もあります
品質と開発速度はトレードオフ
by 社長
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
6
欠点もあります
もしも・・・
オブジェクト指向じゃないような場合
…
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
7
欠点もあります
コントローラーと、ビューに散らばった
ビジネスロジックを集める
テストを行う範囲を明確化
実施
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
8
欠点もあります
リファクタリング中の機能追加
は難しい
リストアップ&テストの工数は
かなり大きい
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
9
話のまとめ
何事も割り切りと諦めと決意が
必要。
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
10
話のまとめ
テストをやらず、
速度を極限ま
で高めるという
スタンス
徹底的にテス
トをするという
スタンス
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
11
話のまとめ
今日の話はバグと決別す
る、高品質なソフトウェア
構築を決意をした人向け
の話となります。
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
12
Limeって何?
Limeって何?
Symfony1.x付属のテ
ストフレームワーク
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
13
Limeって何?
元になっているのは
PerlのTest::More
ラシイ。
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
14
Limeって何?
学習曲線を緩やかに。
できるだけ簡単に。
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
15
なにはともあれ、どんな物か試しましょう
どこにあるの?
プロジェクト/test/unit
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
16
なにはともあれ、どんな物か試しましょう
どこにあるの?
プロジェクト/test/unit
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
17
なにはともあれ、どんな物か試しましょう
テストの対象に使うクラ
スは・・・
配っている紙を見てくだ
さい。
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
18
なにはともあれ、どんな物か試しましょう
プロジェクト
/test/unit/app/アプリ名
/lib/
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
19
なにはともあれ、どんな物か試しましょう
クラス名+サフィックスに
Test.php
今回はHogeクラスのテストな
のでhoge.class.Test.php
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
20
なにはともあれ、どんな物か試しましょう
では実演してみます。
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
21
なにはともあれ、どんな物か試しましょう
<?php
class hoge {
//put your code here
// きちんと動く例
/*
public function trimScalar($Value){
$result = str_replace(' ', '', $Value);
if($Value === "予約語"){
return $value;
}
return $result;
}
// バグ有りの例その1:無理やりtestという文字列をreturn
*/
/*
public function trimScalar($Value){
}
*/
str_replace( ' ', $result, $Value);
return 'test';
// バグ有りの例その2:受け取ったValueをそのままreturn
/*
public function trimScalar($Value){
return $Value;
}
*/
}
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
22
なにはともあれ、どんな物か試しましょう
<?php
require_once dirname(__FILE__) . '/../bootstrap/unit.php';
$t = new lime_test(1,new lime_output_color);
$t->is(hoge::trimScalar(' test '), 'test', '::trimScalar()スペースを除く');
$t->is(hoge::trimScalar('予約語'), '予約語', '::trimScalar()予約語はそのままスルー');
$t->is(hoge::trimScalar(' '), false, '::trimScalar()スペースを除く異常系1');
$t->is(hoge::trimScalar(' abc de '), 'abcde', '::trimScalar()途中スペース込み');
$t->is(hoge::trimScalar(' あいう えお '), 'あいうえお', '::trimScalar()2バイト文字のチェック');
$t->is(hoge::trimScalar(''), false, '::trimScalar()何も無い場合はfalseを返す');
$t->todo('テスト開始!');
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
23
なにはともあれ、どんな物か試しましょう
<?php
require_once dirname(__FILE__) . '/../bootstrap/unit.php';
$t = new lime_test(1,new lime_output_color);
$t->is(hoge::trimScalar(' test '), 'test', '::trimScalar()スペースを除く');
//$t->is(hoge::trimScalar(‘予約語’), ‘予約語’, ‘::trimScalar()予約語はそのままスルー’);
//コメントアウト!
$t->is(hoge::trimScalar(' '), false, '::trimScalar()スペースを除く異常系1');
$t->is(hoge::trimScalar(' abc de '), 'abcde', '::trimScalar()途中スペース込み');
$t->is(hoge::trimScalar(' あいう えお '), 'あいうえお', '::trimScalar()2バイト文字のチェック');
$t->is(hoge::trimScalar(''), false, '::trimScalar()何も無い場合はfalseを返す');
$t->todo('テスト開始!');
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
24
なにはともあれ、どんな物か試しましょう
# symfony test:coverage --detailed test/unit/HogeTest.php lib/Hoge.php
>> coverage running C:\Documents and Settin...CH/test/unit/HogeTest.php (1/1)
lib/hoge
100%
TOTAL COVERAGE: 100%
だったのが・・・
# symfony test:coverage --detailed test/unit/HogeTest.php lib/Hoge.php
>> coverage running C:\Documents and Settin...CH/test/unit/HogeTest.php (1/1)
lib/hoge
83%
# missing: 16
TOTAL COVERAGE: 83%
となる。
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
25
ご静聴ありがとう御座
いました。
CONFIDENTIAL
Copyright © FirstLogic, Inc. All rights reserved.
26