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

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2010/09/19(日) 21:26:12
テスト駆動開発 (test-driven development; TDD) について マターリ 語りましょう

ツールについては別スレで
テストツールについて語るスレ 2
http://hibari.2ch.net/test/read.cgi/tech/1208013693/
2014/10/16(木) 13:56:42.86ID:+afjrAmT
>>433
定義あるいは明示されていない異常が発生して鼻から悪魔が出ても、それは俺のせいじゃないから
問題ないという主義ですか?
2014/10/16(木) 17:14:14.25ID:CsOFEKWu
まるで公務員の主張だな
2014/10/16(木) 19:29:56.64ID:z4r7htJV
一緒に仕事したくねーな
2014/10/16(木) 21:49:07.00ID:6zTGqYum
縦割りはそういうもの
2014/10/17(金) 01:41:12.71ID:QJMYKMHi
担当者が設計と開発で分かれているなら>>433が正しい

開発の見積もりは「この仕様(設計書)通りに作ったら○○人月」で算出してるわけで
「異常系に漏れがないかチェックしろ、漏れてたら仕様に書いてなくても対応しろ」は
見積もり範囲外の作業だよ

予算が潤沢に貰えるなら「サービス」で対応するかもしれないが
そんなに潤ってるプロジェクトは滅多にないだろう
2014/10/17(金) 10:40:07.93ID:yP2f7CgA
>>438
設計する人は、たとえばファイルに保存するときに起こり得るエラー原因ごとにどう対処すべきかを
網羅したりするんですか?
2014/10/17(金) 11:21:29.10ID:HZvg3la9
printf() の戻り値見ろと言っているに等しい
2014/10/17(金) 15:20:26.07ID:bxyVopED
>>439
必要なら処理中の突然の電源断やディスクやメモリの破損なんかも網羅するよ
必要か(現実味があるか)どうかを切り分けるのが仕事だよ
2014/10/17(金) 16:05:39.88ID:yP2f7CgA
>>441
ちょっと議論するのめんどくさいんだけど、開発者の裁量内で判断する異常処理ってないのという疑問なんだけど。
そういう判断を一切する必要がない開発者は、エンジニアやプログラマとは呼ばずに、コーダーやパンチャーって呼ばれると思うんだけど。
2014/10/17(金) 22:32:13.59ID:i/Kzfu5g
>>442
たとえ一人でやっている場合でも、アーキテクチャ(何が起きるか)と、
インプリメンテーション(どう起こすか)は明確に分けるべき。
ましてや複数人でやるんなら、アーキテクチャが明示されることが必要。

少なくともユーザに仕様として提示されるものは、全てアーキテクチャなんで、
必要なファイルが無かったり、外部装置や EAI の接続先が故障していた場合
に"何が起きるか" は、アーキテクチャとして定義されなければならない。

どちらが、より創造的かということには意味はなくて、単に別の仕事。
2014/10/17(金) 22:37:06.62ID:i/Kzfu5g
TDD (BDD) には、インプリメンテーションをやるまえに
テストケースを作ってアーキテクチャを確認しようぜ
という意味も有る。
2014/10/18(土) 00:53:05.90ID:o6ZdOp19
そりゃプログラマだってアホじゃないんだから要件漏れ気づくこともあるよ
テストを作成していて漏れに気づくことだって多いしね

ただしそれを見つけたり直したりするのはプログラマの役目ではないし責任もない
優秀なプログラマなら「○○処理が漏れてますよ」と指摘だけして
どうしますか?対応するなら再見積もりしますね?で予算をふんだくる
2014/10/18(土) 12:25:58.33ID:/bV95tiS
なるほど
447デフォルトの名無しさん
垢版 |
2014/10/18(土) 15:13:02.82ID:mzkaImX0
>>445
あんた公務員か
2014/10/18(土) 15:19:28.52ID:r/p1CvCN
たぶんプログラマって言葉の定義が違うんじゃね
SE/PG世界のプログラマは普通のプログラマと別の概念
2014/10/18(土) 15:52:52.83ID:2d9yKbqY
>>439
Javaの例外は3種類あって、
プログラマが主に想定する例外は、Exception

Error
メモリ不足やハードウェアの故障など、
プログラムではどうにもならないもので、catchする必要がない

Exception
ファイルが読み書きできない、ネットワークがつながらないなど、
プログラムで想定できるもので、catchすべき

