SlideShare a Scribd company logo
オトナの
TDD入門
オトナのプログラミング勉強会
2018年2月21日
山ノ内祥訓
自己紹介
名前
年齢
住まい
お仕事
山ノ内 祥訓(よしのり)
0x26
熊本県
現在は某大学病院の特任助教で臨床研究のデータ
マネージャとして主に臨床研究データに関する設
計及び開発と運用をやっています。
某SIerで医療情報システムの導入及び開発を10年
ぐらいやっていました。
SNS Facebook https://www.facebook.com/yoshinori.yamanouchi.12
Github https://github.com/eolla1013
資格等 修士(医科学) 現在博士課程
医療情報技師
Yoshinori Yamanouchi
今日のお話
テスト駆動開発(TDD)の概要
TDDの実践
実際の開発現場でのTDD
テスト駆動開発とは
Test Driven Development
プログラム開発手法の一種で、プログラムに必要な各機能に
ついて、最初にテストを書き(これをテストファーストと言
う)、そのテストが動作する必要最低限な実装をとりあえず
行った後、コードを洗練させる、という短い工程を繰り返す
スタイルである。多くのアジャイルソフトウェア開発手法、
例えばエクストリーム・プログラミングにおいて強く推奨さ
れている。
(Wikipediaより引用)
TDDのきっかけ
テスト駆動開発
オブジェクト指向
設計
プログラムの大規模化
(複雑化)
アジャイル開発
ものの本によるとTDDの最初は1957年だそうな・・・
プログラムの大規模化(複雑化)
• プログラムが大規模化するにつれて開発効率を高め
るためにレイヤ化や部品化が進んだ。
• 実装したプログラムをテストするにはすべての部品
がそろわなければできない。
• バグがどの部品にあるか調査に時間がかかる。表面
上バグがあっても埋もれてしまう。
実装 実装 実装 実装
テ
ス
ト
View Controller Model Database
オブジェクト指向設計
• 構造化設計では対応できない規模のソフトウェア開
発を行うために使用されはじめた。
• カプセル化、継承、多態といったオブジェクト指向
プログラミングの要素を使用したレイヤ間、部品間
の疎結合が簡単にできるようになった。
アジャイル開発
• 仕様を固定せず必要な機能だけを優先順位をつけて
順次開発していくことで本来必要なものに近いシス
テムが開発できる。が、繰り返し開発を行うため影
響度調査やテストの負荷が高くなった。
• ウォーターフォール開発では仕様を最初に固定し最
後に完成物が引き渡されるため仕様の齟齬が発生し
やすく、本来必要なものが開発できずトラブルにな
ることが多かった。
設計
実装
テスト
リリース
実装時に品質を高める
• 必要な部品を全て作った後にテストするのではなく、
部品ごとにテストを行えれば・・・
• 他の人の作った部品をどうやって使うのかがわから
ない・・・
• 機能の変更や追加で他に影響が出ていないか調べる
時間が足りない・・・
そこでテスト駆動開発!!
TDDの流れ
 新規実装・実装変更の場合
①新しいテストをテストコードとして実装。
②テストを実行し新しいテストが失敗することを確認
(逆にそれ以外のテストは成功することも確認する)。
③プロダクトコードを実装してテストを実行し新しい
テストが成功することを確認。
④リファクタリングを実施しプロダクトコードを改善。
TDDの流れ
 リファクタリングの場合
①テストを実行しすべてのテストが成功することを確認。
②プロダクトコードをリファクタリングする。
③テストを実行しすべてのテストが成功することを確認。
④テストが失敗したらどこかに変更箇所の影響が及んでい
るのでそれを変更しすべてのテストが成功すれば完了。
TDDで使われるツール
 ユニットテストフレームワーク
「xUnit」という名前で呼ばれるテスト用のフレーム
ワーク。Xには各言語の名前が入ることで多くの言語で
同じような使い方ができる。
 継続的インテグレーションツール(CI)
実装からテストまでを自動実行し統合管理するための
ツール。最近はリリース作業となるデプロイまで含めた
CI/CDと呼ばれる。
TDDの注意点
 検証プロセスとしてのテストと一緒にしない
あくまでTDDで実装されたテストコードは、実装中に動
作が不安なプロダクトコードをなくし、プロダクトコー
ドが変更で壊れないことを確認するためのもの。副次的
に検証プロセスの一部として使える場合もある(カバレッ
ジや再帰テスト)がそれを目的にしない。
 最初にすべての仕様に対するテストを書かない
