テスト駆動開発は初心者に適していますか?[閉まっている]

StackOverflow https://stackoverflow.com/questions/137623

  •  02-07-2019
  •  | 
  •  

質問

この質問をどのようにしてパスすることを学んだのかについて拡張します。 問題のコードへの説明 2 人が TDD について言及しました。

初心者が TDD を始める (そして将来的に悪い習慣を避けるのは良いことでしょうか?)) それとも、プログラミング言語とは何かを理解する段階では複雑すぎますか?

役に立ちましたか?

解決

TDD は、(最後までテストしない) 「従来の」方法よりも単純であることを目的としています。テストによって問題の理解が明確になるためです。実際に問題が何であるかを明確に理解していなかった場合、テストを書くのは非常に困難です。

したがって、初心者にとってテストを書くことは、実装の動作ではなく、契約上の動作である正しい方向に思考を導くことになります。

他のヒント

私が初めてプログラミングを学んでいたときに TDD が存在していればよかった、そして、TDD を学ぶのが非常に難しくなるような「古いやり方」に固執する前に TDD を手に入れていればよかったのにと思います...

TDD ルールのすべてを体験する

また、理想的には TDD が学習の初期段階で非常に役立つと思います。今にして思えば、それはまったく異なる観点から問題に取り組むのに役立つだろうと思います。

私が当惑しているのは、学習中に非常に多くの新しい概念が吸収されるため、非常に早い段階で混乱が始まる可能性があることです。したがって、TDD は非常に役に立つとは思いますが、独学でうまく習得できるものではないと思います。

人生における他のことと同じように、私たちは次のようなときに最もよく学ぶ傾向があります。 誰かが物理的に教えています 私たち。TDD の方法で問題にどのようにアプローチしているかを示すことは、本やウェブでそれについて読むよりもはるかに多くのことを可能にします。つまり、これは害にはなりませんが、真にコツを教えてくれるメンターの代わりにはなりません。

TDD を体験することがすべてです そのため、初期段階で TDD の方法を誰かに教えてもらえれば、学習全体が予想以上に加速されると思います。

def self.learn_tdd_and_programming_together?
  if you_have_tdd_mentor_sitting_next_to_you?
    "go for it"
  else
    if language.ruby?
      "it's possible, there is quite a bit of good stuff out 
      there that could give you a chance of learning programming 
      with TDD from the start. It's sort of in the ruby culture"
    elsif language.dot_net?
      "learn TDD after you learn the basics of .NET"  
    end
  end
end

確かに理解すべきことはたくさんありますが、そうは言っても、単体テストを書き始めればよかったと思います。実際のところ、私の TDD の進歩を指導してくれるメンターが職場にいたらよかったと思います。私は約 1 年間断続的に TDD を独学してきました。カバーすべきことがたくさんあり、やればやるほど複雑になっていきますが、今ではそれが本当に成果を上げ始めています。

私はこう思います コメント 初心者にとって、まっすぐに学ぶことが非常に良いことであることを示しています。

私のプログラミングのモットーは次のとおりです。

  1. 実行してみる -- プログラムが問題を解決する
  2. 正しく作成してください -- プログラムはきれいに設計されており、重複部分はわずかにあります
  3. 高速化 -- 最適化 (必要な場合)

テスト駆動開発は最初の 2 つを処理します。

初心者はプログラムの実行方法を知るために TDD を教えるべきだと思います。私見ですが、そうして初めて優れた設計テクニックを教えることができます。

私はイエスと思う。研究では、 初心者にとってメリットが最も大きい. 。コードを記述するための詳細なガイダンスが提供されます。結果と動作がどうあるべきかを知っているので、テストを作成します。次に、コードを記述します。 テストは合格です。これで完了です。 そして、完了したことがわかります。

はい!絶対に。

プログラミングを学び始めたばかりの人には向かないと思います。その人は何を主張すべきかをどうやって知るのでしょうか?:P TDD は設計用であり、テスト用ではありません。プログラミングの方法を理解したら、TDD アプローチの勉強を始めるのは良いことです。

まず、適切なコーディング方法を理解する必要があります。十分に理解できるようになるまで、読んで勉強し、練習してください。それができたら、テスト駆動設計を検討してください。これは非常に強力です。

TDD の重要な利点は、焼き加減を定義できることです。単純なアルゴリズム プログラミングでは、正確性が簡単に主張できるいくつかのシナリオを思いついた場合、単体テストでそれらを列挙し、すべてが機能するまでコーディングを続けるのが簡単です。

多くの依存関係があり、オブジェクトのモックが必要なシナリオに遭遇し始めた場合、単体テストは初心者にとって難しい場合があります。

ただし、正しさについて簡単に宣言でき、簡単に入力できる場合は、必ずコードに書き留めてください。

また、正しさを簡単に説明できない場合は、問題を完全に理解していない可能性があることに注意することもできます。

幸運を...

それは本当に「スターター」の定義によって異なります。「初心者」という言葉がプログラミングの背景がまったくない人を意味するのであれば、いいえ、TDD が始めるのにあまり良い方法だとは思いません。プログラマーは、リファクタリングやテスト駆動開発について心配する前に、基本 (無限ループの回避、メモリ割り当てなど) を学ぶ必要があります。

コードは、それがスパイクアウトしようとしているものであっても、テストであっても、コードです。

TDD を最初から学ぶことには大きな価値があります。習慣化すべきスキルの一つです。tdd の価値を理解し、気に入っている人はたくさんいますが、長年のプログラミングにより、後で直すのが難しいいくつかの習慣が植え付けられています。

TDD が契約設計/コード実装/テストのためのものである限り、それはすべてです。TDD は完璧なコードをもたらしてくれるでしょうか?いいえ、経験と技術の研究は、コーディングのアプローチを成熟させるのに役立ちます。しかし、TDD はすべての開発者にとって非常に重要なツールです。

TDD を使用すると、テスト可能な設計を実現できることが期待されます。そして、テスト可能な設計は、理論的には適切にカプセル化されており、オープンクローズド原則に準拠している必要があります。

私の意見では、人々が TDD をニッチなツール、またはコードを書くときに何らかの形でオプションであると見なしている限り、それらの人々は明らかに TDD の価値を理解していません。

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