RuntimeException
NullPointerのチェックなど、
一々想定していると切りがないもので、catchしなくてもよい
2014/10/18(土) 16:24:30.31ID:L9rzpY5S
アーキテクチャをそんな意味で使うの初めて見た
2014/10/19(日) 00:06:51.41ID:GulnFHAj
>>440
> printf() の戻り値見ろと言っているに等しい

例外がない言語はそうなるから大変なんだよね。

例外がある言語ならすべての行でエラーが起きる可能性がある
という前提でプログラムしても全然負担にならないのに。
2014/10/20(月) 11:17:44.91ID:MhItlF5V
>>443
> たとえ一人でやっている場合でも、アーキテクチャ(何が起きるか)と、
> インプリメンテーション(どう起こすか)は明確に分けるべき。
> ましてや複数人でやるんなら、アーキテクチャが明示されることが必要。
ちょっと俺とは「アーキテクチャ」の使い方が違うようだ。

> 少なくともユーザに仕様として提示されるものは、全てアーキテクチャなんで、
ユーザに仕様として提示すべきものは「外部仕様」。
そして、その中には内部で使用するアーキテクチャは明示されるかもしれないし、明示されないかもしれない。

> 必要なファイルが無かったり、外部装置や EAI の接続先が故障していた場合
> に"何が起きるか" は、アーキテクチャとして定義されなければならない。
内部設計では、何が起きえて何をすべきかを網羅することは必要だが、外部仕様としてはそれらをすべて
含む必要はない。
2014/10/21(火) 17:54:15.96ID:LMlVzSKe
コードを書かない?設計者が、最終的に使用するミドルウェア・ライブラリ・APIに精通してる奴多すぎ。
んで、if (エラー条件)となる部分を全部設計書に明記するだって?
どんだけ分厚い設計書なんだよ。
2014/10/21(火) 17:56:11.27ID:LMlVzSKe
>>451
> 例外がある言語ならすべての行でエラーが起きる可能性がある
例外がありゃあったで、別に考えないといけないことも増えるんだけどね。
2014/10/22(水) 01:30:09.07ID:S8JTP3B8
>>453
冗談と思うかもしれないが、開発を海外に投げるときは
それくらいしないと酷いことになる
2014/10/22(水) 10:11:18.50ID:d0Ctl7Dm
>>455
オフショアの話なんて誰もしてないと思うが
2014/10/22(水) 12:52:41.64ID:G2nqW3Ft
>>455-456
わかるわ
日本人同士で日本語で会話しててもこうだもんな
2014/10/22(水) 13:54:32.30ID:d0Ctl7Dm
>>457
何を言いたいのかさっぱりわからん
確かに日本人同士でも話が通じることはまれかもな
2014/10/22(水) 18:54:17.18ID:LJFjeu5w
>>444

既に存在するスパゲティなCのプログラムがあるんだけど

これをテストしようとおもうんだが
どうしたらいいとおもう?

ちなみに全てのcファイルが
そのほかのcファイルのヘッダを全部インクルードしてて
隠蔽もクソもない。外部参照の鬼状態で
スタブを作るだけで気が遠くなりそうな状態
460デフォルトの名無しさん
垢版 |
2014/10/22(水) 19:01:41.56ID:11jX6UQ8
テストの使い方を間違ってる
2014/10/22(水) 19:16:11.80ID:wZt8Yc67
レガシーコード改善ガイド
2014/10/23(木) 13:10:10.45ID:YQ33Y8kR
>>459
> そのほかのcファイルのヘッダを全部インクルードしてて
まずここから改善していけば?
2014/10/23(木) 13:42:02.91ID:eDVkHXcG
よくよく見てみたら相互参照や循環が2〜3箇所で
それを除いて解きほぐしたら案外単純…ってことが多いんじゃないかな
2014/10/24(金) 01:19:22.31ID:ytrFsh/0
実装済みならE2Eテスト書けば
2014/10/25(土) 23:02:32.16ID:vC010Lko
スパゲティ
2014/11/08(土) 12:34:57.35ID:EW+rnnAz
パスタ
2014/11/09(日) 12:21:49.68ID:yjLcynWs
テスト駆動ってC0カバレッジの確認しづらくない
2014/11/09(日) 20:05:25.41ID:45yI7iTj
最後に確認して足りなきゃ足したら良いんじゃないの?
2014/11/09(日) 20:47:28.67ID:dsC9nPzL
お前はなんにもわかってない
2014/11/09(日) 20:56:21.42ID:iKzDg9OD
まさかC0を通すためにテストを書き直すとかやってるんじゃないだろうな・・・
2014/11/16(日) 09:33:56.00ID:ZyAZKYiT
>>470