TDDのキモは細かく実装しそのテストを実行して確認を
繰り返すことでプロダクトコードを成長させること。仕
様が分かっているからといって最初に全部書かない。
では実践してみましょう
配布されたアカウントでCloud9にログインして、
pythonの新規プロジェクトを作成してください。
準備
テストコードを実装するファイルとプロダクト
コードを実装するファイルの2つ作成します。
tddhandson.py
tddhandson_test.py
プロダクトコード
(実際にシステムで使うコード)
テストコード
(プロダクトコードをテストする
ためのコード)
※多くの場合はフォルダを分けますが
今回は一緒のフォルダに置きます。
お題「FizzBazz」
二つの整数を渡すとその間の整数を全て文字列配列
で返す。ただし、整数が3で割り切れる場合
は”Fizz”、5で割り切れる場合は”Bazz”、3と5で割
り切れる場合は”FizzBazz”に置き換えること。
実装するクラスは「FizzBazzCreator」、
使用するメソッドは「create」とする。
テストコードの実装(0)
Pythonのユニットテストフレームワークとして
「unittest」があります。これを実装して実行して
みます。
実行すると「FAILD」と表示されると思います。これ
を「OK」になるようにテストコードを修正しましょう。
プロダクトコードの実装(0)
お題に記載した通りクラスとメソッドを定義します。
実装は空でOKです。
テストコードの実装(1-1)
仕様として一番最小のもののテストを実装します。
仕様は「二つの整数の差の数分の要素を持つリスト
が返ってくること」です。
実装後実行してみてください。
TypeError: object of type 'NoneType' has no len()
というエラーでFAILDになるはずです。
プロダクトコードの実装(1-2)
テストコードが成功するようにプロダクトコードを
実装します。
テストの実行(1-3)
テストを実行し成功することを確認します。
テストコードの実装(2-1)
次の仕様は「配列に整数が文字列として順番通り並
んでいること」です。
実装後実行してみてください。
AssertionError: '' != '1'
というエラーでFAILDになるはずです。
プロダクトコードの実装(2-2)
テストコードが成功するようにプロダクトコードを
実装します。
テストの実行(2-3)
テストを実行し成功することを確認します。
テストコードの実装(3-1)
次の仕様は「3で割り切れる要素は”Fizz”であるこ
と」です。
実装後実行してみてください。
AssertionError: '3' != 'Fizz‘
というエラーでFAILDになるはずです。
プロダクトコードの実装(3-2)
テストコードが成功するようにプロダクトコードを
実装します。
テストの実行(3-3)
テストを実行し成功することを確認します。
テストコードの実装(4-1)
次の仕様は「5で割り切れる要素は”Bazz”であるこ
と」です。
実装後実行してみてください。
AssertionError: ‘5' != 'Bazz‘
というエラーでFAILDになるはずです。
プロダクトコードの実装(4-2)
テストコードが成功するようにプロダクトコードを
実装します。
テストの実行(4-3)
テストを実行し成功することを確認します。
テストコードの実装(5-1)
最後の仕様は「3と5で割り切れる要素は”FizzBazz”
であること」です。
実装後実行してみてください。
AssertionError: ‘Bazz' != ‘FizzBazz‘
というエラーでFAILDになるはずです。
プロダクトコードの実装(5-2)
テストコードが成功するようにプロダクトコードを
実装します。
テストの実行(5-3)
テストを実行し成功することを確認します。
リファクタリング
今回のお題はそんなにリファクタリングする個所も
ないので省略。実際は仮実装も多いのでリファクタ
リングを行います。
また、仕様自体に抜けがある場合が見つかった時は
追加でテストを書いておきます(今回の例ではa<b
であること、とか)。
実際の開発現場での例
今回のハンズオンではロジックだけなので簡単です
が実際のシステムは多くの要素が絡まりTDDを実践
しにくいことがあります。
そんな時どうやってユニットテストを行っているか
パターン別に紹介します。
データベースアクセス
 何が厄介なのか
 対応策
• データベースがないとテストができない。
• データが永続化されるのでテストの独立性が保た
れない。
似たような事例として通信やファイル入出力がある。
• データベースとのやり取りを別クラスとする
(Repositoryパターン等)。
• ユニットテスト用のモックオブジェクトを作る。
• データベースアクセス専用のテストフィーチャー
を別に作る。
• 各テストの開始終了でDBのロードとクリアを行う。
ユーザインターフェース
 何が厄介なのか
 対応策
• 人が画面で操作することが前提。
• 操作前後の表示の違いを把握する必要がある。
• 画面は表示と操作受付の最小限実装とし実際は別
クラスで実装する(ViewModelパターン等)。
• UIテストフレームワークを使用する。
• あきらめる(そもそもTDDは検証用ではない)。
並列処理
 何が厄介なのか
 対応策
