質問

中まで書いていて発見したんですがユニット試験のほとんどのコードはもちろん、最近になって自分の手の中にコピーをテスト駆動開発により例Kent Beck.私は常に遺憾の意を述べた特定のデザイン決定しその防止本規約の準拠法は日本法となっていないテスト'.私は読書をすwith these reasons,it is different for them to stay at homeと思った運営ができるとこのプロジェクトは基本的にクライアント/サーバシステムを作ューなどがあります。USBコードで接続し、メニューバー一つのガジェットのその他の。の応用はます。

仕事を始めました、もうすぐっ子に混乱の回書き換え、小さな試験した後にゃん試験です。私を捨てたものとして作用の試験すべてを凝集したりだけの2.

経験を基に、複数の質問を思にお問い合わせください。また一部の情報から 新TDD:ありサンプルアプリケーション試験にどのようなテスト駆動開発? がある特定の疑問いへの回答-討論します。

  1. Kent Beckを使用しリストと彼は付け加える爆からの開発です。どのように書くでしょうかなどです。そしてあのように"サーバの起動","サーバーは中止の場合のチャネルがない"など。もっと混合し、現在でも"クライアントでサーバに接続する両サーバの起動など)。
  2. どのような取り扱いは書き換え回?私は、最初の半二重化システムを管理、うまく伝わらないこともあ開発のアプリケーションロジックを自分で機械、その後の追加USBコミュニケーション.そして移動しなソケットに基づくものに移動したからrawソケットを使用するPython SocketServerモジュールです。各時間も変更さんのために書き換えな部品の試験はた迷惑なレベルまでさまざまです。いっその試験がやや不変のガイドも。いう感じのようにコードが対応します。
  3. そのクライアントとサーバーを通してコミュニケーションのチャンネル試験のいずれかです。私が模擬一の側面の試験のその他のものその後のチャンネルになされることが少し心配していた私は見逃ます。このdetractedから、全体に赤、緑、refactorリズムをつかんでくれました。それとも不足を経験してるわけではありませんのですか。
  4. の"偽りのままでも"私に多くの汚コードのその後の間に、refactor。これがいと思う。
  5. 末のセッションでは、今の私のクライアントとサーバー走行3または4部試験までを実施。かかったとのこと週のことを思い出します。いいと思うことができましたので一日だったのユニットを使用して試験後のコードです。私が見にします。

私のコメントおよび助言をした人々から現在で実施した非自明な事業を完全に又はほぼ完全に)を使用する。うんのう 私に何かやりたい新しい機能がいいからそうめんどプライベートビーチがあります。

P.S.:れば教えてくださいこの地域のwikiそもそもの私の回答のマークはそのようにしています。

更新0 :すべての回答をした。かになったので驚私の経験です。

更新1:実践練習。

役に立ちましたか?

解決

準備としてコメント、TDDかかります。今振り返ってみても、試験に書いた時に始めましたTDDとで、多くの問題のように見るときコードを書いて数年前です。を行っていくので、皆さんのように存在を認識しの良いコードから、同じことが起きるかお試し-迷惑をおかけしますが、

どのように書くでしょうかなどです。I 当初はあのように"サーバー 開始すべき"、"サーバーは中止 場合のチャネルがない"など。が った混合し、現在で だけのような"クライアントすべき できるサーバに接続す"

"のリストは非公式(ケベックの書籍が入居するときは、項目の試験を書いてみように"[時のものがこの"さらに"この状態はtrueにする]"形式です。こだく考えで何ができるのか、ご確認にどのように確認でき換を直接試験をやっていることを確認してくださいですこれの機能が欠けています。考えを使用例/シナリオ。たとえば"サーバの起動"が不明なので誰もいないを開始。

各時間も変更といった があったので書き換えな部品の 試験のた迷惑なレベルまでさまざまです。思 ねことを試験する 多少の不変ご案内中 開発。いうような感じ。 コードに対応します。

最初にあり、テストは、他のすべてのコードが、メンテナンスおよび書き保守性試験かかります。いS.Lottが必要な場合に変更試験をたくさんの試験は"あまりにも深い".理想的にしたい試験レベルでの公開インタフェースが変化しないレベルでの実装の詳細は、進化させます。ものの一部行使は、デザインで、その期待についての移動refactorテストします。

