テスト駆動開発はなぜ流行らなかったのか?2
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2014/01/13(月) 08:09:14.87適切にテストコードを導入するためには
適切なコードの書き方や設計まで知っておく必要があり
既存のコードが適切で無い場合、大幅な書き換えが必要になるから。
最悪開発プロセスから変えないといけない。
またテストコードが書きづらい部分(GUIやウェブUI等)が存在し
書きづらいということを知っていないと、無理に書こうとして
挫折するか、無理矢理なテストコードを書いてメンテナス不能になるから
0002デフォルトの名無しさん
2014/01/13(月) 11:09:56.95バカなドカタどもには使いこなせないから
テストコードが書き難いなんて低レベルな争いになる
0003デフォルトの名無しさん
2014/01/13(月) 12:02:39.90ので手動でテストすることになる。
でも、詳細設計やコーディングを始める前に、テスト仕様(=検収条件)
を定義することはできるので、TDD の考え方は適用できる。
この場合、Control・Model層 の自動テストをきちんとやることはもちろん
View層が疎かつ薄くなるように設計して、
人手による(高価な)GUI テストの範囲を限定する必要がある。
ただ、GUIやWeb の自動テストも、ミドルウェアやパッケージソフト
などの、寿命が長くて、自動テスト作成の費用が回収できる分野では
使われ始めているので、そのうち単発アプリでも使える方法が
見つかるでしょう。
0004デフォルトの名無しさん
2014/01/13(月) 12:24:31.22テスターが遊んでるように見えたので、これを発見できなかったら遊んでると
はっきり言ってやろうと思ったんだ。
その後ずいぶん時間がたって、ちょっとしたおまけとかいたずらみたいなのを
イースターエッグと呼ぶようになった。
自分では、世界初のイースターエッグは俺がつけたやつじゃないかと思うんだよな。
だから、本当のイースターエッグはしゃれっ気どころか眉間にしわよせて作るものなんだよ。
0005デフォルトの名無しさん
2014/01/13(月) 12:24:35.88どういう姿を想像する?
キューカンバ君が活躍するとはとても思えない
0006デフォルトの名無しさん
2014/01/13(月) 12:27:31.07次にツールが普及してない
最後にブログで派手に煽ってくれる人がいない
結局、海外で流行ってないのに日本で流行るわけがないんだよ
0007デフォルトの名無しさん
2014/01/13(月) 12:32:21.69というのがまず第一ステップ
そのあと、目に見える効果が出れば後は何も考えなくてよい
0008デフォルトの名無しさん
2014/01/13(月) 12:38:28.760009デフォルトの名無しさん
2014/01/13(月) 12:45:57.420010デフォルトの名無しさん
2014/01/13(月) 12:51:07.37セミナーで効果あると言ってるのは当たり前でしょ。
実際は効果ない。
何が悪いのだろうと思って次のセミナーも2時間10万円出す。
お得意様だよ。
0011デフォルトの名無しさん
2014/01/13(月) 13:01:34.43テスト割り込ませるわけよ。
これでどうやって品質上がるの?
あほですか?
0012デフォルトの名無しさん
2014/01/13(月) 13:05:13.050013デフォルトの名無しさん
2014/01/13(月) 13:06:12.260014デフォルトの名無しさん
2014/01/13(月) 13:19:55.280015デフォルトの名無しさん
2014/01/13(月) 13:26:40.250016デフォルトの名無しさん
2014/01/13(月) 13:30:15.011、printlnデバッグ
2、ロガーデバッグ
3、ユニットテスト
0017デフォルトの名無しさん
2014/01/13(月) 13:30:55.18unittestと言うよりは全体的なこと
0018デフォルトの名無しさん
2014/01/13(月) 13:30:59.63全く違う。
さすがに関数がないとTDDは無理。
(80年代のBASICには関数がない)
0019デフォルトの名無しさん
2014/01/13(月) 14:00:31.04意味は同じだけど、ツールが違うと別のものに見える人もいるだろね。
0020デフォルトの名無しさん
2014/01/13(月) 14:04:47.56TDDの是非とテストコードの是非は全く別ってことがまだ分からんのかね。
0021デフォルトの名無しさん
2014/01/13(月) 14:16:05.96TDDはどこに入るんだ?
0022デフォルトの名無しさん
2014/01/13(月) 14:38:01.38GUIは知らないけど、Webの世界にある Ruby on Railsでは、
自動テストやTDDに関してRailsフレームワーク側でサポートがある
Railsアプリケーションのデベロッパにとって、自動テストやTDDとは
(ぼんやりした将来像ではなく)現実にある必須技術の一つでしかない
何を言いたいかというと、Webに限らず:
デベロッパはテスト支援を包含したフレームワークを選択すべきである
って話だ
0023デフォルトの名無しさん
2014/01/13(月) 14:52:55.230024デフォルトの名無しさん
2014/01/13(月) 15:04:46.24たいていのRailsにかぎらず、Rubyにかぎらず
有名どころのフレームワークには
テスト支援機能があるよ。
IDEにテスト支援機能があるものもある。
有名なjUnitとEclipseとかね。
だから選択すべきと言うまでもなく
普通に選択していると思う。
0025デフォルトの名無しさん
2014/01/13(月) 15:14:12.97テスト工数も含まない無茶な納期を決めてきたのは誰なのかをまず考えろ
0026デフォルトの名無しさん
2014/01/13(月) 15:14:44.770027デフォルトの名無しさん
2014/01/13(月) 15:24:36.88俺かお前か大五郎
0028デフォルトの名無しさん
2014/01/13(月) 15:44:52.180029デフォルトの名無しさん
2014/01/13(月) 16:07:30.02そういうのは書かせるものですよね。
0030デフォルトの名無しさん
2014/01/13(月) 16:10:09.610031デフォルトの名無しさん
2014/01/13(月) 17:53:50.93テストすら買いてなくて、納期かなんかしらんけど、その理由をここでぐだぐだ言われたって
知らんがなってなるよ
0032デフォルトの名無しさん
2014/01/13(月) 19:40:22.46結局のところ、新規で始めれるプロジェクトより、そういうすでに動いている
プロジェクトに適用しやすいものじゃなかったからTDDが流行らなかったと。
世の中、完全に新規で始めれるプロジェクトなんて稀だからね。
まあ、そういうゴミみたいな既存のプロジェクトでもちょっとでも良くなるように
テストコードを書いてみたり色々やってる人がいる一方で、ただ愚痴を言って
何も手を動かさない人の多いこと。
0033デフォルトの名無しさん
2014/01/13(月) 19:56:51.24だからハードやシステムを変えられなくて高くつく
0034デフォルトの名無しさん
2014/01/13(月) 20:09:35.600035デフォルトの名無しさん
2014/01/13(月) 21:05:14.36バグを書きこむつもりが無ければテストなんかするわけない。
0036デフォルトの名無しさん
2014/01/13(月) 21:06:45.17だって、誰でもメンテ可能なほど整備したコードを納品すると、
次回の契約更新では単価の安い大手を引き合いに出されたりするんだぜ
だから、
・ほどほどの日程遅延で、
・ほどほど動いて、
・ほどほどの品質で、
・ほどほどのメンテが必要な
開発が一番なのさ
自分は契約交渉なんて担当はしたことないけど、
以前、気合いを入れて日程厳守/高品質のプロジェクトを仕上げたら、
上も予測していなかったようで次の仕事が入ってこず、
しかたなく火が噴いた他のプロジェクトの応援にまわされた
アホラシ
0037デフォルトの名無しさん
2014/01/13(月) 21:29:29.35ってのは予備日程の宙ぶらりんに入ってしまったってことかな
嬉々としてバカンスに突入すればいいのに
0038デフォルトの名無しさん
2014/01/13(月) 21:47:05.45このスレはテスト用のコードをそもそも書かない人向けなのか
それとも、テスト用コードは最終的には書くけど、それがコーディングの最初でない人向けなのか
そもそもテスト用のコードを書かない人、テスト駆動とか言う以前に他の開発手法でも異端であるから、自動テストの有無みたいなスレ立ててそっちでやってはどうか?
0039デフォルトの名無しさん
2014/01/13(月) 21:52:43.27自分は、これ
>テスト用コードは最終的には書くけど、それがコーディングの最初でない人
あと、テスト駆動開発ならば、
>最初にテスト用コード書いてから、コーディングを始める人
もいるのではないかと
00401
2014/01/13(月) 21:53:44.60スレ主です
> このスレはテスト用のコードをそもそも書かない人向けなのか
> それとも、テスト用コードは最終的には書くけど、それがコーディングの最初でない人向けなのか
どっちもOK。前提があるならその旨書き込むこと
> そもそもテスト用のコードを書かない人、テスト駆動とか言う以前に他の開発手法でも異端であるから、自動テストの有無みたいなスレ立ててそっちでやってはどうか?
ここで問題無いですよ。
0041デフォルトの名無しさん
2014/01/13(月) 21:56:57.44なんでそんなにバグ仕込みたいの?
0042デフォルトの名無しさん
2014/01/13(月) 22:09:00.02仮に絶対にバグを混入させない人でも、ハードウェア、OS、コンパイラ、API、その他モジュールを全部自作するわけではあるまい
0043デフォルトの名無しさん
2014/01/13(月) 22:11:03.16そもそもバグ0をどうやって証明するのでしょうか?
0044デフォルトの名無しさん
2014/01/13(月) 22:16:19.88ゲーデルの定理により、少なくとも自動では証明はできません
0045デフォルトの名無しさん
2014/01/13(月) 22:19:10.360046デフォルトの名無しさん
2014/01/13(月) 22:24:52.27無意味だって事は判っているんですホントは。
心の弱さなんですよね。
0047デフォルトの名無しさん
2014/01/13(月) 22:55:57.49ただそれだけの話
0048デフォルトの名無しさん
2014/01/13(月) 23:13:27.05心の弱い人たちがコードをフローを追い切れず、
命名したメソッドを変更したくなるんです。
全ては心の弱さが原因。
0049デフォルトの名無しさん
2014/01/13(月) 23:20:54.150050デフォルトの名無しさん
2014/01/13(月) 23:22:19.760051デフォルトの名無しさん
2014/01/13(月) 23:29:32.530052デフォルトの名無しさん
2014/01/13(月) 23:38:12.410053デフォルトの名無しさん
2014/01/13(月) 23:42:04.99最初から成熟したプログラマはこの手法は向かない
0054デフォルトの名無しさん
2014/01/13(月) 23:50:39.330055デフォルトの名無しさん
2014/01/13(月) 23:56:20.300056デフォルトの名無しさん
2014/01/13(月) 23:57:23.870057デフォルトの名無しさん
2014/01/13(月) 23:58:53.63回せばいいのに。
0058デフォルトの名無しさん
2014/01/14(火) 00:02:24.29手を動かすのに必要な問題点の列挙だよ。
何かがうまくいかない時、その原因を探すことは重要。
問題点を把握しなければ、問題点を解決することは出来ない。
0059デフォルトの名無しさん
2014/01/14(火) 00:09:33.84最終的に全テスト通して何十万台の商品に乗ってるわけだが
開発の進め方的に何が問題なんだいw
0060デフォルトの名無しさん
2014/01/14(火) 00:15:24.31ソフトウェアの話に台数がなにか関係あるの?
0061デフォルトの名無しさん
2014/01/14(火) 00:17:39.41a. テストは不要
b. テストは必要
c. (可能なかぎり)自動テストが必要
d. (可能なかぎり)自動テストが必要で、コードを書く前にテストを書くべき
少なくとも b.c.d. しかいかないと思ってたが、もしかしてa.の人もいるの?
0062デフォルトの名無しさん
2014/01/14(火) 00:17:48.43窓から投げ捨てたくなるね
それを言い出すなら俺だって1日数十万アクセスのサーバをながめてるだけの仕事だけど?
0063デフォルトの名無しさん
2014/01/14(火) 00:18:17.21ライセンスや損害賠償は台数の掛け算
0064デフォルトの名無しさん
2014/01/14(火) 00:20:56.38こいつ偽物の匂いがする
実務経験ほとんどないんじゃないかな?
0065デフォルトの名無しさん
2014/01/14(火) 00:27:19.460066デフォルトの名無しさん
2014/01/14(火) 00:29:40.18どこにいっても新人の仕事だけど
0067デフォルトの名無しさん
2014/01/14(火) 00:31:21.680068デフォルトの名無しさん
2014/01/14(火) 00:31:27.730069デフォルトの名無しさん
2014/01/14(火) 00:32:39.13自動車屋さんが自動車は不要と言わないのと同じ。
0070デフォルトの名無しさん
2014/01/14(火) 00:32:44.48テスト駆動開発のテストはテスト工程の専門家がやるテストじゃなくて、テスト工程に渡す前に、プログラマ個人がやる習慣としてのテストではないかと
0071デフォルトの名無しさん
2014/01/14(火) 00:34:44.46俺の書いたものに間違いがあるわけない。
こう言い切れないなら別の職につけよ。
お客様が迷惑するだろ。
0072デフォルトの名無しさん
2014/01/14(火) 00:34:56.19> ライセンスや損害賠償は台数の掛け算
うん。だからそれはソフトの動作と何か関係があるの?
0073デフォルトの名無しさん
2014/01/14(火) 00:37:28.17協調動作するアプリじゃないかぎり台数とソフトの動作は関係ないけど、台数とソフトのリスクとソフトのコストは関係ある
0074デフォルトの名無しさん
2014/01/14(火) 00:40:40.77それあるんだけどな。
ttp://jstqb.jp/
0075デフォルトの名無しさん
2014/01/14(火) 00:42:53.08現状はcだな dはまだ厳しい
というか小さい範囲だとそこまでテストファーストである必要はないし、大きな範囲だと環境依存がでかくなりすぎる。作業効率含めてちょうどいいバランスを模索している状況だね
結局、ロジックと振る舞いが現時点での限界だね
0076デフォルトの名無しさん
2014/01/14(火) 00:54:09.310077デフォルトの名無しさん
2014/01/14(火) 01:26:14.43普段から自動テストをやろうとしている人は、TDDだから便利とかいうツールはない
ただ、テスト行程の人と同じツールにすると、テスト行程の人が喜ぶ
0078デフォルトの名無しさん
2014/01/14(火) 01:43:36.36続けると、なんとなくコードがこじんまりした感じになる
0079デフォルトの名無しさん
2014/01/14(火) 01:49:56.180080デフォルトの名無しさん
2014/01/14(火) 01:55:30.01emacsやvimは1つで全てが完結する。そう考えていた日が僕にもありました。
たしか、quake作ってる会社のスクリーンショットに、
複数のエディタが立ち上がっているのを見て考えが変わったんだ。
道具を使いこなしたところで、すごいプログラマに成れるわけじゃないんだって
0081デフォルトの名無しさん
2014/01/14(火) 02:36:46.26道具に足を引っ張られていれば問題だけど、
そうでないなら、道具よりも力のほうが大きい。
ソフトウェアなんていかにコードを減らすかなんだし。
逆に技術低いのに道具の使い方が上手いと、
高速に
コピペが!
汚いコードが!
量産される(苦笑)
0082デフォルトの名無しさん
2014/01/14(火) 13:15:40.56> d. (可能なかぎり)自動テストが必要で、コードを書く前にテストを書くべき
わかってると思うけど、これはテストファーストの説明であってTDDの説明じゃないよね。
0083デフォルトの名無しさん
2014/01/14(火) 14:48:27.16> プログラマ個人がやる習慣としてのテストではないかと
それユニットテストじゃないの?
0084デフォルトの名無しさん
2014/01/14(火) 20:03:24.86休み明けくらい早く寝ればいいのにな。
無職ならいいけどさ。
0085デフォルトの名無しさん
2014/01/14(火) 20:15:10.570086デフォルトの名無しさん
2014/01/14(火) 22:40:46.77少なくとも商業では、労働時間単位のタイピング数を最少化するというバイアスがあるので、テストを先に書くことを義務づけるなら、自然にTDDになる
0087デフォルトの名無しさん
2014/01/14(火) 22:41:34.94プログラマがエディタを保存した直後に行う動作確認はユニットテストだけではない
0088デフォルトの名無しさん
2014/01/14(火) 22:56:35.87あれさえやめればテスト可能性が上がるよな
0089デフォルトの名無しさん
2014/01/14(火) 23:54:13.97その辺の整合性はどうつけてんの?
0090デフォルトの名無しさん
2014/01/14(火) 23:54:31.16これ他の中華料理店は大丈夫なのかな?
0091デフォルトの名無しさん
2014/01/15(水) 00:19:51.83調査・設計に比べたらテストコードも含めてコーディングにかかる時間なんて誤差程度。
単にバグを出さない人扱いだよ。
0092デフォルトの名無しさん
2014/01/15(水) 00:27:39.68コーディングは製品全体の1%程度しか占めていないね。
0093デフォルトの名無しさん
2014/01/15(水) 01:09:42.25だけど、コーディングは最重要視しなければいけない。
なぜならば時間がかかっているのがリーディングとテストだから。
新規開発でもなければ、何か修正しようした時コードを読んで理解しないといけない
その時コードの量が多ければそれだけ時間がかかるし
複雑だともっと時間がかかる。
バグ修正を例にすればもっとわかりやすいと思う。
修正するコードはたかだか数行ってことはよくある。
でもそれを修正するまでに読まなければいけないコードはその何倍にもなる。
テストもそう。テスト時間を短くするにはやはりモジュールを疎結合にして
自動化出来るようにする必要がある。
それはコーディングに時間をかけることでしか達成できない。
パレートの法則みたいなもんだよ。ほんの僅かな時間しかかからないコーディングが
その他の作業にかかる時間を大きく左右する。
0094デフォルトの名無しさん
2014/01/15(水) 01:25:49.960095デフォルトの名無しさん
2014/01/15(水) 07:02:23.82リファクタリングすればするほど行数減るから肩身狭いわ
残業する奴の評価と実際の仕事の効率の関係に似てるよな
技能の価値はその道を知るものにしかわからない
0096デフォルトの名無しさん
2014/01/15(水) 10:59:15.56> テストを先に書くことを義務づけるなら、自然にTDDになる
ならねーよ
0097デフォルトの名無しさん
2014/01/15(水) 18:56:06.24TDDはテストを先に書くわけじゃないよ
テストとコードを交互に書いていくんだよ
テストを全て書き終わってからコードを書くわけじゃない
おまえら単体テストのテストコードを先に書いてるだけだろ
0098デフォルトの名無しさん
2014/01/15(水) 21:44:18.89テストなんて書いたことないけど?
0099デフォルトの名無しさん
2014/01/15(水) 23:08:59.90コード書く前に、今から書くコードのテストを用意するのがTDDですよ
0100デフォルトの名無しさん
2014/01/15(水) 23:54:28.39仕様のかっちり決まったロジックを書くならともかく、たいていは油絵みたいに最初は大まかに描いて後で細部をキッチリって感じで書いてるからやりようがない。
だいたい後からキワいとこだけテストハーネス仕込んでるわ。
おまいらそんな最初からテストがきっちりかけるようなもの作ってんの?
0101デフォルトの名無しさん
2014/01/15(水) 23:58:04.67コード書いた後にやる確認作業用のコードを、そのコードを書く前に書けばいいだけの話
0102デフォルトの名無しさん
2014/01/16(木) 00:09:28.51だからそれは仕様がはっきり決まってる場合だろ?
0103デフォルトの名無しさん
2014/01/16(木) 00:10:27.270104デフォルトの名無しさん
2014/01/16(木) 00:21:19.36コード書いた後に確認作業しないの?
0105デフォルトの名無しさん
2014/01/16(木) 00:37:06.09> コード書いた後にやる確認作業用のコードを、そのコードを書く前に書けばいいだけの話
このコードを書く前に書くといった、確認作業用のコード
この確認作業用のコードはTDDでは原則として捨てるからね。
これはあくまでコード書くために書く(テスト)コードであって
ユニットテスト用のコードまたは別に作る。
0106デフォルトの名無しさん
2014/01/16(木) 00:38:10.34単にコードを書き始めるための道具でしか無い。
だから作りこむようなものではなく、書捨てで良い。
0107デフォルトの名無しさん
2014/01/16(木) 00:43:07.51ちゃんと仕様通りのテストを書いて、カバレッジ100%を目指すわけではないが
それなりに高い数値を目指すもの。
でもTDDは適当でいい。コードを書くのに必要最小限のコードを書けばいいだけ。
0108デフォルトの名無しさん
2014/01/16(木) 01:01:56.08もう流行る要素ないだろw
0109デフォルトの名無しさん
2014/01/16(木) 01:33:28.75ものによる。書いた後ちょっと動かして確認すればいいものはそれですますし、ちょっと複雑なロジックなんかはテストで確認とかする。
まぁテストカバレッジ率は低いと思う
コードを書き始めるためのテストコードの必要性がわからん(´・_・`)
0110デフォルトの名無しさん
2014/01/16(木) 01:35:33.03その部分のカバレッジがあげられない
どうやって失敗させりゃいいんだ
0111デフォルトの名無しさん
2014/01/16(木) 01:59:48.02流用するやり方もあるけど、基本的に別物です
0112デフォルトの名無しさん
2014/01/16(木) 02:04:32.49mallocで1TB確保すればいい
0113デフォルトの名無しさん
2014/01/16(木) 02:43:47.18free はfreeを2回続けて呼出す
0114デフォルトの名無しさん
2014/01/16(木) 06:35:19.81> でもTDDは適当でいい。コードを書くのに必要最小限のコードを書けばいいだけ。
つまり、ゼロでもいいと。
0115デフォルトの名無しさん
2014/01/16(木) 06:39:59.11コードを書いている間に、コードを書く前の想定と仕様が変わることはよくあるし、
無理してコードを書く前の仕様に合わせるのは本末転倒だし。
0116デフォルトの名無しさん
2014/01/16(木) 06:51:49.59書き捨てなら、結局作業量が増えるだけでは。
捨てる作業も含めるとさらに。
0117デフォルトの名無しさん
2014/01/16(木) 08:59:02.01仕様が変わるからこそテストを書くべき
突然以前のコードが動かなくなったら嫌だろ?
0118デフォルトの名無しさん
2014/01/16(木) 11:37:51.89だからそれはコード書く初期の段階じゃなくある程度固まってからでいいと思うんだが。
0119デフォルトの名無しさん
2014/01/16(木) 12:47:21.580120デフォルトの名無しさん
2014/01/16(木) 13:40:05.79まず、以下のようなテストを書いたとする。
Foo f = new Foo()
assertEquals(10, f.bar(1, 2))
で、おもむろにFooクラスのbar()メソッドを書き始めるわけだが、bar()のコードを書く前には仕様は変わらんだろ。
上のテストが通るようなbar()実装後に、bar()の仕様を変える必要がでてきたら、そのときはテストを帰れば良い。
0121デフォルトの名無しさん
2014/01/16(木) 13:58:09.22ある程度固まるまでのコードをテストするテストコードを、ある程度固まるまでのコードを書く前に書けって言ってるんだが。
0122デフォルトの名無しさん
2014/01/16(木) 14:26:16.52TDD Advent Calendar 2013
http://qiita.com/advent-calendar/2013/tddadventjp
TDD Advent Calendar jp: 2012
http://atnd.org/events/33846
TDD Advent Calendar jp: 2011
http://atnd.org/events/22027
0123デフォルトの名無しさん
2014/01/16(木) 14:29:53.43http://advent-calendar2readlists.herokuapp.com/
0124デフォルトの名無しさん
2014/01/16(木) 14:31:38.64http://readlists.com/00130d19/
0125デフォルトの名無しさん
2014/01/16(木) 14:40:52.61TDD関係ないけど、これスゲーな
0126デフォルトの名無しさん
2014/01/16(木) 16:29:54.95あと設計自体のミスとかさ。
TDDをやったら自動的に品質が上がるわけではないのは
最近のGoogle Chromeが実証してしまっている。
開発者たちが明かすGoogle Chromeが目指すものとは|【Tech総研】
http://next.rikunabi.com/tech/docs/ct_s03600.jsp?p=002245
> Google Chromeでは、開発プロセスの改善はほぼすべて自動化されています。従来のソフトウェア開発では、
> 誰かが何かを書き、専任のテスト担当者がテストを行い、バグが見つかったら直し、というのを何度も繰り
> 返していたわけです。それによって、ソフトウェア品質を向上させていた。
> しかし、Google Chromeではそういうことはなく、あるコードを書いた人は、テストも同時に行わないと
> いけない。このとき、テストは自動化されているんです。ほかの人が別の機能を足したときも、自動的に
> テストが入るので、元のものに影響を与えるようなものは受け入れられない。
これで、「マウスホイールが効かん」というすげーバグが安定版に入り込んでるんだから世話ないわ。
Chrome 32 スクロールの問題 まとめ - Google プロダクト フォーラム
http://productforums.google.com/forum/#!topic/chrome-ja/I05Ixft9UF8
あと俺ゲーム系だしな。モジュール単位ではもちろんテスト書くが
マスターアップ直前まで仕様がコロコロ変わるし、ゲームシステムや3Dの挙動のテストなぞ書けんよw
人間のテスターから1発でスクリーンショットとログとメモリダンプ届くとかそういう効率化はするけどな。
で、テストができないならせめて静的型言語を使ったりコードの静的解析をかけようと
ここが動的言語大好きなウェブの連中がおそらく100年経っても理解できないであろうところだ。
ま、どんな技術や方法論にも適用範囲と限界があるよね。
テストを書かないのはまともなプログラマじゃないみたいな視野狭窄な言説を見かけると
鼻で笑っちゃいますね。
0127デフォルトの名無しさん
2014/01/16(木) 17:44:34.40全然論理的じゃないなぁ
どんな方法であれ大きなバグが混入するのは避けられないだろう
その中でもバグの混入率をどれだけ下げられたのかが論点なのであって、
「大きなバグが入ったからこの方法は無意味!論破完了!」なんて子供の議論でしかないよん
0128デフォルトの名無しさん
2014/01/16(木) 17:58:33.53TDDと関係ないだろ
0129デフォルトの名無しさん
2014/01/16(木) 18:15:09.19ひょっとして、静的解析って動的言語だとできないとでも思ってるんだろうか
0130デフォルトの名無しさん
2014/01/16(木) 20:06:56.770131デフォルトの名無しさん
2014/01/16(木) 20:48:09.110132デフォルトの名無しさん
2014/01/16(木) 22:34:38.89bar書いてる途中で、引数は配列にしようとか、そもそもbar関数要らないやと
仕様変更入ったらそのテストコード意味なくなるよね。
一度もOKになることのないテストコードは書かなくてもよくね?
0133デフォルトの名無しさん
2014/01/16(木) 22:51:47.23うん、結局は実証が必要になるね。
厳密な数学的証明でもできれば別だけどさ。
そういう実証的な話題には乗りにくいんだろう、この話は。なぜなら
0134デフォルトの名無しさん
2014/01/16(木) 23:34:48.06無理してコードを書く前の仕様に合わせるのがTDDだよ
無理して仕様を書いた後のコードに合わせてはいけない
0135デフォルトの名無しさん
2014/01/16(木) 23:41:35.01テストを書くことで何がどう促進されるん?
>>121
それを書いたところで何のメリットがあるんだ?ってことを聞いてるんだが。
テストハーネスは何かが壊れたことを検知するために仕込むと思うけどこれから変わるだろうものに仕込んでどうする?
書いてる途中でロジックが正常かどうかは多くの場合簡単にデバッグプリントすれば分かる。
それで進めて固まってきたらテストを仕込めばいい。
>>134
ネタか(´・_・`)
0136デフォルトの名無しさん
2014/01/17(金) 00:01:34.37テスト書く前というか、キーボードを叩く前に脳みそを動かせってことでしょ
0137デフォルトの名無しさん
2014/01/17(金) 00:10:44.290138デフォルトの名無しさん
2014/01/17(金) 00:15:14.610139デフォルトの名無しさん
2014/01/17(金) 00:20:01.08もちろん書く前はいろいろ考えてその後に書くよ。
ポンチ絵とか懸念点とかアウトラインに箇条書きにして考えた結果を最終的にコードに落とす。
そう言ったことをさせるためにテストをかけって言ってるなら多少わからんでもないけどそれでもテストとしてそのメモ書きを書く必要のメリットが分からんよ
0140デフォルトの名無しさん
2014/01/17(金) 00:21:58.860141デフォルトの名無しさん
2014/01/17(金) 00:36:51.53テストはメモではない
先に箱の形と大きさを決めて、書きながら余計な機能を追加しないためにテストを書く
コーディングのために特別なアウトラインやメモが必要なほど大きな塊を書くなってことでしょう
0142デフォルトの名無しさん
2014/01/17(金) 00:51:38.34だーかーらー、そういった仕様がっちり最初から固まるものもあれば上のゲームの人みたいに粘土をこねて形にするものもあって、ここではその後者の話してると思うんだけど。
別に一つの塊のために絵を描くわけじゃないぞ?森見て木を見てまた森を見て全体を思い浮かべながら木を描くためだぞ?
0143デフォルトの名無しさん
2014/01/17(金) 01:02:04.440144デフォルトの名無しさん
2014/01/17(金) 01:05:10.610145デフォルトの名無しさん
2014/01/17(金) 01:10:25.880146デフォルトの名無しさん
2014/01/17(金) 01:12:34.12お前だって、
だいた後捨てたり使いましたりするだろ。
場合によりけりだよ。
0147デフォルトの名無しさん
2014/01/17(金) 01:13:22.58×何言ってるんだ?
○何を言ってるんだ?
0148デフォルトの名無しさん
2014/01/17(金) 01:23:11.93粘土をこねて形にするのはいいけど、粘土をどんどん付け足して視界の外からはみ出るほど大きくするのはやめろってことでしょう
0149デフォルトの名無しさん
2014/01/17(金) 01:24:56.720150デフォルトの名無しさん
2014/01/17(金) 01:32:01.850151デフォルトの名無しさん
2014/01/17(金) 01:32:27.460152デフォルトの名無しさん
2014/01/17(金) 01:33:09.89それは全体を考えた上でうまく全体を疎結合にすればいいだけの話であって、テストとはあまり関係ないだろ。
テストを最初から書くことのメリットとしてテストをかけるようにすることで各部分を他にあまり依存しない小さなロジックで書くことを促されるのがあると思う。
けどそれはテスト書かなくても気をつけていればいいだけであって関数型で書いてたりすれば自ずとそんな感じになる。
最初からテストをかけと言ってる人はただの教条主義に陥ってないか?
0153デフォルトの名無しさん
2014/01/17(金) 01:36:29.89>だいた後捨てたり使いましたりするだろ。
脳内妄想もたいがいにしろ童貞
0154デフォルトの名無しさん
2014/01/17(金) 01:48:43.56テストを最初から書くことのメリットは、粒度を疎にすることと、
インターフェイスをコーディングの始めからトイレで席を立って帰ってきてエディタを保存するまでの間一貫させておくことと、
コードの長さをプロジェクトの了解の外にあるプログラマ個人の思い付きによる機能追加で長くしないことがある
関数型で書くときこそテストを先に書く必要がある理由は、関数型はドメインが陽にコードに現れないから
ポイントフリープログラミングなんかその典型
0155デフォルトの名無しさん
2014/01/17(金) 03:33:03.87前段は疎にする以外はテストを書くことによりそれが得られる理由がわからん。
後段はドメインが出てこないとは何を指して言ってるんだ?
0156デフォルトの名無しさん
2014/01/17(金) 03:52:31.04つまり、質の悪いプログラマを使わざるをえないプロジェクト向けということでおk?
普通はテストなんか無くても自然とやってることだらけじゃん。
0157デフォルトの名無しさん
2014/01/17(金) 05:47:10.623Dの挙動ぐらいテストできるだろ
毎回同じ表示がされればいいだけなんだから
0158デフォルトの名無しさん
2014/01/17(金) 08:07:30.81どうせ仕様変更入るから仕様書なんて書かなくてもいいよね
まあ趣味ならそれもあり。
0159デフォルトの名無しさん
2014/01/17(金) 10:17:12.49> bar書いてる途中で、引数は配列にしようとか、そもそもbar関数要らないやと
> 仕様変更入ったらそのテストコード意味なくなるよね。
それ、仕様変更じゃなくて設計変更じゃないの、というのはおいといて。
引数を配列にしたくなったら、テストをそのように変えればいいし、bar()がいらなくなったら、テストを削除すればいいだけだよね。
> 一度もOKになることのないテストコードは書かなくてもよくね?
そうじゃなくて、TDDでは一度OKにするんだよ。
class Foo { // 仮想言語
public int bar(int i, int j)
{
return 10;
}
}
こう書いて、ビルドしてテスト実行。
0160デフォルトの名無しさん
2014/01/17(金) 12:58:54.95それ本気で言ってんの?
0161デフォルトの名無しさん
2014/01/17(金) 15:54:05.170162デフォルトの名無しさん
2014/01/17(金) 19:23:42.690163デフォルトの名無しさん
2014/01/17(金) 19:29:17.69それで十分
0164デフォルトの名無しさん
2014/01/17(金) 19:32:44.880165デフォルトの名無しさん
2014/01/17(金) 19:43:27.77テストコード書くのは仕様が決まってからでいいんじゃないかと。
仕様が決まってない状態でテストコード書いても意味ないだろう。
0166デフォルトの名無しさん
2014/01/17(金) 19:45:10.810167デフォルトの名無しさん
2014/01/17(金) 22:22:53.61そんなことは仕様も決まってないのにコード書いてる >>132 に言ってくれよ (w
0168デフォルトの名無しさん
2014/01/17(金) 22:35:46.810169デフォルトの名無しさん
2014/01/17(金) 22:40:31.19コードを書きながら仕様を決めるのと
なにも書かずに頭の中で仕様を決めるとでは
どれが一番無駄がなく短い時間で出来ますか?
0170デフォルトの名無しさん
2014/01/17(金) 22:54:27.62テストを先に書くと、コーディング途中で「本来なら事前に予想もできなかった複雑なことを、さも簡単なことのように何食わぬ顔でコードに書き足していくこと」が難しくなる
ドメインとは、引数の型と、その引数がとりうる範囲
関数型はこれが分かりにくいので、結局テストで明示されることになる
0171デフォルトの名無しさん
2014/01/17(金) 22:57:42.14> ドキュメントを書きながら仕様を決めるのと
仕様はけして決まらない
> コードを書きながら仕様を決めるのと
仕様はけして決まらない
> なにも書かずに頭の中で仕様を決めるとでは
仕様はけして決まらない
> どれが一番無駄がなく短い時間で出来ますか?
時間を浪費して頭がハゲるだけ
0172デフォルトの名無しさん
2014/01/17(金) 23:06:17.61「私はエディタに向かっていったい何を書きたかったのだろうか」 は、いつ決まりますか?
0173デフォルトの名無しさん
2014/01/17(金) 23:33:39.18「Save Asノ 」ではなく「Save」できたときだ
0174デフォルトの名無しさん
2014/01/18(土) 00:02:55.090175デフォルトの名無しさん
2014/01/18(土) 00:09:20.08えと、順位を決めてくださいという話です。
0176デフォルトの名無しさん
2014/01/18(土) 00:11:01.37自由を一切認めず、ただ黙々と単調で枠にはまった定番のコードを書き続けるよろし
独創性を発揮する連中は足でも撃っておとなしくさせるべき
0177デフォルトの名無しさん
2014/01/18(土) 00:15:17.42半分正解で半分間違い。
0178デフォルトの名無しさん
2014/01/18(土) 00:17:08.68独創性を発揮して、単調で型にはまった定番のコードにしていく
ってことかな。
0179デフォルトの名無しさん
2014/01/18(土) 00:23:39.71コードを好き勝手書いてる段階になると思う。
これは良くない。
で、単調で型にはまった定番コードにみんな足並みそろえるわけだけど、
その単調なコードというのを作るのには、独創性が必要になる。
あたりまえだけど、単調でも冗長なコードはだめ、無駄が多いからね。
だから単調かつ短いコードにしなきゃいけないんだけど、
それには高い技術力と独創性が必要になる。
そうすると一連のコードが、独創性が必要な汎用性が高いが
一度作れば終わりのコードと、単調だけど短いコードに分かれていく。
この作業をどんどんつき進めていって、単調なコードをどんどん短くしていく。
単調なコードを短くするには、独創性が高いコードを単調なコードから抜き出していく作業。
だから単調で型にはまった定番のコードを作るために独創性が必要になる。
0180デフォルトの名無しさん
2014/01/18(土) 00:30:12.12必要なのは 「ここ分かりにくいと思います」 と口にする勇気だけだ
0181デフォルトの名無しさん
2014/01/18(土) 00:31:02.58おまえuyだろ
0182デフォルトの名無しさん
2014/01/18(土) 00:32:35.87アジャイルって、どのタイミングで仕様かためるんだ?
0183デフォルトの名無しさん
2014/01/18(土) 00:34:14.720184デフォルトの名無しさん
2014/01/18(土) 00:37:42.51「わかりにくいと思います」じゃただ口に出しているだけ。
じゃあどうすればいいかという答えが出なければ
なにも変わらない。
その、どうすればいいかという答えをだすのに
独創性が必要になるんだよ。もちろん技術力もね。
0185デフォルトの名無しさん
2014/01/18(土) 00:54:07.39簡潔にならない独創性なんて、闇の力に魅入られた中学生ぐらいだろ
0186デフォルトの名無しさん
2014/01/18(土) 00:58:02.74やる気が失われることになるので
生産性が下がるんだよ。
それに、改善は一度やれば終わりではなく
ずっと繰り返しやり続けること。
つまり次はどんな改善を行うか? という発想が
常に必要ってことだよ。
何も考えない脳ではできない作業
0187デフォルトの名無しさん
2014/01/18(土) 01:08:02.31どうすればいいかは、定番のきまりきった答えがあります
車輪の再発明はしないでください
万が一、定番の答えが存在しない問題にであった場合は、一旦作業を止めて、グループの中で一番独創性がない人に合せて、みんなでコーディングについて同意をとってください
あなたが独創性を発揮して解決しても、他の人が同じ答えにたどりつかず、プロジェクト全体でコーディング規則の不統一や保守性の低下をもたらします
0188デフォルトの名無しさん
2014/01/18(土) 01:13:47.13単純な独創性の排除は、人間性が失われることになるので、自動化可能な範囲や能力が低い派遣での置き換え可能性が広がり、生産性が上がる
やる気は、自動化の方向や、あなたの仕事を削除する方向に回してください
0189デフォルトの名無しさん
2014/01/18(土) 01:16:01.87定番の答えでできるレベルの、その先の話だよ。
定番でできる範囲を超えた更にその先、もしかしたら
誰もやったことにないことをやるのだから
高い技術力と独創性が必要になるわけ。
0190デフォルトの名無しさん
2014/01/18(土) 01:17:50.59> グループの中で一番独創性がない人に合せて
それはやらない方がいい。
ようは他の人が足を引っ張られてるってことだから。
足を引っ張られてもそれを補うぐらいの、コスト(人を沢山使える)
ならばやっていいと思うよ。
でも大多数に少人数かいはつでは、足を引っ張られたらおしまい。
0191デフォルトの名無しさん
2014/01/18(土) 01:18:48.23> やる気は、自動化の方向や、あなたの仕事を削除する方向に回してください
だから自動化をするのにも独創性と技術が必要になるんだよ。
0192デフォルトの名無しさん
2014/01/18(土) 01:19:11.16もっとはっきりと「誰もやったことにないことをやるな」と言えばお分かりいただけるでしょうか…
0193デフォルトの名無しさん
2014/01/18(土) 01:20:49.70誰もやったことがないことをやるなって、
AmazonやGoogleに言ってみるといいよ。
負け犬の遠吠えに見えるだろうね。
0194デフォルトの名無しさん
2014/01/18(土) 01:22:43.62自動化を進めてきた企業の一つだろうね。
商品ピッキングシステムとかAWSとか
0195デフォルトの名無しさん
2014/01/18(土) 01:23:01.89他の人の足を引っ張るのは、独創性がない人ではなく、3ヶ月後の自分ですら読むことのできない独創的なコードを書くバカ
>>191
その独創性は、コードには出さないでね
0196デフォルトの名無しさん
2014/01/18(土) 01:25:22.55お前、独創的と、汚いコードをごっちゃにしてるぞ。
お前が言ってるのは単なる汚いコードだ。
違うというのなら、その汚くない独創的なコードの
例を出してみろよ。出せないだろう?
それが答えだよ。
0197デフォルトの名無しさん
2014/01/18(土) 01:29:37.61AmazonやGoogleで使ってるプログラムの、コードの各ブロックに独創性があると思いますか?
100万円かけろと言われれば、「ありません」の方にかけます
AmazonやGoogleの独創性は、コーディングよりももっと上のシステムで議論するときに発揮されています
0198デフォルトの名無しさん
2014/01/18(土) 01:33:56.91もっとはっきりと「あなたが低いIQでしぼりだした独創的なコード=世界のプログラマが定番にしなかった汚いコード」 と言えばおわかりいただけるでしょうか…
0199デフォルトの名無しさん
2014/01/18(土) 01:38:00.200200デフォルトの名無しさん
2014/01/18(土) 01:39:14.33さっき書いたでしょ?
コードは独創的な部分とそうではない部分に分かれるって。
一連のコードを二つに分けるんだよ。
独創的な部分(ライブラリだったりフレームワークだったり)を頑張って作り、
そして、つまらない単調なコードをどんどん減らしていく。
AWSのおかげでつまらない単調なサーバーメンテナンスから解放されて
より高度なサーバー管理システムと呼べるようなことができるようになったよ。
これが改善なんだよ。単に流れ作業をしている人にはできないこと。
0201デフォルトの名無しさん
2014/01/18(土) 01:39:15.43わたしはCやJava、PHPをつかう。
0202デフォルトの名無しさん
2014/01/18(土) 01:40:05.91技術力が低い人が読めないのは
単に技術力が低いだけだから・・・。
0203デフォルトの名無しさん
2014/01/18(土) 01:41:51.66むしろ、人類の共有文化にすべきといった価値観が広まっている
0204デフォルトの名無しさん
2014/01/18(土) 01:44:14.97それは当たり前だろw
高い技術を持っているはずの技術研究機関が
儲かる商売だと思っている人はいないよ。
0205デフォルトの名無しさん
2014/01/18(土) 01:49:50.14金にならないのは技術者以外の誰かがボンクラなのだ
0206デフォルトの名無しさん
2014/01/18(土) 01:59:24.31サーバーの自動化とフレームワークぐらいしか想像力が働かない
そういう連中が宣う技術力とは何なのか。ただの雑用ではないのか。
PHPで、歯でも磨いてろよ
0207デフォルトの名無しさん
2014/01/18(土) 02:09:43.68別に俺は他のものも思いつくけど、
実はお前が思いつかないから、
それだけしか言えないんじゃないの?
サーバーの自動化とフレームワーク以外の物を
言ってみなよ。
0208デフォルトの名無しさん
2014/01/18(土) 02:40:36.53そんなものいくらでも思い付くが、だからどうした
Web脳のアホ連中が新しいフレームワークと
サーバーの自動化を追い続けること技術力だとか
アホの子みたいに繰り返している事実が変わるの?
0209デフォルトの名無しさん
2014/01/18(土) 02:42:06.490210デフォルトの名無しさん
2014/01/18(土) 02:44:58.900211デフォルトの名無しさん
2014/01/18(土) 02:55:08.72そもそも、なにかいいたいのなら
最初に証明するのはそっちの仕事だし。
いいよ別に答えなくて。
どうせ会話する価値の無い人間だってわかってるから。
0212デフォルトの名無しさん
2014/01/18(土) 02:57:53.01会話する価値がないならなんでレスしてたの?おまえ、バカだろ
0213デフォルトの名無しさん
2014/01/18(土) 03:00:23.240214デフォルトの名無しさん
2014/01/18(土) 03:01:12.60あるってことじゃないですかー
0215デフォルトの名無しさん
2014/01/18(土) 03:01:24.01自分の価値のなさを認めて、死ね
0216デフォルトの名無しさん
2014/01/18(土) 03:02:28.69よく生きてられんねw
0217デフォルトの名無しさん
2014/01/18(土) 03:04:18.160218デフォルトの名無しさん
2014/01/18(土) 03:06:23.670219デフォルトの名無しさん
2014/01/18(土) 03:10:36.150220デフォルトの名無しさん
2014/01/18(土) 03:12:00.390221デフォルトの名無しさん
2014/01/18(土) 03:17:29.250222デフォルトの名無しさん
2014/01/18(土) 03:21:01.59つ http://www.megahobby.jp/products/item/1129/
0223デフォルトの名無しさん
2014/01/18(土) 03:30:39.70ttp://www.ted.com/talks/marcin_jakubowski.html
こういうのが技術力だアホカスども。
0224デフォルトの名無しさん
2014/01/18(土) 09:37:16.88あるのだが...
そこで提示されたC/C++のコーディング規約が、
マクロは使ってはいけない。.......... ハァ?
テンプレートは使ってはいけない。.......... ハァ?
0225デフォルトの名無しさん
2014/01/18(土) 09:46:12.85というルールを持っているんだけど、
マクロやテンプレートを使ってはいけないルールには
理由が書いてあった?
なお、理由が書いていないルールは禁止いうルールにも
もちろん理由は書いてある。
0226デフォルトの名無しさん
2014/01/18(土) 10:11:53.18確か理由は、コードが追いづらい、読みにくいだったかと。(w
ちなみに、NTTによると統計上平均100行に1つのバグがあるので、
コード行数に対してバグレポート数がそれ以下の数だと、コード
レビューやテストが足らんらしい。
足らないのはNTTのエンジニアのスキルだろと思うたYO。
0227デフォルトの名無しさん
2014/01/18(土) 10:39:24.94テスト自動化することによって100件中99件の不具合が未然に防止されたとしても、
残り1件が発生したら鬼の首を取ったかのように叩かれるんだろうな。
0228デフォルトの名無しさん
2014/01/18(土) 10:39:47.24→よーし、いっちょやってやるか
テンプレート使うな。コードが追いづらくなるから。
→ハア?やってらんねーよ!
>>226データじゃなくて?
0229デフォルトの名無しさん
2014/01/18(土) 10:44:31.790230デフォルトの名無しさん
2014/01/18(土) 10:50:26.25胡散臭さしか無いなぁ。
0231デフォルトの名無しさん
2014/01/18(土) 12:09:19.48テンプレートも組織によってはメリットよりデメリットの方が大きいし
NTT 系ならあり得る話
0232デフォルトの名無しさん
2014/01/18(土) 13:07:44.830233デフォルトの名無しさん
2014/01/18(土) 13:24:02.00漏れは、最初からあまりバグを出さないから、
テストでバグの件数を満たすため、
いつもわざとバグを作っている
これが結構疲れる。しかもこのルールのせいで、
本当にバグが増えるw
ほんまに、くだらんルールだよ
バグの数には、個人差があるのに
0234デフォルトの名無しさん
2014/01/18(土) 13:34:28.96もともとQAの元になる数字は公式的に導き出した数字じゃなくて統計的に出た
数字っていうのを知らない、理解できないって人が多いのが第一の不幸で、
そもそも統計って何?的な文系の人間が大量にいるのが第二の不幸だよな。
統計的に出た数字は絶対的な指標になんてなりえないのに。
0235デフォルトの名無しさん
2014/01/18(土) 13:46:11.68それが仕事してるフリをするために必要なんだよ
0236デフォルトの名無しさん
2014/01/18(土) 15:56:18.31いまどこでどうしてるかなあ
0237デフォルトの名無しさん
2014/01/18(土) 16:21:14.03手作業でやる必要があるから
ユニットテストは必要
静的言語なら不要
0238デフォルトの名無しさん
2014/01/18(土) 18:06:30.650239デフォルトの名無しさん
2014/01/18(土) 18:27:35.71コーディング規約が無意味だと感じるのも心が弱いから
単体テストが不要だと感じるのも心が弱いから
boostが危険なのはboostに心を許した己の心の弱さから。
結局、すべては心の問題。
ttp://wired.jp/2013/12/29/enlightenment-engineers-vol9/4/
0240デフォルトの名無しさん
2014/01/18(土) 18:32:22.96テストを通したから大丈夫なんだって安心したいだけなんですよ。
無意味だって事は判っているんですホントは。
心の弱さなんですよね。
0241デフォルトの名無しさん
2014/01/18(土) 18:54:11.88コーディング規約が無意味だと感じるのも心が弱いから .......... 単体テストが実行されていません
単体テストが不要だと感じるのも心が弱いから .......... 単体テストが実行されていません
boostが危険なのはboostに心を許した己の心の弱さから。 .......... 単体テストが実行されていません
結局、すべては心の問題。 .......... 単体テストが実行されていません
まず、テストコードを書いてください。
0242デフォルトの名無しさん
2014/01/18(土) 19:02:20.680243デフォルトの名無しさん
2014/01/18(土) 20:27:44.980244デフォルトの名無しさん
2014/01/18(土) 21:29:08.620245デフォルトの名無しさん
2014/01/18(土) 21:36:02.900246デフォルトの名無しさん
2014/01/18(土) 21:41:44.090247デフォルトの名無しさん
2014/01/18(土) 21:50:05.020248デフォルトの名無しさん
2014/01/18(土) 21:56:20.800249デフォルトの名無しさん
2014/01/18(土) 22:02:32.960250デフォルトの名無しさん
2014/01/18(土) 22:06:59.920251デフォルトの名無しさん
2014/01/18(土) 22:15:01.670252デフォルトの名無しさん
2014/01/18(土) 22:16:05.89いまどこでどうしてるかなあ
0253デフォルトの名無しさん
2014/01/18(土) 22:16:42.93テストでハゲの件数を満たすため、
いつもわざとハゲを作っている
これが結構疲れる。しかもこのルールのせいで、
本当にハゲが増えるw
ほんまに、くだらんルールだよ
ハゲの数には、個人差があるのに
0254デフォルトの名無しさん
2014/01/18(土) 22:36:33.08わざとバグを混入させている。
0255デフォルトの名無しさん
2014/01/18(土) 22:38:10.650256デフォルトの名無しさん
2014/01/18(土) 22:41:18.41一級毛根!
0257デフォルトの名無しさん
2014/01/18(土) 23:20:53.200258デフォルトの名無しさん
2014/01/18(土) 23:39:12.890259デフォルトの名無しさん
2014/01/18(土) 23:49:34.850260デフォルトの名無しさん
2014/01/21(火) 07:38:46.540261デフォルトの名無しさん
2014/01/21(火) 07:57:08.840262デフォルトの名無しさん
2014/01/26(日) 12:30:23.35開発形態では意図せぬデグレートが起きないように抑止する効果はあっても、
きちんと統制が取れた企業内開発じゃさして意味ないよなあ。
最初から通るテストを書いているわけで、結局コードを書いているのと同じ
レベルになって、バグは入り込むわけだし。
0263デフォルトの名無しさん
2014/01/26(日) 12:54:01.67開発者の手元には残ってるかもしれないけど、破棄する(コミットしない)もんだと思ってた
0264デフォルトの名無しさん
2014/01/26(日) 13:00:10.34テスト駆動開発とテストコードを書くっていうのは別の事象ってことをまだ理解してないのか(´・ω・`)
0265デフォルトの名無しさん
2014/01/26(日) 14:20:25.89きちんと統制が取れてても、意図しないデグレートは起こるし、
デグレを検知するためのテストコードは有用。
0266デフォルトの名無しさん
2014/01/26(日) 14:33:48.78そのコストはどこで圧縮されるわけ?
0267デフォルトの名無しさん
2014/01/26(日) 14:39:04.41自演か?
0268デフォルトの名無しさん
2014/01/26(日) 15:04:07.92そもそもコードを「書く」コストは少ないんだよ。
たいていは、コードの設計を考えるとか、
コードをテストするとかコードを読むとか、
コードを実行して確認するとか、そういった所にコストが掛かってる。
だってコードを書く=タイピングスピードでしょ?
考える時間を除いたタイピング速度を5文字/秒として
1時間で18,000文字だよ。
0269デフォルトの名無しさん
2014/01/26(日) 15:07:41.400270デフォルトの名無しさん
2014/01/26(日) 15:15:40.61コーディングとテストにかかるコスト。
0271デフォルトの名無しさん
2014/01/26(日) 18:13:29.18TDDでは、設計してすぐ直すから、
覚えている間に修正するので、速いし正確
ウォーターフォールだと、
かなり前にさかのぼるから、大変
ペアプログラミングでも、なぜ低コストなのか、
わからない人が多いが、
製品のライフサイクルなど、長い期間でみると、
リコールが少なくて、客離れが起きないなど、
長期視点、トータルコスト、省エネが重要
0272デフォルトの名無しさん
2014/01/26(日) 21:09:01.54またはそういう結果が示されているソースを。
0273デフォルトの名無しさん
2014/01/26(日) 21:14:39.380274271
2014/01/26(日) 23:41:50.42設計、57-78%
仕様、3-14%
以下、言語(コーディング)、要求は、
それぞれ数%程度
NASAのソフトについて、1985年のD.M. Weissの論文
ttp://www.computer.org/csdl/trans/ts/1985/02/01701983-abs.html
0275デフォルトの名無しさん
2014/01/26(日) 23:56:36.18テスト自動化する上での鬼門ですが、業務系プログラムだとこの2つが核になるからなぁ
0276デフォルトの名無しさん
2014/01/27(月) 12:55:48.16それTDD関係ないし
0277デフォルトの名無しさん
2014/01/27(月) 13:40:02.310278デフォルトの名無しさん
2014/01/27(月) 17:06:54.880279デフォルトの名無しさん
2014/01/27(月) 18:08:06.880280デフォルトの名無しさん
2014/01/27(月) 22:59:33.580281デフォルトの名無しさん
2014/01/28(火) 00:01:40.63稼働中でもきちんと動くことを確認したいんだけど、DBMSが実用稼働中は、例えば、
select * from table;
という単純なクエリですら、結果が変わり続けてるから
0282デフォルトの名無しさん
2014/01/28(火) 00:46:33.57回帰テストの自動化うまくいった?
0283デフォルトの名無しさん
2014/01/28(火) 00:55:34.88DBMSが落ちてるときの動作も確認しなくちゃいけないし
リザルトセットが大きくてレスポンスが遅いときに一貫性が壊れないことも確認しなくちゃいけないし
場合によっては、複数のDMBSで同じ動作をすることを確認させられる
0284デフォルトの名無しさん
2014/01/28(火) 07:21:50.73何がTDDすら説明がないスレだからな
このスレのテストケースはどこだよ
0285デフォルトの名無しさん
2014/01/28(火) 09:39:31.03ほら、TDD必要でしょ?
0286デフォルトの名無しさん
2014/01/28(火) 11:08:14.32TDD(あるいは単体テスト)用に本番と同じスキーマのデータベースを用意すればいいじゃん。
>>285
できるとこだけTDDでやれば?
0287デフォルトの名無しさん
2014/01/28(火) 12:44:51.12後、テスト環境といいつつ、複数の開発者が共用しなきゃいけなくって、
他のプログラマが勝手に値を書き換えて正しくテストができなかったり。
0288デフォルトの名無しさん
2014/01/28(火) 13:46:50.11> データ件数や統計情報の有無によって、フルスキャンになって遅くなったりもするしね。
そういうのはTDDの範囲外
> 後、テスト環境といいつつ、複数の開発者が共用しなきゃいけなくって、
> 他のプログラマが勝手に値を書き換えて正しくテストができなかったり。
commitすんなよ
0289デフォルトの名無しさん
2014/01/28(火) 13:49:34.390290デフォルトの名無しさん
2014/01/28(火) 20:24:10.87TDDとは別の次元の話
0291デフォルトの名無しさん
2014/01/28(火) 22:57:30.02それで何をテストすんの?
DBMSがその部分の機能は担保してるんじゃねーの?
0292デフォルトの名無しさん
2014/01/28(火) 23:32:43.680293デフォルトの名無しさん
2014/01/29(水) 01:22:00.06DBMSは結果をこっちに返すだけやぞ
0294デフォルトの名無しさん
2014/01/29(水) 05:12:26.48実用稼働中のシステムに対してテスト実施するバカはいないだろ。
> select * from table;
> という単純なクエリですら、結果が変わり続けてるから
結果が予想できるDBを作って検証すればいい。
0295デフォルトの名無しさん
2014/01/29(水) 23:04:01.38テスト用のミラーサーバでもいいけど、普通は、実用稼働中と同じ頻度で更新するDBMSに対して動作確認するんだけど
0296デフォルトの名無しさん
2014/01/29(水) 23:11:27.480297デフォルトの名無しさん
2014/01/29(水) 23:24:46.210298デフォルトの名無しさん
2014/01/29(水) 23:37:33.690299デフォルトの名無しさん
2014/01/29(水) 23:39:34.37稼働中と同じ頻度で更新される、
全く別のテストデータベースを用意すればいいだけの話
実データ、実サーバーでテストする奴はアホ。
0300デフォルトの名無しさん
2014/01/29(水) 23:43:51.72だから、稼働中でもきちんと動くことを確認するんだよね?
0301デフォルトの名無しさん
2014/01/30(木) 00:14:42.38そのサーバーにセカンドサーバと名付けよう
0302デフォルトの名無しさん
2014/01/30(木) 01:13:52.27OSのテストはしないのに、DBMSのてすとはするのか。
0303デフォルトの名無しさん
2014/01/30(木) 01:57:28.69SQLのテストしろよ
0304デフォルトの名無しさん
2014/01/30(木) 02:54:21.75DBMSそのものをテストじゃない
DBMSに一切の不具合がなくても、かえってくるリザルトセットのサイズでパフォーマンスやらメモリ関係やらの挙動がまったく異なるのがデータベース関係のプログラムなんだから
0305デフォルトの名無しさん
2014/01/30(木) 03:12:27.98毎日負荷テストしてまだ大丈夫まだ大丈夫なんてやってるのかよ
実機の負荷とクエリ見てスケールさせるスケジュール立てろ
0306デフォルトの名無しさん
2014/01/30(木) 04:09:42.09お好みのリザルトセット返すテスト用DBつくれば?
0307デフォルトの名無しさん
2014/01/30(木) 09:48:34.210308デフォルトの名無しさん
2014/01/30(木) 10:02:12.29いつまでTDDと関係ない話続ける気?
いい加減に気づけよ。
0309デフォルトの名無しさん
2014/01/30(木) 10:05:09.930310デフォルトの名無しさん
2014/01/30(木) 10:33:57.27お前が一番うざいわ
0311デフォルトの名無しさん
2014/01/30(木) 10:43:07.85「TDDが流行らなかった理由」じゃなくても、TDDに関連した話題なら文句言わないよ。
いつまでもTDDにすら関係ない話を続けるからコメントしたまで。
TDD自体の話をしたいのなら、こっちのスレがある。
【TDD】テスト駆動開発【TestFirst】
http://toro.2ch.net/test/read.cgi/tech/1284899172/
テスト困難に関する話題はこっちね。
テストしにくいコードをテストする方法教えて下さい
http://toro.2ch.net/test/read.cgi/tech/1334408391/
0312デフォルトの名無しさん
2014/01/30(木) 13:07:11.02>>308は自分の中だけで結論が出ちゃってるんだろうけど
0313デフォルトの名無しさん
2014/01/30(木) 13:24:04.13何の核心?
0314デフォルトの名無しさん
2014/01/30(木) 13:33:58.57お前TDDが何なのかわかってないだろ?
0315デフォルトの名無しさん
2014/01/30(木) 15:21:29.23ソフトウェアテストを基礎から勉強しなおしたら?
0316デフォルトの名無しさん
2014/01/30(木) 21:04:45.03運用が開発の核心だって?
0317デフォルトの名無しさん
2014/01/30(木) 22:42:29.97DBだから分かりにくいか
yahooから株価の情報取ってくるアプリなら、テストでもyahooにアクセスするでしょ
0318デフォルトの名無しさん
2014/01/30(木) 23:04:44.70小出し後出しで説明しなきゃならんなら最初から黙ってろ
0319デフォルトの名無しさん
2014/01/30(木) 23:10:52.45小出し後出しで説明してあげないと理解できないんだから、はじめから「分かりません」と言え
0320デフォルトの名無しさん
2014/01/30(木) 23:45:10.950321デフォルトの名無しさん
2014/01/30(木) 23:53:52.990322デフォルトの名無しさん
2014/01/30(木) 23:55:54.410323デフォルトの名無しさん
2014/01/31(金) 00:01:49.270324デフォルトの名無しさん
2014/01/31(金) 00:14:54.90逆
DBはテストが必要だけど、TDDには向いてないと言ってるのに、その理由を全然理解しないから延々と説明してるのだが
分散処理は、コーディング前にテストを構築しようとすると、特別なツールとシステムを導入しないといけないので、TDDには向いていないと何度言ったら分かるんだよ…
0325デフォルトの名無しさん
2014/01/31(金) 00:29:49.650326デフォルトの名無しさん
2014/01/31(金) 01:44:36.460327デフォルトの名無しさん
2014/01/31(金) 03:34:06.26テストしたいのは負荷じゃなくて、コネクション使いまわすときのメモリまわりなんだよね
javaとかならそんなことないけど、受け取るリザルトセットを双方向リンクで表現するタイプだと、動いてるプログラムを修正するのが怖い
0328デフォルトの名無しさん
2014/01/31(金) 09:26:34.92だな。
脳内でもいいから、まず負荷テストをしてから仕様書書いてね
0329デフォルトの名無しさん
2014/01/31(金) 11:44:21.67> 動いてるプログラムを修正するのが怖い
という不安を解消するのも、TDDの目的の一つなのだが
0330デフォルトの名無しさん
2014/01/31(金) 13:48:21.50> yahooから株価の情報取ってくるアプリなら、テストでもyahooにアクセスするでしょ
コード全体で見れば、実際にYahooにアクセスする部分は1%かそこらだろ。
0331デフォルトの名無しさん
2014/01/31(金) 17:33:52.620332デフォルトの名無しさん
2014/01/31(金) 17:49:43.420333デフォルトの名無しさん
2014/01/31(金) 18:11:59.080334デフォルトの名無しさん
2014/01/31(金) 18:31:32.970335デフォルトの名無しさん
2014/01/31(金) 21:32:05.59外部APIを叩くだけのツール等でTDDを実践するのは無謀ですかね
0336デフォルトの名無しさん
2014/01/31(金) 23:39:45.90プロジェクトでは最終的にはテストを作る
そのテストを作る順番を変えて「特別な教育とツールとシステムの導入なしに」再利用できる形で記述するのがTDD
ツールそろえるコストと教育する労力もかけていいなら、TDDに固執する必要はない
だから開発環境の複雑さこそがTDDの議論の中心になる
0337デフォルトの名無しさん
2014/01/31(金) 23:49:09.51最初に xUnit を書いておいたらどうですか?
プログラムを起動して、処理結果を確認する Shell プログラムでも可
とにかく、
1. どうなったら完成と「見なす」のかをプログラムを始める前に決める
2. 1 を自動的に判別する仕組みを作る
事が重要。
プログラムの開発をしながら、2 の「テスト」を何度も動かすことで、
その都度、どこまで完成に近づいていて、直近どんな機能を実現
しなければいけないのかが明確になる。
「テスト」によって「開発」を「駆動」するのが、「テスト・駆動・開発」
それ以上でも以下でもない。
0338デフォルトの名無しさん
2014/01/31(金) 23:57:27.02それができるのは、関数ぐらいだよ。
関数ではなく単なる処理の場合、
どうなったら完成になるかは最初にわからない。
具体的に言うとだね。たとえばブログシステムはどうなったら完成?
いくつかの機能はあってもなくてもいい。
機能はあってもそれが使いやすかどうかは別問題。
実際に作ってみなければ問題点はわからない。
だから仕様変更は当然のように起きる
関数は仕様を満たせば完成だろうが、
システムにおいては完成というものがないんだよ。
0339デフォルトの名無しさん
2014/02/01(土) 00:14:49.22完成形は分かってなくても、今からエディタに向かって自分が何を書きたいのかと、それの動作をどう確認するかは、は書く前に分かってないといけない
例外は分散処理
分散処理は、そもそも動作確認手法が確立してないから
0340337
2014/02/01(土) 00:15:50.73----
複雑なテストの話ですが、冪等性(何度やっても必ず同じ結果になる)
のないような事象については、別途考えればいいんじゃないですか?
たとえば、最終的に高負荷での安定性が必要な DB 処理でも、
最初は、1多重で一貫した処理ができることを目的に作って問題ない。
[1多重で一貫して動く] ∈ [高負荷でも安定して動く]
なので、[高負荷でも安定して動く] を頂上とすれば、
[1多重で一貫して動く] はそれにアタックするためのベースキャンプになる。
0341デフォルトの名無しさん
2014/02/01(土) 00:29:19.50関数の中のselect文のwhere節の「住所="愛知"」を「住所="愛知県"」に変更する
こんな簡単な修正ですら、きちっとした関数のテスト手法が確立していないという
0342デフォルトの名無しさん
2014/02/01(土) 10:29:19.57普通はその部分はプリペアドSQLを使って変数になるからテストなんて
いらないんだけどな。 それとも変数部分を含めてSQL文をプログラムで
作っちゃてる低能なのかな。
0343デフォルトの名無しさん
2014/02/01(土) 10:42:27.400344デフォルトの名無しさん
2014/02/01(土) 10:52:11.78> 完成形は分かってなくても、今からエディタに向かって自分が何を書きたいのかと、それの動作をどう確認するかは、は書く前に分かってないといけない
それじゃ時間かかるだろ?
完成形がわからないシステムがあったとして、
それを構成する個々の関数。
個々の関数を全部仕上げてないと、システムは作れないが
システム全体を見ないと、どういう関数が必要になるかわからない。
だけどシステムは完成形ではないから、個々の関数を5割ぐらいの実装で終わらせて
システム全体を作る。バグはあるがシステム全体がうっすらと形ができて
ようやく必要な関数がわかるんだ。
そこでやっと、どんなテストが必要かもわかるんだよ。
そんな仕様であるか以前に、必要かどうかもわからない関数の
テストなんか作っていたら時間がかかりすぎる。
0345デフォルトの名無しさん
2014/02/01(土) 14:38:57.89に対して統一的なルールを示さないことから割れ窓ックに崩壊していくのではないか
・スタブを必ず用意しろ
・何が何でもテストを書け
・テストを書かない場合は関数ごとに申請書もしくは専用のテンプレートを使え
0346デフォルトの名無しさん
2014/02/01(土) 17:53:56.54>>345
>>345
guiの職務経験ないんだろうなあ
0347337
2014/02/01(土) 18:39:18.76>完成形がわからないシステムがあったとして、
そういうカウボーイコーディングは、もうやめようよ
何人も死人が出てるんだし。
ただ、どうしてもやりたければ、好きにしたらいいん
じゃないですか。関わりあうのは御免被りたいけど...
0348337
2014/02/01(土) 18:49:32.39UIの自動テストは現状では難しいですな。フリーの
Selenium や似たような商用テストスイートをいくつか
試したけど、自動テストの作成コストは高過ぎる。
ウチでは、GUI の自動テストは、早々に諦めました。
そこで、まず、設計段階で
(人手でテストする必要のある = テストのコストが高い) GUI 層を薄く、
(自動テスト可能な = テストのコストが安い) 業務処理層を厚くしてます。
その上で、業務処理層は C0 カバレッジ 90% 以上必須にしてます .
0349デフォルトの名無しさん
2014/02/01(土) 18:57:34.61何を批判しているのかわからん。
たとえばGoogleのサービス。
あれは完成形だと思ってるのか?
完成なんてものはない。
常に変化していくものだ。
0350デフォルトの名無しさん
2014/02/01(土) 19:22:19.35347は「こうなったらリリース」という形を完成形と呼んでいる
気がするが、349にはそれすらないのか?
ないとしたら好きにしてくださいとしかいいようがないが・・。
0351デフォルトの名無しさん
2014/02/01(土) 19:30:52.05例えが悪い。仕様変更と更新を混同するな。
自分らが触れないコードの完成形が分からない
ってことはよくあるけどな。
0352デフォルトの名無しさん
2014/02/01(土) 19:51:08.93それは日曜プログラマさんがやってください
仕事でチームでやるときにそんなやり方やられても困る
0353デフォルトの名無しさん
2014/02/01(土) 19:53:35.82Googleの下請けのプログラマなら、今から自分がエディタに向かって、どこをどう変更したいかは、キーボードをたたく前に分かってる
そのことと、今のGoogleのサービスが完成形かどうかは関係ない
0354デフォルトの名無しさん
2014/02/01(土) 20:20:19.47誰かから何かミッションを受けてやってる仕事なの?
それともどういう機能を付けるかの選択を含やら設計なんかを自分で決めていく仕事なの?
0355デフォルトの名無しさん
2014/02/01(土) 20:50:22.100356デフォルトの名無しさん
2014/02/01(土) 22:15:10.170357デフォルトの名無しさん
2014/02/01(土) 22:35:37.580358デフォルトの名無しさん
2014/02/01(土) 22:53:39.200359デフォルトの名無しさん
2014/02/01(土) 22:54:36.75Googleのことは全然知らんが、どこをどう変更すべきかキーボードをたたく前に分かるなんて、理想論過ぎるだろ。
そんなことはあまりないと思う。
機能追加とか変更とかは妥協の産物だからだ。
やりたいことは明確でも、「大幅な変更なく、なるべく複雑にせず」とか考えれば、コードを見ながら手を動かすしかない。
0360デフォルトの名無しさん
2014/02/01(土) 22:58:06.10おいおい
下請けのプログラマがキーボード叩きながらGoogleの仕様を変更するわけないでしょ
機能なんて大きなレベルのモノを決める決定権はプログラマにはない
0361デフォルトの名無しさん
2014/02/01(土) 23:08:29.18だから条件が合ってないって言ってるだろ?
ここでの話題は「Googleの仕事」とも「下請けのプログラマ」とも決まってないよな?
機能を決めるのも自分の仕事なのか、言われたことをやるのが仕事なのか。
それをはっきりさせずにどう議論すんだよ。
前者なら書いては消し、書いては消しの連続だよ。
0362デフォルトの名無しさん
2014/02/01(土) 23:13:25.35自分ひとりで完結する日曜プログラマなら、テストをするしないも自由で、そもそも開発プロセスにこだわる必要はないので別のスレに行くべきかと…
0363デフォルトの名無しさん
2014/02/01(土) 23:18:24.87おまえの脳内では
仕様を決めるプログラマ = 趣味でやってる日曜プログラマ
みたいだけど、そういう解釈でよろしいか?
0364デフォルトの名無しさん
2014/02/01(土) 23:21:20.80キーボードでコードを叩きながらシステムの仕様を決めるプログラマは、趣味でやってる日曜プログラマです
0365デフォルトの名無しさん
2014/02/01(土) 23:23:16.94おまえ受託側のプログラマだろ?
委託する方の世界は全く知らないと見えるな。
0366デフォルトの名無しさん
2014/02/01(土) 23:25:01.340367デフォルトの名無しさん
2014/02/01(土) 23:37:49.73それはテスト作らなくてもいいコードだから、コーディングとは別の話じゃないの
パワーポイントの資料と同じカテゴリのモノでしょ?
0368デフォルトの名無しさん
2014/02/01(土) 23:47:06.32ユーザー向けAPIの説明に、「このクラスはスレッドセーフです」と書けるかどうか、いろいろ試行錯誤しないとわからないわけよ。
結果的に「別スレッドで使用する場合はこの部分をロックしてください。」となるかもしれない。
「この部分」てのをなるべく狭くしたいとか、それこをコードを叩きながらじゃないとやれないだろ。
0369デフォルトの名無しさん
2014/02/01(土) 23:53:48.88○それこそ
0370デフォルトの名無しさん
2014/02/01(土) 23:58:37.54いやだから、「この部分を+から*に変更するといいかもしれない」の「この部分」をこれから*に変更する前に、「この部分」の変更で目的を達成するか確認するテストを書けってことなんだが
「いいかもしれない」状態がどういう状態かとか、「+から*に変更しよう」とかが、これからキーボード叩く前に分かってない人は、ちょっと怖いので一人でプログラミングしなさい、と
0371デフォルトの名無しさん
2014/02/02(日) 00:05:37.11それが父の教えです
0372デフォルトの名無しさん
2014/02/02(日) 00:10:19.94「テストを先に」って技術の話だと思っていたけど、そうじゃなくて心構えの話なのかな?
0373デフォルトの名無しさん
2014/02/02(日) 00:13:26.83TDDの文脈では心構えの話だと思うけど、
技術の話ってどういうこと?
0374デフォルトの名無しさん
2014/02/02(日) 00:18:47.80最終的に必要な提出物の数を変化させずに、特別な教育とツールとシステムの導入なしに、バグを少なくするトリック
0375デフォルトの名無しさん
2014/02/02(日) 00:33:34.81テストを先に書くことによる効果をトータルで評価したいんだよ。
これまでこのスレを見てきて「テストの重要性を理解しろ理解しろ」っていう主張はあるけど、なにを理解しろってんだ?
理解する対象の理論が全然提示されてないんだよ。
技術だったら根拠理論があるんだろう。
条件や環境、効果、必要なアクティビティ。メリットとデメリット。
特に条件について出来る限り厳密に評価したいんだ。
なんにでも当てはまる手法なんて無いと思ってるからね。
0376デフォルトの名無しさん
2014/02/02(日) 00:35:11.08「このクラスはスレッドセーフです」と仕様書に書いてあるべき
そして、書いてあるならTDDでスレッドセーフをテストするべき
と言うことは
書いてないなら、スレッドセーフではないことをテストするべきか?(笑)
0377デフォルトの名無しさん
2014/02/02(日) 00:51:33.21仕様としてスレッドセーフにしたいからスレッドセーフに作るのであって
コードがスレッドセーフになっているから仕様として書くわけではない。
「コードが仕様書です」といっているお前のやり方とかみ合わないのは
TDD がある意味では「仕様書を元にコードを書け」ということだから。
0378デフォルトの名無しさん
2014/02/02(日) 01:07:26.26自動テストが難しい場合、手動テストも難しいよね
「なんとなくテスターがそれらしい事をしたのでOK」が手動テストの正体
自動テストと違って万能に見えるのは、曖昧さを認めてるから
0379デフォルトの名無しさん
2014/02/02(日) 01:07:29.12スレッドセーフにできるか無理か判断できるのはプログラマだし、判断結果を仕様書に反映させる「義務」もあるわけだ。
もちろんできるか否かはいろいろな条件に依存するがな。それを勘案しての判断だ。
>>377
スレッドセーフが当初要件だったらそうだけど、潜在要望だったら仕様書が先にあるとは限らないだろ?
0380デフォルトの名無しさん
2014/02/02(日) 01:08:30.52結果、コードとコメントが仕様書になるわけだ
0381デフォルトの名無しさん
2014/02/02(日) 01:14:59.69メーカー系は今はどこも設計ちゃんとしてるでしょ。
0382デフォルトの名無しさん
2014/02/02(日) 01:19:07.38どっちがどっちなんだ?
0383デフォルトの名無しさん
2014/02/02(日) 01:41:46.71キーボード叩く前に具体的に何ができるのさ?
「こういうクラスを作って、これを経由すれば解決するかも?こんなインタフェースかな?いやこうかな?」
ってのをいろいろ書いてみることすらしない???
もしそれが、「紙に書いた方がいい」とか、「ホワイトボードに書いた方がいい」とかだったら単なるスタイルの違いだし、
テストプログラムの作成が先だっていうんなら、その効用を定量的に示すべき。
0384デフォルトの名無しさん
2014/02/02(日) 02:16:14.97どの開発プロセスでも最後にはテストを作るんだから、テストの重要性を理解してるのは大前提
TDDは、特別な教育やツールを導入する必要がない限りにおいて、それを先に作れってだけなんだが
テストそのものが重要かどうかは、そもそもTDDとは別のスレで議論すべきじゃないのか?
0385デフォルトの名無しさん
2014/02/02(日) 02:19:42.44「何を表示するプログラムかわかんないけどとりあえず書き始めるよ!」
とはならないと思うが、おまえらそういうレベルで仕事してんの?
0386デフォルトの名無しさん
2014/02/02(日) 02:23:17.99「こういうクラス」の「こういう」はキーボードを叩く前に分かってるんですよね?
だったら、コード修正したら本当に「こういう」になるかどうかの確認コードを先に書けってだけの話なんだが
それすらも分かってないなら、「何の目的もないけどとにかくクラスを作れば、何かを経由して何かが起きるかも」でキーボードを叩いてるんだから、ひきこもってひとりでやってくださいとしか…
0387デフォルトの名無しさん
2014/02/02(日) 02:37:06.41なら、まず先に、結果が足し算になったときにTrueになるテストコードを書こう
関数名を変更したいなら、まず先にテストの中の関数名を変更してから、コードの関数名を変更しよう
ただそれだけの話なんだけど
0388デフォルトの名無しさん
2014/02/02(日) 02:52:59.720389デフォルトの名無しさん
2014/02/02(日) 05:58:26.31足し算なんて簡単な例を使うから
お前は理解できんのだ。
> なら、まず先に、結果が足し算になったときにTrueになるテストコードを書こう
そのテストコードがたくさんある。
> 関数名を変更したいなら、まず先にテストの中の関数名を変更してから、コードの関数名を変更しよう
関数を使っている箇所がたくさんある。
どうだ? やる気を無くすだろう?
0390デフォルトの名無しさん
2014/02/02(日) 08:07:41.67>確認コードを先に書けってだけの話なんだが
>>387
>ただそれだけの話なんだけど
その主張は散々聞いたよw
俺は「先にテストを書いた方が後で書くよりいい」ということの厳密な証明が欲しいって言ってるだけなんだよ。
こんだけ議論があるんだから、ちゃんとしろよ。
0391デフォルトの名無しさん
2014/02/02(日) 08:25:32.50>「こういう」はキーボードを叩く前に分かってるんですよね?
わかんねーよw
>「何の目的もないけどとにかく
おまえが言うのは、「用意、撃て!」じゃなくて「用意、狙え、撃て!」にしろって事だろ?
そんな事はわかってるよ。
問題は、狙う = 先にテストコードを書く が常に成り立つかってことだ。
そいつをちゃんと証明しろや。
0392デフォルトの名無しさん
2014/02/02(日) 08:50:41.62「テスト→コーディング」 VS 「コーディング→テスト」
のどちらが良いかってこと。
決してコーディングだけしてテスト書かないとは言ってないのだよ。
0393デフォルトの名無しさん
2014/02/02(日) 08:52:46.17ちゃんとしたテストじゃないんだ。
本番用のテストとして使えるものもあるが、使い捨てのテストも多い。
だから本番用のテストは別にちゃんと書かないといけない。
つまりこういうことなんだ。
「仮テスト→コーディング→本テスト」 VS 「コーディング→本テスト」
0394デフォルトの名無しさん
2014/02/02(日) 09:05:59.070395デフォルトの名無しさん
2014/02/02(日) 09:10:37.96TDDは技術とか証明とかそういう高レベルな話じゃないと理解している。
0396デフォルトの名無しさん
2014/02/02(日) 09:14:20.15元発言者じゃないけど、
TDDの根本は、仕様を自然言語で書くのをやめてテストコードで書こうということだと思う。
実装が先かテストが先かってのは、実装が先か仕様が先かという議論と同じ。
現場だと、仕様がわからないまま実装に突き進むってのもよくあることだが。
TDDでも、開発中に仕様変更が入ればテストを書き直さなきゃいけない。
それは当たり前。仕様=テストだから。
仕様変更が頻繁に発生すれば、TDDではテストケースの書き直しが頻繁に発生する。
確かに手間。仕様書の変更が頻繁に発生するのと同じこと。
この手間が無駄だからテストを書かないって判断もあると思う。
どうせ仕様変更になるから一々仕様書を改訂せず口頭でいいだろって判断がよくあるのと同じ。
0397デフォルトの名無しさん
2014/02/02(日) 09:21:24.770398デフォルトの名無しさん
2014/02/02(日) 09:29:26.89つまり、まずは、仕様書に書く粒度のことをホワイトボックステストとして書けばいいと思う。
>>387, >>399 あたりの議論については、
詳細設計レベルの下請け関数一つ一つTDDでやるか?という意見の食い違いじゃないかと。
自分は、それはどっちでもいいという立場。
詳細設計書を書く案件なら、それをテストにすればいいし、
そもそも詳細設計書なんて作らずプログラマにざっくり権限委譲するような案件なら
そこをTDDでやるもやらないも各プログラマの自由。
多少複雑な関数なら、詳細設計書がなくてもプログラマが個人メモレベルのチラ裏設計すると思う。
そういうのはTDDにすればいい。逆に、悩むこともなく一瞬で書けるような関数全部TDDでやるのは時間の無駄。
TDDでなくても、そういう簡単な関数は後から単体テスト書くのも無駄だと思うけど。
0399デフォルトの名無しさん
2014/02/02(日) 09:35:52.93うちのテスト舞台に任せてもらえば問題ありません(実話)
0400デフォルトの名無しさん
2014/02/02(日) 09:44:10.58技術の話じゃなく心構えの話であって、なおかつちゃんとした証明とかが無いにもかかわらず、
「テストファーストしない人間とは関わりたくない」などと発言をする。
こういうのが信者っぽいんだよ。感覚的な結論が先にありきでさ。
0401デフォルトの名無しさん
2014/02/02(日) 09:51:21.84「○○しない人と関わりたくない」ってのは
○○が新しい技術なら何でもいいってのがミソ。
プログラマの世界だと新しい技術を積極的に取り入れる人は総じて技術レベルも高いから、
○○の良し悪しとは無関係に、○○を使ってみている人は無関心な人より仕事ができる可能性が高い。
試しに○○に古いものを入れてみる。
「コーディング前に詳細設計書も書かない人間とは関わりたくない」
言っていることはテストファーストと似ているはずなのに、なぜかロートル臭がプンプンしてくる不思議。
0402デフォルトの名無しさん
2014/02/02(日) 11:10:29.07それを制度化したのがTDD
0403デフォルトの名無しさん
2014/02/02(日) 11:53:49.21聞いたこともない人
無関心な人
関心ある人/試してみたた人
・・・
この間にいろんな層
・・・
信者
0404デフォルトの名無しさん
2014/02/02(日) 12:03:39.76俺は証明とかは要らんけど成功事例・失敗事例が出そろってほしい。
ちゃんと社名やプロジェクト名がわかるやつ。
トヨタ生産方式とかいろんな事例があって参考になるよ。
0405デフォルトの名無しさん
2014/02/02(日) 12:30:26.89>「用意、撃て!」じゃなくて「用意、狙え、撃て!」にしろ
そのフレーズ、どっかで見たんだけど思い出せない・・・
0406デフォルトの名無しさん
2014/02/02(日) 12:36:34.96http://mag.executive.itmedia.co.jp/executive/articles/1010/20/news009.html
0407デフォルトの名無しさん
2014/02/02(日) 12:41:33.64失敗学の学としての失敗というのがあってな
事例では根源を見つけることができないんだよ
0408デフォルトの名無しさん
2014/02/02(日) 12:43:44.13それだと構え、撃て、狙えになってるな
撃ってから狙ってどうすんだよw
0409デフォルトの名無しさん
2014/02/02(日) 12:44:18.75ようするにまずは行動してあとから考えろってことだろ
0410デフォルトの名無しさん
2014/02/02(日) 12:44:25.31それ見たら「狙う前に撃て」って書いてあるじゃんw
TDDとは逆なような
0411デフォルトの名無しさん
2014/02/02(日) 12:45:16.13いや、どっかで見た、というのに対してコレかな?っというだけの話。
TDDと関係ない話をしてしまって申し訳ありませんでした
0412デフォルトの名無しさん
2014/02/02(日) 14:31:30.74まず的に向かって一発撃ってそれから軌道修正
これは正しい
それに対して
TDD:
撃つ前にまず的をセットし、それから的に当たるように撃つ
それ以外の何か:
先に撃ってそれに当たるように的をセットする ← !?
0413デフォルトの名無しさん
2014/02/02(日) 14:37:23.87そう考えるとなんか筋が通ってるな
0414デフォルトの名無しさん
2014/02/02(日) 14:48:35.810415デフォルトの名無しさん
2014/02/02(日) 17:47:37.860416デフォルトの名無しさん
2014/02/02(日) 18:09:58.33迷著「アンチパターン」にそんなのがあったような
0417デフォルトの名無しさん
2014/02/02(日) 18:13:11.12的ってのが文字通り目的を表しているなら、TDDだろうが「それ以外の何か」であろうが先に設定するだろうなあ。
いずれにしてもそんなたとえ話はもうおなかいっぱい。
>>407
理論も事例もないって、そう言ってるの?そう捉えていい?
0418デフォルトの名無しさん
2014/02/02(日) 20:18:46.66ちがう、技術はパラダイムシフトで変わっていくのに
失敗の解釈と対策はインクリメンタルに貯まる
これはパラダイムシフトは前のやりかたで説明がつくことに由来する
理屈と膏薬はどこへでもつくかのごとく、穿った解釈と実効性のない対策が闊歩するのだよ
だからパラダイムシフトが多い領域では失敗を蓄積するより事前のリスク回避のほうが効果的
エンジンの開発などパラダイムを操作できる立場なら別だけとこのスレに何人いるか
0419デフォルトの名無しさん
2014/02/02(日) 22:34:15.06話がずれてる。
パラダイムシフト後のTDDの事例を求めている。その集積が必要だと。
0420デフォルトの名無しさん
2014/02/02(日) 22:53:40.21変更が必要なコードが量産されるのが目に見えている
動く前に脳みそ使えとしか…
0421デフォルトの名無しさん
2014/02/02(日) 23:39:21.03失敗学の失敗のことなんか関係ないし知らん。
根拠理論と事例を両方とも出せ。技術において当たり前のことだ。
事例で根源を見つけることができないんだったら何によって見つけるのかも示せ。
それもできないんだったらよく言っても「実験」に過ぎない。
悪く言えば何かの宣伝活動だ。
0422デフォルトの名無しさん
2014/02/02(日) 23:53:13.92本当の事なんてかかれてない
0423デフォルトの名無しさん
2014/02/02(日) 23:55:29.760424デフォルトの名無しさん
2014/02/03(月) 00:04:19.80単純な思考実験でも見つかるだろ…
0425デフォルトの名無しさん
2014/02/03(月) 00:08:50.97実験段階の技術じゃあるまいに、何言ってるんだかw
0426デフォルトの名無しさん
2014/02/03(月) 00:19:22.54そもそも技術じゃなくて、作業の順序を変えるだけのただの心意気の話だし…
逆に技術やツールが必要なら、従来通りの手順を変えてはいけないわけだし
0427デフォルトの名無しさん
2014/02/03(月) 00:31:14.410428デフォルトの名無しさん
2014/02/03(月) 00:41:43.750429デフォルトの名無しさん
2014/02/03(月) 02:07:15.49「指動かす前に脳ミソ使え」「ピーマンは先に食え」は心意気の話でしょ?
0430デフォルトの名無しさん
2014/02/03(月) 02:10:22.75特別な教育やツールを導入する必要がない限りにおいて、コードを入力する前に、これから入力しようとするコードのテストを先に作成する開発スタイル、あるいはコーディング慣習のこと
0431デフォルトの名無しさん
2014/02/03(月) 02:13:03.21「技術の話」ってのは具体的に何を指すわけ
0432デフォルトの名無しさん
2014/02/03(月) 08:09:50.07垂直思考しかできないうえ、コンテキストが理解ができない
ドクターとしては決して食っていけないタイプ
0433デフォルトの名無しさん
2014/02/03(月) 15:14:57.86仲間内だけでしか通じない単語で煙に巻く人間もいるけどなw
0434デフォルトの名無しさん
2014/02/03(月) 15:19:50.02> テストを先に書くことによる効果をトータルで評価したいんだよ。
> これまでこのスレを見てきて「テストの重要性を理解しろ理解しろ」っていう主張はあるけど、なにを理解しろってんだ?
> 理解する対象の理論が全然提示されてないんだよ。
吐き気がするほどのクレクレ君。
プログラマーに向いてないんじゃないの?
0435デフォルトの名無しさん
2014/02/03(月) 19:42:21.59ほんとにそうだよな。
無い物ねだりもいいかげんにしろっての。
0436デフォルトの名無しさん
2014/02/03(月) 21:27:26.580437デフォルトの名無しさん
2014/02/03(月) 21:46:23.48指動かす前に脳ミソ使うってのはやるべきだよな。
やっぱ走りながらよりいったん落ち着いて考える方がいいアイデアが浮かんできやすい。
ピーマンの話はよくわからん。オレはおかずは交互に食う。
で、TDDと何の関係が?
0438デフォルトの名無しさん
2014/02/03(月) 21:55:32.200439デフォルトの名無しさん
2014/02/03(月) 22:01:29.780440デフォルトの名無しさん
2014/02/03(月) 23:27:28.490441デフォルトの名無しさん
2014/02/03(月) 23:48:10.840442デフォルトの名無しさん
2014/02/03(月) 23:54:35.330443デフォルトの名無しさん
2014/02/04(火) 00:02:28.56答えはNoです
歯医者があなたの前歯を削っている最中に、ドリルの先端を付け替えながらひらめいたアイデアを実践してよいだろうか?
答えはNoです
プログラマは、キーボードを叩きながらひらめいたアイデアをどんどん実戦していきます
世界がつぎはぎだらけで崩壊寸前である理由もご理解いただけるのではないかと
0444デフォルトの名無しさん
2014/02/04(火) 00:06:46.380445デフォルトの名無しさん
2014/02/04(火) 00:10:34.19たとえ話はお腹いっぱいなのです。
下手なコンサルとおんなじなのです。
0446デフォルトの名無しさん
2014/02/04(火) 00:13:10.79プログラマが叩き込むコードはソフトウェアだろうか? それともコードよりも上の抽象概念としての設計がソフトウェアだろうか?
0447デフォルトの名無しさん
2014/02/04(火) 00:16:43.87いま流行ってるみたいだし。みたいな。
0448デフォルトの名無しさん
2014/02/04(火) 07:02:55.40お前は "TDD paper" でぐぐることすらできないのか?
クレクレ君と言われても仕方ないよな
http://stackoverflow.com/questions/540622/looking-for-papers-studies-on-tdd-effectivness
0449デフォルトの名無しさん
2014/02/04(火) 18:04:08.46paperって紙だろ!
ぐらいの認識でしょ
0450デフォルトの名無しさん
2014/02/04(火) 20:56:06.47客先でつらい目にあうだけだから
0451デフォルトの名無しさん
2014/02/04(火) 21:47:23.16なにがあったの?
0452デフォルトの名無しさん
2014/02/04(火) 22:09:27.930453デフォルトの名無しさん
2014/02/04(火) 22:52:19.41仕様を思い出すか推測する
0454デフォルトの名無しさん
2014/02/05(水) 03:08:41.99そのプログラマがどれだけバグを出さないかを推測する
0455デフォルトの名無しさん
2014/02/05(水) 14:02:13.38そしてテストコードが充分でないことに気づく。
0456デフォルトの名無しさん
2014/02/05(水) 14:10:40.040457デフォルトの名無しさん
2014/02/05(水) 21:39:24.69テスト駆動=先に動作保証する みたいに思うから、できるわけない
テストファーストしたら、あとでテスト書かなくていいみたいに思ってるやつばかりだし
0458デフォルトの名無しさん
2014/02/05(水) 23:06:32.37「仮テスト→コーディング→本テスト」 VS 「コーディング→本テスト」
0459デフォルトの名無しさん
2014/02/06(木) 00:14:02.48動作確認すりゃいいよ
0460デフォルトの名無しさん
2014/02/06(木) 00:54:09.39その動作確認のテストをコード片よりも先に書けってことだよ
システムのテストも先に書けばいいけど、それはまた別の話
0461デフォルトの名無しさん
2014/02/06(木) 10:49:51.950462デフォルトの名無しさん
2014/02/06(木) 23:32:39.75かなり期待外れ。
ケーススタディにはなるのかも。
0463デフォルトの名無しさん
2014/02/06(木) 23:59:01.60プログラマ個人の慣習として行うモノか
0464デフォルトの名無しさん
2014/02/07(金) 00:43:56.38サードパーティのソース付きゴミ屑ライブラリとかな
0465デフォルトの名無しさん
2014/02/07(金) 01:18:43.290466デフォルトの名無しさん
2014/02/07(金) 11:58:18.67つまり、目で確認する時間 < コードを書く時間
の場合には役に立たないってこと?
0467デフォルトの名無しさん
2014/02/07(金) 12:24:16.77バグを見つけるのは早ければ早いほうがいいという説と
テストは最後にするものだという説がある
どちらかを否定しないと、テスト駆動とテストは両方とも必須になる
0468デフォルトの名無しさん
2014/02/07(金) 12:34:51.490469デフォルトの名無しさん
2014/02/07(金) 13:03:32.99自己責任なら人それぞれ自分の言葉でTDDを定義するしかない
0470デフォルトの名無しさん
2014/02/07(金) 14:31:36.70何を期待してたんだ?
0471デフォルトの名無しさん
2014/02/07(金) 18:40:42.51「TDD のこころ @ OSH2014」
http://www.slideshare.net/t_wada/osh2014-sprit-of-tdd
心理的なメリットが大きいらしい
0472デフォルトの名無しさん
2014/02/07(金) 21:03:47.07テストは必須。テスト駆動は習慣
0473デフォルトの名無しさん
2014/02/07(金) 21:04:29.26ググったけどまともに解説してるところがない
このスレでも簡単にググった結果に満足して書き込んでるだけの奴らばかり
0474デフォルトの名無しさん
2014/02/07(金) 21:13:25.370475デフォルトの名無しさん
2014/02/07(金) 21:22:13.89少しずつ拡張してそのたびにテスト
そりゃテストの回数が多いんだからバグは減るよな
その段階でじっくりバグを潰すのと、後からまとめてバグ探しするのは
どちらが効率いいのかわからんけど
0476デフォルトの名無しさん
2014/02/07(金) 23:40:21.84目で確認できるという妄想はそろそろ捨てたらどうだ?
0477デフォルトの名無しさん
2014/02/08(土) 00:20:07.80ウォータフォールモデル自体、手戻りが大きくなるとコストも大きくなるから
不具合は早い段階で発見するように推奨されているんだけどな。ただし、
あっちはバグ曲線なる統計学の悪魔がいるから各工程でバグを出すことを
義務付けられるというジレンマに陥っている。
どっちにしろプログラムにかぎらず不具合や不都合を先送りすると時間辺りの
コストは指数的に増えていくから後回しにしないほうがいい。
0478デフォルトの名無しさん
2014/02/08(土) 04:08:04.260479デフォルトの名無しさん
2014/02/08(土) 07:07:08.800480デフォルトの名無しさん
2014/02/08(土) 08:49:10.800481デフォルトの名無しさん
2014/02/08(土) 08:57:49.27システムデザインとIF設計でコーディングの義務がないならさっさと机上設計して作業終わらせるぜ。デザインバグはいくらでももみ消せるからな
0482デフォルトの名無しさん
2014/02/08(土) 09:19:21.57と思ったが、それはもはやTDDではないな
0483デフォルトの名無しさん
2014/02/08(土) 11:01:33.22ただのアサートデバッグじゃん
Cから入ったプログラマなら無意識にやってることだし
0484デフォルトの名無しさん
2014/02/08(土) 11:49:25.720485デフォルトの名無しさん
2014/02/08(土) 13:00:55.98見事に証明されたなw
0486デフォルトの名無しさん
2014/02/08(土) 13:08:44.66底辺PG乙
0487デフォルトの名無しさん
2014/02/08(土) 13:42:20.69TDDをプログラマ個人の慣習としてとらえるなら、どの開発プロセスでも適用可能
特別な教育とツールの導入が必要ない限りにおいて、テストを先に書くわけだから
0488デフォルトの名無しさん
2014/02/08(土) 13:46:13.34勘違いしているが、今のところ、どの開発プロセスでも、コードのバグのなさに責任を持つのは、あくまでもコードをエディタに打ち込んだプログラマ本人だけ
テスターは、ブックボックステストや、コード作成者の1/100以下の時間でコードを一覧することしか許されてないので、ある決まった種類の明らかで致命的バグを見つけることしかできない
0489デフォルトの名無しさん
2014/02/08(土) 17:25:52.67プログラマー本人が責任を持つなんて、そんな恐ろしい開発プロセスは嫌だ
0490デフォルトの名無しさん
2014/02/08(土) 17:30:14.88責任をもつだけの権限と報酬があればオレは喜んで引く受けるけどね。
実際は責任だけ負わされて潰そうとしてくるところの方が圧倒的に多いけど。
0491デフォルトの名無しさん
2014/02/08(土) 18:13:39.24逆に考えろ
少ない労力でバグを取り除くためのチャンスと情報を一番多く持っているのは、プロジェクトの中では誰なのかと
0492デフォルトの名無しさん
2014/02/08(土) 18:14:39.09バグを混入することに責任なんかないのに、なぜその責任だけは無償で果たそうとするのか…
0493デフォルトの名無しさん
2014/02/08(土) 18:18:16.78実際は俺がミスをしてプロジェクトを破壊したら責任だけ負わされて潰そうとしてくるところの方が圧倒的に多いけど。
プログラマがいかに無責任かが分かる
0494デフォルトの名無しさん
2014/02/08(土) 18:19:37.02責務というなら同意
0495デフォルトの名無しさん
2014/02/08(土) 20:59:36.74テストが法律だとすると、テストで見つからないバグは無罪
0496デフォルトの名無しさん
2014/02/08(土) 22:13:07.980497デフォルトの名無しさん
2014/02/09(日) 02:35:29.44バグ混入は、食品会社でいうと従業員の毒物混入と一緒
食品会社で、「俺が毒入れたけど、検査がスルーしたから、俺は無罪」って言ってるようなもん
0498デフォルトの名無しさん
2014/02/09(日) 09:15:03.670499デフォルトの名無しさん
2014/02/09(日) 09:33:28.27日本の設計と製造が分離されてる体制だったら、SEがテストプログラム書いて、
PGにプログラム書かせて、テストプログラムでテストするのがいいんじゃないか?
PGはSEの書いたテストプログラムが通った、って責任逃れできるし、
SEはPGがおかしな動きのコード書いてないか、テストプログラムでテストできるし。
0500デフォルトの名無しさん
2014/02/09(日) 10:41:07.45それは不可能な話だ。
だからNTTはソースコードから日本語に戻すツールを
作れとか頭の悪いこと言ってるわけさ。
ソースコードそのまま読めばいいのにw
NTTデータ ソースコードが設計図と認める
http://kohada.2ch.net/test/read.cgi/prog/1390309568/
もしくはちゃんと使える設計書を作っておけよ。
SEは自分が作ったものが使えないといってるような話だよな。
0501デフォルトの名無しさん
2014/02/09(日) 11:08:29.940502デフォルトの名無しさん
2014/02/09(日) 11:20:04.78役員っていうか、ソースを読めない人間は皆そんな風に考えている。
バグを埋め込んでるとかそんな被害者妄想を垂れ流すくらいならソースを自分で
読んでみればいいだろって思うよ。同じプロジェクトをしてる人に見せれない理由
なんて無いから、頼まれればいくらでも見せますよ。ただ、数百数千数万ある
ソースファイルの細部まで事細かに覚えている、理解しているわけじゃないから
質問されても答えられないことの方が多いけど。
0503デフォルトの名無しさん
2014/02/09(日) 12:17:04.04病人を批判しても意味がないよ
0504デフォルトの名無しさん
2014/02/09(日) 14:43:30.19それは当然
建築会社で釘打ってた土方が「これ製図通りに建てたら倒れるわ」と思ったら上司に報告して、その場で上司に責任をなすりつけた上で作業を続けるのは社会人として当然の態度
0505デフォルトの名無しさん
2014/02/09(日) 14:48:50.11そのコードをコーディングしてない人がテストできるバグは限られている
テストプログラムが通ったは、建築でいうと、「目隠しして実際に1日住んでみました」程度の意味しかない
テスターにバグ除去の責任を押し付けたいなら、そのコードについて、コーディングにかけた時間と同じ時間をテストのために用意しなければならない
0506デフォルトの名無しさん
2014/02/09(日) 14:55:32.39仕様のミスを無視すると、プログラマがバグを埋め込んでるのは事実なのだが
0507デフォルトの名無しさん
2014/02/09(日) 21:35:48.720508デフォルトの名無しさん
2014/02/09(日) 23:11:45.49どれだけ適当なテストをしてるんだよw
0509デフォルトの名無しさん
2014/02/09(日) 23:32:46.68修正を加えてもテストのやり直しはしません
これは日本のIT業界では一般的なのでしょうか?
基幹ライブラリに手を入れたら今迄のテストは台無しになるのではないでしょうか?
0510デフォルトの名無しさん
2014/02/09(日) 23:35:47.80理屈でいえば全部再テストだけどな
そもそも、バグを全部直さずに出荷なんて当たり前の世界
0511デフォルトの名無しさん
2014/02/10(月) 01:28:00.80影響範囲調査するでしょ普通は
0512デフォルトの名無しさん
2014/02/10(月) 02:02:58.36全部やるか目を逸らすか職人のカンであたりを付けるしかない
0513デフォルトの名無しさん
2014/02/10(月) 02:14:28.720514デフォルトの名無しさん
2014/02/10(月) 02:23:16.21オカルトの領域だから未熟なエンジニアにはピンとこないかな
0515デフォルトの名無しさん
2014/02/10(月) 07:12:01.340516デフォルトの名無しさん
2014/02/10(月) 09:07:43.720517デフォルトの名無しさん
2014/02/10(月) 09:34:57.130518デフォルトの名無しさん
2014/02/10(月) 10:04:57.950519デフォルトの名無しさん
2014/02/11(火) 03:42:52.870520デフォルトの名無しさん
2014/02/15(土) 12:05:53.85↑ ↑ ↑ ↑ ↑ ↑
0521デフォルトの名無しさん
2014/02/15(土) 18:30:22.980522デフォルトの名無しさん
2014/02/15(土) 20:12:21.49A.経験と勘で判断する
0523デフォルトの名無しさん
2014/02/15(土) 21:05:57.850524デフォルトの名無しさん
2014/02/16(日) 22:58:38.20A.経験と勘で判断する
Q.あれはスポーツなのか判断するにはどうテストしたらいいの
A.経験と勘で判断する
Q.なんで半そでで平気なの
A.経験と勘で判断する
0525デフォルトの名無しさん
2014/02/17(月) 07:05:10.72コードを著しく堅牢にする手段がもう一つあるのにそっちも使わないというのは
その程度の意識の低さ、あるいは視野の狭さってことっしょ
0526デフォルトの名無しさん
2014/02/17(月) 11:19:18.750527デフォルトの名無しさん
2014/02/17(月) 22:24:50.540528デフォルトの名無しさん
2014/02/17(月) 23:49:25.93前者は意識が低い
後者は意識が高いけど高くなるのは意識だけではない
0529デフォルトの名無しさん
2014/02/18(火) 01:20:20.07どんな技術レベルの誰が書いたか知りません
とりあえずパッと見た感じはバグはなさそうです
さぁ、どうします?
0530デフォルトの名無しさん
2014/02/18(火) 01:23:23.260531デフォルトの名無しさん
2014/02/18(火) 01:26:01.34小さな関数ということから80L程度だろう
0532デフォルトの名無しさん
2014/02/18(火) 01:32:55.190533デフォルトの名無しさん
2014/02/18(火) 01:33:43.120534デフォルトの名無しさん
2014/02/18(火) 01:39:48.32日曜プログラマは好き勝手にコード書いた方がいいですよ
0535デフォルトの名無しさん
2014/02/18(火) 07:35:01.60長年の無計画な運用で腐りきった何万行のレガシーコードを渡されることがあっても、小さな関数なんて無視しても一緒だろ
0536デフォルトの名無しさん
2014/02/18(火) 11:00:33.620537デフォルトの名無しさん
2014/02/19(水) 01:14:22.730538デフォルトの名無しさん
2014/02/19(水) 01:19:04.11金切り声で罵るPMに半日頭を下げてコーディングする時間もない状況だ
0539デフォルトの名無しさん
2014/02/19(水) 01:52:12.40動きが仕様と違うとかは話聞いてなかったり忘れてたりするだけ
つまり人間の方にバグがあるんだから仕方ない
0540デフォルトの名無しさん
2014/02/20(木) 14:28:11.54↓
人間の方にバグがあるんだから仕方ない
どうしてこうなった・・・
0541デフォルトの名無しさん
2014/02/21(金) 08:14:01.38そもそもお前もお前のオトンとオカンの過ち... (w
0542デフォルトの名無しさん
2014/02/25(火) 01:01:31.44しかし、仕様そのものが間違っている場合がよくある
0543デフォルトの名無しさん
2014/02/25(火) 12:59:23.13ゆえにプログラマーがバ○スを唱えるとバグは完全に消滅する
0544デフォルトの名無しさん
2014/02/25(火) 23:40:03.07値を見て満足できるほど悟れない
やっぱそれなりの出力が欲しい
アジャイルとテスト駆動開発はジャップは無理
0545デフォルトの名無しさん
2014/02/26(水) 19:27:31.810546デフォルトの名無しさん
2014/02/26(水) 20:27:51.87時系列的にもプログラム作成後に生まれた意図のことも多いよね
0547デフォルトの名無しさん
2014/02/27(木) 02:09:14.20製作者が仕様書を書くわけじゃないし・・・
0548デフォルトの名無しさん
2014/02/27(木) 02:24:15.08意図しろ、と強制はされているよね
0549デフォルトの名無しさん
2014/02/27(木) 22:19:38.45作った人間が全て悪いのだ
0550デフォルトの名無しさん
2014/02/27(木) 22:58:04.770551デフォルトの名無しさん
2014/02/27(木) 23:02:29.27それイコール人間にバグがないことを証明させるプログラムなのだよ
0552デフォルトの名無しさん
2014/02/27(木) 23:21:08.64そもそも、「プログラムにバグがないことを証明できない」
という理論に反証しようとしてできたのがコンピュータ
反証には失敗したが、その過程の思考実験でコンピュータ
というもののアイデアが生まれた。
0553デフォルトの名無しさん
2014/02/27(木) 23:22:07.890554デフォルトの名無しさん
2014/02/27(木) 23:24:27.270555デフォルトの名無しさん
2014/02/27(木) 23:30:24.080556デフォルトの名無しさん
2014/02/27(木) 23:49:45.62自動化しない理由は「人間の操作ミスによってバグが発見される可能性があるから」
0557デフォルトの名無しさん
2014/02/28(金) 00:51:14.34なぜ争うのか
0558デフォルトの名無しさん
2014/02/28(金) 01:06:47.48なぜ無限かというと、有限の場合は自明だから
有限なら全部テストすればいいだけ
0559デフォルトの名無しさん
2014/02/28(金) 06:39:59.210560デフォルトの名無しさん
2014/02/28(金) 12:43:22.18って、簡単におっしゃりますがなにか?
0561デフォルトの名無しさん
2014/02/28(金) 19:56:04.53いつから貴様らはTDDの話をしなくなったのだ
0562デフォルトの名無しさん
2014/02/28(金) 20:26:07.710563デフォルトの名無しさん
2014/02/28(金) 20:56:03.29納期は無限じゃない
0564デフォルトの名無しさん
2014/02/28(金) 20:56:35.52組み込み系でもTDDって利用できる?
0565デフォルトの名無しさん
2014/02/28(金) 23:28:25.330566デフォルトの名無しさん
2014/03/01(土) 00:03:45.820567デフォルトの名無しさん
2014/03/01(土) 01:21:06.66ライブラリ修正のたびにテストなんて手作業じゃ出来ないよ
0568デフォルトの名無しさん
2014/03/01(土) 06:29:20.44テストの自動化なんてできない
0569デフォルトの名無しさん
2014/03/01(土) 12:34:24.490570デフォルトの名無しさん
2014/03/01(土) 14:15:24.150571デフォルトの名無しさん
2014/03/01(土) 14:45:42.94なぜ0をネガティブだと思ったのか
興味深い
0572デフォルトの名無しさん
2014/03/02(日) 09:44:54.51何でこの板にいながらにして
否定(ネガティブ)をマイナス扱いしてんの?
そっちの方が興味あるわ
0573デフォルトの名無しさん
2014/03/02(日) 11:47:41.53最初に中身のないソースコードをテストするから
0574デフォルトの名無しさん
2014/03/02(日) 12:07:30.41なぜいまさらそんなものを持ち出すの?
0575デフォルトの名無しさん
2014/03/03(月) 12:04:16.83考え方は嫌いじゃないんだけどな
0576デフォルトの名無しさん
2014/03/03(月) 21:51:20.86これが最終的な答え
0577デフォルトの名無しさん
2014/03/04(火) 01:27:05.03仕様はテストの形で渡せ
0578デフォルトの名無しさん
2014/03/04(火) 16:01:02.69プログラマの習慣としてのテストと、ソフト開発の一工程としてのテストは別物なんだ
0579デフォルトの名無しさん
2014/03/04(火) 21:08:31.99テストさえ通ればいいというようなコードであふれることになる
0580デフォルトの名無しさん
2014/03/04(火) 22:07:49.99人間のほうが優秀
0581デフォルトの名無しさん
2014/03/04(火) 22:14:27.75テスト通れば仕様満たしてるんだから何も問題はないな
0582デフォルトの名無しさん
2014/03/04(火) 22:25:27.05ザルテストすら通らないコードが溢れかえってますが、なにか?
0583デフォルトの名無しさん
2014/03/04(火) 22:29:06.11>>582
せめてテストコードは隠しておかないと意味ないぞ
0584デフォルトの名無しさん
2014/03/04(火) 22:58:51.81誰から隠すの?
なぜ隠すの?
0585デフォルトの名無しさん
2014/03/04(火) 23:32:11.55なんかのゲームでもやってんのか? (w
0586デフォルトの名無しさん
2014/03/05(水) 16:50:46.49隠すというか、テストの情報を小出しにして何回も繰り返すんじゃないの
情報が来るまでコードを書かないので、テストされてないコードの在庫が0になる方式
0587デフォルトの名無しさん
2014/03/05(水) 22:10:19.13中国人から隠すんだよ
0588デフォルトの名無しさん
2014/03/05(水) 22:16:47.640589デフォルトの名無しさん
2014/03/05(水) 22:26:58.47普通にやったほうが楽じゃねーのってレベル
0590デフォルトの名無しさん
2014/03/06(木) 00:17:49.940591デフォルトの名無しさん
2014/03/06(木) 06:32:16.94期末テストと区別ついてない系
0592デフォルトの名無しさん
2014/03/06(木) 09:16:56.14いまさら聞けない
0593デフォルトの名無しさん
2014/03/06(木) 23:55:17.38仕様:閏年判定。入力年=2000の場合、返り値=1とする。
出来上がってきたコードは、
return 1;
0594デフォルトの名無しさん
2014/03/07(金) 00:05:40.30そりゃテストを書いた方もアタマ悪い.
0595デフォルトの名無しさん
2014/03/07(金) 00:08:19.980596デフォルトの名無しさん
2014/03/07(金) 02:26:00.23休日は毎年のように変わるからどうしようもないだろう
特に年によって実施日が変わってしまうような類の祝日などは
それぞれテストするしかない
0597デフォルトの名無しさん
2014/03/07(金) 08:11:35.41return false;
0598デフォルトの名無しさん
2014/03/07(金) 09:21:28.00節子それテストやない
0599デフォルトの名無しさん
2014/03/07(金) 13:46:57.99「プログラマの休日判定」 ならこれで正解
0600デフォルトの名無しさん
2014/03/07(金) 15:15:29.95assert(is_holiday(i) == false)
0601デフォルトの名無しさん
2014/03/07(金) 16:19:25.22実装は可能だが残念ながらテストが不可能と言って遠回しに否定する
0602デフォルトの名無しさん
2014/03/07(金) 20:11:14.03どうせ結合テストや自動化できない項目は残るんだから
そこではじけば問題ない
一部だけ担当してトンズラこく悪質業者のことは知らん
0603デフォルトの名無しさん
2014/03/08(土) 01:07:40.240604デフォルトの名無しさん
2014/03/08(土) 01:11:34.120605デフォルトの名無しさん
2014/03/08(土) 01:14:38.09どううごいたら正しいんだよ
正しい突然変異って神様にでもなったつもりか
0606デフォルトの名無しさん
2014/03/08(土) 01:14:48.74したら評価関数だけテストすればいいじゃん
0607デフォルトの名無しさん
2014/03/08(土) 01:28:56.56問題を分割できない馬鹿の言いそうなことだこと。
突然変異という処理を小さく分ければいいだろ。
確率分布に従ってサンプリングする処理、ビットごとに値を変える処理、・・・
ユニットテストってそういうもんだけどなあ。
お前の想像してる粒度がでかすぎんだよ。
0608デフォルトの名無しさん
2014/03/08(土) 08:17:00.420609デフォルトの名無しさん
2014/03/08(土) 11:07:22.33ライブラリもテストするだろ普通
評価関数だけテストしても無駄
0610デフォルトの名無しさん
2014/03/08(土) 11:59:00.39後で書いた方が正式版なら、先に書いたのはテストコードだったことになる
0611デフォルトの名無しさん
2014/03/08(土) 16:06:01.78だから書かないんだよ
0612デフォルトの名無しさん
2014/03/08(土) 16:32:08.42どっちに転んでもやばいね
0613デフォルトの名無しさん
2014/03/08(土) 17:06:45.86なんだよな。 早い段階できちんとしたプログラムを作るのがどれだけしんどいか
分かるってことがさ。 車の運転は誰でも出来ます。ただ免許を持っていないと
運転してはいけません。免許を持ってるからといって、良いドライバーとは限り
ません。 車に限らずたいていの物事はこんな感じなんだけど、自分の専門の
分野と違うと理解できないもんなんだよな。
0614デフォルトの名無しさん
2014/03/08(土) 22:58:59.06制度変更の前後にまたがってテストするしかないね。
0615デフォルトの名無しさん
2014/03/08(土) 23:18:09.56客先が書く可能性があるって下請けもいいところだなぁ
0616デフォルトの名無しさん
2014/03/08(土) 23:29:01.910617デフォルトの名無しさん
2014/03/09(日) 03:00:11.78よろしくお願いします
プログラム板 強制ID制導入に関する投票スレ
http://kohada.2ch.net/test/read.cgi/vote/1394290844/
0618デフォルトの名無しさん
2014/03/10(月) 13:41:49.11というか業務分野ごとにそれに適したDSLを使えない"汎用"プログラマーの方がやばいのか?
0619デフォルトの名無しさん
2014/03/10(月) 16:15:32.090620デフォルトの名無しさん
2014/03/10(月) 19:50:13.720621デフォルトの名無しさん
2014/03/10(月) 22:45:11.971.テスト書く→それが通るコード書く
2.テスト書く→それが通るコード書く
3.リファクタリングする
これの繰り返しなんだよね?
0622デフォルトの名無しさん
2014/03/10(月) 22:53:21.870623621
2014/03/10(月) 23:02:51.561.俺がテスト書く→それが通るコード書く
2.俺がテスト書く→それが通るコード書く
3.俺がリファクタリングする
これの繰り返しなんだよね?
0624デフォルトの名無しさん
2014/03/11(火) 07:51:22.690625デフォルトの名無しさん
2014/03/11(火) 21:32:20.50数千万円もらってた仕事が
実はパソコンオタク社員が鼻くそほじりながらつくったスクリプトと
大差ないとバレる
0626デフォルトの名無しさん
2014/03/12(水) 01:58:18.16ID:PmsDk2kY小ワイン
ソースよこせが怖いんだろ
オープンソースなんて論外なんだよ
0627デフォルトの名無しさん
2014/03/12(水) 13:29:02.98ID:xw7xwyT90628デフォルトの名無しさん
2014/03/12(水) 23:37:47.59ID:sK4uUGye0629デフォルトの名無しさん
2014/03/13(木) 00:54:34.87ID:2t1VyOIj0630デフォルトの名無しさん
2014/03/13(木) 01:11:56.97ID:EP1oXvO40631デフォルトの名無しさん
2014/03/13(木) 01:19:58.68ID:FW3mCw9Q2chでたった3行程度の自分のレスの誤字脱字ですら確認しない人がたくさんいるのを見れば分かるのではなかろうか…
0632デフォルトの名無しさん
2014/03/13(木) 13:12:51.82ID:8C61XcI9公務員脳だな。
0633デフォルトの名無しさん
2014/03/13(木) 22:00:44.18ID:rV9SiEZO今ならなぜだか判る
0634デフォルトの名無しさん
2014/03/28(金) 01:24:44.61ID:NM8p3urQ0635デフォルトの名無しさん
2014/03/31(月) 21:46:06.08ID:0et95UJG0636デフォルトの名無しさん
2014/05/06(火) 14:50:52.69ID:jFURd3DY> 技術の話じゃなく心構えの話であって、なおかつちゃんとした証明とかが無いにもかかわらず、
> 「テストファーストしない人間とは関わりたくない」などと発言をする。
> こういうのが信者っぽいんだよ。感覚的な結論が先にありきでさ。
うむ。ちょっと前の HTML5 もそうだったが、
そういう態度を示すやつが現れたら死亡フラグだと思ってる
ポイントは、一定の(無視できない数と妥当性を持った)批判があることと、
それに耳を閉ざして同好の徒だけで駄サイクルを作っていることかな。コケる確率が上がろうってもんだ。
>>401
> プログラマの世界だと新しい技術を積極的に取り入れる人は総じて技術レベルも高いから、
> ○○の良し悪しとは無関係に、○○を使ってみている人は無関心な人より仕事ができる可能性が高い。
どうかねぇ。単に流行追ってるだけのスイーツって可能性もあるんだぜ?
> 試しに○○に古いものを入れてみる。
> 「コーディング前に詳細設計書も書かない人間とは関わりたくない」
正直、10 年後に今のテスト駆動開発がそういう扱いになってる予感しかしない
コードを書くよりも作法・しきたりを守らせることを優先するという点では
テストも詳細設計書も何も違わないし。
ウォーターフォールだのだって昔は cool と見なされて導入されたんだよ?
10 年後には TDD が負の遺産になっていて、こんなもん推進した馬鹿はどいつだってなるのに賭けるわ。
俺は戦犯にはなりたくないから距離を置いてるw
つか「最先端の技法を追っている」んじゃなくて
エンプラ化・おっさん化してるだけだと思うよ・・・
0637デフォルトの名無しさん
2014/05/06(火) 15:07:29.74ID:Fr+PW76Dテストを開発しているわけじゃない。
最終的にテストとして使えるコードを
書くこともあるが、それは必須ではない。
テストとして使えないテストコードは
開発するためだけのもので後で捨てる。
ならば捨てるテストの代わりに
手動でテストしても一緒。
0638デフォルトの名無しさん
2014/05/06(火) 19:08:35.12ID:wWugdkdRTDDは設計手法と言えるけど、TDDでのテストはサンプルコードに近い性質を持つ
「詳細設計書と何も違わない」というのは同意しかねる
0639デフォルトの名無しさん
2014/05/07(水) 18:17:39.24ID:MZ01fZnXほーん で? いちいち同意求めんなカス
0640デフォルトの名無しさん
2014/05/07(水) 21:35:41.52ID:7EESg6Ug日本語はちゃんと学んだ方がいいよ
もしもそちらにとって難しい言い回しを使っていたならすまんな
別にこちらは同意を求めてない
お前の言ってることは間違ってるよ、ってだけ。
0641デフォルトの名無しさん
2014/05/08(木) 11:52:45.58ID:7mqxxUyEあまりにもバグやリグレッションが頻発するようになって、
こらチェックを自動化しないとあかんって導入されてきた経緯があっただろ。
そういう、必要に迫られての自動テストは(当然ながら)効果を発揮するし、
そもそもそういう風にプロジェクトが危なくなる前に仕組みを作っておかないといかんよねって
話になった。自動テストは素晴らしい。いいね。
ここまでは良い。
が、いくらなんでもテストファーストだのTDDだのは極端に走りすぎですよ。
最初からテスト・テストじゃ普通に身動き取れんだろうが。
お前らそこまでしょっぱなから仕様のガッチリしたものを組んでるのかよ・・・
スーパーハカーなどは絵を描くようにコード書けなどと言ってるというのに
もちろんモノにもよって、例えばミドルウェアだのコアなライブラリだの、
仕様が早期に固定化されるものをしっかり安定させておきたいなら、
最初から厳格な自動テストが必要だろう。
メインのコードとテスト、一緒に書いて、正常動作していることを機械的に確認・保証する。
そこまでならまだ解る。当然のことだ。いわば、家を建てるときに支柱を入れるようなもんだな。
強度を見積もると、倒壊しないためにはこのくらいの補助は必要だってな。
が、テスト「ファースト」だのテスト「駆動」だのはおかしいわ。まずメインの柱立てることを考えろよw
家建てろ言われて、元気一杯で支柱をドカドカ入れ始めるやるがあるか。普通にクルクルパーだろw
そもそも目的を見失っているし、工数、建材のコスト、設計が変わったときのこと、
リフォームするときのこと等々、何もかも計算に入ってへんやん。
特にカバレッジとかアホの概念だろ。目的もなく支柱をいくら入れたか自慢かよ。
ビョーキですよ、普通に。
0642デフォルトの名無しさん
2014/05/08(木) 12:46:10.04ID:9RHm5PfU0643デフォルトの名無しさん
2014/05/08(木) 13:06:10.59ID:kcoEiu4H権利は健康
義務は病気
0644デフォルトの名無しさん
2014/05/08(木) 13:14:45.39ID:9RHm5PfU0645デフォルトの名無しさん
2014/05/08(木) 22:50:13.49ID:kJ063xCNいう分野が有ることは誰も否定しないだろう。
故にTDDが割にあわない分野もあるってことになるんだよ。
0646デフォルトの名無しさん
2014/05/09(金) 00:32:50.71ID:utjU+QGd逆にGUIが自動化を否定するのはわかる
しかし自動化とGUIの争いにTDDを巻き込むことで一体何のコストが安くなるのか
0647デフォルトの名無しさん
2014/05/09(金) 03:10:39.23ID:Kz50EFWR0648デフォルトの名無しさん
2014/05/09(金) 07:01:16.35ID:fBe/MBgKラボや個人と営利組織の運用で注目される点が違うことがわかるので重要な話だね
tddが宗教であって技術でないという信念を持つ人にとっては無意味な話に見えるだろう
0649デフォルトの名無しさん
2014/05/09(金) 10:52:35.09ID:VdfmJhjs0650デフォルトの名無しさん
2014/05/09(金) 13:13:16.56ID:e8QohjKI0651デフォルトの名無しさん
2014/05/09(金) 22:08:33.75ID:IRQ9/IYX頻繁に実行して結果を確認しながら
開発するスタイルはTDDになりますか?
0652デフォルトの名無しさん
2014/05/10(土) 11:14:55.79ID:i8wKz9lz目視で確認できる程度って知れてるし、間違ってても
意外と気づかないので当てにならない。
0653デフォルトの名無しさん
2014/05/10(土) 12:19:44.22ID:m9xHqVTZ完成してからテストを書いて
回帰テストをするっていうのはいみあるんだけど、
テスト書きながら開発するのがメリット少ない。
なぜなら開発の初期段階では仕様が固まってないから
テストのほうまで何度も修正する必要がある。
また、逆に仕様がすぐに固まるような、
簡単な関数では目視で十分。ケアレスミスはするけど
論理的なバグっていうのは少ないからね。
だからリファクタリングする必要が出てきた時にテストを書けばいい。
0654デフォルトの名無しさん
2014/05/10(土) 13:19:05.40ID:6YF+GXG1あと、新規ライブラリの利用とか、新言語習いたての時にはTDDは向かないな
0655デフォルトの名無しさん
2014/05/10(土) 13:27:02.84ID:m9xHqVTZなんで? まったく無関係の話しないでよ。
0656デフォルトの名無しさん
2014/05/10(土) 13:40:45.75ID:1/ia6KrF> なぜなら開発の初期段階では仕様が固まってないから
> テストのほうまで何度も修正する必要がある。
俺も同意なんだけど、ぜひTDD賛同者側の見解を聞きたい。
> また、逆に仕様がすぐに固まるような、
> 簡単な関数では目視で十分。ケアレスミスはするけど
> 論理的なバグっていうのは少ないからね。
> だからリファクタリングする必要が出てきた時にテストを書けばいい。
これは同意しかねる。
0657デフォルトの名無しさん
2014/05/10(土) 14:17:42.95ID:0zZ9Lb2b>> テスト書きながら開発するのがメリット少ない。
>> なぜなら開発の初期段階では仕様が固まってないから
>> テストのほうまで何度も修正する必要がある。
>
>俺も同意なんだけど、ぜひTDD賛同者側の見解を聞きたい。
仕様を決めてから実装を始めようよというのが、TDD の方針
「契約」が絶対の社会なら上手くハマるんじゃないでしょうか。
おそらく、普通のシステム開発なら、TDD のほうがみんな幸せ
になれるはず。
0658657
2014/05/10(土) 14:27:38.27ID:0zZ9Lb2b>>651
で良いんじゃないですか?
もうちょっと頑張って、
「頻繁に実行して結果を確認」の代わりに Unit Test を書いて、
CI (jenkins) で深夜の毎日全テストができるようにすれば必要十分。
単体 (Unit) テストが、少なくとも 全行網羅(最低90%) していれば、
安心して結合テストを始められるし、
結合テストで出た障害の修正をしてもほぼデグレーションを防げる
0659デフォルトの名無しさん
2014/05/10(土) 14:34:59.99ID:m9xHqVTZ> 仕様を決めてから実装を始めようよというのが、TDD の方針
そうも行かないんだよね。
あとから初期段階では決まっていなかった
引数が追加になったりする
そもそもライブラリを作っているのでもなければ、
関数型言語的な意味の関数ではなくて
副作用が主なものを作ることが多い
たとえば関数を実行したらデータベースに書き込む処理とかね。
その時のデータベースに書き込むテーブルやカラムは
後から追加されることがたびたびある。
0660デフォルトの名無しさん
2014/05/10(土) 14:38:53.55ID:m9xHqVTZ> 「頻繁に実行して結果を確認」の代わりに Unit Test を書いて、
> CI (jenkins) で深夜の毎日全テストができるようにすれば必要十分。
それはTDDではない。
TDDはあくまで開発。テスト作成作業ではない。
UnitTestやCIであれば「テストを後から書く」ことで問題ない。
TDDやってるときに、開発する前にテストをたくさん書いたら
それは違うって言われるよ。開発を始めるまでに時間がかかってしまう。
TDDは最小限のテストとコードを使って開発するものだ。
TDDであってもその後にちゃんとしたテストを別に作成する。
で、開発さえ出来るならどうでもいいので、別に目視確認でもいいだろう。
どうせ必要ならテストはあとでちゃんと書くんだから
0661デフォルトの名無しさん
2014/05/11(日) 02:03:19.34ID:ycF5cRDn> あとから初期段階では決まっていなかった
> 引数が追加になったりする
それは初期段階で仕様は決まっていたがあとで変更になっただけじゃないか。
初期段階の仕様でテストを作成し、あとで変更すればいいだけ
0662デフォルトの名無しさん
2014/05/11(日) 16:06:00.66ID:5ukecUuPま、>>1に書いてある事は正しいと思うよ
理想的な条件が揃った案件ならtddも良いんだろうけど
0663デフォルトの名無しさん
2014/05/12(月) 14:06:17.89ID:ZtmTFQ/l対象コードを小単位に区切って合わなくなった部分だけを捨てて作り直す(そのほうが早い)
それができないなら設計が悪い
テストしやすい設計いい設計
0664デフォルトの名無しさん
2014/05/12(月) 21:07:26.87ID:gfHEQtpm関数のインターフェースやクラス構造がガンガン変更がかかる所では死ぬ。
ユーザーインターフェースがガンガン変更がかかる所では死ぬ。
実験でいろんなものを試してガンガン変更がかかるところでは死ぬ。
0665デフォルトの名無しさん
2014/05/12(月) 21:36:58.27ID:4d3ePR/Iまったくだ まったくだよ
0666デフォルトの名無しさん
2014/05/12(月) 21:55:59.11ID:M1pM5qngまず最初にコメントを書く。
そして全体の構造を把握したら、コードに置き換えていく。
0667デフォルトの名無しさん
2014/05/12(月) 22:04:21.73ID:mSkc1DAY0668デフォルトの名無しさん
2014/05/12(月) 22:10:54.58ID:M1pM5qng開発するんですよ。
0669デフォルトの名無しさん
2014/05/12(月) 23:01:50.95ID:8a4bU2a30670デフォルトの名無しさん
2014/05/12(月) 23:19:28.90ID:M1pM5qng開発を始めるための道具でしかありません。
0671デフォルトの名無しさん
2014/05/12(月) 23:24:50.88ID:xScDRvbM0672デフォルトの名無しさん
2014/05/13(火) 10:16:56.07ID:CL8NKXMA設計を先に作っておいて、機能を実装、リファクタリングしていくのならなんとかなるけど。
0673デフォルトの名無しさん
2014/05/13(火) 11:39:40.98ID:dZPvmt+0つーか設計が変更になったらふりだしにもどってやり直すだけで、
> 設計を先に作っておいて、機能を実装、リファクタリング
という流れは変らないと思うけど。
そうじゃないとテストファーストにならない。
0674デフォルトの名無しさん
2014/05/13(火) 12:24:24.65ID:TWFU3uu9部分的に肯定するなら仕様書駆動を否定してテスト駆動を肯定すれば良いんだろ
全肯定はありえないことが判明しただけでも良かったよね
0675デフォルトの名無しさん
2014/05/13(火) 21:03:33.01ID:8hwDbhT0テストファーストが使えないというのは、
テストファーストが出来ないという意味ではなくて
コストのほうが高いっていう意味。
だから振り出しに戻ってやり直すから
やったテストが無駄になるのでコストがかかって
テストファーストが使えないということ。
0676デフォルトの名無しさん
2014/05/14(水) 01:42:41.81ID:ToGrq+HNどのフェーズや規模感で作り直し/やり直しを言ってるのか分かってないからざっくりとした反論しかできんのだがすまんな
テストファーストだろうがテストセカンドだろうが、テストは変更になりうる。
そうするとテストラストしか選択肢がなくなるのだが
開発途中でテスト作らない方針だと、かなり不安な中でコーディングし続けるハメにならんか?
開発途中に変更が起こった場合、変更箇所のテストは確かに無駄になるが
変更箇所以外のテストは、変更時に安全性を担保するのに役立つ。
また変更の度合いによっては、設計の変更→既存のテストの変更という形で再利用しやすい場合もある。
つまり変更の可能性がある→テストが全くの無駄ということではなく、コストを払う価値は見いだせると思う
(この辺りはTDDに限らずテスト一般の話だが、テスト=無駄と言われるとこれ以降の話が続かないので)
そういう開発中の不安を抑える為に、多少のコストを払ってそこそこの安心や品質を得るのがコーディングとセットのテスト作成。
テストセカンドだと、実装→テスト作成という流れで、テスト作成の工数自体はテストファーストよりも抑えられるのだが
「あれ、このインターフェース使いづらいぞ」とか「この設計だとテストしづらいわ」みたいなのが
実装完了してテスト作ってみて初めて分かる、というリスクがあるので設計手法としてはテストファーストよりも劣る
使いやすく・テストしやすく作っていくようなアプローチをとれる設計手法がTDDの大きなメリット
振り出しに戻ってやり直すっていうのは
そもそもプロトタイプ=変更しまくりが前提の話なら、たぶんテストファーストしないほうがコスト低い
プロトタイプなら作って捨てるから。
(作って使いまわす前提のE2E→拡張サイクリングな開発ならテスト作った方がよいかも)
そしてプロトタイプでもないのに莫大な変更が頻繁に求められるんだとしたら
そのプロジェクトはもうTDDとか言ってる場合じゃないような気がするぞ・・・
0677デフォルトの名無しさん
2014/05/14(水) 02:54:12.82ID:LFlUnuUg> 開発途中でテスト作らない方針だと、かなり不安な中でコーディングし続けるハメにならんか?
テスト"駆動"をしないだけで、テストは書く。
不安なときにだけテストを書けばいいでしょ?
物によっては最初にテストを書くこともあるけど、
後からテストを書けばいいし、リファクタリングする前に
テストが足りなければ追加すれば良い。
0678デフォルトの名無しさん
2014/05/14(水) 03:02:35.41ID:TJ8LcHmIコードを書くときはテストに合うようにコードだけいじる。
だけ守ってたら大抵幸せ。
テストを絶対いじっちゃいけないものだと勘違いしてる人は、
先人のありがたい教訓「動いたものには触るな」レジームから脱却してないだけ。
コードがテストに置き換わっただけ。
0679デフォルトの名無しさん
2014/05/14(水) 05:58:04.41ID:sd+oycz/0680デフォルトの名無しさん
2014/05/15(木) 00:43:31.33ID:WsB3lCbjバグの切り分けにも役に立つから先にテストを書くんじゃないかと僕は思うなあ。バグが出るたびに(または不安がでるたびに)テストを書くのは、思考を切り替えるコンテクストスイッチのコストが高いんだと思う。
0681デフォルトの名無しさん
2014/05/15(木) 23:26:46.81ID:SyWQx43e0682デフォルトの名無しさん
2014/05/18(日) 00:15:38.76ID:zMZanzv2オブジェクト指向とかC#,JAVAが最適解であるわけもなく
正しいものとか殆ど出来上がってないから無駄な議論
ハスケル推す気はないけど副作用のオンオフ出来ない言語って。。。
0683デフォルトの名無しさん
2014/05/18(日) 01:59:35.09ID:xRvInDCX過去にバグが混入しまくらなかった時代はないですが?
未来はこうなってるんだ〜みたいな話をしてるの?
0684デフォルトの名無しさん
2014/05/18(日) 16:44:55.48ID:Am+ZFISxきっと682が10行程度のVBAスクリプトを書いてた時代の話なんだよ。
VBAじゃ10行でもバグ無しは無理か。
0685デフォルトの名無しさん
2014/05/18(日) 19:28:44.94ID:2kdDjA0I> オブジェクト指向とか
オブジェクト指向関係ねぇぇ
0686デフォルトの名無しさん
2014/05/18(日) 19:47:19.66ID:C9yMB7Be俺はオブジェクト指向が嫌いだ。
あんなわからんものを使ったから
バグが出た。
0687デフォルトの名無しさん
2014/05/18(日) 19:52:32.85ID:2kdDjA0I0688デフォルトの名無しさん
2014/05/19(月) 23:42:10.67ID:Ya0Xx/0T余計なものを見ようとするなゴミ
0689デフォルトの名無しさん
2014/05/20(火) 01:11:20.60ID:BLzVJP6i0690デフォルトの名無しさん
2014/07/09(水) 04:07:40.08ID:AbJxGlA90691デフォルトの名無しさん
2014/08/15(金) 08:05:23.56ID:UGZaG54lプログラム書くとき、main から順に下に向かって必要な関数を書くよね?
プログラムを読むときも、読み解きたい呼び出し元から下に向かって読む
でも、TDDでは
一番下の関数のテストを書くところが始まりで、全体を見渡して始められない
同じことやったことがあれば、上がわかってるから、下から始められるけど
そうでなければ、テストかコードにダミーをたくさん作らないとTDDできない
それか、必要なモジュールやインターフェイス設計できてるか
0692デフォルトの名無しさん
2014/08/15(金) 10:46:38.91ID:xWfNVD54> 一番下の関数のテストを書くところが始まりで
そんなことない
0693デフォルトの名無しさん
2014/08/15(金) 12:29:14.22ID:EgVSDQDB一度、実践テスト駆動開発(GOOS本)読むといいよ
ボトムアップだけでなくトップダウンのテスト(end to end test)が解説されてるから。
0694デフォルトの名無しさん
2014/08/15(金) 12:31:16.26ID:Yv/H2Jww0695デフォルトの名無しさん
2014/08/15(金) 18:20:42.14ID:4ECeDEW30696デフォルトの名無しさん
2014/08/16(土) 01:54:58.16ID:rUIBv51N本に書いてある。じゃなくて、実際どうやってるの
E2EテストでTDDするって、突き詰めていったら、
画面の設計もないのに、ボタンクリックしてこの表示がでるっていうテストを先に作ることになるよ
設計ができてるから、そういうE2Eテストが作れるんじゃないの
途中のAPIのテストを先に書くのは簡単だけど、それは下から作っていくことだと思う
0697デフォルトの名無しさん
2014/08/17(日) 14:30:12.51ID:PHQzH28y無駄だからやるなって言い出しそうだな
0698デフォルトの名無しさん
2014/08/17(日) 16:22:26.54ID:W/wWGkFr宙に浮いてやればいいじゃん(迫真)
0699デフォルトの名無しさん
2014/08/18(月) 13:37:54.98ID:FRp9W7WN0700デフォルトの名無しさん
2014/08/19(火) 23:59:32.76ID:dXNr+R/q0701デフォルトの名無しさん
2014/08/20(水) 00:02:44.88ID:dXNr+R/q0702デフォルトの名無しさん
2014/08/20(水) 20:41:37.71ID:pB9nhskw画面デザインの話?
それともHTMLみたいな画面の実装のこと?
それとももっと前のアーキテクチャとか?
設計じゃなくて要求?
どれを当てはめてみてもピンとこない
0703デフォルトの名無しさん
2014/08/23(土) 09:25:18.67ID:P1R2bDm7メソッドの内部実装に入る前にin,outをJavadocに書くような開発をしていれば、そのまま自然にTDDを適用できる
コードを書いた後でなければJavadocを書けないようなプログラマにはTDD無理
0704デフォルトの名無しさん
2014/08/23(土) 09:40:03.50ID:xMD8sMaI0705デフォルトの名無しさん
2014/08/23(土) 09:54:00.81ID:VzEIcDK4> 画面デザイン
それは仕様だろう。
0706デフォルトの名無しさん
2014/08/23(土) 11:09:26.71ID:CC5Cm+20仕様が満たされたことを証明するには大量のテストが必要
だが未実装な箇所を一つだけ指摘するテストはすぐに書ける
証明より反例の方が簡単ということ
0707デフォルトの名無しさん
2014/08/23(土) 11:26:02.64ID:3qxK8v5g0708デフォルトの名無しさん
2014/08/23(土) 12:47:22.90ID:xMD8sMaI0709デフォルトの名無しさん
2014/08/23(土) 13:48:03.40ID:WYvsIxCv最初に見せられたテストケースの例が
加算と乗算の実装に先立ってテストを作成する、
というものだったのだが、
(3 + 4) * 2 が 14 になることを確認する
ってのだったんだよね。
これって「加算と乗算をテレコで実装しちゃった!」
っていうバグを見逃すんだよね。(3*4)+2 も 14 だろ。
見事すぎだろテストファーストw
って思ったね。
0710デフォルトの名無しさん
2014/08/23(土) 13:50:37.30ID:wmqLPypiって言葉の重みがよく伝わるレスだな。
0711デフォルトの名無しさん
2014/08/23(土) 14:04:30.55ID:3qxK8v5g0712デフォルトの名無しさん
2014/08/23(土) 14:08:02.30ID:5cJG04Dw0713デフォルトの名無しさん
2014/08/23(土) 14:13:33.81ID:xMD8sMaI0714デフォルトの名無しさん
2014/08/23(土) 16:59:20.08ID:VzEIcDK4見逃しても何の問題もないだろ。
そもそも、何かの計算をして値を返す関数は
return 14; だけのコードでもテストは通るんだよ。
で、これで問題ない。
そもそも「書いたテスト」というのは完璧であることは絶対に証明できない。
つまり、テストにミスが有ることは当たり前の話。
人間がやったって、テストでミスをしてバグを見逃すことがある。
テスト駆動開発というのは、最初14を返すコードを書いておき。
そしてその後14を返す正しいコードに書きなおしていく。
これがテスト駆動開発。違いは実行結果が14になっているかな?という
確認をprintでもして目視でやるか、コンピュータでやるかの違い。
で、これは「開発」作業であり、テストではない。
テストは開発中(または開発後)につけたしていく。
これも手動でやってもいいし、コードで書いてもいい。
開発もテストも、手動でやる方法もあるし、コードでやる方法もある。
コードで書くと何度も実行できるというメリットがある。
その反面コードを書くための時間が必要になる。
どちらがいいかは場合によって変わる。
テストコードを書くのは時間がかかるので、全てにテストコードを書くべきだとは思わない。
重要な部分とか、修正があった時に影響範囲が大きくなりそうな所はテストを書くが、
コードが十分シンプルで仮にバグが入るとしたら記述漏れ程度。動かしてみて動かなけれ
ば修正して数分で作業完了。みたいな所はテストは不要。
テスト駆動開発でも、最初に書いたreturn 14と、最終的なコードに大きく差があるのであれば
テスト駆動開発した方がいいが、return (3*4)*2みたいに処理がシンプルなものはテスト駆動開発の意味が無い。
俺が書くコードは、大部分がシンプルなコードばかりなので、テストコードを書く時間がペイしない。
0715デフォルトの名無しさん
2014/08/23(土) 17:27:55.06ID:xMD8sMaI0716デフォルトの名無しさん
2014/08/23(土) 22:32:16.97ID:Jwg/Lhcuテストを前提にしなければモジュール間結合度の低いコード設計ができない、
そんな技術レベルのプログラマにはTDDが適している、ってことね
0717デフォルトの名無しさん
2014/08/23(土) 23:04:06.83ID:xMD8sMaI0718デフォルトの名無しさん
2014/08/25(月) 18:08:20.28ID:WgdLBA0+頭で十分、論理思考できていれば、早々テストに失敗することがないので、テスト駆動が不要
0719デフォルトの名無しさん
2014/08/25(月) 18:45:24.99ID:Aif44Mkk0720デフォルトの名無しさん
2014/08/25(月) 19:04:00.08ID:clHBdfGA0721デフォルトの名無しさん
2014/08/25(月) 19:33:21.63ID:fQ2cskxsテスト駆動がいいんだよね。
printfは複雑で条件分岐やループがあるはずだから作りながら
リファクタリングを繰り返していくことになるはず。
だけど、abs関数みたいなのは動きもほぼ一直線で処理も単純。
こういう場合にテスト駆動でやると、時間がかかるんだよ。
いい悪いではなくて、時間の問題。どっちが時間がかからないかという話。
0722デフォルトの名無しさん
2014/08/25(月) 20:22:35.35ID:o3Iqlg8X0723デフォルトの名無しさん
2014/08/25(月) 20:30:41.98ID:fQ2cskxsテスト駆動開発っていうのはプロジェクトに
導入するものではない
悪い例 「今回のプロジェクトはテスト駆動開発を導入する」
開発者個人が関数を作る時にテストファーストで
作っていくかどうか、関数ごとに選択するもの。
テスト駆動開発という名前をなくして、
残すならテストファーストにして、対義語として
テストラストって言葉も作ったほうがいいな。
0724デフォルトの名無しさん
2014/08/25(月) 20:56:07.68ID:UaEEVYk5たんにやり方知らんだけなんじゃ・・・
0725デフォルトの名無しさん
2014/08/25(月) 21:13:18.88ID:zkRvpYjmコードに合わせてテストを増やすかテストに合わせてコードを減らすか
0726デフォルトの名無しさん
2014/08/25(月) 22:58:59.07ID:vwMZpBcP0727デフォルトの名無しさん
2014/08/25(月) 23:26:48.06ID:clHBdfGA0728デフォルトの名無しさん
2014/08/25(月) 23:37:41.48ID:fQ2cskxsテストを書かないって話をしてるんじゃないよ。
さっさとコードを書いて、その後テストを
書いたほうがいいって話。
0729デフォルトの名無しさん
2014/08/25(月) 23:59:12.20ID:9zG1fAHJそりゃ粒度低いところまでテスト書くなら、先に書こうが後に書こうがめんどくさいのは代わりないっしょ
シンプルな関数にさえも、テストを先に書くことを強制するのがテスト駆動じゃないっす
0730デフォルトの名無しさん
2014/08/26(火) 11:44:45.36ID:vdVtuZFs○ テスト駆動コーディング
0731デフォルトの名無しさん
2014/08/26(火) 12:03:02.61ID:HrT/idVN0732デフォルトの名無しさん
2014/08/26(火) 12:22:12.77ID:vdVtuZFs勝手に関数作らないでください
0733デフォルトの名無しさん
2014/08/26(火) 17:06:09.66ID:bX+RdUeXでも、テスト「駆動」でテストを先に作れって後ろ向きに歩きながら前進しろと言われてるようでダメ
嫌いなもの先に食べるみたいに、最初にテスト書いたら、あとでテストしなくていいなら、まだいいけど
最後にも、やっぱりテストが、待っていて、またテスト開発することになって、非効率
0734デフォルトの名無しさん
2014/08/26(火) 19:20:26.06ID:LNyDRwAIそれは反復型の手法そのものが非効率だという立場だろ
たしかにミスしなければウォーターフォールが最も効率が良い
0735デフォルトの名無しさん
2014/08/26(火) 19:22:34.52ID:IPwBXJgHという流れしかやってはいけないものとする。
たとえば四捨五入の関数を作る。
0.5を引数にしたら1になること。というテストを書く。
それが失敗するのを確認した後コードを書く。
ここまではテスト駆動である。
だがもしかしたら間違えて銀行型まるめになっているかもしれない。
(端数がちょうど0.5なら切り捨てと切り上げのうち結果が偶数となる方へ丸める)
確認のためにテストを追加する。
しかし問題がなければコードを書かない。
※テスト駆動開発になっていない。
0736デフォルトの名無しさん
2014/08/26(火) 19:23:32.61ID:IPwBXJgHこのようになっているということ。
一部のテストを書く → テスト駆動開発 → 残りのテストを書く
0737デフォルトの名無しさん
2014/08/26(火) 19:26:43.73ID:IPwBXJgH足りないテストを書くのだから
・ 一部のテストを書く → テスト駆動開発 → 残りのテストを書く
・ 通常の開発 → テストを書く(一部のテスト含む)
こうでもいいではないか?
この場合開発の量とテストの量はどちらも変わらない。
0738デフォルトの名無しさん
2014/08/26(火) 19:32:51.87ID:IPwBXJgH開発で何かしらの問題が出て仕様が変わった時
先に書いたテストが無駄になるというメリットがある。
0739デフォルトの名無しさん
2014/08/26(火) 19:33:17.90ID:IPwBXJgH○デメリット
0740デフォルトの名無しさん
2014/08/26(火) 19:39:53.07ID:gwgSiSghテスト駆動はデメリットが大きいということになる。
だが初期段階を過ぎると、コードが洗練され
量産的なコードは、凄くシンプルになる。
難しいコードは共通関数部分に隠蔽されるから。
共通関数ほどテストは重要であるが、
変化が大きいためにそういう関数ほどテスト駆動のメリットが少なく
(テスト駆動しないだけでテストは書きますよ)
反対に量産的なコードはテストそのものの価値が少ない。
(コードというより定義ファイルレベルになってしまうから)
0741デフォルトの名無しさん
2014/08/26(火) 21:57:31.21ID:LNyDRwAI最初に書くのはなんでもいいけど最初に見せるのはテストが良い
0742デフォルトの名無しさん
2014/08/26(火) 23:14:17.34ID:3+0a9yno>>734
0743デフォルトの名無しさん
2014/08/26(火) 23:20:42.74ID:FPD+nRe0最近のspec系のフレームワークなら、機能単位のテストが先やろ
0744デフォルトの名無しさん
2014/08/27(水) 00:07:37.72ID:H4UioQzk0745デフォルトの名無しさん
2014/08/27(水) 09:04:29.64ID:D1kHPcdG0746デフォルトの名無しさん
2014/08/27(水) 19:25:57.01ID:YlHm9xBLテスト駆動はユニットテストでもspecでもない。
0747デフォルトの名無しさん
2014/08/28(木) 16:14:35.63ID:cWf/NZ2v0748デフォルトの名無しさん
2014/08/28(木) 18:29:08.79ID:z9uMTwZv捨てたデータを保存して解析すれば色々分かるかもしれない
0749デフォルトの名無しさん
2014/08/28(木) 18:47:38.64ID:5uTBO9xo0750デフォルトの名無しさん
2014/08/29(金) 01:40:42.04ID:h1bgB9ga向き不向きがあるんじゃね
例えば稼働中の Web システムが定期的なセキュリティ診断で引っかかったとか、
動いてるシステムの動作を変えずに根深い部分の実装を改修するときは、
TDD は適合性が高いと思う
逆に新規プロジェクトで立ち上げから TDD でやろうとするといろいろ問題があるわな
0751デフォルトの名無しさん
2014/08/29(金) 12:28:35.29ID:w9uKf29m0752デフォルトの名無しさん
2014/08/29(金) 14:14:40.00ID:gqrcAKYiそれTDDじゃねーからww
0753デフォルトの名無しさん
2014/08/29(金) 17:59:42.98ID:qvYCvJvM直感的には逆だな
機能の追加は簡単だが機能を変えない改修 (リファクタリング) は難しい
TDDの胡散臭さの半分以上はリファクタリングのせいだ
0754デフォルトの名無しさん
2014/08/29(金) 18:27:40.92ID:qvYCvJvM0755デフォルトの名無しさん
2014/08/29(金) 23:32:48.64ID:9OWc8ATu言ってることが対称になってないぞw
・機能の追加は簡単
・機能を変える改修(変更)
・機能の削除
違いを比べるならまずこれだよな?
追加は簡単・変更と削除は難しい。
ここまでOKだろ?
で、変更は機能の追加と削除が同時に行われるため。
変更は一般的に難しいが、リファクタリングに限って言えば
機能の追加も削除も行わない(単なるコードの場所移動)のため簡単。
これであってるよね?
0756デフォルトの名無しさん
2014/08/29(金) 23:35:57.34ID:9OWc8ATuなぜなら、テストコードを失敗される→コードを書く
という行為は、テストに通らないコードから
テストに通るコードに機能が変わっているから。
たとえば関数に新しいオプションを追加する
機能拡張をTDDで行ったと考えてみよう。
機能拡張はリファクタリングか?
一発で違うってわかるよな?
0757デフォルトの名無しさん
2014/08/29(金) 23:53:54.80ID:49gCfOM10758デフォルトの名無しさん
2014/08/30(土) 02:39:08.23ID:Y3aOlWd0テストだけではダメだということが確信できるよ
・たくさんのテストが失敗している状態が常態化していて、最早まったく気にかけられない
・致命的で、緊急性の高い不具合が報告されても、「誰かテストケースくれ」と調べようともしない
・あらかじめ予測できない(当然テストも存在しない)斜め上の不具合が次から次へと無限に湧いてくる
銀の弾丸ではないの一言で済む話ではあるけどな
0759デフォルトの名無しさん
2014/08/30(土) 09:50:01.45ID:36lVqRoI0760デフォルトの名無しさん
2014/08/30(土) 10:59:04.70ID:27ULfS3N新しめのプログラミング本でも、テストは最後に、数ページあるだけだし、テスト駆動は、掛け声だけと思う
0761デフォルトの名無しさん
2014/08/30(土) 11:16:36.21ID:ZWIpt6n5便利に使える道具・習慣
0762デフォルトの名無しさん
2014/08/30(土) 12:13:26.81ID:yDZGZz9Uお前はTDDもプログラミングも人生も何も知らないだろ。
(このレスは、知らないだろというだけで理由を言わないのなら
誰だってなんだって言えることの実例ですw)
0763デフォルトの名無しさん
2014/08/30(土) 13:02:02.31ID:eS6LHcvr仕事が来るのは緊急度高く結合度の高いものばかり
レガシーコード改善ガイドを一部やるので精一杯
0764デフォルトの名無しさん
2014/09/03(水) 00:52:44.68ID:jrX5bhg90765デフォルトの名無しさん
2014/09/03(水) 06:24:38.13ID:tooOFXPg現実はギャンブル中毒のように大損するまでやめられない
0766デフォルトの名無しさん
2014/09/07(日) 16:16:13.23ID:2nNDq8Bj0767デフォルトの名無しさん
2014/09/07(日) 17:21:34.06ID:LA1JcmO8えーそうなの?
末端ほど仕様コロコロ変わるから難しくないか?
0768デフォルトの名無しさん
2014/09/07(日) 18:01:28.55ID:Jj7RgHk6>・あらかじめ予測できない(当然テストも存在しない)斜め上の不具合が次から次へと無限に湧いてくる
まさに本質ってこれじゃね?
最初からテスト書いているということは要するに分かってることやっているだけだ
から、「丁寧にコーディングする」のとレベル的に同じなんだよね。
で、実際にプログラムでの本当の困難はそういう想定できないところ意外のバグにあるわけだから
効果が全くないわけじゃないけど、テスト駆動は過大評価させられすぎ
大して効果がないのに、手間がかかるデメリットも多い
これを無条件に習慣づけるべき良いこと、なんて言われると違和感ありすぎ
0769デフォルトの名無しさん
2014/09/07(日) 19:02:37.29ID:JJ1m+vUL0770デフォルトの名無しさん
2014/09/07(日) 19:08:54.14ID:7I9u/spB・正しくないコードを書いたから ←バグ
・テストに関係ないコードを書いてないから ←未完成
テスト駆動で作ると完成度は低いがバグは少ない
0771デフォルトの名無しさん
2014/09/07(日) 20:50:18.39ID:2nNDq8Bjバグが出てきた後でそれを考えても二度手間
0772デフォルトの名無しさん
2014/09/08(月) 19:07:14.96ID:NP5eQWMUテスト駆動で、最後までコードを書けるのも、奇跡の環境だと思うよ
大抵の会社やプロジェクトなら、
テスト書く時間がないくらい、仕様変更、追加、おまけに原因不明のバグがやってくる
0773デフォルトの名無しさん
2014/09/08(月) 22:19:05.17ID:WRBqI71eテスト駆動をしなくてもテストを書く。
だから「テスト」に関してはどっちも同じ。
テスト駆動をしたらテストも完ぺきにできると思ったら
それは間違い。テストの一部分ができるに過ぎない。
だからテスト駆動をしたとしても追加のテストを書く必要がある。
内訳はこんな感じ
マニュアル駆動開発 (50%)+ テスト(50%) = 完成
テスト駆動開発(50%+25%)+残りテスト(25%)=完成
理論的にはこうなる。ただしこれはバグが含まれない場合。
バグが有る場合、マニュアル駆動開発では修正にテスト駆動の数倍かかる(回帰テストが出来ないから)
だからテスト駆動開発のほうが優れていると言われるが、マニュアル駆動開発ではテストを省ける。
テストを省くとこうなる。
マニュアル駆動開発 (50%) = 完成(50%)
テスト駆動開発(50%+25%)=完成(75%)
テストを省くとはとんでもない!と思うかもしれないが、マニュアル駆動開発では
テストコードを書かないだけで、目視でテストをしている。
これって技術力が高い人がシンプルなモジュールを作る場合はそれだけで十分な品質になる。
客観的な証明はできないんだが、バグがないか軽微なバグで終わることが事実としてある。
そしてテストコード必要ならば後から追加すれば良い。
テストコードを含めたら50%の完成であっても問題なく使えるのならいいわけで
時間的余裕があった時にテストコードを追加するという戦略が取れる。
0774デフォルトの名無しさん
2014/09/08(月) 22:39:36.40ID:7g2N52pAテスト駆動はテストの手法じゃなくて、
どちらかといえば設計手法なんですがががが
0775デフォルトの名無しさん
2014/09/08(月) 22:48:39.54ID:AyVNnGAsコーディングする人が、自分の打ち込んだコードに対する責任としての慣習なんだから、会社もプロジェクトも関係ない
0776デフォルトの名無しさん
2014/09/08(月) 23:02:27.01ID:yNweFT3r0777デフォルトの名無しさん
2014/09/08(月) 23:03:22.47ID:7g2N52pASEって職種があるとこにはそもそもお門違いの話なんだから流行るわけがない
0778デフォルトの名無しさん
2014/09/08(月) 23:09:56.75ID:AyVNnGAsテスト駆動 = コーディングする人がそのコードを書く際に行う慣習 (エディタはこまめに保存しろ、とかと同じレベルの慣習)
0779デフォルトの名無しさん
2014/09/08(月) 23:32:16.19ID:nnXcaq6bその時間を(コーディング前の)設計に費やほうが前向きだと思う
たとえばUMLクラス図や状態遷移図/表を描いてみるとかね
特に最近は Alloy Analyzer や SPIN のように、
設計そのもののバグ摘出を支援するツールが手軽に使える訳だから
テストは:
・設計に対して正しく実装(コード化)されているか?
・改造やバグ対策時にデグレードしていないか?(リグレッション)
の為に必要であって、設計時には不要な存在
0780デフォルトの名無しさん
2014/09/08(月) 23:36:08.75ID:AyVNnGAs0781デフォルトの名無しさん
2014/09/08(月) 23:47:54.62ID:I1j4dToZドッグフーディング
0782デフォルトの名無しさん
2014/09/08(月) 23:54:58.04ID:2BYBRDtuいいんじゃないかと思う今日このごろ。
0783デフォルトの名無しさん
2014/09/08(月) 23:59:30.09ID:7g2N52pAテスト駆動は設計手法です
設計を先にやるのであれば、テストを実装前に書こうとも、それはテスト駆動ではないです
0784デフォルトの名無しさん
2014/09/09(火) 00:03:28.92ID:gE54p7sq0785デフォルトの名無しさん
2014/09/09(火) 00:08:59.98ID:u4pMEKRn> それはテスト駆動ではないです
もちろん、その通りだよ
自分は TDD 否定派だからね
ついでに言えば、ラティショナルうんたらかんたらとか
エクストリームむにゃむにゃとかアジャイルふがふがみたいな、
中身の無い精神論に基づく設計手法にも否定的だ
0786デフォルトの名無しさん
2014/09/09(火) 00:09:53.88ID:egYedAa7そういうのに強制されないとできない凡庸なプログラマには役に立つのかもしれんが
0787デフォルトの名無しさん
2014/09/09(火) 00:12:09.90ID:gE54p7sq0788デフォルトの名無しさん
2014/09/09(火) 00:16:52.67ID:jCyK5G6Y設計のミスから生じるので、それらを減らすための設計手法
人は抽象的なものを理解できないので、
問題を具体化し、それを人に突き付けることで、
考えさせたり、見直しの機会を与える
先に入力画面・戦闘画面などを作ると、仕事がはかどるのと同じ
0789デフォルトの名無しさん
2014/09/09(火) 00:19:18.37ID:0xzWguT1なるほど
とはいえ、先に全部設計して実装ユニットテスト結合テストまでやるウォーターフォールではうまくいかないと感じる人が多いから、アジャイルやらTDDの考えが出てきてるわけで
TDDよりベターであるなら、そもそもTDDは生まれなかったんではないですか
0790デフォルトの名無しさん
2014/09/09(火) 00:20:38.42ID:kIMuAYU9いいこと言うじゃないか
0791デフォルトの名無しさん
2014/09/09(火) 00:28:42.39ID:T7NoFdsA「それはテスト駆動ではない」とか言うのは強制だけど
「どっちでもいいよ」って言えば強制じゃないから
テスト駆動の定義を狭くするのをやめればいい
0792デフォルトの名無しさん
2014/09/09(火) 00:30:09.68ID:gE54p7sq今自分が打ってるコードが、設計通りにコーディングされてることはどう確かめましょうか
少なくとも、確かめるくらいはするんですよね?
0793デフォルトの名無しさん
2014/09/09(火) 14:06:41.34ID:kp00Q8e9> テスト駆動は設計手法です
> 設計を先にやるのであれば、テストを実装前に書こうとも、それはテスト駆動ではないです
設計ってどこまでのことを言ってるんだろう。
完全にとまでは行かなくても、設計がある程度頭の中にでも出来てないと、
テストは書けないと思うんだけど。
0794デフォルトの名無しさん
2014/09/10(水) 01:20:01.79ID:84u7ItZRJavaは進化が遅いとか言われるが環境構築技術だけは伸びてるな
0795デフォルトの名無しさん
2014/09/10(水) 07:47:05.60ID:taL9Fgui0796デフォルトの名無しさん
2014/09/10(水) 21:25:34.21ID:MIzNsnl2遅レスになったけど....
まず「テスト駆動は設計手法です(>>783)」と言うのなら、
ウォーターフォール型開発プロセスにも適用できるはず
構造設計工程の後半から単体テスト工程までをTDDに入れ替えればいい
TDDが設計手法であれば、何の問題も無いハズだろ?
次にアジャイルについて、おそらくウォーターフォールとの対比として
アジャイルという用語を選んだのだと思うけど、
設計/実装/テスト/評価という一連のステップを小刻みに反復する
インクリメンタルとかスパイラルとか呼ばれる新しい開発プロセスは、
少なくとも1990年代には世の中で知られるようになっている
アジャイルに固有な新しい特徴は、開発プロセスにエンドユーザを巻き込む点だけ
だからアジャイルとTDDとは無関係だし、TDDが存在していない
1990年代でもスパイラルな開発プロセスは知られていたのだから、
これらはTDDの有効性を主張する根拠には成り得ない
最後に、TDDが生まれた背景はこちらが聞きたいくらいだね
設計ができない人でも設計できた気分になれるアイデアにしか思えない
言い換えると「動いているコードが仕様です」という、
「人月の神話」の時代よりさらに以前の遺物的発想に見える
0797デフォルトの名無しさん
2014/09/10(水) 22:08:20.52ID:nyQ2OFq5テストされていないコードを在庫にたとえると
在庫は最小化したいという発想に見える
遺物的には見えない
0798デフォルトの名無しさん
2014/09/11(木) 00:59:57.82ID:vleFyoUyTDDは反復手法が前提
とはいえウォーターフォールにも使えるけどね
0799デフォルトの名無しさん
2014/09/11(木) 01:20:17.03ID:rnoUsVZ3あれ、その流れであっててなんで関係ないのか分からないです
スパイラル→TDD→アジャイル
って発展してきている認識なんだけど、TDDとアジャイルは関係ないの?
あともういっこ、
ウォーターフォールの標準的な工程にリファクタリングの文字が含まれているのか(反語
リファクタリングを矯正するのもTDDの利点だと思いまする
0800デフォルトの名無しさん
2014/09/11(木) 05:19:24.37ID:c+/7MXMAテストは少なく、バグも少なかったけど、ソフトウェアの仕事が爆発的に増えて、
そこらじゅうの、ソフトに向かない人まで、入門書片手に、プログラミングするようになり
バグが増えまくり、ソフト開発が、あちこちで、破綻するようになった
テストもやりきれなくなり、自分が作ったものくらい、自分で保証しろ、となってきて
都合のいい、テスト駆動、という名前と、手法が始まったと思ってる
本質的に、仕様の間違いやバグは、自分で見つけられないから、
テスト駆動は、テストの名前を借りた、別のものでしかないと思う
設計なんかではなくて、ていよく、開発者を矯正するような何か
0801デフォルトの名無しさん
2014/09/11(木) 08:52:13.94ID:SUJSLbWq商品を大量に仕入れたら売れ残って破綻したと言ってるのと同じ
0802793
2014/09/11(木) 14:40:24.82ID:UA4rAEmEテストを先に書くというのは、実際にコードを書く前にそのコードの使い方を書いてみて、
コードの使いやすさや設計を確かめるという役割があるのかなと理解した。
わら半紙に絵のラフをとりあえず描いてみるみたいな。
もちろん、テストの役割も兼ねているから、好き勝手に試し書きをしても良いという訳ではなくて、
それなりの節度をもってテストを書くべきなんだろうけど。
テスト駆動が設計手法というのは少し言い過ぎな気がしないでもないけど、
設計の助けにもなるという意味で、
テストを先に書いてみるというのは、開発にある程度有効なのかなと思った。
0803デフォルトの名無しさん
2014/09/11(木) 16:37:34.29ID:qRcLUhhX逆に言うと、コードを書く前に細部まで全てもれなく設計されているというのは、設計のやりすぎな気がする。
0804デフォルトの名無しさん
2014/09/11(木) 20:00:47.63ID:WdQgW6yPテストの目的やその定義によりけりだね
もし「テストコードを書いて、それがすべてパスすること」をもって
「テストした」とするなら、その(>>797)解釈でも不思議は無い
自分のテストの目的は >>779 の後段に書いた
これらの目的を達成するには(テスト対象のコードと同様に)
テスト仕様/テストケース/テストコードも長期間の保守に耐えられる必要がある
言い換えると、適切に「テスト設計」して「文書化」することが前提になる
つまり「動いているコードが仕様です(>>796)」と同様に、
「動いているテストコードがテスト仕様です」という発想も否定する
0805デフォルトの名無しさん
2014/09/11(木) 21:04:23.04ID:WdQgW6yP>って発展してきている認識なんだけど、TDDとアジャイルは関係ないの?
アジャイルは(>>796で書いたように)開発プロセスにエンドユーザを巻き込む手法だから、
TDDとは関係ない
>ウォーターフォールの標準的な工程にリファクタリングの文字が含まれているのか(反語
古典的なウォーターフォールでは含まれていない
ただし、(同じく>>796で書いた)1990年代に知られていたスパイラルでは、
リファクタリングに対応する用語として「制御された再作業(controlled reworking)」がある
たとえば「動くプログラムを開発する」という目的で最初のスパイラルを廻し、
次に「品質改善」を目的とする2回目のスパイラルを廻す、という開発プロセスを認めている
ウォーターフォールへの問題を改善する手法としてプロトタイピングが考案されたのが1980年代、
その後に開発プロセスという概念が生まれ、そこからインクリメンタルやスパイラルといった
(ウォーターフォールに代わる)新しい開発プロセスが1990年代に登場するという歴史を経ている
>リファクタリングを矯正するのもTDDの利点だと思いまする
テストを前提にしなければリファクタリング(=コードの品質改善)ができないプログラマであれば、
TDDに頼るのも「しかたがない」のかもしれない
0806デフォルトの名無しさん
2014/09/11(木) 21:45:18.34ID:pBD/TCdZというか、上位工程に誤りがあるのは所与の問題で、誤りが発見されても現工程から
1 工程分しか差し戻しをしなくていいようにするには、どういうふうに設計・実装・テスト
をおこなったらいいかというのがオリジナルのウォーターフォールの主旨
1975年に米国防総省が、ソフトウェアの開発体型を作った時に、オリジナルの
ウォーターフォールを劣化コピーして、工程の差し戻しという概念を削ってしまった。
誤りが起きるのは実装工程のみというマッチョな思想に基づく。
そして現在に至る
0807デフォルトの名無しさん
2014/09/11(木) 22:00:56.27ID:RRfo7wHo>TDDに頼るのも「しかたがない」のかもしれない
なんだこれ
TDDとか一切関係なく「テストがあればリファクタリングがより安全に素早く行える」ってのは割と普遍的な事実だと思うんだが
別にTDDが正しいとか押し付けたいわけじゃなくて
TDD嫌いが昂じすぎて色々見誤ってやせんか?
0808806
2014/09/11(木) 22:02:28.83ID:pBD/TCdZ「テスト駆動推進派は、コーディング前にC1相当のテストを作れと言っている、
そんなの無理」
「テスト駆動否定派は、コーディング前に設計書のドライランもやらないって
言っている。それではまともな開発なんて無理」
少なくとも実装前に正常系のシナリオを何パターンか明確にしてから実装に入る。
少し手間だけどそいつらテスト仕様書 (可能なら自動テストコード) に起こしてから
コードを書く。
ぐらいの緩めからテスト駆動って呼んじゃダメ?
そしたら、みんなテスト駆動開発推進派。
0809デフォルトの名無しさん
2014/09/11(木) 22:43:23.38ID:WdQgW6yPいろいろと間違っているなぁ
まず、バグ対策とリファクタリング(=品質改善)は異なる概念を指す用語だよ
リファクタリングとは、テストが全件パスした(=すべてのバグを摘出した)後に、
機能(または外部インターフェイス仕様)を変更せずに内部の設計(または実装)だけを
改善するもの
設計段階のレビュー等で発見されたバグ、あるいはテスト段階で摘出されたバグ、
それらを前工程にフィードバックすることは、当然ながらウォーターフォール手法の一部だ
対して、前工程へのフィードバックが存在しない(魔法のような)開発手法はクリーンルーム法になる
魔法の種明かしは、形式的設計手法を前提にすることによって検証によりバグを0にする発想にある
当然、形式的設計手法を使いこなせるプログラマは少数だから、
クリーンルーム法は理想論として現場で普及することなく歴史の流れに埋もれていった
そして形式主義(formalizm)なクリーンルーム法よりも、実践主義(pragmatism)な
プロトタイピングが現場では歓迎されて普及していき、現在に到る(までを>>805 で書いた)
0810デフォルトの名無しさん
2014/09/11(木) 23:12:49.59ID:vleFyoUyいいんじゃね
新規ではBDDで正常ルート固めてから異常ルートのテストを後半にすることもあり、
既存機能を残す改修でテストがなかったらC1レベルのテストから固めることもある
メリットが活かせるように、仕事に合わせてやりやすいようにアレンジすりゃええのよ
0811デフォルトの名無しさん
2014/09/11(木) 23:28:46.10ID:ohJ+TO5U> ぐらいの緩めからテスト駆動って呼んじゃダメ?
駄目だろさすがに。
テスト駆動ってのは、テストが中心になって開発しないと。
0812デフォルトの名無しさん
2014/09/11(木) 23:33:37.18ID:WdQgW6yPその定義であれば、それをテスト駆動開発と呼んで
「個人の開発プロセス」に組み込むことは否定しないよ
一個人に割り当てられる(=品質に責任を負う)モジュールの規模は数Kから10数Kステップにもおよぶ
それをサブモジュール(たとえばJavaならパッケージ/クラス/インターフェイス)へと
適切に分解して定義していくプロセスには、常に試行錯誤が伴うものだ
むしろ、その「個人の(試行錯誤の)開発プロセス」を効率化するために
そうしたテストファースト的な手法の導入を考える発想は、
力任せに突き進むアプローチよりもずっと好ましいと思う
個人的には(>>779 で書いたように)時間をテストより設計へ費やすべきと思うけど、
個人が負う責任の範囲内であれば、つまり担当モジュール内部のコード設計であれば、
(リスクを含めて)個々が好む開発手法を選ぶ権利はあるはずだからね
対して明確に否定するのは、(個人の開発プロセスではなく)プロジェクトの開発プロセスを対象に
TDD をソフトウェア設計の方法論として捉える姿勢だ
アジャイルやらエクストリームとやらも同じ理由で否定する(>>785)
0813デフォルトの名無しさん
2014/09/12(金) 00:04:27.90ID:D+NK/ExMなんでそうなったんだ
もしかして空想でものを語ってるんだろうか
顧客を巻き込んだチームの作り方であったり
開発における様々な変化を受け入れられる文化・環境の作り方であったり
強いていうなら開発手法の集合体みたいなものを指すと思うが
0814デフォルトの名無しさん
2014/09/12(金) 00:13:17.20ID:DoZOHl3sTDDもそうだがフロントローディングは負荷が高いのかもしれん
0815デフォルトの名無しさん
2014/09/12(金) 00:13:21.75ID:3yhh+IPH失礼、>>812を訂正する
X:アジャイルやらエクストリームとやらも同じ理由で否定する
O:同様に、アジャイルやらエクストリームとやらを
ソフトウェア開発の方法論として捉える姿勢も否定する
0816デフォルトの名無しさん
2014/09/12(金) 00:42:04.60ID:Dld6l5to1人前の料理を100回作るので、どちらが効率的かと100人前を一気に作る方だな。
ただ要求ってのは最初に決めたら絶対的に変わらないものでもない。 100人前と
言ったけど、やっぱ10人前でいいやとか、別のものも作ってよとかいう風に変わる
場合もある。 まとめて作るほうが効率はいいのだが、要求の変更や、作り終えた
時の周りの状況の変化に弱かったりする。 要求を小さく大量にさばこうとすると
オーバーヘッドが増えるが、変更による弱さを減らせる。 アジャイルってのは後者に
あたるんだけど、安いとか手間がかからないとか勘違いする人が後をたたなかった
りする。
0817デフォルトの名無しさん
2014/09/12(金) 00:57:15.08ID:37/5+rHIアジャイルの話が出てから話題が拡散しちゃってるな
>>814
TDDが必ずフロントヘビーになるってことはないんじゃないか
最初から GUI を絡めたフォーム全体に手を付けるより
ビジネスオブジェクトをBDDやTDDで手早く作るのが自分には合ってる
TDDとアジャイルはどちらも依存関係がないと考えたほうがしっくりくる
0818デフォルトの名無しさん
2014/09/12(金) 10:34:13.52ID:YBqp6ci2> ・設計に対して正しく実装(コード化)されているか?
> ・改造やバグ対策時にデグレードしていないか?(リグレッション)
> の為に必要であって、設計時には不要な存在
その「設計」の中に、テスト容易性は含まれてる?
0819デフォルトの名無しさん
2014/09/12(金) 10:40:33.53ID:YBqp6ci2テストの容易性を高める設計
http://msdn.microsoft.com/ja-jp/magazine/dd263069.aspx
これであなたもテスト駆動開発マスター!?
https://codeiq.jp/magazine/2013/11/1475/
TDDとテスト容易性(試験性)の関係
http://goyoki.hatenablog.com/entry/20100331/1270047115
0820デフォルトの名無しさん
2014/09/12(金) 22:10:19.33ID:XcTB9vyQ慣習の話なんだから
0821デフォルトの名無しさん
2014/09/12(金) 23:32:32.75ID:3yhh+IPH「含まれている」部分と「含まれていない」部分がある
まず「含まれている」部分」について、>>819の先頭記事
「テストの容易性を高める設計」の冒頭では、テスト容易性を以下のように説明している:
具体的には、関心の分離、凝集度、および結合度という古典的な設計品質、
要するに一般的に必要とされるようなことに関して、留意するということです。
おそらく古典的な設計というのは1970年代に始まった「複合/構造化設計」における
モジュールの独立性を高める「モジュール強度」と「モジュール結合度」という
2つの概念を指しているのだと思う
モジュールという言葉をクラスやメソッドに言い換えれば、
こうした古典的な設計品質の重要性はOOPが全盛な今の時代でも変わりはしない
次に「含まれていない」部分についてだけど、テスト容易性を達成する手段を解説した
二番目の記事「これであなたもテスト駆動開発マスター!?」に対する姿勢は全く異なる
この記事では、時間という不確定要因を含むコードについて、TDDを用いて正しい設計を
導く手法を具体的に解説しており、TDD支持者にとっては推薦されうる優れた内容なのだろう
しかし、自分の考えは全く異なる
先にも書いたようにモジュールの独立性を高めることの重要性は1970年代から知られている
そんな常識的な指針がテストを実行しなければ認知できない(=気付けない)ことが問題だ
この記事が対象とする問題の本質は「状態」という概念にある
状態は「外部状態」と「内部状態」に分類され、外部状態は時間だけでなく、
たとえば乱数発生器やキーやマウス/ネットワーク/ファイルなどからの入力イベントがあり、
「内部状態」はプログラム自身の振る舞いを決定する複数の状態変数から構成される
こうした問題の本質を理解していれば、次にはモジュールの独立性を高めるために
プログラムを状態に依存するモジュールと依存しないモジュールに分割するという、
「正しい設計」への道に歩を進めることができる
(長いので続く)
0822デフォルトの名無しさん
2014/09/12(金) 23:50:04.08ID:DjgrfMg60823デフォルトの名無しさん
2014/09/12(金) 23:53:19.02ID:o47xIZ9t0824デフォルトの名無しさん
2014/09/13(土) 00:00:52.79ID:FW2AVG6Wもちろんテスト駆動によって設計の改善を図ることはできる
ただし、それをするには(テスト手法の改善で終わらせず)発生したバグという問題に対して、
バグが生まれた原因を直接原因/間接原因/背景要因/根本原因へと深く追求することによって
再発防止策を考え、それを設計へ反映(フィードバック)させるという姿勢が重要になる
これをQA(品質保証)では「(設計による)品質の作り込み」と言う
残念ながら、この記事は問題追求と反映という考察のレベルがあまりにも浅はかすぎる
この記事を書いた和田氏がQAの基本すら知らずに記事を書いたのなら哀れではあるがしかたがない
しかし、もしQAの基本を知った上で記事を書いたのなら、悪意があると言わざるをえない
この記事で和田氏は設計について以下のように解説している:
設計は終わりのない世界です。そして、設計について考えすぎると、終わりがない世界に
踏み込んでいることに気づきにくくなります。このようなとき、テストの結果/ゴール/具体例から
考えることで「あれもできる、これもできるかも、ああいうやりかたもあるな」という
フワフワとした状態から、ピントのあった状態に戻ることができます。
つまり和田氏は「どうせおまえらには無理なんだから設計について深く追求するな、思考停止しろ、
それよりテストを動かしたほうが楽になれる、頭よりも手と目を動かせ、汗水流して働け」と
語りかけている(いくらか誇張が含まれているかも....)
まあ、もし本人がこんな誘いに喜んで乗りたいのなら、他人がとやかく言うべくじゃ無いだろな
でも、もしオマイラが学部卒以上であれば、知性とは真理の探求であることを学んできたんじゃないの?
(更に続くが、次で終わる)
0825デフォルトの名無しさん
2014/09/13(土) 00:05:30.28ID:3NR6JoCg0826デフォルトの名無しさん
2014/09/13(土) 00:23:32.04ID:FW2AVG6W最後に、>>819 の三番目の記事「TDDとテスト容易性(試験性)の関係」だけど、
これは良いマトメになっているね
この記事ではソフトウェアの品質確保について「設計のブレークダウン」と
「インサイドアウトのTDD」という二通りのアプローチがあると定義している
自分の考え方は、前者になる
特に、TDDのデメリットとして挙げられた:
「テストコードと上流仕様とのトレーサビリティを保証するプロセスが通常考慮されない。」
ことが大きな問題だと捉える
つまり、TDDによるモジュール開発(=単体テスト工程)が終わったとしても、
次の結合テストでも品質が安定するのかそれともバグが多発するのか「予測できない」ことが問題だ
つまりモジュールの設計品質を保証できないというリスクを抱えてしまう
0827デフォルトの名無しさん
2014/09/13(土) 00:26:35.56ID:VE/fbqWK0828デフォルトの名無しさん
2014/09/13(土) 02:10:58.98ID:UwoYLUrNTDDを有効に用いるのであれば、
・少数精鋭チーム
・軽量言語
・多くの仕様変更
・頻繁なリリース
・ツール等が十分導入されている
・個々のエンジニアがコードすべての責任を持つ
などの前提があって、初めて成り立つんじゃないすか
ウォーターフォールには相性悪いのに、それで糞だというのはなんか違う気が
0829デフォルトの名無しさん
2014/09/13(土) 03:05:36.49ID:VE/fbqWKあなたが列挙した前提は、アジャイル開発のセオリーだよね
TDD がアジャイル系統から生まれたという背景は否定しないけれども、
誕生した背景と実用の実態が必ずしも合致しないことはままあることだし、
「TDD が大規模開発やウォーターフォールに向いてない」 というのには違和感を思える
話を元に戻すと、ウォーターフォールでも反復手法でも TDD は成立すると考える
だから、TDD にしろ BDD にしろ、過小評価されていると思う
0830デフォルトの名無しさん
2014/09/13(土) 03:41:31.15ID:WOkelzJA0831デフォルトの名無しさん
2014/09/13(土) 03:51:40.22ID:e8cPYDi5現実としては成立しないよ。
なぜならウォータフォールでは、
少数の技術力が高い開発者+多数の技術力が低い開発者から構成される。
多数の技術力が低い開発者はTDDができない。
ウォータフォールでは技術力をあげようとしない。
人海戦術ができるように技術力が低い状態で回すことが求められる。
高度な機能を使って無駄のない開発ではなく、コピペで重複するコードが
大量にできる方をとる。というか技術力が低い開発者を多数に投入して
並行で作業をやらせるそうしようと思わなくてもと結果にそうなる。
0832デフォルトの名無しさん
2014/09/13(土) 05:23:17.73ID:oPYhG5tJ0833デフォルトの名無しさん
2014/09/13(土) 05:53:46.82ID:YMKS8boWウォータフォール恐ろしいな
こんなので製品完成するの?
素朴に疑問だ
0834デフォルトの名無しさん
2014/09/13(土) 06:19:43.74ID:WU+mcApIお、グローバル変数に匹敵する「状態」概念が出てきたね。
0835デフォルトの名無しさん
2014/09/13(土) 10:47:27.94ID:3NR6JoCg違う
TDDは、開発サイクルの改善手法
Red→Green→Refactoring の小さなサイクルをリズムよく素早く回すのが大事
最初にテストをするのが最重要なんじゃない
極端な話、最初に延々と長期間テストを作り続けて、その後機能が完成するまで実装を続けて最後にまとめてリファクタリング
とかやっても、それはTDDじゃない
最初にちょっとだけ実装して、テストを作って、リファクタリング
というのを練習方法としてオススメしてる人もいる。これはテストを後から作ってるけど結構TDDサイクルに近い
結論としてTDDの反対は、そもそもサイクルを持たない開発・・・なんじゃないかと思う
後工程からのフィードバックが前工程で一切得られない、改善のしようがない開発サイクル(そもそもサイクルになってない)
アジャイルに対するウォーターフォールのような感じ
0836デフォルトの名無しさん
2014/09/13(土) 10:59:24.46ID:cu8Gt3Lfお前が言ってるのは、スパイラルモデルな
0837デフォルトの名無しさん
2014/09/13(土) 10:59:45.73ID:dGFUkkE80838デフォルトの名無しさん
2014/09/13(土) 11:39:42.46ID:YZYULf7gまたは
実装=>テスト=>リファクタリング(+仕様変更)
数時間から数日のサイクルでこのテスト済みかつ再テストの容易なブロックを作って
積み上げていくというのは感覚的にわかりやすい
0839デフォルトの名無しさん
2014/09/13(土) 11:43:55.91ID:JUTGZGvmTDDはプライベートメソッドに対してやればいいんだ。
どういうことかというとTDDは、小さくRed→Greenを繰り返すわけだけど、
その小さい開発サイクルに対してパブリックメソッドのテストでは量が多すぎるんだ。
パブリックメソッドの多くはさらに小さいプライベートメソッドを沢山呼んでいる。
それはパブリックメソッドが複雑だから、それをさらに小さい部分に分けてシンプルにするため。
いきなりパブリックメソッドを作るわけじゃなくて、プライベートメソッドから作る。
その小さいプライベートメソッドを開発してる時に、Red→Greenしないの?
いや、これこそがTDDでするべきことでしょ?
でもユニットテストの考え方ではプライベートメソッドのテストをしないから、
パブリックメソッドにしないとある程度できないとテストがかけない。
TDDを使わない方法、たとえばprintデバッグによる目視ではこのプライベートメソッドの
動作確認をよくやってる。実行する時に、プライベートメソッドへの引数に直接数値を入れて
そして戻り値をprintする。これはまさにプライベートメソッドのテストそのもの。
そうTDDに本当に必要なのはプライベートメソッドのテストなんだよ。
パブリックメソッドのテストでは範囲が広すぎてテストが書けるようになるまでタイムラグが出来る。
パブリックメソッドのテストを書こうとしている。これがTDDができない根本的な原因。
0840デフォルトの名無しさん
2014/09/13(土) 11:44:33.50ID:JUTGZGvmテストコードが変わったりなくなったりするということ。
ユニットテストではパブリックメソッドそのものの仕様が変わらない限りテストコードは変わらないが、
プライベートメソッドは頻繁に仕様が変わったりなくなったりするのだから当然の話。
そしてTDDによる"1つの"開発が終わる時というのは、パブリックメソッドができあがるまで。
パブリックメソッドできあがったとき、プライベートメソッドのテストとは別に
パブリックメソッドのテストもできているのが理想的だが、必ずしもそうはならないだろう。
多くのプライベートメソッドのテストがあって、プライベートメソッドを呼び出してるだけの
単純なパブリックメソッドのテストコードは無いか少ないことが多い。
この後プライベートメソッドのテストは、変更を加えてパブリックメソッドのテストに変更してもいい。
ユニットテスト的にはプライベートメソッドのテストはしないのだから破棄しても構わないが、
将来の修正に備えて残しておくのもいいだろう。
ユニットテストのテストは外部のインターフェースに対するテスト、
TDDとは内部の開発を行うためのテスト(というより動作確認に近い)
0841デフォルトの名無しさん
2014/09/13(土) 11:50:51.07ID:JUTGZGvmこれはユニットテストのフレームワークの機能を使わないほうがいいだろうね。
フレームワークによってはプライベートメソッドのテスト機能があるが
それを使わない。
代わりにクラスにtest()とかなんでもいいんで1個メソッドを用意する。
このメソッドは別にユニットテストでテストするわけじゃない。
引数を返したり、特定の機能を提供するものじゃない。
単に外部から呼び出すためだけのもの。
そしてクラスのtest()メソッドの中で、
プライベートメソッドを直接読んで、戻り値を確認確認は単純にifとかでいいよ。
なんだっていいどうせ破棄してもいいものなんだから。
もちろん将来に備えて綺麗に整理しておくとか、ユニットテストに
変更しやすいような命令を使うとかはありかもしれないが、
それはTDDとは直接関係のない話。
0842デフォルトの名無しさん
2014/09/13(土) 11:53:51.98ID:KYJA+u1QこれTDDだったのか
0843デフォルトの名無しさん
2014/09/13(土) 12:00:50.55ID:JUTGZGvmhttp://docs.python.jp/2/library/doctest.html
> そこで Python 2.4 では doctest の Tester クラスを廃止し、モジュールや doctest の
> 入ったテキストファイルから unittest テストスイートを作成できるような
> 二つの関数を doctest 側で提供するようにしました。
って書いてあるように、doctestはユニットテストを含む
テストを生成するための機能だしね。
0844デフォルトの名無しさん
2014/09/13(土) 12:15:44.43ID:NqTsLZkyプライベートメソッドのテストが必要な時点で、クラス(モジュール)の規模が大きくなりすぎているように思える。
少し視点を変え、テストのしづらい大きなクラスの場合、APIクラスとハンドラクラスに分けるとよいのではと考えている。
APIクラスのメソッドはハンドラクラスのメソッドを組み合わせて構成させる。
ハンドラクラスは、もともとプライベートメソッドだったもの。
これらの構成に分けた上でAPIクラスは振る舞いを軸にテストし、ハンドラクラスはメソッド単位でユニットテストする。
ハンドラクラスは基本すべてクラス外からアクセス可能となるパブリックメソッド。もしくはJavaのようなパッケージプライベートあればそれでも可。
0845デフォルトの名無しさん
2014/09/13(土) 12:19:53.66ID:JUTGZGvmユニットテストではやりにくくて
printデバッグでやりやすいのにこのようなテストがある
function foo(a, b) {
aとbをいろいろ計算してcに代入
if (cが○○なら) {
_hoge();
} else {
_hage();
}
}
こんな感じのコードで、a, bにとある値を入れた時
_hoge()が呼び出されるか? という確認。
これはprintデバッグをすれば簡単に確認できることだが
テストコードでは気軽にできない。モックを使えって話になるだろうが
プライベートメソッドのモック??? 継承してプライベートメソッドを
オーバーライド??? 言語によっては出来ないし。
これさ、よくデバッグログを有効にしたらログを出力する機能ってあるじゃん?
そのログを解析すればいいんじゃないか?
_hoge()実行前、もしくは_hoge()の中でデバッグログを出力するようにしておいて
そのログを解析してテスト。(もちろんログは解析しやすい構造にしておくのがベター)
やってることはprintデバッグと同じなんだけどね。
デバッグログとしてモジュールがもってる公式な機能とすることで自動テスト可能にする。
ユニットテストでも使える技だと思う。
0846デフォルトの名無しさん
2014/09/13(土) 12:20:42.66ID:NqTsLZkyこれは別に目新しいものではなく、よくあるクラスを細分化して階層化する手法をてきようしただけ。
通常のクラスのレイヤー化とは違い、状態を持たない/持たせないのであれば、すべてstaticメソッドでも構わないと思ってる。
0847デフォルトの名無しさん
2014/09/13(土) 12:28:38.72ID:JUTGZGvm> プライベートメソッドのテストが必要な時点で、クラス(モジュール)の規模が大きくなりすぎているように思える。
プライベートメソッドの存在否定をしているわけじゃないでしょ?
まず事実としてプライベートメソッドはできる。
そりゃ単純なユーティリティクラスとかならいらないだろう。
そういうユーティリティクラスはテスト簡単で、それなら俺もテストもTDDもできる。
問題は少し複雑になったもの。
複雑なものはプライベートメソッドは絶対にできる。
その規模になったとたん、TDDがしづらくなるのが現実。
プライベートメソッドをパブリックメソッドにして別モジュールにするのはいいアイデアだよ?
最終的にはそうすることになるかもしれない。でも今は最終的な話をしてるんじゃない。
作ってる初期段階の話なんだ。TDDは初期段階からRed→Greenをするものなんだから。
開発中に小さな単位で作ってる時に、プライベートメソッドができたからってすぐに
別クラスを作ろうっていうのは間違った考え方。
小さなプライベートメソッドごときで、クラスに分けるか?
なんて責務を持ったクラスしよう?などと考えるのはやり過ぎだろう。
最初は小さく作って、それから大きくしていくのがいい。大きくなったら
別クラスに分けるのもありだし実際俺もそうしてる。
0848デフォルトの名無しさん
2014/09/13(土) 12:30:58.32ID:4lGfw+8/どんだけコストかけるつもりだ
0849デフォルトの名無しさん
2014/09/13(土) 12:32:32.50ID:JUTGZGvmあと、
> プライベートメソッドのテストが必要な時点で
これおかしな言い方だよね?
まるでプライベートメソッドはテストをしなくていいような言い方。
「プライベートメソッドは "ユニット" テストをしなくていい。」
ならば賛成だが、TDDにおけるRed→Greenは
プライベートメソッドでもやるべきだろう?
むしろプライベートメソッドこそやるべきことだろう?
じゃないと小さくRed→Greenなんてできないよ。
0850デフォルトの名無しさん
2014/09/13(土) 12:37:23.42ID:CEzP+lKUTDDというかユニットテストツールの導入によるメリットが減るのかな
0851デフォルトの名無しさん
2014/09/13(土) 12:39:11.42ID:JUTGZGvm> 使い捨てのプライベートテストを計画量の何倍も書くなんてやってられるか
> どんだけコストかけるつもりだ
その考え方の間違いが、TDDできない原因なの。
プライベートメソッドは絶対にできるし、無駄になるからそのテストコードを書かない。
→だからパブリックメソッドのテストしか書きません。
→プライベートメソッド単位で小さくRed→Greenしません。
開発時はプライベートメソッドでも目視で動作確認している。
TDDはこれをコードに置き換えただけ。
単純な1作業だからこそ破棄しても良くなる。(そもそも目視=使い捨て)
小さくRed→Greenをするために、TDDのテストコードと
ユニットテストコードは別のライフサイクルであつかわないといけない。
0852デフォルトの名無しさん
2014/09/13(土) 12:49:00.56ID:JUTGZGvmデバッグログを使わなくてもアスペクト指向的に
メソッドの前後に処理を割りこませることが出来るのは知ってる。
もちろん動的言語だったらメソッドを動的に入れ替えたりとかできる。
でもこれらの欠点は、メソッド単位でしかやれないってこと。
あとそれをやるためのコードがいちいち面倒くさい。
デバッグログならたった一行書くだけで任意の時点でその時の状態を表示できる。
コードの途中で確認したいと思った内容を自由に制御可能になる。
ようするにprintデバッグは偉大だってことw
0853デフォルトの名無しさん
2014/09/13(土) 13:54:21.21ID:VE/fbqWK俺ならメソッドの設計を変える
1) a と b を引数にして c を返す function foo()
2) c を引数にして _hoge() と _hage() を呼び分ける function foo2() ←仮称
こうすると、テストが必要になるのは
・function foo(a, b)
・function foo2(c)
・function _hoge()
・function _hage()
の4つになって、foo2(c) の結果が c 次第で _hoge() か _hage() と同じになればいい
メソッドを通るか通らないかは、アクセッサを使えばいい話で、
わざわざ出力を人の目で追う(=人為的ミスの混入の余地がある方法に頼る)必要はないよ
0854デフォルトの名無しさん
2014/09/13(土) 14:14:31.94ID:JUTGZGvmただの簡単な例にそんなに必死にならなくてもw
ね、たったこれだけなのに大きくなりすぎでしょ。
最初はシンプルに作ろうぜ。
0855デフォルトの名無しさん
2014/09/13(土) 14:22:24.36ID:JUTGZGvm複雑なコードというのは最初から複雑なのではなくて
シンプルなコードに変更を加えていって複雑になる。
ここからもTDDはプライベートメソッド対して
行うものでテストは使い捨て同然だってことがわかるよね。
コードが長くなっていく。じゃあ分割しよう。
よし別クラスのパブリックメソッドに変更だ!
いきなりこうする奴はいない。
コードが長くなれば、同じクラスのプライベートメソッドにする。
じゃあテストはどうなる?
テストもプライベートメソッド用に分割し変更しないといけない。
TDDでは小さい単位でRed→Greenを繰り返すわけで頻繁に変更が入る。
ユニットテストのようなモジュール単位でのテストでは
開発に対しては粒度が大きすぎるんだよ。
0856デフォルトの名無しさん
2014/09/13(土) 14:32:49.34ID:WNOSyncOブログでやってろ
0857デフォルトの名無しさん
2014/09/13(土) 14:59:02.52ID:JUTGZGvm0858デフォルトの名無しさん
2014/09/13(土) 14:59:25.59ID:VE/fbqWKご心配ありがとう、「必死」でも「本気」でもないから大丈夫だよ
インスタンスを obj とすると、自分だったら最初からこう書く
obj.foo(a, b).handleIfInvalid().execute();
それぞれの中身はスタブを作って後から書く
個々のメソッドの内容は、最初柔らかかったり、ユーザー調整で変わったりするからね
0859デフォルトの名無しさん
2014/09/13(土) 15:20:49.51ID:JUTGZGvmだからなんで自分の都合のいい例で
過剰な設計してるの?
0860デフォルトの名無しさん
2014/09/13(土) 15:45:34.10ID:WNOSyncONGID:JUTGZGvm
0861デフォルトの名無しさん
2014/09/13(土) 15:47:33.17ID:VE/fbqWK>ようするにprintデバッグは偉大だってことw
この言葉に違和感を感じたから、俺なりの意見を書いてみた
抽象的な言葉を使うとわかりづらくなるだろうから、具体例をあげてみたんだ
0862デフォルトの名無しさん
2014/09/13(土) 15:49:45.67ID:VE/fbqWKありがとう、そういうことか
気づくのが遅かったよ・・・
0863デフォルトの名無しさん
2014/09/13(土) 16:03:41.33ID:WNOSyncO寝起きで公開オナニーしてるただのいかれポンチだからな
ご愁傷様
0864デフォルトの名無しさん
2014/09/13(土) 16:26:16.40ID:YMKS8boW相手の考え方をただ突き放すんじゃなくて
技術的な観点から反論した方が有益では
0865デフォルトの名無しさん
2014/09/13(土) 16:51:35.11ID:T0lKiW3+0866デフォルトの名無しさん
2014/09/13(土) 16:58:55.39ID:HpsOFySp0867デフォルトの名無しさん
2014/09/13(土) 18:10:44.31ID:WU+mcApI0868デフォルトの名無しさん
2014/09/13(土) 19:22:04.50ID:YMKS8boWprivateメソッドのテストはどうするんだという指摘は気になったけどなあ
0869デフォルトの名無しさん
2014/09/13(土) 20:24:45.01ID:n3+TUlp4運用というか、よくある運用しながら機能追加を続けるようなプロジェクトなんかだと
デグレを発見しやすくなる、減らすって意味でもテストツールの導入のメリットは
少なくないよ。 ただ、人が多い人の入れ替えが頻繁に発生するとかだとツールで
作ったテストの品質の担保が出来なくなって破綻するってのが簡単に想像できる
パティーンだね。
0870デフォルトの名無しさん
2014/09/14(日) 14:00:48.25ID:6ldmPVQOテスト駆動はファイルをこまめに保存するのと同じ個人の慣習だという人
がいて議論が混乱してるようですな
私は後者です
0871デフォルトの名無しさん
2014/09/14(日) 21:48:34.19ID:eBrPaPVHそれは間違い。
テスト駆動は「開発手法」の一つです。
0872821
2014/09/14(日) 22:16:03.85ID:VLz5e6gtもしそれらがTDD導入の前提条件であるなら、
まさしくそれがスレタイ「TDDはなぜ流行らなかったのか」に対する答えだね
つまり極めて限定された案件でしか適用できないのだから、
TDDが普及しなかったのはしごく当たり前の話だと言える
0873デフォルトの名無しさん
2014/09/14(日) 22:20:22.35ID:eBrPaPVH0874821
2014/09/14(日) 22:34:55.94ID:VLz5e6gt> だから、TDD にしろ BDD にしろ、過小評価されていると思う
>>826 で書いたように、TDD は一般的なQA(品質保証)の考え方へ
適合できていない事が、過小評価と開発現場で普及しない原因になっていると思う
現状だと TDD は開発手法や開発方法論の一つというよりも、
>>808(>>812,815) および >>870の後者のように
プログラマ個人レベルのノウハウ/設計テクニック/慣習であると
捉えるほうが適切だと思う(実際に開発手法として普及していないのだから....)
ただし、>>819 の三番目の記事「TDDとテスト容易性(試験性)の関係」(>>826)にあるように
現状では「設計のブレークダウン」と「インサイドアウトのTDD」との両立は現実的ではないけれど、
かといって対立するものと考えて TDD を排除するのも惜しい
おそらく今後はプログラマ達が自由に TDD を使いこなしてモジュール開発を効率的に進める一方で、
同時にシステム全体の品質も確保していけるような品質管理手法や支援技術が必要になるだろう
0875デフォルトの名無しさん
2014/09/14(日) 22:40:09.03ID:eBrPaPVH意味がわからない。
流行っていないから言葉の定義を変えるべきだって主張?
0876821
2014/09/14(日) 23:05:53.59ID:VLz5e6gtそのTDDを使う技術力の高い開発者とやらは、>>819 の二番目の記事
「これであなたもテスト駆動開発マスター!?」を指しているのかな?
自分はそうは考えないね
本当に技術力の高い開発者であれば、発見した一つのバグ(=現象)から
発生原因を追求して他の隠れた(=潜在的な)類似バグを机上で摘出し、
その再発防止策を設計へフィードバックできるはずだ(>>821,824)
>>819 の記事にあるような「時間に依存」というバグの対策だけで満足し、
テスト駆動設計マンセーとする姿は手足を素早く動かせる「お猿さん」に見える
0877821
2014/09/14(日) 23:19:37.96ID:VLz5e6gtあぁそういえばグローバル変数がモジュール結合度を強める要因だとよく知られているけど、
今時のオブジェクト指向設計だと、対応するのは「共有された可変オブジェクト」になるね
>>821 では欠けていたから、「外部状態」の一つとして追加しておく
0878デフォルトの名無しさん
2014/09/14(日) 23:27:33.43ID:xGAHyC6K>>>826 で書いたように、TDD は一般的なQA(品質保証)の考え方へ
>適合できていない事が、過小評価と開発現場で普及しない原因になっていると思う
一般論としてはそうかもしれないが、適合できるかどうかは手法の「使い方」によると思う
>プログラマ個人レベルのノウハウ/設計テクニック/慣習であると
>捉えるほうが適切だと思う(実際に開発手法として普及していないのだから....)
最後のカッコ内は別として、この意見には同意する
「テスト駆動<設計>」は難しい、フロントヘビーで破たんするケースが多くなると予想くる
>おそらく今後はプログラマ達が自由に TDD を使いこなしてモジュール開発を効率的に進める一方で、
>同時にシステム全体の品質も確保していけるような品質管理手法や支援技術が必要になるだろう
ここもほぼ同意だ、上に書いた「使い方」がカギになると思うんだ
>本当に技術力の高い開発者であれば、発見した一つのバグ(=現象)から
>発生原因を追求して他の隠れた(=潜在的な)類似バグを机上で摘出し、
>その再発防止策を設計へフィードバックできるはずだ(>>821,824)
その期待値を One of them の開発者にも求めるのが方法論
このとき、机上で行うと人の能力に左右されやすいので、自動化するのがいいはずだ
0879デフォルトの名無しさん
2014/09/14(日) 23:45:56.29ID:HSV2qzsF個人的には開発の多様性がでかすぎることが議論のまとまりを得ないことだと思ってる。
組み込み畑の人間としては昔は自前主義から専用ツールの使いこなしこそが熟練工の証だったし、最近はフレームワークが決定権を握ってるが、その組み込み系FWの多くがまだTDDと繋がっていないから、存在を知ってても踏み出さない。
組み込みでもスマートフォンのアプリ界隈はなんとかなり出したけど、web界隈の速度には全くついてけない。なんだよyeomanって
開発手法で先頭を走ってるのはweb界隈だと思うし、そこで何らかの開発手法が本格化しても、組み込みまで来るのに10年ぐらいかかりそうなんだよね。で、組み込みが使いだした時にweb屋はもっと先のことをやってる。永遠に話が噛み合いません
0880デフォルトの名無しさん
2014/09/14(日) 23:52:15.85ID:eBrPaPVH自分で言葉の定義を変えて自画自賛してるだけ。
まったくこのスレの趣旨とは関係のない事をだらだら書いてるだけ。
0881デフォルトの名無しさん
2014/09/15(月) 00:22:34.44ID:jSabMZv+>個人的には開発の多様性がでかすぎることが議論のまとまりを得ないことだと思ってる。
完全同意、開発形態は OOP だけじゃないし
>最近はフレームワークが決定権を握ってるが、その組み込み系FWの多くがまだTDDと繋がっていないから、
>存在を知ってても踏み出さない。
これはしんどいな・・・
確かに、フレームワークやツール機能としてテスト環境がなければ、話の前提が変わってくる
スタブ生成、テスト設定、テストリスト等々の実践的の機能がないわけだから・・・
>組み込みが使いだした時にweb屋はもっと先のことをやってる。永遠に話が噛み合いません
でも、アセンブラや C が主戦場だった時代でも、定数やプリプロセッサを使って、
テストを主軸に置いたアプリケーションの反復開発のノウハウはあった
開発環境のテスト機能が手厚いかどうかの話はおいといて、基本的な考え方は同じだと思う
0882デフォルトの名無しさん
2014/09/15(月) 03:01:54.90ID:fTMJwK7zそもそもここで議論(?)してる人たちのうちどれくらいが
Red-Green-Refactoring やったことあるんだろうか
0883デフォルトの名無しさん
2014/09/15(月) 11:11:12.39ID:pNNQiIbOパターンと同じでさ、セオリーやメソッドじゃない、ちょっとしたコツの集積だろ
オブジェクト指向、CMMI、PMBOKとかと同じでさ、アメリカ人の教授とかはそういうのまとめて
自分が言い出しっぺになって、学会ごっこしたり、資格試験の元締めやろうとしたりするのが好きなんだよ。
そういう商売に乗せられているだけなのに、さも学術的な根拠があるものとして「勉強」したりするのが
偉いと思っている奴はどっかオツムが弱いとしか言いようがないw
0884デフォルトの名無しさん
2014/09/15(月) 12:21:47.43ID:B9NqCL8r弱者は放っておいて元締めを直接攻撃した方が良い
0885デフォルトの名無しさん
2014/09/15(月) 13:05:34.49ID:c5wSz+yy絡んでくるのんだくれと同じか
自分に酔い潰れてらっしゃる
0886デフォルトの名無しさん
2014/09/15(月) 18:39:38.47ID:upNhnkM6個人の慣習としての開発手法ですよ
0887デフォルトの名無しさん
2014/09/16(火) 04:27:18.32ID:1lKEIB+1そしてそのレスはコピペだろ?w
0888818
2014/09/16(火) 10:29:06.27ID:JKk7MwEx> 「含まれている」部分と「含まれていない」部分がある
以下全て、テスト容易性を担保するという観点では、「あなたが設計するときはそうする」という話であって、
メソドロジーの話ではないよね。
TDDはメソドロジーの話。
このメソドロジーが気に入れば使えばいいし、気に入らなければ無視しておけばいいだけ。
0889デフォルトの名無しさん
2014/09/16(火) 10:34:39.32ID:JKk7MwEx> 設計は終わりのない世界です。そして、設計について考えすぎると、終わりがない世界に
> 踏み込んでいることに気づきにくくなります。このようなとき、テストの結果/ゴール/具体例から
> 考えることで「あれもできる、これもできるかも、ああいうやりかたもあるな」という
> フワフワとした状態から、ピントのあった状態に戻ることができます。
>
> つまり和田氏は「どうせおまえらには無理なんだから設計について深く追求するな、思考停止しろ、
> それよりテストを動かしたほうが楽になれる、頭よりも手と目を動かせ、汗水流して働け」と
なんという悪意。t_wadaに恨みでもあるの?
先にテストを書くことで見えてくるものがあるよってことでしょ。
0890デフォルトの名無しさん
2014/09/16(火) 10:50:55.87ID:JKk7MwEx> >>819 の記事にあるような「時間に依存」というバグの対策だけで満足し、
うーん、やっぱ色眼鏡であの記事を読んでるんじゃないの?
あの記事は、バグの話じゃなくて、
> class Greeter
> def greet(time=nil)
> time ||= Time.now
> hour = time.hour
> return 'おはようございます' if 5<=hour && hour<12
> return 'こんにちは' if 12<=hour && hour<18
> return 'こんばんは'
> end
> end
というコードでいいの?って話なんだけど。
0891デフォルトの名無しさん
2014/09/16(火) 15:37:15.11ID:EbNafOtnelseルートに「こんばんは」が入っているのに違和感。
日本語的にも、フェイルセーフ的にも
朝ならおはようございます
夜ならこんばんは
それ以外ならこんにちは
とコーディングするのが自然だろう。
0892デフォルトの名無しさん
2014/09/16(火) 21:17:00.56ID:Zss/iCB4いや、それが本題だ‥
0893デフォルトの名無しさん
2014/09/16(火) 21:35:17.75ID:1lKEIB+1最初にテストに失敗させる。
その後テストが通るように修正する
↑これをリファクタリングと言ってる人がいるけど、
これリファクタリングじゃない。
なぜなら機能が変わっているから。
テスト駆動開発中にリファクタリングすることはあるけど
開発そのものはリファクタリングじゃない。
テスト作成 → レッド →(リファクタリング)→ 開発 → グリーン→(リファクタリング)→最初に戻る
※リファクタリングは必須ではない
http://www.infoq.com/jp/news/2014/03/fowler-workflows-refactoring
> 「プログラミング中は、頻繁に、ことによると数分毎に2つの帽子を取り
> 替えることになるだろう。しかし、一度にかぶれる帽子はどちらか1つだけだ。」
マーティン・ファウラー氏がいうように、リファクタリングと開発は分けて考えないといけない。
0894デフォルトの名無しさん
2014/09/16(火) 21:40:19.03ID:PVbEy2qP0895デフォルトの名無しさん
2014/09/16(火) 21:47:40.13ID:1lKEIB+1やっぱこれ訂正する
リファクタリングはテストに通っているものを、
修正してもテストに通ることでリファクタリングが正しいことを
担保するものだったはずだ。
テスト作成 → レッド → 開発 → グリーン→(リファクタリング)→最初に戻る
こうでなければならない。
0896デフォルトの名無しさん
2014/09/16(火) 22:27:03.96ID:1OTf5N0/どっかの記事にあったの?
>テスト作成 → レッド → 開発 → グリーン→(リファクタリング)→最初に戻る
これ粒度が違うものが同じ高さに並んでてよくない
レッド(テスト作成) → グリーン(実装/開発) → リファクタリング
これならまだ・・・
やっぱり三角形書いた方がよいな。プレーンテキストだとイマイチ
0897デフォルトの名無しさん
2014/09/17(水) 10:34:23.26ID:lCf5WlHq> ↑これをリファクタリングと言ってる人がいるけど、
いたとしたら、それは間違い。
> テスト駆動開発中にリファクタリングすることはあるけど
> 開発そのものはリファクタリングじゃない。
ん?リファクタリングも開発でしょ?
> テスト作成 → レッド →(リファクタリング)→ 開発 → グリーン→(リファクタリング)→最初に戻る
俺用語とか謎の括弧が満載だけど、TDDの定義はred/green/refactor。
0898デフォルトの名無しさん
2014/09/17(水) 17:52:59.30ID:axdkvC1Xエディタでスペルミスを見つけてくれるのと、同じレベルで使えないなら、使えない開発手法だよ
コード書きながら、自動コンパイルして、下線で間違いを指摘するエディタのように、
メソッドの期待値をコメントにでも書いておけば、いまコーディングしてるメソッドを自動に把握して
バックグラウンドでテストコード作って実行して、レッド、グリーンとリアルタイムに
結果表示するエディタがあれば習慣として成立する
0899デフォルトの名無しさん
2014/09/17(水) 18:19:32.67ID:9lFjDeRp0900デフォルトの名無しさん
2014/09/17(水) 18:54:08.07ID:LBQjPFEK電話のようなリアルタイムにこだわるメリットがわからない
0901デフォルトの名無しさん
2014/09/17(水) 19:47:16.44ID:9lFjDeRpしかしまあカバレッジをエディタに重ねて表示みたいなのはいずれは実現してほしい機能ではある
0902デフォルトの名無しさん
2014/09/17(水) 19:49:47.39ID:ji0sMMymWebリンクで充分な気が
0903デフォルトの名無しさん
2014/09/17(水) 20:56:07.51ID:2WfHlgOCコードを書く前に書くべきテストは、そのコードを書く人にしかわかりません
0904デフォルトの名無しさん
2014/09/17(水) 20:58:18.00ID:LBQjPFEKTDDのサイクルの長さは何秒かかったかじゃなくてテストの範囲の広さだろ
秒単位で管理するものじゃない
0905デフォルトの名無しさん
2014/09/17(水) 21:09:26.99ID:YTtw5Lifできますよ。そう、D言語ならね
0906デフォルトの名無しさん
2014/09/18(木) 21:50:22.08ID:ESbaNubEメソッドが入力に対して、どんな値を返すかの期待値を書いておけば、テストどころか、それを使うコードだって、他人に書けるだろ
0907デフォルトの名無しさん
2014/09/19(金) 01:44:50.06ID:1/1de/H5関数型的なアプローチで全てが完結できる世界ならそれで良いのかもしれんけどな
0908デフォルトの名無しさん
2014/09/19(金) 10:53:04.12ID:VKWv7B4z> メソッドが入力に対して、どんな値を返すかの期待値を書いておけば、テストどころか、それを使うコードだって、他人に書けるだろ
そのレベルの簡単なテストなら、10秒で書けるだろ
0909デフォルトの名無しさん
2014/09/19(金) 11:36:09.89ID:iHgvKusjだからそれが出来ないクソ設計なら出来るように見直そうぜって話じゃないか
スタート地点から間違ってる
0910デフォルトの名無しさん
2014/09/19(金) 11:50:58.00ID:n7oIFaex「どんな値を返すかの期待値」を書くこと自体がけっこう難しい
0911デフォルトの名無しさん
2014/09/19(金) 12:47:57.61ID:VKWv7B4z「それが出来ない」のそれが何を指しているのかあやふやだが、俺が言ってるのは、
> メソッドが入力に対して、どんな値を返すかの期待値を書いておけば、テストどころか、それを使うコードだって、他人に書けるだ
レベルの話なら、この話題の元レス>>898の「〜するエディタ」なんかなくても10秒でテスト書かけるだろってこと。
0912デフォルトの名無しさん
2014/09/19(金) 23:26:45.26ID:8TBQk5yLその期待値は何に書くんですか?
0913デフォルトの名無しさん
2014/09/20(土) 11:47:43.67ID:JSFBishNそんなもん、エディタの仕様で決めたらいいんでは?
コメントでも、マニフェストぽいものでも
今のTDDが習慣なら、コメント書くようなものと同じなんだろうけど
エディタなり、環境の補助が、ほとんど何もないのは、環境が足りてないってことじゃない?
なぜ流行らないってスレタイの議論からして
0914デフォルトの名無しさん
2014/09/20(土) 18:29:49.59ID:jy6HF+FtIDEの機能を想定してるのか?
0915デフォルトの名無しさん
2014/09/20(土) 19:33:30.77ID:IAeZgJbV0916デフォルトの名無しさん
2014/09/20(土) 20:30:27.20ID:U9SdVMdG「エディタはこまめに保存しよう」もそれほど流行ってないしな…
0917デフォルトの名無しさん
2014/09/20(土) 21:45:50.87ID:JSFBishNTDD だって、Specとか何かのフレームワークと、その外側では Jenkins みたいな CIで、自動化依存なわけでしょ?
エディタだけ、手技にこだわる理由があるの?
0918デフォルトの名無しさん
2014/09/20(土) 21:54:40.71ID:U9SdVMdG・テストやスケルトンは自作ツールで半分自動生成するから
・たとえ便利であっても、自分が意図しないconfigを作ったりいじってほしくないから
・細かい設定の度にいちいちマウスに手を伸ばすのが面倒くさいから
・Write onece, Debug everywhereだから
・というか、emacsはIDEでしょ
0919デフォルトの名無しさん
2014/09/22(月) 10:36:36.30ID:jUlJm5b9> 今のTDDが習慣なら、コメント書くようなものと同じなんだろうけど
TDDどころか、テストコードによる自動テストすらまともにやったことない奴の戯れ言だな
0920デフォルトの名無しさん
2014/09/22(月) 18:55:21.87ID:Q6VO7Vt5それなら、IDEなどの補助で、面倒なことを環境がやってくれたらいいと思う
ところが、IDEで自動でやるのは、必要ないみたいな話で、チマチマ手作業で、テスト書いて実行しろ、とか
自動でなんかできるわけないから、苦行をしないやつは、半端者みたいな、精神論になるね
およそ、ソフト開発者ぽくない感じ
0921デフォルトの名無しさん
2014/09/22(月) 20:27:56.42ID:Jl1JL1CIbashとshのように
それと、手作業で使うのがbashで自動はshだから、手作業を見下すべきではない
0922デフォルトの名無しさん
2014/09/22(月) 21:45:12.22ID:SZGmUYqv0923デフォルトの名無しさん
2014/09/22(月) 22:41:49.11ID:Jl1JL1CI設計はほどほどにいきなり使ってみる方法があるらしい
どちらが良いかな
0924デフォルトの名無しさん
2014/09/22(月) 22:49:19.38ID:vh/Af1aB0925デフォルトの名無しさん
2014/09/22(月) 22:51:56.76ID:BRLO2XpRだいたい知り尽くす必要ないし、
普通に使えばいいだけだろ。
設計の意味間違ってるなw
0926デフォルトの名無しさん
2014/09/23(火) 04:40:15.02ID:h+L05RM4と開発者がユーザーを圧迫するところまでがユーザーエクスペリエンスデザインです
0927デフォルトの名無しさん
2014/09/24(水) 10:32:01.65ID:pulkGZ2z> それなら、IDEなどの補助で、面倒なことを環境がやってくれたらいいと思う
別にそれは否定しないし、現にテストをサポートしてくれるIDEとかも存在する。Visual Studioとか。
> チマチマ手作業で、テスト書いて実行しろ、とか
テストを書いたことないか書き慣れてないからそんなこと言うんだろう。
> 自動でなんかできるわけないから、苦行をしないやつは、半端者みたいな、精神論になるね
被害妄想激しいな。
簡単なアノテーションレベルで自動生成されるレベルのテストだったらすぐに書けるんだから、自分で書けよってことだよ。
0928デフォルトの名無しさん
2014/09/24(水) 22:06:10.37ID:2iRKCzumバグを少なくする慣習なんだから面倒かどうかは関係ない
強いて言うなら、3ヶ月後のデバッグの面倒を減らすのがTDDという慣習
0929デフォルトの名無しさん
2014/09/24(水) 22:13:03.77ID:7Xf6EsR4慣習じゃないだろ。なに言ってんだ?
0930デフォルトの名無しさん
2014/09/24(水) 22:33:07.12ID:2iRKCzum実質的にも本質的にもコーダーがコード打ち込む前にテスト書くなんてのは工程として存在しないんだから、TDDは個人が好き勝手に行う慣習でしかない
0931デフォルトの名無しさん
2014/09/24(水) 23:38:41.86ID:HYHBSSFjテストしてしっかり動きますって言い切るまでが開発なのだから
テストは開発者が開発中にやるものなんだよ。
テスト工程なんてのがわかれているのがそもそも考え方としておかしい訳で、
それがない前提の文化でTDDは出来たのだから、
単に開発と同時に行われるテストのやり方を決めたのがTDD
TDDは開発工程で行われる開発の手順であり、完成後に行われるテスト工程でやるものではない。
0932デフォルトの名無しさん
2014/09/24(水) 23:47:27.55ID:2iRKCzum開発工程のテストと、TDDのテストはまったく別の概念で目的も違う
開発工程のテストは基本的にブラックボックステストで、時間と余裕があればコーダーとは別の人が行う性質のもの
理想的には、バグを発見することではなく、バグがないことを確認するのが目的
TDDはコーダー本人の趣味と責任において実施するもので、時間と余裕があってもコーダー本人がやるべきもの
開発工程にテストがあってもなくても、コーダーが勝手にTDDをやればいいという種類のもの
ゆえにTDDは慣習
0933デフォルトの名無しさん
2014/09/24(水) 23:50:47.05ID:7Xf6EsR4は?
かなり無能の意見だな・・・
お前は開発やったこと無いのか?
0934デフォルトの名無しさん
2014/09/24(水) 23:56:30.70ID:4ATryfYHほう
各々の概念の出典を教えてくれないか
0935デフォルトの名無しさん
2014/09/24(水) 23:58:54.84ID:2iRKCzum開発工程としてTDDを工程の中に組み込んでるプロジェクトは見たことがない
一方、TDDを行う人は、どんな工程であろうが個人の趣味としてTDDを行っている
0936デフォルトの名無しさん
2014/09/25(木) 00:00:31.00ID:2iRKCzum開発工程のテストについては、Writing solid code あたりを読めばいいのではなかろうか
TDDについては言及してないが、TDDと開発工程のテストがまったく別モノだと分かる
0937デフォルトの名無しさん
2014/09/25(木) 00:01:49.28ID:5/lLb9tL「個人の趣味としてTDDを行っている」なんてのが論外だって言ってんだが
ひょっとしてこんな基本的なことも理解できない?
0938デフォルトの名無しさん
2014/09/25(木) 00:06:31.19ID:I35fUU7VTDDを行う人は、「完全に」個人の趣味で行なうのであり、その個人にとってはただの慣習ですよ
「一息ついたらエディタを保存する」と同じレベルの趣味であり、慣習
0939デフォルトの名無しさん
2014/09/25(木) 00:25:53.42ID:5/lLb9tLそんなものはTDDとは到底呼べない
と書いたら理解できる?
0940デフォルトの名無しさん
2014/09/25(木) 00:35:41.57ID:HNZsBDsfSolid code の実践について TDD が活用できるという論調があるが
おまえの中にはなにかの根拠があって、双方の親和性を否定するということだよな?
その根拠になった TDD の理解の出所は?
0941デフォルトの名無しさん
2014/09/25(木) 00:59:17.50ID:/kwrJ5S1しかしそういう認定証を偶像のように崇拝することにメリットがあるとも思えないし
慣習でいいんじゃないか
0942デフォルトの名無しさん
2014/09/25(木) 01:55:50.81ID:HNZsBDsf環境や仕事の状況もさまざまだから、そういう考え方があるのは同意できるし拒絶もしない
一方で、俺はこれまで何度か 「手法」 としての TDD の恩恵に与っている自覚があるので
>>932 のように頭ごなしに 「慣習!異論は認めない!」 みたいに言われると違和感を感じる
0943デフォルトの名無しさん
2014/09/25(木) 11:48:21.15ID:u2ir+1nD> 開発工程のテストは基本的にブラックボックステストで、時間と余裕があればコーダーとは別の人が行う性質のもの
という定義をするとき、「開発工程のテスト」以外のテストは
> コーダー本人の趣味と責任において実施するもので、時間と余裕があってもコーダー本人がやるべきもの
という主張?
となると、ホワイトボックステストの位置づけは?
0944デフォルトの名無しさん
2014/09/25(木) 12:48:01.79ID:fB0UYRRr分かりやすく説明してあげよう。
たとえばアプリやモジュールを作るとしよう。
どんなに小さくとも、普通は仕事の単位として
一つの関数だけを作ることはまず無い。
(プライベート関数も一つと数える)
最低でも一つの(パブリック)関数と
そこから呼び出されるプライベート関数
(またはパブリック関数)を作ることになる。
その時だよ、関数をトップダウンで作っていく?
それともボトムアップで作っていく?
TDDを使うっていうのは、トップダウンで作る? それともボトムアップ
動作の確認はデバッグプリントして目視でやる? それともテストコード書いてチェックする?
このぐらいの話なんだよ。
どの方法を使うかは開発者個人がが決める話で、人によっては全部ボトムアップで
作る人もいれば、違う人もいる。場合によってどちらで作るか変えても良い。
「うちの開発は全部ボトムアップでやると決めている」などと言う会社がないように
TDDは開発者個人が勝手に決めることなんだよ。
0945デフォルトの名無しさん
2014/09/25(木) 12:57:31.96ID:u2ir+1nD> このぐらいの話なんだよ。
と思っているお前が
> どうもTDDを理解できない人がいるようだな。
なんだが。
0946デフォルトの名無しさん
2014/09/25(木) 13:01:13.96ID:V7k0k9/o言いたいことがあるなら、ちゃんと言い返せよw
全く無能だな。
0947デフォルトの名無しさん
2014/09/25(木) 13:03:55.51ID:u2ir+1nD0948デフォルトの名無しさん
2014/09/25(木) 13:07:58.42ID:V7k0k9/oお前のほうが理解してないやつだ、で十分な反論になる。
なぜ理由を何も書いてないのにこれで十分な反論になるのかって?
だってそもそも相手が理由を書いてないからw
0949デフォルトの名無しさん
2014/09/25(木) 13:09:16.19ID:V7k0k9/o先に進もうぜw
0950デフォルトの名無しさん
2014/09/25(木) 13:13:27.38ID:u2ir+1nD俺はお前がTDDを理解してようがしてなかろうが、何も困らん。
0951デフォルトの名無しさん
2014/09/25(木) 13:16:20.09ID:V7k0k9/o少なくとも、ID:u2ir+1nDはいいたいことが有るくせに
何も言い返せなかったって事実があるだけのことだ。
この言い返せないという事実のままで、俺は困らんw
0952デフォルトの名無しさん
2014/09/25(木) 13:22:50.50ID:u2ir+1nD0953デフォルトの名無しさん
2014/09/25(木) 13:29:03.76ID:V7k0k9/oだって言い返したい奴が、何も言い返せないでいて、
それ以外の言い返すレスが何一つないのだからw
この状況で俺は困らんw
0954デフォルトの名無しさん
2014/09/25(木) 13:33:49.50ID:u2ir+1nDただ単にお前がTDDを理解していないという事実を指摘したまでだ。
0955デフォルトの名無しさん
2014/09/25(木) 13:38:00.34ID:V7k0k9/oお前は何も言ってないって言われてるんだよ。
なんでレスするのさ?
この状況で俺は困ってないんだから
お前も困ってないなら、レスする必要なくね?w
0956デフォルトの名無しさん
2014/09/25(木) 13:42:55.75ID:u2ir+1nDただ、>>944の説明は間違っていると言いたいだけだ。
0957デフォルトの名無しさん
2014/09/25(木) 13:52:27.25ID:5/lLb9tL全く理解できてないな。
「TDD」がなんの略称か考えてみろ。
で、それぞれの言葉の意味を考えろ。
0958デフォルトの名無しさん
2014/09/25(木) 13:56:55.51ID:5/lLb9tLID:V7k0k9/oが本当に馬鹿なんだと思うが一応指摘しておくと、
結局>>944ではTDDの内容について一切触れていない。
だから、TDDを理解できていないと指摘されている。
理解できていると主張するなら、少なくともTDDについて言及する必要がある。
0959デフォルトの名無しさん
2014/09/25(木) 20:04:14.25ID:aCIY3SmK最初に達成目標を簡単にでも定義しておくことが大切という実例
0960デフォルトの名無しさん
2014/09/25(木) 20:32:05.34ID:IYWLXPmn0961デフォルトの名無しさん
2014/09/25(木) 23:15:25.41ID:I35fUU7Vということは、日曜プログラマは「絶対に」TDDを実践できないということですね
0962デフォルトの名無しさん
2014/09/25(木) 23:27:10.55ID:I35fUU7V頭ごなしに 「慣習!異論は認めない!」 と言わなければならない理由は、TDDでは、どのレベルでどんなテストを書くかをコーダー本人が「勝手に」決めなければならないから
これから自分が打つコードがちゃんと打たれるのか確認するためのテストなんだから
0963デフォルトの名無しさん
2014/09/25(木) 23:27:28.39ID:5/lLb9tLなんで?
0964デフォルトの名無しさん
2014/09/25(木) 23:28:18.96ID:5/lLb9tLだからお前は
TDDが理解できていないって言われてるんだが・・・
0965デフォルトの名無しさん
2014/09/25(木) 23:47:17.12ID:I35fUU7VTDDは、どの定義にも書いてあるけど、自分が打ち込むコードの正しさに「コーダー本人が」確信を得るためのもの
しかし、この定義まで否定するとなると、コーダー一人で完結する環境ではTDDは実践できない
0966デフォルトの名無しさん
2014/09/26(金) 01:54:41.41ID:h5xYqq51議論が時間の無駄になることだけはわかったよ・・・
0967デフォルトの名無しさん
2014/09/26(金) 08:28:44.20ID:fTKEl0JO0968デフォルトの名無しさん
2014/09/26(金) 12:28:46.36ID:nl3/PMyh0969デフォルトの名無しさん
2014/09/26(金) 12:50:06.15ID:8tItaSRz用語を細かく使い分けると謎の被害者妄想が始まる
0970デフォルトの名無しさん
2014/09/26(金) 13:10:27.74ID:6H6eMXnuhttp://gihyo.jp/dev/serial/01/tdd/0002
テスト駆動開発は,小さなステップを繰り返してプログラムの設計と開発を行っていく
ソフトウェア開発手法です。テスト駆動開発は次の3ステップから構成されています。
テスト駆動開発の3ステップ
ステップ1:これから書く機能に対するテストを1つ書き,テストが失敗することを確認する(レッド)
ステップ2:ステップ1のテストを通す最低限のコードを実装する(グリーン)
ステップ3:リファクタリングを行う(リファクタリング)
ステップ1:これから書く機能に対するテストを1つ書き,テストが失敗することを確認する
テスト駆動開発では,まず1ステップ目として,これから書く機能のテストを1つ書きます。
「テストを書く」と簡単に言っていますが,ここでの「テスト」とは,開発者が自分で書く,
プログラムの形で書かれたテスト(テストコード)のことです。
ステップ2では,ステップ1で書いたテストを通す最低限の実装を書きます。
機能が動作するところまで持っていくのがこのステップ2です。
ステップ3:リファクタリングを行う
ステップ2では,テストを通すために最もシンプルなコードを書くことを選択しました。
すると,ステップ2で最低限の実装を書いた時点では,コードに無駄があったり愚直過ぎる
コードだったりと,いくつか直したい点があると思います。たとえばコードの重複です。
0971デフォルトの名無しさん
2014/09/26(金) 13:11:50.64ID:6H6eMXnuやる作業は実装なんですから「開発工程」の中で
やることに決まっていると思いますが、
なんで工程なんか気にするんですか?
0972デフォルトの名無しさん
2014/09/26(金) 14:03:42.89ID:IYT310Aiおまえは変なところの資料を拠り所にして変な解釈してるだけ。
もう少しまともな資料見つけて来い。
0973デフォルトの名無しさん
2014/09/26(金) 14:24:41.53ID:nl3/PMyh0974デフォルトの名無しさん
2014/09/26(金) 14:29:00.79ID:n33Pkj/x線で囲まれた中に人がたくさん入っている
線が見えなければ人を数えることはできない
逆に線が見えすぎるとみんなSingletonのようになって数が無意味になる
でも開発自体には全く支障はない
流行ってることを確認したいという開発と関係ない作業のところで揉めてるだけ
0975デフォルトの名無しさん
2014/09/26(金) 14:49:11.97ID:nl3/PMyh(もちろん流行ってない)
0976デフォルトの名無しさん
2014/09/26(金) 15:13:34.34ID:6H6eMXnuお前が見つけてこいよーw
見つけられないから
わーわー喚いてるんだろーw
0977デフォルトの名無しさん
2014/09/26(金) 22:51:50.40ID:gXbCnOyXステップ1 と ステップ2 の順序が前後しても問題ないんですよね‥
0978デフォルトの名無しさん
2014/09/26(金) 22:52:03.22ID:zO2qKBmh> テスト駆動開発は,小さなステップを繰り返してプログラムの設計と開発を行っていく
> ソフトウェア開発手法です。
TDDは小さなステップを繰り返して設計と開発を行っていく手法なので、
ウォーターフォールのように設計フェーズと開発フェーズが分かれていると
本人の趣味と責任において勝手に実施しようとしても無理
0979デフォルトの名無しさん
2014/09/26(金) 23:23:12.88ID:R93KpJTK肝心の目的を書いてくれないとこまる
0980デフォルトの名無しさん
2014/09/26(金) 23:26:54.67ID:R93KpJTKソフトウェア開発工程
0981デフォルトの名無しさん
2014/09/26(金) 23:35:16.04ID:6UoHfY/bお前ばかなの?
TDDは開発フェーズ内でやるものだって
みんな言ってるだろ。
0982デフォルトの名無しさん
2014/09/26(金) 23:39:39.80ID:zO2qKBmhお前ばかなの?
アジャイルじゃなかったら開発フェーズで設計できないだろ
0983デフォルトの名無しさん
2014/09/26(金) 23:54:20.60ID:R93KpJTKTDDは、開発工程の中であろうが、開発工程とは無関係であろうが、コーダーの趣味で好きなように行う慣習
こまめなエディタの保存と同じ位置づけ
TDDが開発工程の一部ではないという一番の根拠が、TDDで作るテストは定められた成果物なのかどうか
結論としては、emacsの~ファイルと同様の、コーダーの趣味で勝手に入れたり消したりする類のもの
0984デフォルトの名無しさん
2014/09/26(金) 23:57:40.29ID:zO2qKBmh最初にテスト書いたって設計に一切反映されないならTDDじゃないよ
0985デフォルトの名無しさん
2014/09/27(土) 00:00:42.53ID:AEoQ5euzTDDのテストは、自分がこれから打ち込むコードが自分の意図したとおりのものなのか「本人が安心するために」書くものだから、基本的に設計とは関係ない
0986デフォルトの名無しさん
2014/09/27(土) 00:04:34.04ID:0IvxL3Y7>>970の引用一行目に「設計」って書いてあるの読める?
もし異論があるなら否定するソースを持って来てね
0987デフォルトの名無しさん
2014/09/27(土) 00:17:57.47ID:T5Eliw4Aその引用元が間違ってる
そもそもの、TDDを行う目的の記述がないから
ちなみに 普段はトンデモなwikipediaにすら
TDD encourages simple designs and inspires confidence.
ときちんと「コーダーの確信のために」と書いてあり、これを読むと、むしろコーディングの最中に設計を行わないためにTDDが役立つように書いてある
0988デフォルトの名無しさん
2014/09/27(土) 00:21:48.99ID:0IvxL3Y7その短い文章の中でさえdesignsに言及されてる件
0989デフォルトの名無しさん
2014/09/27(土) 00:25:19.35ID:T5Eliw4Awikipediaを読むと、「simple design」は「TDDでテストを書くことによってデザインしないこと」の意味にとれるが
0990デフォルトの名無しさん
2014/09/27(土) 00:57:28.42ID:0IvxL3Y7そのWikipediaから引用
> By focusing on writing only the code necessary to pass tests, designs can often be cleaner and clearer than is achieved by other methods.
> Test-driven development offers more than just simple validation of correctness, but can also drive the design of a program.
TDDによってプログラムのデザインが綺麗になるとか書かれてますけど
いったいどこを読んでるの?
0991デフォルトの名無しさん
2014/09/27(土) 01:10:06.48ID:T5Eliw4AThere are various aspects to using test-driven development, for example the principles of "keep it simple stupid" (KISS) and "You aren't gonna need it" (YAGNI).
という「設計する」とは逆のことを目指した結果、
By focusing on writing only the code necessary to pass tests, designs can often be cleaner and clearer than is achieved by other methods.
となり、
Test-driven development offers more than just simple validation of correctness, but can also drive the design of a program.
という利益が得られると書いてある
だから、TDDはKent Beckの主張するとおり、
TDD 「encourages」 simple designs and 「inspires」 confidence.
というコーダーの心の問題の解決を目指すものであり、ゆえに、工程や設計とは別の場所に位置する趣味であり慣習
0992デフォルトの名無しさん
2014/09/27(土) 01:17:00.70ID:0IvxL3Y7何言ってんだお前
0993デフォルトの名無しさん
2014/09/27(土) 01:17:47.38ID:Mq6zBLm50994デフォルトの名無しさん
2014/09/27(土) 01:19:28.64ID:T5Eliw4Akeep it simple stupid.
馬鹿でいろ
You aren't gonna need it.
よけいなことすんな
0995デフォルトの名無しさん
2014/09/27(土) 01:20:26.49ID:T5Eliw4A「エディタをこまめに保存する」はコーダーの趣味や慣習でしかないけど、これを採用していない企業があったら知りたい
0996デフォルトの名無しさん
2014/09/27(土) 01:27:04.36ID:z3mF+ujQそういうのはきょうびのエディターなら自動でしてくれる‥
0997デフォルトの名無しさん
2014/09/27(土) 01:27:25.24ID:Mq6zBLm5業務工程に何ら変化を与えずコストもリスクもない行為を比較対象に並べられるお前の神経を疑う
0998デフォルトの名無しさん
2014/09/27(土) 01:28:31.61ID:0IvxL3Y7普通に考えれば、
テストが書きやすいコードはシンプルな設計であることが多いことから、
テストを最初に書く事でシンプルな設計になり(KISS)、
また開発しながら設計するから実際に使わない機能は追加されない(YAGNI)
という話だと読めるだろ
じゃあ訊くが、TDDが仮にコーダーの心の問題の解決を解決する趣味だとして、
それでどうして設計が改善するわけ?
0999デフォルトの名無しさん
2014/09/27(土) 01:36:03.61ID:Zga4OGJtドカタの世界の話を持ち込むなよ
1000デフォルトの名無しさん
2014/09/27(土) 01:39:24.26ID:Zga4OGJtExcel方眼紙を埋めるのを設計だと思ってるからな
そりゃTDDやってもExcel方眼紙は変化しない罠
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。