2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

【TDD】テスト駆動開発【TestFirst】

1 :デフォルトの名無しさん:2010/09/19(日) 21:26:12 .net
テスト駆動開発 (test-driven development; TDD) について マターリ 語りましょう

ツールについては別スレで
テストツールについて語るスレ 2
http://hibari.2ch.net/test/read.cgi/tech/1208013693/

508 :デフォルトの名無しさん:2015/03/07(土) 20:16:06.24 ID:lexZIoDv.net
>>506
何か変か?
仕様決める→テスト仕様書作成→プログラム設計→コーティング
なんだから仕様が変わる度にテスト項目見直しだろ

509 :デフォルトの名無しさん:2015/03/07(土) 20:48:33.06 ID:evNQRu0c.net
>>508
変だろ
なんでそんな当たり前のことを述べる必要があるんだ
それとも>>505には何か深い意味があるのか?

510 :デフォルトの名無しさん:2015/03/16(月) 21:05:40.30 ID:OhH2Zqat.net
テストプログラムのテストというのはおかしいでしょうか。

例えば、アクションゲームの自動機能テストを行うために、
予め設定した大まかな指示通りに自動でコントローラーを入力する
仮想的なプレーヤーをプログラムしたとします。

このプログラムはゲームのリリースには含めないテストプログラムのひとつです。
しかし、正しく動くことが明らかなほどシンプルなプログラムではありません。
なので、この仮想プレーヤープログラムもテスト対象とすべきだと私は思います。

このような考え方はテスト駆動開発としては間違っているでしょうか。


テスト駆動を解説した本やWeb記述にもこのような状況のことは書かれていないような気がします。

511 :デフォルトの名無しさん:2015/03/16(月) 23:22:18.02 ID:iyRDLNI5.net
>>510
テスト駆動の考え方がわかってないだけ

512 :デフォルトの名無しさん:2015/03/17(火) 17:20:27.93 ID:Bw8e4yLM.net
テストプログラムのテストのテストというのはおかしいでしょうか。
テストプログラムのテストのテストのテストというのはおかしいでしょうか。
テストプログラムのテストのテストのテストのテストというのは可笑しいでしょうか。

513 :デフォルトの名無しさん:2015/03/17(火) 18:34:03.30 ID:vCwecCoL.net
>>510
> テストプログラムのテストというのはおかしいでしょうか。
別におかしくないが、そのこととTDDとは何の関係もない。

514 :511:2015/03/17(火) 19:28:49.00 ID:FrSWu1Dj.net
>>511
>>513
わかりました。
ありがとうございます。

515 :デフォルトの名無しさん:2015/03/17(火) 23:32:04.19 ID:c2oAi75i.net
意外と>>512が正しいのでは

516 :デフォルトの名無しさん:2015/03/17(火) 23:38:56.12 ID:k/LbPUX+.net
>>515
数学的に考えれば品物が上がらない事は明白だろう?

517 :デフォルトの名無しさん:2015/03/20(金) 15:48:44.47 ID:4UXRNT4S.net
どこまでテストするかの話になると外部ライブラリだけでなくコンパイラやOSまで疑う必要がある
一昔前のコンパイラは多すぎてコンパイラのテストもやっていたな

518 :518:2015/03/20(金) 15:51:36.12 ID:4UXRNT4S.net
訂正
>一昔前のコンパイラは多すぎてコンパイラのテストもやっていたな
一昔前のコンパイラはバグが多すぎてコンパイラのテストもやっていた

519 :デフォルトの名無しさん:2015/03/31(火) 18:51:00.25 ID:855buxIJ.net
Kindleでこんな本が発売されたのを発見。
読んでないので内容は全くわからないが、目次を見る限り、よさげな気もする。

『これからはじめるTDD テスト駆動開発入門 (Think IT Books)』 \1,400
http://www.amazon.co.jp/dp/B00VFQ7WCM

> エクストリーム・プログラミングのプラクティスのひとつであるテスト駆動開発(TDD)について、
> 聞いたことはあるけれど内容は知らない方、概要は知っているけれど実際に使ったことが
> ない方を対象に、全7章にわたってご説明していきます。アジャイルをかじった程度の開発
> 経験の浅いプログラマと、TDD開発を実践しているプロジェクトリーダーによる会話形式で
> 楽しくTDDを学びましょう。本書は、インプレスが運営するWebメディア「Think IT」で、「マル
> チプラットフォーム対応のゲーム開発エンジンUnityを体験する」として連載された技術解説
> 記事を電子書籍およびオンデマンド書籍として再編集したものです。

520 :デフォルトの名無しさん:2015/03/31(火) 21:27:32.21 ID:D90KPxNw.net
ステマ乙。目次どこにあるんだよ。

