Your SlideShare is downloading. ×
GxPユニットテスト研修
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
221
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. ユニットテスト研修 Copyright© 2010 Growth xPartners, Inc. All rights reserved. 2014/5/30
  • 2. プログラミング、どうですか? 楽しい? 難しい? 1Copyright© 2010 Growth xPartners, Inc. All rights reserved.
  • 3. プログラミングについての俗言 「プログラムは思った通りに動かない。書いた通りに動く」 「バグのないプログラムはない」 2Copyright© 2013 Growth xPartners, Inc. All rights reserved.
  • 4. 情報システムの不具合が社会に影響を及ぼす例 3Copyright© 2013 Growth xPartners, Inc. All rights reserved. http://www.yomiuri.co.jp/economy/20140430-OYT1T50142.html
  • 5. 情報システムの不具合が社会に影響を及ぼす例 4Copyright© 2013 Growth xPartners, Inc. All rights reserved. http://sankei.jp.msn.com/world/news/140411/amr14041109000003-n1.htm
  • 6. 情報システムの不具合が社会に影響を及ぼす例 5Copyright© 2013 Growth xPartners, Inc. All rights reserved.
  • 7. 不具合とどう向き合うか 情報システムに不具合が内在するのは、プログラミングに限らず、システムに構築す る過程に人間が介在する以上、避けられないこと。 •「プログラミングに不慣れだから」ではありません お客様に責任を果たすために、構築したシステムの特性を評価し、お客様のビジネス にふさわしい品質かを評価する必要があります。 6Copyright© 2013 Growth xPartners, Inc. All rights reserved.
  • 8. 細かくチェックポイントを設ける システムを組む都度都度において、細かくチェックポイントを設けます。 チェックポイントと、そこで行うテストのことを「ソフトウェアテスト」といいます。 •「全てのライフサイクルを通じて実施する静的、動的なプロセスにおいて、成果物が特定の要件を満足する かを判定し、目的に合致することを実証し、欠陥を見つけるため、ソフトウェアプロダクトや関連成果物に対し、 計画、準備、評価をすること」 ソフトウェアテスト標準用語集 日本語版 Version 2.2.J01 http://jstqb.jp/dl/JSTQB-glossary.V2.2.J01.pdf 7Copyright© 2013 Growth xPartners, Inc. All rights reserved.
  • 9. では、どうやって確認するか みなさんが研修でやっていることと一緒です。 •テスト対象のプログラムを実行する。 •プログラムの実行結果を確認する。 8Copyright© 2013 Growth xPartners, Inc. All rights reserved.
  • 10. 例えば、閏年の判定 9Copyright© 2013 Growth xPartners, Inc. All rights reserved. /** * 引数で渡された年度が閏年かを判定します。 * <ul> * <li>西暦年が4で割り切れる年は閏年</li> * <li>ただし、西暦年が100で割り切れる年は平年</li> * <li>ただし、西暦年が400で割り切れる年は閏年</li> * </ul> * * @param year 判定する年度 * @return 閏年の場合は{@code true} */ public static boolean isLeapYear(int year) { if (year % 4 == 0) { if (year % 100 == 0) { if (year % 400 == 0) { return true; } return false; } return true; } return false; }
  • 11. テスト対象のプログラムを実行する。 10Copyright© 2013 Growth xPartners, Inc. All rights reserved. public static void main(String[] args) { int year = 2014; boolean result = LeapYear.isLeapYear(year); if (result){ System.out.println(year + "年は閏年です。"); } else { System.out.println(year + "年は閏年ではありません。"); } }
  • 12. プログラムの実行結果を確認する。 11Copyright© 2013 Growth xPartners, Inc. All rights reserved. public static void main(String[] args) { int year = 2014; boolean result = LeapYear.isLeapYear(year); if (result){ System.out.println(year + "年は閏年です。"); } else { System.out.println(year + "年は閏年ではありません。"); } }
  • 13. 2つの問題点があります。 テストを1回だけでなく、毎回実行する必要がある •なんで? 「プログラムをいじってるうちに動かなくなった」(リグレッション) 「サーバーをバージョンアップしたら動かなくなった」 「特定のお客様の環境でだけ動かない」 12Copyright© 2013 Growth xPartners, Inc. All rights reserved.
  • 14. 現場のプロジェクトでは、何回くらいテストを実行しているのかというと.... 13Copyright© 2013 Growth xPartners, Inc. All rights reserved.
  • 15. 実プロジェクトでは、実行するテストの総数が4桁になるのは普通 毎回mainメソッドを実行するのは大変 14Copyright© 2013 Growth xPartners, Inc. All rights reserved.
  • 16. もう一つの問題点 毎回実行結果を目で見て確認するのは大変 15Copyright© 2013 Growth xPartners, Inc. All rights reserved.
  • 17. 定型作業は自動化作業 繰り返し行う作業はコンピュータに任せることで、人間はより創造的な作業ができるよ うになります。 16Copyright© 2013 Growth xPartners, Inc. All rights reserved.
  • 18. ユニットテスト テスト実行の自動化 •いわば、「自動化されたデバッグ」 •JavaではJUnitというツールが主流 • .net開発ではNUnitやMSTestというツールを使います。 •JUnitの知名度が一番高いことから、総称してxUnitと呼びます。 17Copyright© 2013 Growth xPartners, Inc. All rights reserved.
  • 19. 何ができるか テスト実行の自動化 結果の判定の自動化 18Copyright© 2013 Growth xPartners, Inc. All rights reserved.
  • 20. テスト実行の自動化 決まったフォーマットでテストを記述すると、テストを自動的に実行してくれる 19Copyright© 2013 Growth xPartners, Inc. All rights reserved. @Test public void _4で割り切れる場合は閏年() { boolean result = LeapYear.isLeapYear(2012); assertThat(result, is(true)); }
  • 21. 判定の自動化 決まったフォーマットで記述すると、テスト結果を自動的に判定してくれる(アサーショ ン) 20Copyright© 2013 Growth xPartners, Inc. All rights reserved. @Test public void _4で割り切れる場合は閏年() { boolean result = LeapYear.isLeapYear(2012); assertThat(result, is(true)); }
  • 22. テストに合格(成功)した例(グリーンバー) 21Copyright© 2013 Growth xPartners, Inc. All rights reserved.
  • 23. テストに不合格(失敗)した例(レッドバー) 22Copyright© 2013 Growth xPartners, Inc. All rights reserved.
  • 24. 失敗した内容の出力 23Copyright© 2013 Growth xPartners, Inc. All rights reserved.
  • 25. よくある誤解 「なにもしなくても自動でテストしてくれる」ではありません! 「テストコード」を自分で書く必要があります。 24Copyright© 2013 Growth xPartners, Inc. All rights reserved.
  • 26. それでは、その「テストコード」の書き方を学んでいきましょう 25Copyright© 2013 Growth xPartners, Inc. All rights reserved.
  • 27. JUnitについて 26Copyright© 2013 Growth xPartners, Inc. All rights reserved.
  • 28. テストを書きたいクラスを選択します 27Copyright© 2013 Growth xPartners, Inc. All rights reserved.
  • 29. テストクラスを作成する 28Copyright© 2013 Growth xPartners, Inc. All rights reserved. 「File」→「New」→ 「JunitTest Case」
  • 30. 29Copyright© 2013 Growth xPartners, Inc. All rights reserved. そのまま「Finish」
  • 31. 30Copyright© 2013 Growth xPartners, Inc. All rights reserved. そのまま「OK」
  • 32. こうなるはず 31Copyright© 2013 Growth xPartners, Inc. All rights reserved.
  • 33. 1行追加します(説明は後述) 32Copyright© 2013 Growth xPartners, Inc. All rights reserved.
  • 34. メソッドを書き直します 33Copyright© 2013 Growth xPartners, Inc. All rights reserved.
  • 35. 実行します。結果は...? 34Copyright© 2013 Growth xPartners, Inc. All rights reserved. ※QuickJunitというプラグインを入れると、Ctrl+0 で実行が出来るようになります。
  • 36. それでは解説 35Copyright© 2013 Growth xPartners, Inc. All rights reserved.
  • 37. クラス名 36Copyright© 2013 Growth xPartners, Inc. All rights reserved. ①クラス名は、テスト対象のクラス名 + 「Test」とするのが慣習です。
  • 38. テストメソッド 37Copyright© 2013 Growth xPartners, Inc. All rights reserved. ②@Test という印(アノテーション)をつけたメソッドが、テストとして扱われます。
  • 39. テストメソッドの規則 38Copyright© 2013 Growth xPartners, Inc. All rights reserved. ③メソッドはpublicかつvoid で、引数を持たないメソッドである必要があります。 メソッド名はJavaのメソッド名として有効であれば制限はありませんが、テスト する内容がわかりやすいメソッド名にしましょう。
  • 40. 39Copyright© 2013 Growth xPartners, Inc. All rights reserved. ④ assertThatメソッドでメソッドの実行結果を確認します。 第1引数にメソッドの実行結果(actual)、第2引数のis()の中にメソッドの期待 値(expected)を書きます。 左から並べた時に assertthatresult istrue (結果が真であることを表明する) というように、英語でそのまま読むことができるようになっています。
  • 41. 40Copyright© 2013 Growth xPartners, Inc. All rights reserved. 40Copyright© 2013 Growth xPartners, Inc. All rights reserved. ④この部分は、JUnitが用意している assertThat メソッドとisメソッドを使えるよ うにするための宣言です。
  • 42. アサーションのバリエーション  値が○○でない assertThat(str, is(not("fuga")));  値がnullである assertThat(str, is(nullValue()));  値がnullではない assertThat(str, is(not(nullValue()))); 41Copyright© 2013 Growth xPartners, Inc. All rights reserved.
  • 43. 実習  配布しているサンプルを参考に、年が100で割り切れる場合は閏年になることを確認 するテストを書いてみましょう。 他、メソッドの仕様(JavaDoc)に従い、必要なテストケースを考えて、テストを書いてみ ましょう。 これまで演習でやってきた中で書いてきたテストを、JUnitによるテストに書き換えてみ ましょう。 42Copyright© 2014 Growth xPartners, Inc. All rights reserved.
  • 44. 43Copyright© 2014 Growth xPartners, Inc. All rights reserved.
  • 45. ネクストステップ 44Copyright© 2014 Growth xPartners, Inc. All rights reserved.
  • 46. リファクタリング テストによって安全網(テストハーネス)を作ることにより、テストを安全に、改善していく ことができます。このことをリファクタリングといいます。 45Copyright© 2014 Growth xPartners, Inc. All rights reserved.
  • 47. 例えば  return (( year % 4 ) == 0 && ( year % 100 ) != 0) || ( year % 400 ) == 0;  GregorianCalendar cal = new GregorianCalendar(); return cal.isLeapYear(year); 46Copyright© 2014 Growth xPartners, Inc. All rights reserved.
  • 48. JUnitについて学びたくなったら 47Copyright© 2014 Growth xPartners, Inc. All rights reserved.
  • 49. ソフトウェアテストについて学ぼう 48Copyright© 2014 Growth xPartners, Inc. All rights reserved.
  • 50. さいごに  テスティングはバージョン管理、自動化とならんで、現代ソフトウェア開発の三本柱で す。 コードを書こう。そして、優れたコードを読もう。 Enjoy Testing! 49Copyright© 2014 Growth xPartners, Inc. All rights reserved.
  • 51. CONFIDENTIAL ●本文書は、グロースエクスパートナーズ株式会社が著作権その他の権利を有する営業秘密(含サプライヤー等第三者が権利を有するもの)です。 ●当社の許可なく複製し利用すること、また漏洩することは「著作権法」「不正競争防止法」によって禁じられております。 ●本資料内の社名・製品名は各社の登録商標です。 50Copyright© 2014 Growth xPartners, Inc. All rights reserved.

×