TDDは開発手法だよ。
TDDと品質テストは、別物として考えるべき。これって、教科書の2,3ページくらい目に書かれている。

ただ、TDDのテストも品質テストに流用は可能だ。なので >468は良くわかっている人間だ。
2014/11/16(日) 10:04:32.62ID:chCKawZi
>>471
なんで俺にレス付けたのか知らんがそんなの知っとるがな
473459
垢版 |
2014/11/22(土) 19:34:49.92ID:Le0NeUvk
>>462
職場の製品プログラムなんで
末端の俺ごときがインクルードをいじると鬼のように罵倒される


なのにカバレッジテストの業務ルールを作れといわれたんだが
正直テストケースを書くだけで眩暈がする
境界値テストとかもはや不可能
2014/11/22(土) 19:48:51.79ID:2zfZYN6C
罵倒されるような人間にルール作りを任せる? ありえんわ
出来ても誰も守らねーだろう
適当に作っとけよ
2014/11/22(土) 19:56:54.71ID:2zfZYN6C
一応フォローしておくと>>473が悪いわけじゃない
依頼した上司が無能ってことだ

TDDに限ったことじゃないがルールは運用に乗せてこそ意味がある
権限の無いヤツにルール作らせたって回せるわけがない
2014/11/23(日) 14:05:47.05ID:YQdbMQXk
473-475は無能
2014/11/23(日) 14:26:41.19ID:GCb4Xc58
476がスゲー解決策を提示してくれるようです
2014/11/25(火) 11:06:37.29ID:S6K9qD6w
>>459
> そのほかのcファイルのヘッダを全部インクルードしてて
というのが、「その他の.cファイルがインクルードしてるファイルを、全部インクルードしている」という
意味なら、不要なインクルードファイルを削るのは何も問題がない(問題があればビルドできない)し、
メンテナンスコストが下がるという大きなメリットがある。

>>473
> 末端の俺ごときがインクルードをいじると鬼のように罵倒される
というような理由付けで上長(?)を説得できないほどの低レベルな職場なら、辞めてしまったほうが
いいんじゃないか。
2014/11/25(火) 23:45:47.25ID:Nxen9kpa
使ってないincludeをコメントアウトしただけで動かなくなることもあるからなぁ
末端のPGが勝手にいじるのもどうかと思うよ

組み込みとか古いプログラムだとよくあるんだよね
メモリ周りにバグがあって偶然動いているようなプログラムは
参照を外しただけでアドレスが狂って動かなくなる
2014/11/26(水) 19:32:04.26ID:iN5Oa4ie
組み込み系のひとが書くCなんてめちゃくちゃだよ
2014/11/27(木) 10:10:09.22ID:r+bsdp9/
>>480
それ単にその人がレベルが低かっただけじゃないか。
組み込み系の組織では、MISRA-Cを意識してるとこ多数だよ。
2014/12/22(月) 15:36:54.08ID:lSyDhRKu
組み込み系が酷くなかったいう話は聞いたことがない
自分たちはちゃんとやってるつもりだったのか
2014/12/22(月) 17:25:12.55ID:xehSPM0d
組み込み系が酷いということなら、業務系も酷いぞ
ゴミの寄せ集めだし
2014/12/24(水) 00:40:32.72ID:83J9p+C4
酷い方向が違うんだよな。
どっちも酷いのは多い
2014/12/25(木) 01:35:17.73ID:QeaHxHUz
組み込みや業務系が酷いと言われるのはライフサイクルが長いからだよ

それ以外のプロジェクトも実際はゴミばっかり
だけどそれが顕在化する前に淘汰されてサービスの終了を迎えてるってだけ
2014/12/31(水) 16:18:59.05ID:y3Bru/20
組み込みが酷いのはハードやコンパイラの制約によるもの
業務系が酷いのは要員のレベルのばらつきの大きさによるもの
2014/12/31(水) 16:49:50.16ID:eUm/9QT3
組み込みも要員のレベルとさせてくれ
環境があるのに頑なに適応せずに昔のままをやりたがる
2014/12/31(水) 16:55:18.42ID:vA2dnFSZ
>>487
ハード完成してなくてI/F仕様書もレビュー通ってないけどこれで実装お願い!
開発環境? ベストなものをお願いします!
って言われたことある?
2014/12/31(水) 17:19:00.28ID:JkDgdJ7S
>>488
ある、キーボードぶん投げた希有な事例だった。
割とマジで開発馬鹿にすんなゴルァって部長ですらぶち切れてた
2014/12/31(水) 17:36:35.58ID:5tzGTAD9
ソフト屋さんが仕様決めて!その通り作るからってのはあったな
おまえ回路図で線繋ぐだけかよって…
ハードのデバッグもソフト屋まかせな奴だったのでキレました
491デフォルトの名無しさん
垢版 |
2015/01/03(土) 22:02:59.55ID:kkg062go
亀レスだけど