521 :デフォルトの名無しさん:2015/03/31(火) 21:42:50.98 ID:D90KPxNw.net
あとUnityどこに関係するんだ?amazonの紹介文修正しとけよ。

522 :デフォルトの名無しさん:2015/04/01(水) 10:34:19.69 ID:MxSupW0l.net
>>520
TDDの本なんてめったに出ないから紹介しただけだし。
目次は
http://book.impress.co.jp/books/1114170210
にある。
俺はTDD初心者じゃないから買わないけど。

523 :523:2015/04/02(木) 10:30:42.33 ID:DnwfhgCI.net
ステマ言われたんで買ってみた。
40分で2/3位読めた(コード入力してないから)。
内容はTDDを全く知らない人向け。誤植を何カ所か見つけた。
DHHのTDD is deadについても言及があるが、及び腰で全くなってない。

524 :523:2015/04/03(金) 13:21:39.26 ID:C7O2gbfJ.net
読み終わったけど、全然駄目だった。
やはり、自分が読まないとお薦めしてはいけないね。

筆者は、TDDをテスト手法でもあると勘違いしてる気がする。

誤った要件理解をTDDのテストがFailすることで発見する場面が何度か出てくるが、
TDDでテストがFailするのは、基本的に最初にテストを実装・実行するときと、自分の
意図したものが正しく実装できなかったか、あるいは、リファクタリングで何かを壊した
ときかのどれか。
まあ、期待値が間違ってたということもあるけど、それは要件を間違って理解したと
いうことではない。

この本の例に則して言えば、例えばボーリングで一投目から、{(3, 7), (G, 3)}と投げた
ときのスコアを13点ではなくて16点だと誤った思い込みをしたとき(期待値を間違った
わけではなくて、スペアのボーナスは、次に初めて獲得した点数だと思い込む)、
TDDというはその誤った思い込みによるスコア体系を正しく実装する手段でしかない。

525 :デフォルトの名無しさん:2015/05/29(金) 14:19:57.76 ID:McOxVkvH.net
TDDを行った時にぶつかった7つの壁
http://qiita.com/syou007/items/7d6fdf1b7b6245a07bce

526 :デフォルトの名無しさん:2015/05/29(金) 15:10:31.84 ID:McOxVkvH.net
TDDに関する議論をググってみて見つけたページ。

TDDをめぐる、最近の議論についての私見。
http://blog.fieldnotes.jp/entry/2014/05/07/225129

完全に同意。
TDDは、
> 開発者テストのレベルで「開発者の思ったとおりに動く」ことが保証
されるようにするもの。
そしてそれを使って
> テストによって開発が駆動されること
を目指すもの。

527 :デフォルトの名無しさん:2015/05/30(土) 01:18:13.85 ID:3k4mu06XW
> 各種プラクティスと連携して、初めてその力を発揮します
これがクソ面倒くさいから流行らないんだろ

528 :デフォルトの名無しさん:2015/06/01(月) 10:17:17.81 ID:4t8ilUI7.net
>>525
TDDと、品質保証のための自動テストによる単体テストを、完全に混同してる。

529 :デフォルトの名無しさん:2015/09/23(水) 22:50:15.66 ID:nPFFi/Oi.net
qiitaにマジレス

530 :デフォルトの名無しさん:2015/09/29(火) 22:12:17.46 ID:diX6sJrx.net
テスト駆動開発はゴミクズ

531 :デフォルトの名無しさん:2015/11/26(木) 08:24:06.20 ID:Dizh+t9P.net
Test-Driven Development is Stupid
http://geometrian.com/programming/tutorials/testing/test-first.php

532 :デフォルトの名無しさん:2015/11/26(木) 10:12:43.24 ID:wjty/3s6.net
>>531
ここにも勘違いしてる奴がいた
TDDはよりよい設計をもたらすものじゃない

TDDは、自分が正しいと思った設計で、それをコーディングするときに、テストの力を借りて
確信を得ながらコーディングするための手法だ

「自分が正しいと思った設計」が「Good Design」じゃない奴は、どんな開発手法を使っても
自動的には「Good Design」にはならない

533 :デフォルトの名無しさん:2015/11/27(金) 17:53:44.15 ID:c/N8jVfb.net
ほんそれ

534 :デフォルトの名無しさん:2015/11/27(金) 18:02:19.08 ID:Ib2iKJmv.net
>>532
TDDは、自分が正しく無い設計を選んでしまったときに、少しでも早くその事を知り、フィードバックするための手法だよ。

535 :デフォルトの名無しさん:2015/11/27(金) 18:06:37.23 ID:c/N8jVfb.net
>正しく無い設計

この「無い」の漢字の使い方は可笑しい

これフィードバックな