• 動作順が不定なので決められた動作をしない。
• 並列処理は他のスレッドに影響が出ないように設
計する。
• 直列処理を行うようなモックオブジェクトを作り
順番を変えてテストする。
• 並列処理のテストを何百回も実行するようなテス
トを別のテストフィーチャーとして作る(運任せ)。
プライベートメソッド&フィールド
 何が厄介なのか
 対応策
• テスト側から呼び出すことができない。
• テストしたいメソッドやフィールドはprivateにせ
ずprotectedとし、継承したモックオブジェクトで
テストする。
• ユニットテストフレームワークによってはこれに
対応する機能があったりする。
• リフレクションを使用する。
テストの粒度
 何が厄介なのか
 対応策
• どこまでテストを書けばわからない。
• 実装中に気になる処理だけを書く。
• 途中経過を確認したい処理だけ書く。
• テスト実行時にカバレッジが80~90%ぐらいにな
るまで書く。
一般的なテスト項目はTDDとして実装しない!!
まとめ
名前で誤解されることの多いTDDですが、実装の質と効率を
上げる役割を持っています。そのため、TDDではなく振る舞
い駆動開発(Behavior Driven Development;BDD)という名
前で呼ぶ人もいます。
BDDでは、TDDから一歩進んでテストコードがクラス仕様書
の代わりとなり、そのクラスを使う人に対してどうやって使
えばよいかを示すことも求められてきます(テストコードのコ
メントに仕様の説明や注意点を書いたりする)。
というわけで皆さん使っていきましょう!!

More Related Content

What's hot

リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計
増田 亨
 
Redmineとgitの 連携利用事例
Redmineとgitの 連携利用事例Redmineとgitの 連携利用事例
Redmineとgitの 連携利用事例
Tomohisa Kusukawa
 
GitHubの機能を活用したGitHub Flowによる開発の進め方
GitHubの機能を活用したGitHub Flowによる開発の進め方GitHubの機能を活用したGitHub Flowによる開発の進め方
GitHubの機能を活用したGitHub Flowによる開発の進め方
Takeshi Mikami
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
 
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
増田 亨
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
Hajime Yanagawa
 
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
Kenji Hiranabe
 
機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計
Takahiro Kubo
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
 
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
増田 亨
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
Takuto Wada
 
先駆者に学ぶ MLOpsの実際
先駆者に学ぶ MLOpsの実際先駆者に学ぶ MLOpsの実際
先駆者に学ぶ MLOpsの実際
Tetsutaro Watanabe
 
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
NTT DATA Technology & Innovation
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
増田 亨
 
私にとってのテスト
私にとってのテスト私にとってのテスト
私にとってのテスト
Takuto Wada
 
SSII2022 [TS2] 自律移動ロボットのためのロボットビジョン〜 オープンソースの自動運転ソフトAutowareを解説 〜
SSII2022 [TS2] 自律移動ロボットのためのロボットビジョン〜 オープンソースの自動運転ソフトAutowareを解説 〜SSII2022 [TS2] 自律移動ロボットのためのロボットビジョン〜 オープンソースの自動運転ソフトAutowareを解説 〜
SSII2022 [TS2] 自律移動ロボットのためのロボットビジョン〜 オープンソースの自動運転ソフトAutowareを解説 〜
SSII
 
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
増田 亨
 
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
増田 亨
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
 
RedmineのFAQとアンチパターン集
RedmineのFAQとアンチパターン集RedmineのFAQとアンチパターン集
RedmineのFAQとアンチパターン集
akipii Oga
 

What's hot (20)

リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計
 
Redmineとgitの 連携利用事例
Redmineとgitの 連携利用事例Redmineとgitの 連携利用事例
Redmineとgitの 連携利用事例
 
GitHubの機能を活用したGitHub Flowによる開発の進め方
GitHubの機能を活用したGitHub Flowによる開発の進め方GitHubの機能を活用したGitHub Flowによる開発の進め方
GitHubの機能を活用したGitHub Flowによる開発の進め方
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
 
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
 
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
 
機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
先駆者に学ぶ MLOpsの実際
先駆者に学ぶ MLOpsの実際先駆者に学ぶ MLOpsの実際
先駆者に学ぶ MLOpsの実際
 
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
 
私にとってのテスト
私にとってのテスト私にとってのテスト
私にとってのテスト
 
