もり ひろゆきの日々是勉強

日々思ったことやIT関連のメモなどをのほほんと綴っていきたいと・・・。(^^;

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  1920  : 記事  12  : コメント  16376  : トラックバック  163

ニュース

Microsoft Innovation Center

MICでは各種無償セミナーを実施しています。
こちら
そして、スピーカーは僭越ながら私がお話させていただいております。
一生懸命努めさせていただきますので、よろしければご参加くださいm(__)m

平行運用はじめました。

  • 現在、こちらのほうで平行運用を行っております。

自己紹介

  • もり ひろゆき(森 博之)と申します。

    極東IT Engineersというコミュニティの代表です。

    本業は東京でソフトウェア開発のお仕事をしております。いわゆるDeveloperですね(^^;

    仕事ではVB,C#といろいろと渡り歩いてはおりますが、主に.NET系の業務アプリの開発が多いです。

    というか仕事となったら必死で何でも勉強しますが(^^;;;;

    最近ではMicrosoft Innovation Centerで講師もさせていただいておりますが、撃たれ弱いのでお手柔らかにお願いしますm(__)m

    まったく関係ありませんが、たこ焼き機も持っています。 関西人です。

    エントリの内容は私が個人的に収集した情報を元に書いていますが、あくまで個人的なメモ用途ですので内容の正確性を保証するものでありません。あらかじめご了承くださいm(__)m

Microsoft MVP

MCP


  • 70-316 Developing and Implementing Windows-based Applications with Microsoft Visual C# .NET and Microsoft Visual Studio .NET

    70-536 Microsoft .NET Framework 2.0 - Application Development Foundation


  • MCTS: :.NET Framework 2.0 Web アプリケーション
    70-528 Microsoft .NET Framework 2.0 - Web-based Client Development


  • MCTS: Microsoft SQL Server 2005
    70-431 Microsoft SQL Server 2005 - Implementation and Maintenance

Wankuma MVP


  • Wankuma MVP for OOO(= Original Object-Oriented)

iKnow!

etc.

  • 人気ブログランキング - もり ひろゆきの日々是勉強

    スカウター : もり ひろゆきの日々是勉強

    あわせて読みたい

書庫

日記カテゴリ

リンク

ネタ元:

シャノンさんとこのてすとふぁーすと  http://blogs.wankuma.com/shannon/archive/2007/07/26/87133.aspx

επιστημηさんとこのてすとせかんど http://blogs.wankuma.com/episteme/archive/2007/07/26/87160.aspx

囚人さんとこのてすとさーど http://blogs.wankuma.com/shuujin/archive/2007/07/26/87171.aspx

一番最初に言うと私はテストファーストやテスト駆動開発を推進しているワケではありませんが、ちょっと気になる記述があるのでちょっと誤解を恐れず(^^; 順番に質問させていただきます(^^;

まず、επιστημηさん

・って釘刺しとけば誰だってテストにパスするよう注意してコード書くやん。

それって、仕様書に書いているから、バグは出ないってことですか?

・コーディングの最中に脳内テストやってるってことやん。

・だからちょっとずつ書いてはテストってやんなくても実装終了時点でえぇやん。

んー、つまりは設計せずにいきあたりばったりで書いても脳内でテストしているから大丈夫ということでしょうか?

・何をテストするかをあらかじめ決めておけばそれだけでバグの抑制効果は十分発揮されるやん。

でも、それをプログラムで書けば、そのテストが何度でも簡単に実行できますよね?

次に中さん

・テストコードを先に書くじゃなくってテストケースを先に書くでしょう?
でも実装がすべてあほぼんでもかける実装int add(x,y)とかならまだしも、実体はそうじゃないでしょ?
分割もするでしょ?

それって行き当たりばったりで仕様を決めていい理由にはならないですよね?

それが故に、その場所で何が実現されるべきことなのかを明確にしておく必要があるんじゃないでしょうか?

自分でも気がついていない明確になっていないことがテストを先に実際に作ることで明確になることもあるように思いますが・・・。

・それにプログラム設計書しかもメソッド単位なんて書いたことないし、かけないし、非現実的ですよ。

メソッド単位に書く必要はないと思いますよ。

むしろ実現できないといけない機能について、その仕様がきちんと記述されているか、つまり漏れが確認できるように思いますが・・・。 

おまけに何度もテストできるからデグレもすぐ気がつきますし・・・。

それにテストコードは1テスト100行もざらですが、テスト仕様書は1行くらいで俯瞰できる。
ブレークダウンしていけばいいならば、リュウドとしてコードとテストコードは同じになるはず
じゃ実装は不安定なものだから先にやってリスクをつぶしてからテストすりゃいいんです。
テストの前提が崩れるなんてことざらでしょ

それって仕様なんてちゃんと決められないってことなんでしょうか?(^^;

それにクラス実装がなくてコンパイルエラーになることの確認なんておいらはいやだ。

好きか嫌いかはともかくとして、テストはやらないといけないものなんだって認識はあるワケですよね?

方法としてプログラムでそれをするのがイヤだってことですよね? 

プログラムで組むメリットはご理解した上でってことですよね?

そのメリットと手間がトレードオフにならないってことでしょうか?(^^;

で、次に囚人さん

・「テストドリブンによりコードは全部自動テストが可能。従って、いつでもリファクタリングできる」という事を免罪符にして、汚いコードを生産する。

この時点でテスト駆動ではないんですけどね(^^; 

いつでも出来るではなく、書いた後にすぐにリファクタリングするのがテスト駆動でそれが出来てない時点でそれはテスト駆動開発ではないんですけどね(^^; 

単にコードでテスト書いてるだけですね(^^; それは。

・「テストコードがあるからコードレビューは必要ない」というトンデモ理論を持ち出して、コードレビューを省いてしまう。

コードレビューが必要ないとは言いませんが、テスト駆動開発したからコードレビューが必要ないというのは確かに間違いですね。 ただ、これはテスト駆動開発とは別問題ですね。 必要ない理由にはならないと思います。

・テストコードはテストできない。

テスト駆動開発ではまずテストをテストするとあります。 なのでこの認識は間違いだと思いますよ(^^;

・そして、テストファーストの最も大きなデメリット。それは「ぶっちゃけ、しんどすぎる」。

んー、プロジェクトの規模などにもよりますが、慣れるとそうでもないと思うんですけどね(^^;

 

こう、否定される方のいろんな意見を聞いても、こう「そうだな」と納得ができないんですよね(^^;

すんません、ややこしいこと書いて(^^;

投稿日時 : 2007年7月26日 20:30

コメント

# re: テスト駆動開発。 2007/07/26 20:41 シャノン
よ、頑張れ大将!

# re: テスト駆動開発。 2007/07/26 21:15 えムナウ
テストはセンスでありこうすれば間違いのないテストコードが書けるという方法論を構築するのは難しい。

public int Add(int a, int b)
このメソッドに対してどのようなテストコードを用意するのか(パズルとかクイズとして考えるのではなく実際の業務でね) でもセンスが問われますよ。

# re: テスト駆動開発。 2007/07/26 21:29 えムナウ
たとえばこのページを見てください。
テストはセンスだってわかるでしょ。
http://www.atmarkit.co.jp/fdotnet/special/tdd/tdd_01.html

# re: テスト駆動開発。 2007/07/26 21:32 ひろえむ
#シャノンさん
いやいや、あーたもですよ(^^;

#えムナウさん
まぁ、確かにブラックボックステストなんてのはセンスが問われるところもありますねー。

でも、テストファーストがいけない・テスト駆動開発がいらないっていう理由にはならないですよね?

実際にやる・やらないはともかく、必要ないと言うにはなんだか納得できる論拠を聞きたいところだなぁと。

# re: テスト駆動開発。 2007/07/26 21:54 επιστημη
> テストファーストがいけない・テスト駆動開発がいらないっていう理由にはならないですよね?

です。中さんの主張は「がちがちにテストコードを書いてから実装せんでもええでしょ」だと理解しました。

> ・って釘刺しとけば誰だってテストにパスするよう注意してコード書くやん。
> それって、仕様書に書いているから、バグは出ないってことですか?

違います。テスト仕様があればそれを実装のよりどころにできるのだから
自然とテストにパスするコードを実装するだろう、と。
"バグが出ない"はあり得ません。

> ・コーディングの最中に脳内テストやってるってことやん。
> ・だからちょっとずつ書いてはテストってやんなくても実装終了時点でえぇやん。
>んー、つまりは設計せずにいきあたりばったりで書いても脳内でテストしているから大丈夫ということでしょうか?

違います。テスト仕様に基づいて設計を強化できます。「テストしなくていい」ではなく「そんなに早期にテスト"コード"を書かなくてもいいんでね?」です。

> ・何をテストするかをあらかじめ決めておけばそれだけでバグの抑制効果は十分発揮されるやん。
> でも、それをプログラムで書けば、そのテストが何度でも簡単に実行できますよね?

できます。繰り返しますが「テストしなくていい」ではありません。
中さんは「そんなに"早期に"テストコード書くのが現実的/効率的か?」と疑問を投げかけてはると思ってます。

僕は詳細設計といえどもさほどに厳密にインタフェースを定めることはありません。もちろん外部とのインタフェースはきちんと決めますが、内部でごにょごにょやる分にはあーでもないこーでもないと調整をくり返します。そのたんびにテストコードいぢくってらんないす。

アリの這い出る隙もないよな設計書があるなら完璧なテストコードを事前に用意できるでしょうが、そんなんでなきゃ実装できない輩はプログラマじゃありません。ただのキーパンチャーです。

テストが書けるようになったら書く。テストが書けるまで実装すべからず。
ではないだろう、と。


# re: テスト駆動開発。 2007/07/26 22:19 えムナウ
システム保守の改造や環境の変更の確認をする「レグレッションテスト」
運用形態を考慮してテストする「運用テスト」
要求仕様を満たすための「受け入れ試験」
全体システムとしての動作を確認する「全体・システムテスト」
基本設計の動作を確認する「結合テスト」
単体の動作を確認する「単体テスト」

テストドリブンの定義ってどこから?

まぁ。
この辺お話をきちんと理解しないとテストドリブンやテストファーストのコードもかけないと思うんですがね。
つまり私としては方法論よりもテストのことをちゃんと知っているのか問いたいわけです。
http://www.atmarkit.co.jp/fjava/devs/redge08/redge08.html

# re: テスト駆動開発。 2007/07/26 22:19 ひろえむ
#επιστημηさん
まず、誤解があるので一つ言うと、テスト駆動開発で作成したテストコードだけですべてのテストが完了するとは思っていません。

ただ、少なくとも満たさなければいけない条件であったり仕様であったりは決まっているワケですよね? そうでないと作るモノが決まっていないということになるワケですから。
テスト駆動開発ってそこに効いてくるんじゃないでしょうか?

また、必ずしもすべてのテストを書き上げてからなんて言う杓子定規の対応でなくてもいいとも思います。 一部分だけテスト駆動開発で作るというような対応だってありじゃないかなと思いますし。

優先順位としてはテストが何度も必要となるところ・・・仕様変更が行われたり、何度も追加・変更される箇所から順に作成すればいいと思います。

それを踏まえて・・・

>中さんの主張は「がちがちにテストコードを書いてから実装せんでもええでしょ」だと理解しました。

がちがちにテストコードを書く必要があるかないかはテストする場所にもよるので必要性に応じてということだと思います。
ただ、同じテストを何度もやるならプログラムを書いたほうが効率はよさそうな気がしますね。


>違います。テスト仕様があればそれを実装のよりどころにできるのだから
>自然とテストにパスするコードを実装するだろう、と。

これはテスト駆動であろうとなかろうと最初から作る必要のあるロジックを作るワケなので、それがテストにパスするコードになるはずですが、必ずしもそうはならないですよね?

>「そんなに早期にテスト"コード"を書かなくてもいいんでね?」です。
となると逆に言うと「別に早期にテストを書いてもいいんでね?」ですよね?

>僕は詳細設計といえどもさほどに厳密にインタフェースを定めることはありません。もちろん外部とのインタフェースはきちんと決めますが、内部でごにょごにょやる分にはあーでもないこーでもないと調整をくり返します。そのたんびにテストコードいぢくってらんないす。

ですよね。 その外部のインターフェースをテスト駆動でテストを作っておけば、ごにょごにょやっているときに出来た不具合を早期に発見することができるワケですよね?

何も内部でどうやってるかまでテストする必要はなくて、外部からほしい情報がちゃんと返されているかをテスト駆動開発ではテストするんだと認識しています。

まぁ、場合に寄ればその内部もテストする場合もあるでしょうけど・・・。

そうした上で
>中さんは「そんなに"早期に"テストコード書くのが現実的/効率的か?」と疑問を投げかけてはると思ってます。

というのは、テストを後回しにするということは、バグの停滞時間がテストが後になればなるほど長くなるワケですよね?

バグの停滞時間が長ければ長いほど、修正がどんどん大変になるので、先にテストをしてバグの停滞時間を短くしようという考え方がテスト駆動開発だと認識しています。

つまり、テストを後回しにするとデバッグがどんどん大変になるよー、だから先にしようねー。 で、先にテストを作っておくとその動作がどうあるべきかちゃんと認識している証明にもなりますよーってことなんだと理解しています。

問題提起はともかく、「必要ない」という結論にどうやったらなるのかに非常に興味があったんですよ。

# re: テスト駆動開発。 2007/07/26 22:21 Kazuki
> そんなんでなきゃ実装できない輩はプログラマじゃありません。ただのキーパンチャーです。
FizzBuzz問題とかにもあるように、プログラム書いて考えるよりもExcelに書いて考えるほうが得意な人がいっぱいいますよね(;_;

私は、もやっと考えてコードにしてみて固まったらUnitTest書いて動きを確認ってパターンが多いです。
エピさん派っぽいです。

逆に、バグつぶしの時とかは必ず再現するテストケース書いてからバグ潰しに入ります。


# re: テスト駆動開発。 2007/07/26 22:26 ひろえむ
#えムナウさん

それは今回の議論とは別の問題ですね(^^;

私が疑問に思っているのは
「なぜ、テスト駆動開発が必要ないのか?」
なので
「テスト駆動開発でどこまでテストするのか?」
もしくは
「テストのことをちゃんと知っているのか?」
という議題は論点がずれていますので、申し訳ありませんが別の機会にさせて下さい(^^;

# re: テスト駆動開発。 2007/07/26 22:51 επιστημη
> その外部のインターフェースをテスト駆動でテストを作っておけば、ごにょごにょやっているときに出来た不具合を早期に発見することができるワケですよね?

です。
インターフェースがほぼfixされてんならテストが書けますし、書きます。
テストファースト原理主義じゃねーんだから、書けるところから書けばいい(書けるのに書かないんじゃないよ)。テストのためにインタフェースを無理くり決めるこたねーだろと。

"何を差し置いてもテストファースト"じゃなくて、"そこそこテストファースト"でもいーぢゃん。くらいのノリなんです。


# re: テスト駆動開発。 2007/07/26 22:57 ひろえむ
#επιστημηさん
>テストファースト原理主義じゃねーんだから、書けるところから書けばいい(書けるのに書かないんじゃないよ)。テストのためにインタフェースを無理くり決めるこたねーだろと。

うん、それには賛同できます。 もちろん、私も「何が何でも」というつもりはないんですが、「必要ない」とは思わないので・・・。

また、インターフェースがFixする・しないはともかく
「どういう動作をしていて、どういうものが帰ってきてほしい」
ってのが決まっていたら、多少仕様が変更されたところで、その要求がなくなるまではテストコードの使い回しができそうな気がしますよ(^^;

# re: テスト駆動開発。 2007/07/26 23:45 えムナウ
ひろえむさんが反論していた人についてはたいていの方がテスト仕様書もテストケースも必要とあらばテスト用のプログラムも否定はされていないんだと思いますよ。

で、いらないのは何かというとかっちりした方法論に基づいてこうしなきゃいけないって強制なのかと。

テストドリブンでは要求仕様をかっちりきめて基本設計をきちっとやらなきゃインターフェースなんて決まってこないです。
エクストリーム・プログラミングやアジャイルソフトウェア開発手法ってのは要求仕様や基本設計があったあとで、実装技術として成り立つ理論なんです。ミクロ的に言うとウォーターフォールなんです。
要求分析や基本設計・実装・過去との整合性のチェックを繰り返し行っていくことで変化に対応しようというわけなんです。

テストドリブンが実装技術として成り立つ理論であれば、そのプログラムの重要度や複雑性や再利用度によってどのレベルのテストをすべきか動的に考えていく方法論もあったほうが効率的だと思いますよ。


# re: テスト駆動開発。 2007/07/27 0:26 ひろえむ
#えムナウさん
>ひろえむさんが反論していた人についてはたいていの方がテスト仕様書もテストケースも必要とあらばテスト用のプログラムも否定はされていないんだと思いますよ。

んー、もちろんそれは理解していますよ。

ただ、はっきり「テスト・ファースト(テスト駆動開発)は必要ない」とおっしゃっておられたので、その論拠が知りたかったのです。

>で、いらないのは何かというとかっちりした方法論に基づいてこうしなきゃいけないって強制なのかと。

んー、テスト駆動開発はそれ自体で開発プロセスすべてを置き換えできる技術ではないですよね?

私は、テスト駆動開発そのものは、あくまで、実装方法のひとつとして認識しています。

なので、すべてをそのまま置き換えれられるとは当然思っていません。

ゆえに部分的に実行するってのもありだし、できるのであればすべてのテストを実装するってのもそれはそれでありだと思います。

もちろん、選択肢として最終的に「やらない」ってのもあるとは思いますが、やれる場所・時間があるのであれば、やったほうがいいとは思います。

>テストドリブンでは要求仕様をかっちりきめて基本設計をきちっとやらなきゃインターフェースなんて決まってこないです。

んー、インターフェースが決まらなくても実現しないといけないことは決まっていないとプログラムなんて作れないじゃないですか。

すべてをかっちり決める必要があるのではなく、作る場所はかっちり決まっている必要があるでしょう。

>エクストリーム・プログラミングやアジャイルソフトウェア開発手法ってのは要求仕様や基本設計があったあとで、実装技術として成り立つ理論なんです。ミクロ的に言うとウォーターフォールなんです。
>要求分析や基本設計・実装・過去との整合性のチェックを繰り返し行っていくことで変化に対応しようというわけなんです。

それはわかりますが、話がそれている気がします。
今はとりあえず
「テスト駆動開発が必要ない理由」
が知りたいので、
「開発プロセス内におけるテスト駆動開発の適用方法」
についてはまた別の議論だと思います(^^;

ただ
>テストドリブンが実装技術として成り立つ理論であれば、そのプログラムの重要度や複雑性や再利用度によってどのレベルのテストをすべきか動的に考えていく方法論もあったほうが効率的だと思いますよ。

これは確かに私もそういった方法論があれば非常に効率的だなあと思います。

ただ、これって結局プロジェクト毎に基準を決めて・・・って感じになるのかなぁって気もしています。

テストはカバレッジ○%程度の網羅とデータフローパステストをするとか。

ってイカンイカン。えムナウさんの話がおもしろくて話がそれちゃいましたよ(^^;

# re: テスト駆動開発。 2007/07/27 1:12 はつね
テスト駆動開発が必要ないとしたら、それを代替するような手法なりがあるという事なのだと思います。しかし同時に、その手法が要らない理由として「テスト駆動開発があるじゃないか」という事も成り立つように思います。なんだか禅問答のようになってしまいますが、そんな感じのことなんじゃないかと。

私としてはテスト駆動開発は、ゼロから作り上げていくときよりもある程度動いた後の変更とか仕様追加とかのときに楽ができる(というと語弊があるでしょうし誤解する人もいるでしょうが、ポジティブな楽さということで)ものだと考えています。もちろん、これはプロジェクトの状況や関わっている立場によって違うとは思いますが、テスト駆動開発をして良かった感触はありますが、して不味かったという感触がありませんので「必要ない」とは思えないというのが正直なところです。

# re: テスト駆動開発。 2007/07/27 2:28 えムナウ
>>テストドリブンが実装技術として成り立つ理論であれば、そのプログラムの重要度や複雑性や再利用度によってどのレベルのテストをすべきか動的に考えていく方法論もあったほうが効率的だと思いますよ。
>これは確かに私もそういった方法論があれば非常に効率的だなあと思います。
結局 ひろえむさんが反論していた人はみんな自分のことで書いているんですよね。
したがって自分の判断で重要度や複雑性や再利用度によってどのタイミングでどのレベルのテストをしたいか決めたい人たちなんだと思いますよ。

なので「結局プロジェクト毎に基準を決めて」っていう複数人数を巻き込んだ話じゃないんだと思います。
場合によってはテストドリブンは自分一人ででもできますから。

つまり、全システムの開発形態に関して一般的にテストドリブンはいらないと言っているわけではないと思います。


# re: テスト駆動開発。 2007/07/27 8:24 ひろえむ
#はつねさん
>私としてはテスト駆動開発は、ゼロから作り上げていくときよりもある程度動いた後の変更とか仕様追加とかのときに楽ができる

そうなんですよね。 ここら辺の話をすると誤解するケースもあると思いますが、当然いいこともあれば犠牲にすることもあるんですが、それをトレードオフにしたとしても、よさそうに思えるんですよね。

とはいえ、私の場合、所詮フリーランスのエンジニアなので現場のリーダーの方針には逆らえないので、意見が取り入れられるのであれば推奨程度なんですけどね(^^;

#えムナウさん

>したがって自分の判断で重要度や複雑性や再利用度によってどのタイミングでどのレベルのテストをしたいか決めたい人たちなんだと思いますよ。

んー、つまり個人の価値観ってことなんでしょうか? それは私も同じですし、えムナウさんだって同じですよね?

その上で私は「必要ない」と言うほどのダメな方法論だとは思えないんです。

むしろ、今の段階では「やれるならばやったほうがいい」と思う方法論だったりするのです。

>なので「結局プロジェクト毎に基準を決めて」っていう複数人数を巻き込んだ話じゃないんだと思います。
>場合によってはテストドリブンは自分一人ででもできますから。

プロジェクトだって一人でもできるプロジェクトはあります(^^;
プロジェクトはあくまで仕事の規模単位であって仕事量でも人数ではありませんよ(^^) 

ただ、えムナウさんのお話を聞いて、プロジェクトの中で「どこまでテストするか?」という基準がないと毎回判断に迷うので、基準を決めておいたら、毎回判定しないでいい分、ちょっと楽になるのかなと思ったんです。

もちろん、必要に応じてテストを強化したりってことは必要なのかもしれませんが・・・。

ただ、通常はテスト仕様書を作成するでしょうから、その粒度でテストが記述できるならばそれでいいと思いますよ(^^)


# re: テスト駆動開発。 2007/07/27 9:13 中博俊
テストファースト=TDD
じゃないよ?
微妙にそのあたりの認識でずれてる感じがする。
カバレッジについては100or0です。
100(クロージャの性で100点を真実取ることはできないけど)じゃなきゃ0と同一です。

# re: テスト駆動開発。 2007/07/27 9:33 ひろえむ
#中さん
>テストファースト=TDD
>じゃないよ?
はい、理解していますよ(^^;

ただ、TDDはテストファーストの進化系ですし・・・。

テストファーストだけだと必要なくてテスト駆動開発は必要ってことでしょうか?(^^;

>カバレッジについては100or0です。
>100(クロージャの性で100点を真実取ることはできないけど)じゃなきゃ0と同一です。

んー、必ずしもってことはないと思いますが・・・(^^;

# re: テスト駆動開発。 2007/07/27 9:38 片桐
カバレッジについて100or0は同意。
99%終わったときに残り1%のせいで手戻り~なんてことがあるかもしんないし(ありえないと言い切れないところがテストの怖さ)
って、↑のことも、えむナウさんがお話されていた「どのテストなの」というくくりによって大きく変わる部分があるだけに話がややこしくなってるカンジはします。

単体テストは、それこそ、こまかなロジックレベルでの確認が当たり前だし、ホワイトボックステストも、テストコード作ってそのテストコードのコードレビューと一緒にテストケースやテスト仕様、確認項目についてリーダーさんや設計者さんとつめておくのは後々のための定石だと私は考えてます。一番根底を成す部分、部品のテストですもん。

結合や総合、インフラや検収だとまた違ったアプローチで、「このテストはこういう意味があって、こういう結果になることが目的である」ことを踏まえて準備していかないといけないから全く別のお話になっちゃう気もしてますけれどね……

結局のところ、このねたって単体テストのお話でよいんでしょうか(^^;
オオボケですみませんです。


# re: テスト駆動開発。 2007/07/27 9:44 中博俊
少なくとも私の中では別物です。
いや別ではないかもしれないけど(^^;;
コードによるテストの有用性は否定しませんが、テストを先に書く意味はないと思っています。
出来上がりが同じなんだから、効率よくやればいいです。
あと、テストしやすいような構造ってのもきらいで・・・これをしないと100点取れないのも・・・おっと長くなる(^^;;

そう。UT領域>つぐさん

# re: テスト駆動開発。 2007/07/27 10:12 片桐
>なかせんせ
テストしやすい構造? んー、それはナンセンス本末転倒ってやつだと思うので好き嫌い以前かも(笑) 私だったらレビュー段階で却下するw 目的はテストすること、じゃなくて、規約や標準があるならそれにのっとった形でプログラムコードを作って、一番肝心なのは「動作が仕様を満たす事」なんですもん。テストはそれを証明する手段であって目的ではないし。

単体テストって「こうやったらこうなる」の繰り返しで、期待したとおりに100%なったよーん、を証明すればコンプリートだから、必要なのは「結果」だけ。後はいかにこれを効率よくやるか、どんな方法でやるか、その部分がプログラマの経験だったり知識だったり発想だったりで千差万別になるだけだしぃ。

単体テストをネタにすると、片桐はめちゃしゃべるぞ<おいこらまて

# re: テスト駆動開発。 2007/07/27 10:27 ひろえむ
#片桐さん
えーっと、しつこいようですが「テスト駆動開発・テストファーストは必要ないのか?」ということです。

繰り返しになりますが、「テスト駆動開発ではどこまでテストするの?」という議題はまた別問題と思っています。

ややこしくなるので、それは別の機会に・・・^^;

あくまで、私がここでお話しているのは
「何でテストファースト・テスト駆動開発は必要ないの?」
ってことです。

別問題であることを踏まえてコメントしますと・・・

>カバレッジについて100or0は同意。
>99%終わったときに残り1%のせいで手戻り~なんてことがあるかもしんないし(ありえないと言い切れないところがテストの怖さ)

もちろん、そういったケースもあるでしょう。 

だからといっても100or0は同意できません。 あまりにも話が極端すぎる気がしますよ(^^;

いずれも必ず100を保証できるお話になっていませんよね?

もちろん、極力100にすべきこと(もしくは近づけること)は理解していますが、絶対的に100になるかというとそんなケースばかりではないと思います。

>結局のところ、このねたって単体テストのお話でよいんでしょうか(^^;

違います。 テスト方法の話ではありません(^^;

なので、ややこしくなっちゃうのでその件については、別の機会にさせて下さい(^^;

#中さん
>少なくとも私の中では別物です。
>いや別ではないかもしれないけど(^^;;

別ではないですねー。一部ですから(^^;

>コードによるテストの有用性は否定しませんが、テストを先に書く意味はないと思っています。
>出来上がりが同じなんだから、効率よくやればいいです。

んー、同じではないという話をずっとしていたと思うんですが・・・(^^;;

まず、直接的なメリットとしてはテストを先に書くことで、動作の不明瞭な部分を確認することができます。

VS2005ではありませんが、Eclipseだと未定義のメソッドはスタブを作ってくれたりするので結構便利なようです。

次にテストをプログラムで書いているので繰り返し同様のテストができるため、デグレを起こした際にはすぐに見つかるためバグの停滞時間が短くなります。

また、テストを先に作成しておくと追加・変更が入った場合、またリファクタリングする場合に従来の使用が満たせているか確認しながら製造ができるので、テストを記述した部分に関しての品質を保証しやすいなどなど。

逆に後からテストするメリットって何があるでしょうか?

>あと、テストしやすいような構造ってのもきらいで・・・これをしないと100点取れないのも・・・おっと長くなる(^^;;

んー、テストしやすい構造っていうのはモジュールの独立性・移植性が高いってことだと思うのですが・・・。

# re: テスト駆動開発。 2007/07/27 10:30 囚人
出遅れ気味ですが。

結局これって「効率よく開発がしたい」に尽きると思うんですが、テストファーストやドリブン、或いはテストコードを用意しておく事が必ずしも「効率よい」とは思えないんですよね。

開発中に何度も自動テストを実行したいがために早期にテストコードを作成するようですが、なんで何度もテストをする必要があるのでしょうか。人間は完璧に先を見通せないからですよね。仕様が途中で変わったり、リファクタリングしたり、他システムとのインターフェースが上手くマッチしなくて辻褄あわせたり。

そして、仕様が変わる事によって、外部インターフェースも変わったりしますよね。単純な例では、メソッドに引数が 1 個増えたり。そのメソッドのテストコードが 100 個あったら、100 個のテストコードを修正しないといけません。それが面倒なので、メソッドの変更ではなくメソッドの追加にしたり。もっと酷ければ、100 個のテストコードを削除したり。たかがメソッド 1 個の修正なのにテストコードの存在が負担になります。

従って、テストファーストどころか自動テスト手法自体、使いどころがおかしければ非効率だと思ってます。仕様変更に強いどころか、テストコードの存在のせいで変更に臆病になってしまいます。

なので、自動テストがしたいなら、実装がほぼ終わりこれ以上変更の余地がない時期にすべきかなぁとか思ってます(これが効率良いのかどうかは分かりませんが)。ファーストなんて無駄すぎます。テストコードがお荷物です。

究極、デバッグやテストなんて無しで済ませたい。コードを読んでバグがない事が分かれば良いんです。ま、コレは戯言ですが^^;


# re: テスト駆動開発。 2007/07/27 10:33 中博俊
できあがってくる成果物は同じですよ。
同じでなければ意味はないです。
inもoutも同じで、pの手法じゃないの?

# re: テスト駆動開発。 2007/07/27 10:38 ひろえむ
#片桐さん

レスが早すぎ(^^;

>テストしやすい構造? んー、それはナンセンス本末転倒ってやつだと思うので好き嫌い以前かも(笑) 私だったらレビュー段階で却下するw 目的はテストすること、じゃなくて、規約や標準があるならそれにのっとった形でプログラムコードを作って、一番肝心なのは「動作が仕様を満たす事」なんですもん。テストはそれを証明する手段であって目的ではないし。

それは間違っているように思います。

もちろん、最終的には”仕様を満たすこと”は最低条件であるだけで、品質を保証することにはつながりません。
テストをするのは、バグを見つけるためではありません。 
品質を保証するために行う動作です。 
なのでテストしやすい構造というのは、すなわち品質を保証しやすい構造なのです。

品質を保証しやすい構造につくるのは当然行うべき行為だと思います。
それがナンセンスだとは思わないですね。

プログラムなんてのは仕様通りに動けばいいとおっしゃるなら話は別ですが、テストがやりにくい→つまりは品質が保証しにくい→メンテナンス性の高くないということになるのではないでしょうか?

ゆえに、それは納得できないですねー。

>単体テストって「こうやったらこうなる」の繰り返しで、期待したとおりに100%なったよーん、を証明すればコンプリートだから、必要なのは「結果」だけ。後はいかにこれを効率よくやるか、どんな方法でやるか、その部分がプログラマの経験だったり知識だったり発想だったりで千差万別になるだけだしぃ。

この時点でおっしゃっていることが矛盾しているように思います。
単体テスト云々ではなく、テストに関する認識が違うように思いますね。

まぁ、テスト云々に関しては長くなると思うので別の機会で・・・(^^;;;

# re: テスト駆動開発。 2007/07/27 10:49 ひろえむ
みんなレスが早い(^^; ついていけないー(^^;;;

#囚人さん
>開発中に何度も自動テストを実行したいがために早期にテストコードを作成するようですが、なんで何度もテストをする必要があるのでしょうか。人間は完璧に先を見通せないからですよね。仕様が途中で変わったり、リファクタリングしたり、他システムとのインターフェースが上手くマッチしなくて辻褄あわせたり。

επιστημηさんのレスにも書きましたが、インターフェースが変わってもやらないといけない目的は変わらない訳ですよね?

そこでテストが無駄になってしまうのがいまひとつよくわからないのです。

保証しておかないといけないことをコードで書けばいいですよね?

すべてのテストをコードで書く必要はないと思います。 

だいたいにしてUIなんてのはテスト駆動開発でやると手間がかかってしょうがないですから、適用場所に向き不向きがあるのは理解できますが、必要ないってことはないですよね?

>そして、仕様が変わる事によって、外部インターフェースも変わったりしますよね。
>単純な例では、メソッドに引数が 1 個増えたり。そのメソッドのテストコードが 100 個あったら、100 個のテストコードを修正しないといけません。それが面倒なので、メソッドの変更ではなくメソッドの追加にしたり。もっと酷ければ、100 個のテストコードを削除したり。たかがメソッド 1 個の修正なのにテストコードの存在が負担になります。

それってデザパタでも回避出来る部分もありそうな気がしますが・・・。
仕様変更に対応しやすい構造にするってことですよね?

>従って、テストファーストどころか自動テスト手法自体、使いどころがおかしければ非効率だと思ってます。仕様変更に強いどころか、テストコードの存在のせいで変更に臆病になってしまいます。

もちろん、万能だとは思っていません。 妥当性チェックなどはできないでしょうし。 ですが、必要ないというには早計な気がします・・。

#中さん
>できあがってくる成果物は同じですよ。
>同じでなければ意味はないです。

もちろん、そうだとは思いますが、仕様を満たすという目的ではきっとすべてがそうなると思います。

ですが、今はその成果物の作成方法についてお話しているんですよね?

同じ成果物を作成するためにテスト・ファーストやテスト駆動開発は必要ない・・・
つまりは効率をあげることにはならない理由がわからないんですよ(^^;

# re: テスト駆動開発。 2007/07/27 11:11 囚人
> επιστημηさんのレスにも書きましたが、インターフェースが変わってもやらないといけない目的は変わらない訳ですよね?
> そこでテストが無駄になってしまうのがいまひとつよくわからないのです。
> 保証しておかないといけないことをコードで書けばいいですよね?
> すべてのテストをコードで書く必要はないと思います。 
> だいたいにしてUIなんてのはテスト駆動開発でやると手間がかかってしょうがないですから、適用場所に向き不向きがあるのは理解できますが、必要ないってことはないですよね?

インターフェースが変わってもテストをしないといけない事は確かですが、やらないといけないテストは変わらないでしょうか? 先にテストコードを書いておくと、それを全部直さなきゃいけません。もしくは、全部直さなきゃいけないのかどうかを全部確認しないといけません。


> それってデザパタでも回避出来る部分もありそうな気がしますが・・・。
> 仕様変更に対応しやすい構造にするってことですよね?

稼動コードは仕様変更に対応しやすくなっているかもしれませんが、テストコードがそうなってはいないのでは?仕様変更に対応しやすいテストコードなんておかしいですよね(センスがあればそうでもないのかな?)。


>もちろん、万能だとは思っていません。 妥当性チェックなどはできないでしょうし。 ですが、必要ないというには早計な気がします・・。

早期にテストコードが存在する事が負担なので、必要ないどころか悪だと言い切っちゃいます。


# re: テスト駆動開発。 2007/07/27 11:11 中博俊
どうも想定している作業や、その認識がずれているように感じる。
だからかみ合っていないんだと。
やっぱり長くなるなこりゃ

勉強会の本番(懇親会)ネタか?

てすと☆番外

# re: テスト駆動開発。 2007/07/27 11:34 片桐
んー、天然にずれてしまえる片桐は一旦静観、すみませんです<おい

>なかせんせ
懇親会……わたしタバコの煙で喘息症状だすので、喫煙者席には近づけません(;-;)
勉強会ネタで……<おいこら

# re: テスト駆動開発。 2007/07/27 11:36 シャノン
テストしやすい構造(テスタビリティ)についての一意見
http://www.itmedia.co.jp/enterprise/articles/0412/28/news032.html

# re: テスト駆動開発。 2007/07/27 12:19 ひろえむ
#囚人さん

>インターフェースが変わってもテストをしないといけない事は確かですが、やらないといけないテストは変わらないでしょうか? 先にテストコードを書いておくと、それを全部直さなきゃいけません。もしくは、全部直さなきゃいけないのかどうかを全部確認しないといけません。

んー、そうなんでしょうか? インターフェースが変わっても動作すべき目的が変わっていないのであれば、ある程度流用できそうな気がしますが・・。

まったく書き直さないといけないほどテストが変わってしまうってことはまったく別のモノを作るときだと思うのですが・・・。

それに、仮にすべて書き直さないといけない変更が発生したとしても、それを書いている時点で保証すべき動作をしているかどうかは判断が必要なワケですよね?

>稼動コードは仕様変更に対応しやすくなっているかもしれませんが、テストコードがそうなってはいないのでは?仕様変更に対応しやすいテストコードなんておかしいですよね(センスがあればそうでもないのかな?)。

んー、まぁ、これもケースによるでしょうねぇ。 

前にも書きましたがテスト駆動開発やテストファーストには向き不向きはあると思います。 そして、すべてがテスト駆動開発で完結するとも思っていません。

ですが、何百もあるテストをすべて作り直さないといけない変更っていう場面はつまりは設計ミスがあるからテスト駆動開発できないってことなんでしょうか?

まぁ、場合によってそういうケースがあるかもしれませんが、そこまで根本的にテストケースを作り直さないといけない時点で設計も大幅変更となるってことですよね。

逆に言うとテストの時点まで発覚しなかった不具合によって、それが発生したときのほうが痛手が大きい気がします(^^;

#中さん

んー、そうですねー。 オンラインじゃなかなか伝えきれないものもあるのかもしれません(^^;
まま、この件はいいネタになりそうなのであらためて盛り上がりましょうw

#片桐さん
ごめんなさい。
お気を悪くしないで下さいm(__)m
きつい言い方しちゃったかもしれませんm(__)m

私も中さんもたばこは吸いませんから、また、別の機会に盛り上がりましょう(^^)


てすと☆番外

# re: テスト駆動開発。 2007/07/27 12:35 片桐
>ひろえむさん
だいじょうびぃです(^^) 気は悪くしてませんですよ、「なるほろー」と思う部分もありーの、「それはちゃうやん」的場所ありーのは当たり前の話ですやん。

いや、でもこのネタ、盛り上がってみたいですです(笑)
でも天然なちゅらるボケかましたらゴメン<おい

# てすと ふぃふす(はぁと 2007/07/27 14:11 .COM -どっとこむ-
てすと ふぃふす(はぁと

# ƥȶưȯ 2008/04/02 12:00 assari (PukiWiki/TrackBack 0.3)
???ä??Хå?????ε? CUnit CUnit ??? CUnit?????CodeZine  RSpec RSpec ?? (Behaviour Driven Development) ????ä???Хå??????? Rubyist Ma...

# re: テスト駆動開発。 2008/06/26 14:41 拝啓、サカモトと申します。
re: テスト駆動開発。

# JwEgnTkAoTnY 2014/07/19 15:55 http://crorkz.com/
sQqykT This is one awesome article post.Thanks Again. Much obliged.

# HHySBHIeZqRJltOPf 2014/08/28 8:10 http://crorkz.com/
xHwuZF I've learn a few excellent stuff here. Certainly worth bookmarking for revisiting. I wonder how a lot effort you set to create this kind of great informative website.

# OnHDTPwpemvoqcC 2014/09/05 21:03 http://alpenforum.forumsmotion.com/f1-forum
very good put up, i actually love this web site, keep on it

# NCPPmlOuTLjddPdT 2014/09/09 19:51 http://www.arrasproperties.com/category/properties
Generally I don't learn post on blogs, but I wish to say that this write-up very forced me to try and do so! Your writing taste has been amazed me. Thanks, quite great article.

# MAhNmVZqUIEhm 2014/09/09 20:35 http://www.designingdigitally.com
This website is really a walk-by for the entire information you needed about this and didn't know who to ask. Glimpse here, and also you'll positively discover it.

# uGOuuLCLzqcLkYcDy 2014/09/13 18:53 http://track.buyvigrax.com/product/Vigrax/?uid=612
This website is known as a walk-via for all of the data you wanted about this and didn't know who to ask. Glimpse here, and also you'll definitely discover it.

# jmlGZwVYZfeDHnNFD 2021/07/03 1:33 https://slackness.xyz/story.php?title=niftyfloorre
I think other site proprietors should take this website as an model, very clean and fantastic user genial style and design, as well as the content. You are an expert in this topic!

to аАа?аАТ??me bаА а?а?ck do?n thаА а?а?t the

# Illikebuisse iertb 2021/07/03 14:10 pharmaceptica
choloquine https://pharmaceptica.com/

# re: ???????? 2021/07/23 7:55 hydroxychloroquine high
chlooquine https://chloroquineorigin.com/# hydrochoriquine

Post Feedback

タイトル
名前
Url:
コメント