536 :デフォルトの名無しさん:2015/11/27(金) 18:29:00.24 ID:R6S7u3+S.net
>>534
コードを全て実装した後でテストが失敗したとき、それは
・間違った実装をした
・テストの期待値が間違っていた
というのがわかる位だよ。

正しくない設計(というか稚拙な実装)でも、正しい結果(期待値と合致する)であれば、
たいていは気づかない。

537 :デフォルトの名無しさん:2015/11/28(土) 22:21:29.95 ID:bl9Uvb4J.net
三大期待しすぎてガッカリされる手法
オブジェクト指向
リファクタリング
TDD

538 :デフォルトの名無しさん:2015/11/29(日) 11:20:08.54 ID:Qj6U8mrf.net
オブジェクト指向が手法?

539 :デフォルトの名無しさん:2015/11/29(日) 12:57:18.55 ID:MDC+yNGn.net
>>535
喜んで頂けて幸いです。

540 :デフォルトの名無しさん:2015/11/29(日) 14:50:26.11 ID:ywUk37EG.net
>>536
TDDなんだから、コードを全て実装する前のテストの実装の段階でも、テストのしやすさやテスト観点、インターフェース名称などで何か気付くことがあるし、テストの失敗の仕方でもフィードバックを得られる。
テストは漫然とやるのではなく、情報収集の手段だと考えてやることが大事だよ。

541 :デフォルトの名無しさん:2015/11/30(月) 11:50:49.60 ID:l98GVpDh.net
>>540
> TDDなんだから、コードを全て実装する前のテストの実装の段階でも、テストのしやすさやテスト観点、インターフェース名称などで何か気付くことがあるし、テストの失敗の仕方でもフィードバックを得られる。

そういうことを経てTDD用のテストとコードが完成したとき、その設計がGood Designではないと
いうことは気づかないということだよ。

テスト容易性やネーミングは、Good Designのほんの一部。

542 :デフォルトの名無しさん:2015/11/30(月) 15:39:28.85 ID:NGwAlAWY.net
>>541
そりゃTDDのプロセスが1周すれば、残るのはTDDでは気付けない事や割りに合わないことが残るに決まってるよね。

TDDが完全に役に立たないと言いたいのではなくて、より良い設計を目指す手法としては割りに合わないと言いたいのだと思うけど、ではTDDより良い手法としては何があると主張してるのかな?

543 :デフォルトの名無しさん:2015/11/30(月) 16:20:33.71 ID:l98GVpDh.net
>>542
勘違いしてるかもしれないけど、俺は超TDD派だし、日々TDDでコーディングしてる。
ただ、TDDはよりよい設計を導き出す手法ではないと言ってるだけ。

もう少し言うと、「気付けない事」の中には「思い込みバグ」なんかも含まれる。
自分がそれが正しいと思ったら、それが正しくあるようなテストとコードを書くため、
それがバグであることがわからない。
もちろん、要求仕様との乖離があってもわからない。

TDDはそういうものを検出するものではない。

544 :デフォルトの名無しさん:2015/11/30(月) 20:00:07.27 ID:JmXUnbN0.net
TDDは万能薬じゃないって解っていればOKなのだが、TDDのテストが通るからOKみたいなのはあり得ないってだけでしょう?
想定していない事態はTDDじゃ検出できない(想定外の事が起きたときに加える事は当然だけど)

テストは自分の想定している事態に対してコードが正常であるって保証をプログラマに与えてくれるだけでしかないって言う部分がなぜか万能薬みたいに語られるのってエヴァンジェリストが悪いとしか思えない。

545 :デフォルトの名無しさん:2015/12/01(火) 11:33:20.20 ID:Fb8Lo38E.net
>>544
俺に対して何を言いたいのか良くわからないが、俺は
>>534
> TDDは、自分が正しく無い設計を選んでしまったときに、少しでも早くその事を知り、フィードバックするための手法だよ。
を否定しただけだよ。

546 :デフォルトの名無しさん:2015/12/01(火) 11:36:18.07 ID:Fb8Lo38E.net
>>544
> テストは自分の想定している事態に対してコードが正常であるって保証をプログラマに与えてくれるだけでしかないって言う部分がなぜか万能薬みたいに語られるのってエヴァンジェリストが悪いとしか思えない。
エヴァンジェリストは、「○○は万能薬ではない」って大抵言ってると思うが。

「○○は万能薬」と思う(勘違いする)のは、良くわかってない奴か、「○○は万能薬だと言われている」
ことにしてdisりたい奴だけじゃないの?

547 :デフォルトの名無しさん:2015/12/01(火) 13:00:01.79 ID:j87epvlp.net
>>543
どんな設計手法も、その手法を使わないよりも良い設計を目指すためにあると思うよ。
より良い設計というのはバグが無いという意味ではなくて、費用対効果の面で妥当な設計、と言い換えても良いけど。