SSII2022 [TS2] 自律移動ロボットのためのロボットビジョン〜 オープンソースの自動運転ソフトAutowareを解説 〜
SSII2022 [TS2] 自律移動ロボットのためのロボットビジョン〜 オープンソースの自動運転ソフトAutowareを解説 〜SSII2022 [TS2] 自律移動ロボットのためのロボットビジョン〜 オープンソースの自動運転ソフトAutowareを解説 〜
SSII2022 [TS2] 自律移動ロボットのためのロボットビジョン〜 オープンソースの自動運転ソフトAutowareを解説 〜
 
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
 
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 
RedmineのFAQとアンチパターン集
RedmineのFAQとアンチパターン集RedmineのFAQとアンチパターン集
RedmineのFAQとアンチパターン集
 

Similar to オトナのTDD(テスト駆動開発)入門

プログラミング勉強会「オトナのGit入門」
プログラミング勉強会「オトナのGit入門」プログラミング勉強会「オトナのGit入門」
プログラミング勉強会「オトナのGit入門」
Yoshinori Yamanouchi
 
初めてさわるEC2ロール
初めてさわるEC2ロール初めてさわるEC2ロール
初めてさわるEC2ロール
Yoshinori Yamanouchi
 
FHIR on python
FHIR on pythonFHIR on python
FHIR on python
Yoshinori Yamanouchi
 
SORACOM CLIを使ってみよう
SORACOM CLIを使ってみようSORACOM CLIを使ってみよう
SORACOM CLIを使ってみよう
Yoshinori Yamanouchi
 
Azureミニセミナー(ハンズオン編)
Azureミニセミナー(ハンズオン編)Azureミニセミナー(ハンズオン編)
Azureミニセミナー(ハンズオン編)
Yoshinori Yamanouchi
 
Azureミニセミナー(セミナー編)
Azureミニセミナー(セミナー編)Azureミニセミナー(セミナー編)
Azureミニセミナー(セミナー編)
Yoshinori Yamanouchi
 
河野ゼミ紹介2013
河野ゼミ紹介2013河野ゼミ紹介2013
河野ゼミ紹介2013
義広 河野
 
医療×AIシンポジウム -医療×AI推進人材を考える- 報告書
医療×AIシンポジウム -医療×AI推進人材を考える- 報告書医療×AIシンポジウム -医療×AI推進人材を考える- 報告書
医療×AIシンポジウム -医療×AI推進人材を考える- 報告書
Deep Learning Lab(ディープラーニング・ラボ)
 
Hcopイノベーション
HcopイノベーションHcopイノベーション
Hcopイノベーション
Yasuji Suda
 
Decentralized identity
Decentralized identityDecentralized identity
Decentralized identity
Takao Tetsuro
 
mizuderuからnekoderuへ
mizuderuからnekoderuへmizuderuからnekoderuへ
mizuderuからnekoderuへ
Yoshinori Yamanouchi
 
ビッグデータとクラウドソーシング
ビッグデータとクラウドソーシングビッグデータとクラウドソーシング
ビッグデータとクラウドソーシング
tokyowebmining-common
 
オーブンデータによる大学Ir情報システムの可能性 プレゼン資料
オーブンデータによる大学Ir情報システムの可能性 プレゼン資料オーブンデータによる大学Ir情報システムの可能性 プレゼン資料
オーブンデータによる大学Ir情報システムの可能性 プレゼン資料
Masao Mori
 
教育領域への人工知能活用の現状と、それを支えるデータ環境について
教育領域への人工知能活用の現状と、それを支えるデータ環境について教育領域への人工知能活用の現状と、それを支えるデータ環境について
教育領域への人工知能活用の現状と、それを支えるデータ環境について
静厳 萩原
 
SIerでのAI社内啓蒙の取り組み
SIerでのAI社内啓蒙の取り組みSIerでのAI社内啓蒙の取り組み
SIerでのAI社内啓蒙の取り組み
Daisuke Okamoto
 
開発者からサポートエンジニアにジョブチェンジした話
開発者からサポートエンジニアにジョブチェンジした話開発者からサポートエンジニアにジョブチェンジした話
開発者からサポートエンジニアにジョブチェンジした話
Ito Takayuki
 
JTF2016 The strategy and Sun Tzu
JTF2016 The strategy and Sun TzuJTF2016 The strategy and Sun Tzu
JTF2016 The strategy and Sun Tzu
irix_jp
 
教員免許状更新講習20150730
教員免許状更新講習20150730教員免許状更新講習20150730
教員免許状更新講習20150730
義広 河野
 
[G-Tech2015]攻めのIT活用に欠かせない「IT企画人材」育成のポイント[講演資料]
[G-Tech2015]攻めのIT活用に欠かせない「IT企画人材」育成のポイント[講演資料][G-Tech2015]攻めのIT活用に欠かせない「IT企画人材」育成のポイント[講演資料]
[G-Tech2015]攻めのIT活用に欠かせない「IT企画人材」育成のポイント[講演資料]
Trainocate Japan, Ltd.
 