私が模擬一の側面の試験 その他その後は、全チャンネル なされることが少し心配していた 今を逃す。

あなたのだ。からその音を模擬した右考:一つ一つの側では、模擬のチェックを、それぞれの作品、その他は実施します。試験全体のシステムを併用することによっては統合の試験、また、通常の一部ではありませんTDDます。

の"偽りのままですることができました 多くの汚コードのその後 いても多くの時間を費やしに、refactor クリーンです。これがいと思う。

すべ過ごす時間が多くリファクタリングなTDD.一方、偽での一時的なもので、においが次の業務委託先または業務提携偽ます。一般的にないと思いますが複数の試験を通過ししますので偽で重視すべき一曲で、作業のリファクタリングす。

いいと思うことができましたので日 また単体テスト(ユニットテスト後の コードです。私が見にします。

再び、実践し、お客様は早います。また、時にはTDDで以上に有意義なもの、そのいくつかの状況では、私が知り正確にコードを書きたいものだけでなく、書の一部のコードを書きる。
もベック、楽しかったので、これまでの単体テスト、Roy Osherove.なTDD書です。純志向で入手できるかもしれませんが、できればと考えていこう!:良い部分を書いた保守性試験、試験の品質に関してお聞きします。することを見いだし,その図書に共鳴った後、筆記試験時には苦労しい、...
その後、私のアドバイスい捨てタオルにも迅速することができます。またしてもらいたいでシュートもお楽-テストサーバー通信関連のものをいう最も簡単なプロジェクトを開始です!

他のヒント

  1. Kent Beckを使用しリスト...最後に、今までのような"クライアントでサーバに接続する両サーバの起動など)。

が悪い。

別の試験のための各層の建築を良くしています。

連結試験の傾向にある無名の建築の課題です。

ただし、試験の公益的機能.いうわけではありません。

な投資に多くの時間を最適化。冗長性の試験などでは、労働願います。場からの変更や試作品が、他の試験休憩もできrefactorご試験までを実施。しています。

2.どのような取り扱いは書き換え回?...そのために書き換えな部品のテストを実施していた。

い試験が低すぎる水準にまで参加いただきました。試験の一番外側の、公共、可視インタフェース。のことになるはず常に不変です。

あり、大きな建築の変更手段と重要な試験です。

テストコードはどのようだ ことを証明 ものです。それはほとんどの主要します。ありというのは無いような気がします。あり、管理します。

3.そのクライアントとサーバーを通してコミュニケーションのチャンネル試験のいずれかです。私が模擬一の側面の試験のその他のものその後のチャンネルな検証---

あるユニット。疑似.

が統合試験は、試験ることになります。

な混乱させます。

利用できるユニットテストツールな統合の試験が、彼らは違います。

が必要です。

4.の"偽りのままでも"私に多くの汚コードのその後の間に、refactor。これがいと思う。

そうです。それこそがいただけます。に一部の人は、このよ濾脳をしようとするすべてのデザイン的に前線に絡んでいきます。一部の人々なことをしたいのデザインのすべてに共通してフロント;まったく新しいたくさんのデザインフロントしたい場合。

またリファクタリングができないと何もうまくいかないとデザインフロントはます。かもしれないがって符号化のための40年間、私の脳が着用しています。

5.私が見にします。

すべての真の天才は、利口を探る試験が鈍化しています。

のできない 確認 当社のコードの作品ができあがるまで、完全なセットの試験 ことを証明 ることができる。

必要がない場合 このコードを作品にする必要がなくなり、より快適な試験をします。

  

Q。ケント・ベックは、彼が追加され、開発プロセスをガイドするから当たったリストを使用しています。どのようにして、このようなリストを作るのですか?私は当初等「サーバが起動しなければならない」などのいくつかの項目は、「チャネルが利用できない場合、サーバーは中止すべきである」だったが、彼らは混合持って、最終的には、今、それは単に「クライアントがサーバーに接続できるようになります」のようなものだ(これは包摂されるサーバの起動など。)。

私がチェック可能性があるものを選ぶことから始めます。あなたの例では、「サーバの起動」を選択しました。

Server starts

今、私が書きたいかもしれない任意の単純なテストを探します。ばらつきが少ない、より少ない可動部品で何か。私は、例えば、「正しく設定されているサーバー」を考えるかもしれません。

Configured server correctly
Server starts

本当に、しかし、「サーバーの起動」を「正しく設定されているサーバー」に依存しますので、私はそのリンクを明確ます。

Configured server correctly
Server starts if configured correctly

今、私はバリエーションを探します。私は「何が間違って行くことができる?」と尋ねます私は間違ってサーバーを設定することもできます。どのように多くの異なる問題ではな方法?これらの各テストを行います。私はそれを正しく構成されていてもどのようにサーバーが起動しない場合がありますか?そのそれぞれの場合には、テストを行います。

  

Q。どのように書き換えを処理していますか?私は当初、私は自分のマシン上のアプリケーション・ロジックを開発し、後でUSB通信部を追加することができるように、名前付きパイプに基づく半二重方式を選択しました。またそれらは、ソケットベースのものになるために移動して、PythonのSocketServerモジュールを使用してrawソケットを使用してから移動しました。物事が変更されるたびに、私は迷惑だったテストのかなりの部分を書き換えるために持っていたことが分かりました。私はテストが私の開発時に多少不変のガイドになることを考え出しのです。彼らはただ処理するために、より多くのコードのように感じます。

私は、動作を変更する場合、

、私はそれが合理的なテストを変更するために見つけ、さらにはそれらを最初に変更します!私は、直接私も、変更の過程にいるよ動作を確認していないテストを変更する必要がある場合、それは私のテストは非常に多くの異なる動作に依存兆候です。それらは私が詐欺だと思うの統合テスト、です。

(Googleの "統合テストは詐欺です")
  

Q。私は、クライアントとのどちらかの側をテストするためにチャネルを介して通信するサーバーを必要としていました。私は他をテストするための辺のいずれかをモックでしたが、その後、全チャネルがテストされないだろうと私はそれを逃すだろうと心配しています。これは全体の赤/緑/リファクタリングのリズムを損ないます。経験のこの単なる欠如であるか、私が何か間違ったことをやっている?

私は、クライアント、サーバー、およびチャネルを構築する場合、

、その後、私は単独でそれぞれをチェックしてみてください。私は、クライアントで始まり、そして私はそれをテストドライブするとき、私は、サーバーやチャネルが動作する必要があるかを決めます。それから私は私が必要とする動作を一致させるために、チャネルおよびサーバーそれぞれを実装します。クライアントをチェックするとき、私はチャンネルをスタブ。サーバーをチェックするとき、私はチャンネルを嘲笑します。チャンネルをチェックするとき、私はスタブとモッククライアントとサーバーの両方。私はこのクライアント、サーバー、およびチャネルの性質についていくつかの深刻な仮定をしなければならないので、私は、これはあなたに理にかなって願っています。

  

Q。 「あなたまでそれフェイクそれが作る」私は後でリファクタリングとクリーンアップするために多くの時間を費やし汚いコードの多くを私に残しました。これは、物事の働き方ですか?

あなたが「偽のそれ」コードが聞かせている場合、あなたはそれを偽造長すぎる費やしたかもしれない、それをクリーンアップする前に、非常に厄介。それは私が私がTDDでより多くのコードをクリーンアップしてしまうにもかかわらず、全体のリズムがはるかに良い感じていることを見つける、と述べました。これは練習から来ています。

  

Q。セッションの終わりに、私は今、私のクライアントとサーバーが約3または4のユニットテストを実行しています。それはそれを行うには、週の周りに連れて行ってくれました。私は、コードウェイの後にユニットテストを使用していた場合、私は一日でそれを行っていると思います。私は、ゲインを参照してくださいに失敗します。

私はあなたのクライアントとサーバーが非常に、非常に単純でない限り、あなたが3つ以上または4のテストそれぞれが必要であることを言わなければなりませんそれらを徹底的にチェックします。私はあなたのテストがチェック(あるいは少なくとも実行)異なる行動の数を一度に、そしてそれは、それはそれを書くためにあなたを取った努力を占める可能性があると推測されます。

また、学習曲線を測定しません。私の最初の本当のTDDの経験は9、14時間の日で作業の3ヶ月の価値を再書き込みで構成されていました。私は実行に12分かかった125回のテストを持っていました。私は私が何をしているのかわからなかったし、それが遅いと感じたが、それは着実に感じた、その結果は素晴らしかったです。私は基本的にもともと間違って取得するために3ヶ月かかったものを3週間後に再度書きました。私は今、それを書いた場合、私はおそらく3〜5日でそれを行うことができます。違い?私のテストスイートを実行するために1〜2秒かかる500回のテストを持っているでしょう。それは練習に付属ます。

として、初心者プログラマにも見つけ難いテスト駆動開発したこの試験はも心から感謝申し上げます。

は初心者なんです。デザインが第一と考えております。(インタフェース、オブジェや、授業の方法、どの適切な言語です。) その書き方を試験す。その、コードを書くことなのか。

微力ですが、応援させていただきていたのが、ベックのように書きれば、デザインのコードだけなのが無意識のうちに。しかし、経験豊富なプログラマーすることができなくなりtrue、ソのように、nuh-uh.

この最初の数章 コードの完了 によって考えるデザイン。もげられていることをデザインが変わりはなんで、nitty砂のようなレベルに関係する従業員に周知する。したがって再記試験と聞いていたのと同じ前提として設計されるようお願いします。

符号です。行こう。

は、ポイント1の場合は、質問私はしばらくは戻ってあなたの最初のポイントに関連するよう求めています。

今度は他の点を扱うのではなく、私はいくつかのグローバルなアドバイスを提供します。練習。それは私に良いしばらくして、実際のget TDDにいくつかの「危険な」プロジェクト(個人けれども)を取りました。 TDDはとても良いです理由についてはるかに説得力のある理由のためだけでグーグルます。

私のコードの設計を駆動テストにもかかわらず、私はまだホワイトボードを取得し、いくつかのデザインを走り書き。このことから、少なくともあなたは、あなたがやっていることを意味しているもののいくつかのアイデアを持っています。その後、私は必要だと思うフィクスチャあたりのテストのリストを生成します。あなたが作業を開始すると、より多くの機能とテストがリストに追加されます。

あなたの質問から際立っていたことの一つは、もう一度テストを書き換える行為です。あなたはむしろ状態よりも、行動試験を実施しているようにこれが聞こえます。言い換えれば、テストがあまりにも密接にあなたのコードに縛ら聞こえます。このように、出力には影響しません単純な変更は、いくつかのテストを中断します。ユニットテスト(少なくとも良いユニットテスト)も、マスタへのスキルです。

私は Googleテストブログをお勧めするかなり重くTDDのための私のテストがなさ上の記事のいくつかの理由プロジェクトはるかに良いです。

名前付きパイプは、そのインターフェースが(名前付きパイプからソケットに別のソケットライブラリに)実装されている方法を変更するだけでインターフェイスを実装するコンポーネントのテストに影響を与える必要があり、右のインタフェースの背後に置きました。だから、もっと/異なっ役立っているだろう...ソケットが背後にあることをインターフェイスの可能性が高いと進化していく物事をカットます。

私は多分6ヶ月前TDDを始めましたか?私はまだ自分自身を学んでいます。私は時間をかけて私のテストとコードがはるかによくなってきたと言うので、それを維持することができます。私は実際にも書籍のxUnitのデザインパターンをお勧めします。

どのように書くでしょうか等のリストに追加 トからの 開発プロセス?当初はあった 複数項目のように"サーバを開始 アップ"、"サーバーは中止の場合チャンネル はない"

項目テスト駆動開発のTODOリストは細かな粒度のよりその目的試験片の行動の方法は、たとえば、次のようになります。

  • 試験の成功にクライアント接続
  • 試験でクライアント接続のエラータイプ1
  • 試験でクライアント接続のエラータイプ2
  • 試験の成功にお客様とのコミュニケーション
  • 試験お客様とのコミュニケーションに失敗した時に接続されていない

きリストを構築する試験の成果を発表)とえばれました.また、ユニット試験だけを確立させるものではないとの接続のサーバとクライアントあなただけを呼び出す方法でコミュニケーションの...この回答質問3.

どのような取り扱いは書き換え回?

の場合は試験試験の行動は実施しないが変わるということです。場合は単体テストコードも作成において、"名前付きパイプに通信プロダクションコード、そして明らかに検査を変更できるようになって切り替えからパイプソケットが開かれます。ユニット試験はな場所には近づかないでください外部のリソースなどのファイルシステム、ネットワーク、データベースが遅いので、でき...これら 単体テストのルール.

このことを意味している低レベル機能なユニット試験は、試験されるとの統合の試験では、システム全体で試験を終了です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top