>>481 組み込み系の組織では、MISRA-Cを意識してるとこ多数だよ。
MISRA-C て本当にまともなルール仕様か?

下を見て、こりゃ阿呆だと思っている。
20.7 R setjmpマクロ及びlongjmp関数は、用いてはならない。
2015/01/04(日) 00:56:12.46ID:inwAoRSs
下手な使い方して落とし穴掘られるリスクより
ハングさせてハードリセットする方がマシというケースも多い
2015/01/12(月) 00:20:00.80ID:qplG+w6a
でテスト駆動ってどうなのよ
2015/01/12(月) 00:22:31.65ID:qWf800EE
終わった
2015/01/12(月) 08:58:02.07ID:bBlSgM6z
テストなんて書くだけ無駄
コードとテストで仕事が2倍になるだけ
どうせ一回通ったら用済みなんだから書く必要ない
2015/01/14(水) 20:01:04.12ID:mbeKC74a
TDD by example 再出発
2015/01/14(水) 21:26:18.53ID:ZzJLW/vD
>>495
じゃあテスト仕様を先に作るだけなら問題ないの?
2015/01/18(日) 07:54:29.17ID:AOSxsRns
yes
2015/01/18(日) 09:12:40.34ID:geB77wKJ
一回通ったら用済みとか言ってる時点でまともな開発やったことない奴だってわかる
2015/01/18(日) 10:11:14.89ID:sNaTaheH
そんな香具師と判ってて相手するとか
どんだけ親切なんだ
2015/02/21(土) 16:03:21.19ID:FlDtTMp/
むしろテストが一度でも行われていたらラッキー
2015/02/22(日) 14:32:31.50ID:J+2bP69K
どっかのSEを自称するひとがW字開発とか意気込んでたけど
これもテスト駆動ってやつ?
2015/02/22(日) 16:00:00.52ID:WbEMx951
違うんじゃね
2015/02/23(月) 21:53:44.54ID:YPq7I/CP
w字開発は悲劇の開発
2015/02/23(月) 22:53:58.10ID:wIOqQNws
W字って初めて聞いた
仕様変更や手戻りが発生したら大変そうなんだけどどうなの
2015/03/05(木) 20:35:18.19ID:Z1VFzrPe
仕様変更の度に試験仕様書の修正が発生します
2015/03/05(木) 21:41:49.24ID:K2/AKKmr
仕様変更という言葉の意味を知った上で言ってるのか
2015/03/06(金) 01:16:33.41ID:dcg9agNJ
メタテストですね
2015/03/07(土) 20:16:06.24ID:lexZIoDv
>>507
何か変か?
仕様決める→テスト仕様書作成→プログラム設計→コーティング
なんだから仕様が変わる度にテスト項目見直しだろ
2015/03/07(土) 20:48:33.06ID:evNQRu0c
>>509
変だろ
なんでそんな当たり前のことを述べる必要があるんだ
それとも>>506には何か深い意味があるのか?
2015/03/16(月) 21:05:40.30ID:OhH2Zqat
テストプログラムのテストというのはおかしいでしょうか。

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

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

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


テスト駆動を解説した本やWeb記述にもこのような状況のことは書かれていないような気がします。
2015/03/16(月) 23:22:18.02ID:iyRDLNI5
>>511
テスト駆動の考え方がわかってないだけ
2015/03/17(火) 17:20:27.93ID:Bw8e4yLM
テストプログラムのテストのテストというのはおかしいでしょうか。
テストプログラムのテストのテストのテストというのはおかしいでしょうか。
テストプログラムのテストのテストのテストのテストというのは可笑しいでしょうか。
2015/03/17(火) 18:34:03.30ID:vCwecCoL
>>511
> テストプログラムのテストというのはおかしいでしょうか。
別におかしくないが、そのこととTDDとは何の関係もない。
515511
垢版 |
2015/03/17(火) 19:28:49.00ID:FrSWu1Dj
>>512
>>514
わかりました。
ありがとうございます。
2015/03/17(火) 23:32:04.19ID:c2oAi75i
意外と>>513が正しいのでは
2015/03/17(火) 23:38:56.12ID:k/LbPUX+
>>516
数学的に考えれば品物が上がらない事は明白だろう?
2015/03/20(金) 15:48:44.47ID:4UXRNT4S
どこまでテストするかの話になると外部ライブラリだけでなくコンパイラやOSまで疑う必要がある
一昔前のコンパイラは多すぎてコンパイラのテストもやっていたな
519518
垢版 |
2015/03/20(金) 15:51:36.12ID:4UXRNT4S
訂正
>一昔前のコンパイラは多すぎてコンパイラのテストもやっていたな
一昔前のコンパイラはバグが多すぎてコンパイラのテストもやっていた
2015/03/31(火) 18:51:00.25ID:855buxIJ
Kindleでこんな本が発売されたのを発見。
読んでないので内容は全くわからないが、目次を見る限り、よさげな気もする。

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