NLPソリューション開発の最前線_DLLAB_自然言語処理ナイト_200702
NLPソリューション開発の最前線_DLLAB_自然言語処理ナイト_200702NLPソリューション開発の最前線_DLLAB_自然言語処理ナイト_200702
NLPソリューション開発の最前線_DLLAB_自然言語処理ナイト_200702
小川 雄太郎
 

Similar to オトナのTDD(テスト駆動開発)入門 (20)

プログラミング勉強会「オトナのGit入門」
プログラミング勉強会「オトナのGit入門」プログラミング勉強会「オトナのGit入門」
プログラミング勉強会「オトナのGit入門」
 
初めてさわるEC2ロール
初めてさわるEC2ロール初めてさわるEC2ロール
初めてさわるEC2ロール
 
FHIR on python
FHIR on pythonFHIR on python
FHIR on python
 
SORACOM CLIを使ってみよう
SORACOM CLIを使ってみようSORACOM CLIを使ってみよう
SORACOM CLIを使ってみよう
 
Azureミニセミナー(ハンズオン編)
Azureミニセミナー(ハンズオン編)Azureミニセミナー(ハンズオン編)
Azureミニセミナー(ハンズオン編)
 
Azureミニセミナー(セミナー編)
Azureミニセミナー(セミナー編)Azureミニセミナー(セミナー編)
Azureミニセミナー(セミナー編)
 
河野ゼミ紹介2013
河野ゼミ紹介2013河野ゼミ紹介2013
河野ゼミ紹介2013
 
医療×AIシンポジウム -医療×AI推進人材を考える- 報告書
医療×AIシンポジウム -医療×AI推進人材を考える- 報告書医療×AIシンポジウム -医療×AI推進人材を考える- 報告書
医療×AIシンポジウム -医療×AI推進人材を考える- 報告書
 
Hcopイノベーション
HcopイノベーションHcopイノベーション
Hcopイノベーション
 
Decentralized identity
Decentralized identityDecentralized identity
Decentralized identity
 
mizuderuからnekoderuへ
mizuderuからnekoderuへmizuderuからnekoderuへ
mizuderuからnekoderuへ
 
ビッグデータとクラウドソーシング
ビッグデータとクラウドソーシングビッグデータとクラウドソーシング
ビッグデータとクラウドソーシング
 
オーブンデータによる大学Ir情報システムの可能性 プレゼン資料
オーブンデータによる大学Ir情報システムの可能性 プレゼン資料オーブンデータによる大学Ir情報システムの可能性 プレゼン資料
オーブンデータによる大学Ir情報システムの可能性 プレゼン資料
 
教育領域への人工知能活用の現状と、それを支えるデータ環境について
教育領域への人工知能活用の現状と、それを支えるデータ環境について教育領域への人工知能活用の現状と、それを支えるデータ環境について
教育領域への人工知能活用の現状と、それを支えるデータ環境について
 
SIerでのAI社内啓蒙の取り組み
SIerでのAI社内啓蒙の取り組みSIerでのAI社内啓蒙の取り組み
SIerでのAI社内啓蒙の取り組み
 
開発者からサポートエンジニアにジョブチェンジした話
開発者からサポートエンジニアにジョブチェンジした話開発者からサポートエンジニアにジョブチェンジした話
開発者からサポートエンジニアにジョブチェンジした話
 
JTF2016 The strategy and Sun Tzu
JTF2016 The strategy and Sun TzuJTF2016 The strategy and Sun Tzu
JTF2016 The strategy and Sun Tzu
 
教員免許状更新講習20150730
教員免許状更新講習20150730教員免許状更新講習20150730
教員免許状更新講習20150730
 
[G-Tech2015]攻めのIT活用に欠かせない「IT企画人材」育成のポイント[講演資料]
[G-Tech2015]攻めのIT活用に欠かせない「IT企画人材」育成のポイント[講演資料][G-Tech2015]攻めのIT活用に欠かせない「IT企画人材」育成のポイント[講演資料]
[G-Tech2015]攻めのIT活用に欠かせない「IT企画人材」育成のポイント[講演資料]
 
NLPソリューション開発の最前線_DLLAB_自然言語処理ナイト_200702
NLPソリューション開発の最前線_DLLAB_自然言語処理ナイト_200702NLPソリューション開発の最前線_DLLAB_自然言語処理ナイト_200702
NLPソリューション開発の最前線_DLLAB_自然言語処理ナイト_200702
 

オトナのTDD(テスト駆動開発)入門