新規の何らかのクラスを設計するときに、シーケンス図を書いて複数人でレビューしてから実装には入った方が費用対効果が高いのか、TDDで実装してから本体とテストコードをレビューした方が費用対効果が高いのか?
もし、TDDの方が高いとき、それは何故なのか?

っという観点の話にすれば、俺の主張は以下になる。

TDDはテストによってより早くフィードバックが得られるから費用対効果が高いが、そのフィードバックを解釈するのにも経験が必要で、テストが通りさえすれば良い、という考え方では効果は発揮できない。
また、レビューアにもフィードバックを解釈する能力が要求されるうえ、ペアプログラミングでない場合はテストがNGになった時点の情報が得られないため、設計者よりも少ない情報から設計を判断するための高い能力が必要になるかもしれない。
シーケンス図の方も書けば良い設計になるわけじゃないし、シーケンス図から問題点を読み解く能力が必要だが、おそらくTDDよりはレビューが易しい気がする。
だが、TDDのテストは実行可能ということが利点であり、レビューアが疑問があればテストを追加して実行することが出来る。これを利用すれば、費用対効果を更に高めることが出来るのではないか?

548 :デフォルトの名無しさん:2015/12/01(火) 14:07:41.90 ID:Fb8Lo38E.net
>>547
本当にTDDを理解して実戦しているのか疑わしいレベル。

> そのフィードバックを解釈するのにも経験が必要
意味がわからない。

テストによるフィードバックは失敗あるいは成功しかなく、正しく実装できたはずなのに失敗するのは、
・テストが間違っている
・正しく実装できたはずというのが思い違い
のどちらか、あるいはその両方しかなく、解釈もクソもない。

自分が書いたテストが失敗して、その原因もわからないレベルなら、それはTDDをする資格がない。
というか、そんな奴にプロダクトコード書かせるな。

> ペアプログラミングでない場合はテストがNGになった時点の情報が得られないため、
> 設計者よりも少ない情報から設計を判断するための高い能力が必要になるかもしれない。
これも意味がわからない。

> どんな設計手法も、その手法を使わないよりも良い設計を目指すためにあると思うよ。
そもそも、TDDは設計手法というより開発手法と言うべきで、極言すれば実装手法でしかない。

というか「よい設計」の定義が俺と大幅にずれてる気がする。
俺が思う「よい設計」というのは、例えば
・SOLID原則が守られている(あるいはそれほど重大な違反は無い)
・カプセル化が守られている
・メンテナンス性が良い(リーダビリティが良い)
・パフォーマンスが良い
などなど。

そういう意味の「よい設計」ができる奴は、TDDをしなくとも良い設計はできる。

549 :デフォルトの名無しさん:2015/12/01(火) 14:10:57.54 ID:Fb8Lo38E.net
あと、TDDにおける「素早いフィードバック」というのは、
・正しくテストが実装できたであろう実感(red -> green)
・思い通りのコードが実装できたであろう実感(green -> refactoring -> green)
だぞ。
設計が正しい、あるいは妥当であるというフィードバックではない。

550 :デフォルトの名無しさん:2015/12/04(金) 15:28:40.97 ID:dm9hxmiU.net
>>547
今時、シーケンス図を書いて複数人でレビューしてから実装に入るって、どんな分野のどれくらいの規模なの?
リファクタリングが一般化した現在、クラス図でさえ事前にかっちりしたもの書くと手戻りが発生していやがられるのに。

551 :デフォルトの名無しさん:2015/12/14(月) 22:58:51.50 ID:dPco7zPj.net
手戻りが嫌ならプログラムを書かなければいい

552 :デフォルトの名無しさん:2015/12/16(水) 07:23:08.19 ID:JxdBAlmf.net
それは言える
メタプログラミングでプログラムは自動生成にしておけば
手戻り発生しても仕様書直すだけで済む

553 :デフォルトの名無しさん:2016/02/14(日) 07:50:17.63 ID:KRGWcZPF.net
自動生成するプログラムの修正が必要になるだろタコ。

554 :デフォルトの名無しさん:2016/04/01(金) 19:49:18.66 ID:xvbiumjA.net
test

555 :デフォルトの名無しさん:2016/04/18(月) 21:10:16.12 ID:WJpLEkGK.net
カバレッジって自動じゃないテスト(ようは手動の結合テスト)でも使えんの?

556 :デフォルトの名無しさん:2016/04/18(月) 21:36:07.56 ID:QSS7pC1U.net

何を言ってるのかさっぱり理解できない

557 :デフォルトの名無しさん:2016/04/18(月) 22:20:56.27 ID:i/DZEEkh.net
>>555
使えるってどういう意味で?

総レス数 557
152 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★