> エクストリーム・プログラミングのプラクティスのひとつであるテスト駆動開発(TDD)について、
> 聞いたことはあるけれど内容は知らない方、概要は知っているけれど実際に使ったことが
> ない方を対象に、全7章にわたってご説明していきます。アジャイルをかじった程度の開発
> 経験の浅いプログラマと、TDD開発を実践しているプロジェクトリーダーによる会話形式で
> 楽しくTDDを学びましょう。本書は、インプレスが運営するWebメディア「Think IT」で、「マル
> チプラットフォーム対応のゲーム開発エンジンUnityを体験する」として連載された技術解説
> 記事を電子書籍およびオンデマンド書籍として再編集したものです。
2015/03/31(火) 21:27:32.21ID:D90KPxNw
ステマ乙。目次どこにあるんだよ。
2015/03/31(火) 21:42:50.98ID:D90KPxNw
あとUnityどこに関係するんだ?amazonの紹介文修正しとけよ。
2015/04/01(水) 10:34:19.69ID:MxSupW0l
>>521
TDDの本なんてめったに出ないから紹介しただけだし。
目次は
http://book.impress.co.jp/books/1114170210
にある。
俺はTDD初心者じゃないから買わないけど。
524523
垢版 |
2015/04/02(木) 10:30:42.33ID:DnwfhgCI
ステマ言われたんで買ってみた。
40分で2/3位読めた(コード入力してないから)。
内容はTDDを全く知らない人向け。誤植を何カ所か見つけた。
DHHのTDD is deadについても言及があるが、及び腰で全くなってない。
525523
垢版 |
2015/04/03(金) 13:21:39.26ID:C7O2gbfJ
読み終わったけど、全然駄目だった。
やはり、自分が読まないとお薦めしてはいけないね。

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

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

この本の例に則して言えば、例えばボーリングで一投目から、{(3, 7), (G, 3)}と投げた
ときのスコアを13点ではなくて16点だと誤った思い込みをしたとき(期待値を間違った
わけではなくて、スペアのボーナスは、次に初めて獲得した点数だと思い込む)、
TDDというはその誤った思い込みによるスコア体系を正しく実装する手段でしかない。
2015/05/29(金) 14:19:57.76ID:McOxVkvH
TDDを行った時にぶつかった7つの壁
http://qiita.com/syou007/items/7d6fdf1b7b6245a07bce
2015/05/29(金) 15:10:31.84ID:McOxVkvH
TDDに関する議論をググってみて見つけたページ。

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

完全に同意。
TDDは、
> 開発者テストのレベルで「開発者の思ったとおりに動く」ことが保証
されるようにするもの。
そしてそれを使って
> テストによって開発が駆動されること
を目指すもの。
2015/06/01(月) 10:17:17.81ID:4t8ilUI7
>>526
TDDと、品質保証のための自動テストによる単体テストを、完全に混同してる。
2015/09/23(水) 22:50:15.66ID:nPFFi/Oi
qiitaにマジレス
2015/09/29(火) 22:12:17.46ID:diX6sJrx
テスト駆動開発はゴミクズ
2015/11/26(木) 08:24:06.20ID:Dizh+t9P
Test-Driven Development is Stupid
http://geometrian.com/programming/tutorials/testing/test-first.php
2015/11/26(木) 10:12:43.24ID:wjty/3s6
>>531
ここにも勘違いしてる奴がいた
TDDはよりよい設計をもたらすものじゃない

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

「自分が正しいと思った設計」が「Good Design」じゃない奴は、どんな開発手法を使っても
自動的には「Good Design」にはならない
2015/11/27(金) 17:53:44.15ID:c/N8jVfb
ほんそれ
■ このスレッドは過去ログ倉庫に格納されています