デベロッパーテスティング ソフトウエア開発者の基礎体力

Similar documents
テスト駆動開発入門


話すこと (Topics) 私とテスティングフレームワーク (Testing frameworks and I) テスティングフレームワークの作り方 (how to create testing frameworks) 1/42

個人依存開発から組織的開発への移行事例 ~ 要求モデル定義と開発プロセスの形式化 による高生産性 / 高信頼性化 ~ 三菱電機メカトロニクスソフトウエア ( 株 ) 和歌山支所岩橋正実 1

短納期開発現場への XDDP 導入手法

ユーザエクスペリエンス (UX) 手法を 用いた企画品質評価の提案 第 4 分科会 主査 金山豊浩 ( 株 ) ミツエーリンクス 副主査 三井英樹 ( 株 ) ビジネス アーキテクツ 福山朋子 ( 株 ) インテック 研究員リーダ 村上和治東京海上日動システムズ ( 株 ) 田邉孝次 SCSK( 株

テスト駆動開発入門 ネクストステップ

PowerPoint プレゼンテーション

Oracle SQL Developerの移行機能を使用したOracle Databaseへの移行

Using VectorCAST/C++ with Test Driven Development

040402.ユニットテスト

PowerPoint プレゼンテーション

アジャイル開発入門

メソッドのまとめ

スキル領域 職種 : ソフトウェアデベロップメント スキル領域と SWD 経済産業省, 独立行政法人情報処理推進機構

JUnit 概要 2015/4/16 版今泉俊幸 2015 bbreak Systems 1

Microsoft PowerPoint - Session4古賀様.ppt

プロジェクトマネジメント知識体系ガイド (PMBOK ガイド ) 第 6 版 訂正表 - 第 3 刷り 注 : 次の正誤表は PMBOK ガイド第 6 版 の第 1 刷りと第 2 刷りに関するものです 本 ( または PDF) の印刷部数を確認するには 著作権ページ ( 通知ページおよび目次の前 )

Source Insight

PowerPoint プレゼンテーション

プロダクトオーナー研修についてのご紹介

自己紹介 まっつん松藤秀治 ( まつふじひではる ) Piece Project Eclipseプラグインまっつんチャレンジ (ITEMAN Blog) - 2 -

Microsoft PowerPoint - A3② JaSST_MISRA2004ソースコード品質診断.ppt

PowerPoint プレゼンテーション

28th Embarcadero Developer Camp

障害管理テンプレート仕様書

JBoss と Arquillian で実現する 究極のテスト環境 レッドハット株式会社 JBoss サービス事業部 コンサルタント 山 田義和

NEXCESS基礎コース01 組込みソフトウェア開発技術の基礎 ソフトウェア開発プロセス編

今日のお話 実装とは? 達成基準と達成方法 実装チェックリストとは? 実装チェックリストの作り方 作成のコツと注意点 まとめ

メソッドの外部設計とテストファースト

TopSE並行システム はじめに

< F2D838F815B834E B B>

お客様からの依頼内容とその現状

Silk Central Connect 15.5 リリースノート

IronPython による柔軟なゲーム開発 筑波大学 AmusementCreators

Java知識テスト問題

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

クラウド税務 会計 給与システム開発にスピードを!A-SaaS が Sencha Ext JS / Sencha Test を導入した軌跡 第 36 回エンバカデロ デベロッパーキャンプ アカウンティング サース ジャパン株式会社土田拓也 斎藤はるか 北村圭 本文書の一部または全部の転載を禁止します

Microsoft PowerPoint - 09.pptx

宇宙機搭載ソフトウエア開発のアセスメント

i コンピテンシ ディクショナリ を 活用した品質エンジニアの育成 その 2 独立行政法人情報処理推進機構 HRD イニシアティブセンター 奥村有紀子

Microsoft Word - CygwinでPython.docx

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

どのような便益があり得るか? より重要な ( ハイリスクの ) プロセス及びそれらのアウトプットに焦点が当たる 相互に依存するプロセスについての理解 定義及び統合が改善される プロセス及びマネジメントシステム全体の計画策定 実施 確認及び改善の体系的なマネジメント 資源の有効利用及び説明責任の強化

f2-system-requirement-system-composer-mw

Microsoft PowerPoint - ETEC-CLASS1資料 pptx

クラス図とシーケンス図の整合性確保 マニュアル

過去問セミナーTM

目次 ペトリネットの概要 適用事例

PowerPoint プレゼンテーション

メディプロ1 Javaプログラミング補足資料.ppt

Javaの作成の前に

テスト設計コンテスト

RaQuest MindManager

IBM i ユーザーの課題 モバイルや IOT に対応した新しい開発案件への対応 RPG COBOL など既存アプリのメンテナンス 要員の確保 属人化しない運用 管理体制 2

システム操作インターフェイス最適化によるテスト自動化ROI向上

ソフトウェア工学 ( 入門編 ) 掛下哲郎 ( 佐賀大学 )

Microsoft PowerPoint - ID005(R02).pptx

4.7.4 プロセスのインプットおよびアウトプット (1) プロセスへのインプット情報 インプット情報 作成者 承認者 備 考 1 開発に関するお客様から お客様 - の提示資料 2 開発に関する当社収集資 リーダ - 料 3 プロジェクト計画 完了報 リーダ マネージャ 告書 ( 暫定計画 ) 4

Microsoft PowerPoint - A1-2_株式会社ネクスト_藤澤正通_S _005.pptx

WBS テンプレート 2009/8/4 NO 作業項目 計画分析設計開発 SA UI SS PS PG PT テスト IT ST 運用 OT 保守 OM 作業概要 成果物 計画 プロジェクト編成 * プロジェクト責任者 メンバー ( システム部門 現場部門 外

Oracleライフサイクル管理ソリューション概要

目次 はじめに 4 概要 4 背景 4 対象 5 スケジュール 5 目標点 6 使用機材 6 第 1 章 C# 言語 7 C# 言語の歴史 7 基本構文 8 C 言語との違い 9 Java 言語との違い 10.Netフレームワーク 10 開発資料 10 第 2 章 Mono 11 Monoの歴史 1

プログラミング基礎I(再)

テストの自動化を見極める

PowerPoint プレゼンテーション

Oracle SQL Developer Data Modeler

Transcription:

デベロッパーテスティング ~ ソフトウエア開発者の基礎体力 タワーズ クエスト株式会社プログラマ兼取締役社長和田卓人 2006 年 6 月 29 日 @ オブジェクト倶楽部 2006 夏イベント

自己紹介の前に 4 年前の出来事 ワールドカップ イングランド vs. アルゼンチンの日 IBM のイベント テスト関係のセッション そこで出会った人は

故石井勝さん (a.k.a masarl さん )

自己紹介 名前 : 和田卓人 ( わだたくと ) ブログ : http://d.hatena.ne.jp/t-wada/ メール : takuto.wada@gmail.com タワーズクエストという会社を経営しています 一緒に仕事する仲間を募集中! チームかくたに XP のコーチ XP で一年半開発を行う

( ちょっと宣伝 ) Life Hacks PRESS Life Hacks PRESS B5 判 168 ページ定価 1,596 円 ( 税込 ) ISBN 4-7741-2728-0 3 月 24 日発売

さて Developer Testing 今日のお題 デベロッパーテスティング 皆さんご存知ですか?

アジェンダ テストの分類 Developer Testingとは何か Developer Testingの目的 Developer Testingのバリエーション Developer Testingを習得するには テスト駆動開発とは何か

序章 : テストの分類

難しくなったソフトウェア開発 ソフトウェアの複雑化 ソフトウェアの大規模化 ソフトウェアの短納期化 オブジェクト指向もそれなりに使われだした ソフトウェアの品質が問題に ( シンドラー社とか ) テスト が注目されてきた

テスト分類の混乱 単体 ユニット 結合 機能 システム 単体テストとユニットテストは同じもの? 単体って? ユニットって? 結合テストは何を結合するの? 品質保証? 動作確認?

テストの目的に戻ろう 何のためにテストするのか 誰のためにテストするのか テストで何を知りたいのか 結局 誰が何のためにテストを行うのか

テストをロールによって分類する Developer Test 開発者が行う 開発促進のためのテスト 単体テスト ユニットテスト 結合テスト Customer Test 顧客 ( のロールを担うひと ) が行うテスト 従来の 受け入れテスト が多くを占める QA Test 品質保証のためのテスト 行う人はテスト担当者 もしくは開発者

テスト Developer Test Customer Test QA Test

それぞれのテストの目的 Developer Test 開発促進 フィードバックを伴う設計行為 Customer Test 進捗管理 機能要件の検証 QA Test 品質保証 非機能要件の検証

Developer Test テスト Customer Test QA Test 開発促進 進捗管理 品質保証 設計行為 機能要件 非機能要件

再度 Developer Testing とは プログラマの プログラマによる プログラマのための プログラムとして書かれたテスト

Developer Testing とは何か

Developer Test とは コードとして書かれ すばやく動作し 自動化されており テスト対象コードの特定の機能を検証するため プログラマによって書かれたテスト

コードとして書かれたテスト これまでも書かれてきた テスト用 main メソッドとか テスト用のスクリプトとか テスティングフレームワークの登場 xunit ファミリー テスト方法が共有された クリティカル マスを超え 大きな効果を挙げた アジャイルブームに乗り テスト人口増大

自動化されたテスト テスティングフレームワークがもたらしたもの テスト記述方法の共通化 テスト実行方法の共通化 テストを書いた人でなくとも 同じようにテストを実行できるようになった

自動化されたテスト

自働化されたテスト テスティングフレームワークがもたらしたもの テスト記述方法の共通化 テスト実行方法の共通化 テストを書いた人でなくとも 同じようにテストを実行できるようになったということは 機械にも実行させることができる テストの自働化

なぜ自動化 ( 自働化 )? 機械 ( コンピュータ ) は 正確 一貫している 疲れない 時間の有効利用 プロジェクトで人間がやることはまだ沢山ある 現状の 見える化

ソフトウェアあんどん

テストカバレッジレポートの生成

Developer Testing の目的

なぜテストするの? ( 優等生編 ) 意図したとおりに動作するか確認する 常に意図したとおりに動作するか確認する コードが信頼できるか確認する 意図を表現する ( 実行可能なドキュメント )

で だ なぜ Developer Testing するの? ソフトウェア工学的なメリットもいろいろあるけれども 最大の理由は心理的なもの 即時にフィードバックを得るため 書いたコードに自信を持つため これから書くコードを自信を持ってコーディングするため

心理的な効果自働化されたテスト群があると より自信を持って開発できる より良い設計ができる 心に余裕ができ 他のメンバーの様子を見ることができる

Developer Testing の真の目的 目的は健康 (Health)! 何の健康? ソフトウェアの健康 動くコード 無駄の無いコード シンプルな設計 変化に適応できる 開発者の健康 体の健康 心の健康

プロジェクト健康宣言 Developer Testing とは 我々開発者が心身共に健康な状態で 健康なソフトウェアを開発するための手段である 健康は信頼をもたらす 信頼とは コードへの 自分への 仲間への マネジャーへの お客様への信頼である

プロジェクト健康宣言 健康というだけでなく 健康であり続けることを目標とする ソフトウェア メンバー お客様のビジネスが共に健康であり続けることが目標である 健康であるとは 意識が行き届いており 柔軟で 活力があるさまである 健康なプロジェクトにおいては メンバーの心身の不調 コードの不吉な匂い お客様の懸念を察知し それらを改善すべく自己適応する

Developer Testing のバリエーション

Stub/Mock [Context] Developer Testing の障害になるもの ネットワーク ファイルシステム データベース スピードが遅く テスト毎のセットアップも難しい メモリ上でシミュレートするテスト用のクラスを作成してテストする

Debugging Test [Context] バグを見つけたとき そのバグを再現するテストを書き そのテストを失敗させ しかる後にそのテストを成功させることによってバグを修正すべし

Learning Test [Context] 未知のライブラリを使って作業するとき ライブラリの使い方を習得し 活用してコードを書くことになる 二手以上使ってしまう 一歩が大きい ライブラリの使い方の学習目的のみのテストを書く 学習結果がテストとして残る 学習のみを目的とするので像がブレにくい

Assumption Test [Context] 外部ライブラリに依存した開発を行う際 こう動くだろうという想定をテストにしておく 仕様が変わったらテストが失敗する テストがセーフティーネットとして作用する

Test as documentation ソースにはHow テストにはWhat ドキュメントにはWhyを書く! ドキュメントになるテストを書こう! 読まれることを意識したテストコードにする

Developer Testing を習得するには

方法論ではなく スキル ということは 才能にかかわらず 習得可能 量は質に転化する (by はぶさん )

本を読もう 写経しよう テスト駆動開発入門 達人プログラマ バグがないプログラムのつくり方

オープンソースソフトウェアの テストコードを読もう Codehaus.org の各プロダクト Seasar.org の各プロダクト また JUnit は JUnit 自身によってテストされています

経験者に会おう セミナーや勉強会に参加する 経験者とペアプロする

テスト駆動開発 (TDD: Test Driven Development) とは何か

TDD の流れ コードを書いてからテストを行うのではなく 1. ユニットテストを書き 2. そのテストを実行して失敗させ 3. 目的のコードを書き 4. 2で書いたテストを成功させ 5. リファクタリングを行う という流れで開発を行っていく開発手法

道はひとつではない 目標は 動作する きれいなコード きれいな から攻めるか 動作する から攻めるか

きれい 汚い ( すぐには ) 動かない 動作する

きれい 汚い ( すぐには ) 動かない 動作する

きれい 汚い ( すぐには ) 動かない 動作する

きれい 汚い ( すぐには ) 動かない 動作する

TDD の最小サイクル 失敗させるテストを書く そのテストが通るような実装を行う テストが通る状態のまま 重複を取り除く ( リファクタリング )

TDD のリズム Red, Green, Refactor Red, Green, Commit, Refactor, Green, Commit 動作する を満たしてから きれいな にとりかかる

きれい 汚い ( すぐには ) 動かない 動作する

きれい 汚い Red ( すぐには ) 動かない 動作する

きれい 汚い Red Green ( すぐには ) 動かない 動作する

きれい 汚い Red Green Refactor ( すぐには ) 動かない 動作する

Refactor 動作する Red きれい 汚い ( すぐには ) 動かない

きれい Red 汚い Green ( すぐには ) 動かない 動作する

きれい Refactor 汚い Green ( すぐには ) 動かない 動作する

きれい 汚い Red Green Refactor ( すぐには ) 動かない 動作する

TDD は設計技法です 文脈 プログラミングは設計行為である (J.Reeves) REDは仕様の設計 GREENは仕様の実装 Refactoringは内部設計の改善 参考 ソフトウェア設計とは何か http://www.biwa.ne.jp/~mmura/softwaredevelopment/whatissoftwaredesignj.html

テストリストを書く 実装モードになった頭を設計モードに戻す Test Result は Location を Test List は Direction を示す

テストを先に書く意義とは 実装とインターフェイスを分けて考えることができる How ではなく What 利用者の視点を最初から得ることができる Eat your own dog food テスト可能なコードになる 実装がないのでグレイボックステストになる

なぜリファクタリングするのか シンプル設計 コードを理解しやすく コードを修正しやすく コードをシンプルにすること 設計をシンプルにすること リファクタリングの目的 理解や修正を簡単にするため

呟いてみよう 囁いてみよう 意図をテストにしよう 何がしたいの? で どうなったら嬉しいの? それをテストで表現してみよう オレはいま何が不安なんだ? その不安をテストで表現できないか? 次の一手が大きすぎないか?

で どうなったら嬉しいの? ゴール指向 こう動いてくれたら嬉しい という状態をテストとして書く ToBe から引っ張る ToBe と AsIs の距離を測り そのギャップを埋めていくべくテストを設計する ToBe が AsIs に一致したら次の ToBe を定義する これは PDCA サイクルにほかならない

GTD と TDD が似ている点 心に着目している 開ループが生産性に与えるダメージ 一度に一つのことのみを相手とする 次の一手は?

EoT (Ease of Testing) テストしやすい設計が 良い設計 責務が少なく はっきりしている コラボレータが少ない 一般的な良い設計 ( 凝集度が高く 結合度が低い )

おわりに Developer Testing はスキルです つまり習得可能です 写経してみましょう Developer Testing で健康的なプログラマ人生を

Enjoy Testing!

Special Thanks かくたにさん チームかくたにのメンバー JavaEE 勉強会 および世話人の角田 セレブ 直行さん kdmsnr さん 溝口八郎右衛門さん Kent Beck 氏 オブラブスタッフの皆様 会場にお越しくださった皆様 そして masarl さん

ご清聴 ありがとう ございました