小さな変更を加えてテストし、次に「すすぎと繰り返し」を行うのは悪い習慣ですか?


54

私は長年の経験を持つプログラマーです。ある習慣があることに気づきました。それが本当に悪い習慣であるかどうかはわかりません。

ソリューションのために実行するタスクのリストを取得します。たとえば、小さな小さなタスクでも

  1. このユーザーコントロールのリソースを変更する
  2. 別のサイズを変更する
  3. 別のユーザーコントロールにHTMLとコーディングを追加する

これらのタスクはすべて小規模です。10分以内にできることを意味しますが、小さな変更を加えてからWebブラウザーで何度もテストするという悪い習慣がありました。これは良い習慣ですか?

または、一度にすべてを実行してから、一緒にテストする必要がありますか?

それが本当に悪い習慣であれば、小さな変更を何度もテストするのに時間を浪費しているように感じるので、どうすれば修正できますか?



3
あなたのトップ@gnatの答えを投票し、同様に基づく意見です- programmers.stackexchange.com/questions/154733/... 私が読んですべての答えはそこに自分の意見、コメントを与えていますか?
数学14

2
それではない。あなたの2番目に高い投票の答えはどうですか?programmers.stackexchange.com/questions/159964 / ...
数学14

7
このアプローチは、テスト駆動開発に似ており、テストを作成し、テストに合格するために必要な変更を加えてから、テストを実行します。その後、2回目のテストでこれを繰り返すと、2回目のテスト実行には最初のテストが含まれます。あなたはそれがまだ機能することを証明するために何度も再テストするでしょうが、それは自動化されています。
ケビン・ホッグ

5
たくさんの変更を加えてからテストするという習慣の反対は悪い習慣だと思います。
クリスB.ベーレンス14

回答:


130
  • それは良い習慣です。
  • 科学的方法に従っています。
  • テストの前にいくつかのことを変更すると、前提条件の準備が難しくなり、異なる変更が予期しない方法で相互作用する可能性があるため、それぞれのテストはより難しくなり、おそらく信頼性が低くなります。
  • あなたが今「浪費していると感じるとき、あなたは後の統合、テスト、および維持の段階で回復します。
  • 行く方法。

9
私の知る限り、UIプログラミングでは、それは良い方法であるだけでなく、唯一受け入れられる方法です。ソフトウェア企業はそう多く作成した理由ですWhat you see is what you getなどHTML、CSS、ウィジェット、で作業する開発者のためのツールを...
InformedA

38

たくさんの小さな変更を加えて、それぞれをテストすることは悪いことではありません。これにより、各変更の効果を確認でき、1つの変更が問題を引き起こした場合、どの変更が問題を引き起こしたのか(最新の変更)を簡単に知ることができます!

10個のアイテムを含むタスクリストがあり、それらすべてを一度に実行してからページをテストし、ページが間違っているように見えることに気付いた場合、どの変更がページを壊したかを知るのは難しいかもしれません。

もちろん、このアプローチを極端にすることは可能です。バランスを見つけることが鍵であり、それはあなたがを変えているのか、そしてそれらの変化がお互いにどのように影響するのをよりよく理解することによって得られます。


18

質問には2つの部分があります。

  1. それらをすべて一度実行してから一緒にテストする必要がありますか?

    VCSを使用していると思います。
    そして、どのタスクが実行されたかを追跡するには、タスクのリストをコミットのリストに配布するのが理にかなっています:1つのタスク、1つのコミット

    これにより、現在のコードベースのさまざまなバージョンを簡単に管理できます。以前の状態に戻したり、メイントランクに入れたい変更を選択したりできます。

    答えは明確です。

    いいえ、変更は1つずつのみ行います-1つのタスクで1つのコミット

  2. しかし、私は小さな小さな変更を加えてからWebブラウザで何度もテストするという悪い習慣がありましたが、これは良い習慣ですか?

    コード/ UIを何でもテストすることをお勧めしますが、ブラウザーで何度もテストするのは無意味です。自動的にそれを行うためのツールがあります(Selenium、PhantomJS / Casper、ZombieJS

    この場合の答えは次のとおりです。

    はい、ソフトウェアを複数回テストすることをお勧めしますが、自動化を使用します


2
+1。ただし、自動化の使用には同意しません。新しい機能を開発するときは、手動と自動の両方でテストします。手動テストにより、物事が期待どおりに動作していることを確信できます。自動化されたテストを誤って記述し、合格したことを確認し、すべてが適切であると判断した後、手動でテストして何か問題があることを確認することができます。
ケビン-モニカの復活14年

コミットする1つのタスクは、VCSログを「単一のタスク」のさまざまな定義の不可解な混乱にする可能性があります
-whatsisname

タスクをどの程度細かく定義するかによって異なります;)または必要に応じて:1つの「チケット」、1つのコミット/ブランチ。gitを使用するとこれが簡単になります
Thomas Junk 14

1
Kevinの発言を拡張するには、フロントエンドの新しい機能を追加する場合、常に手動でチェックする必要があると考えています(フロントエンドの作業のためにTTDに相当するものをまだ見つけていません)。既存の機能を壊さないようにするためのスイート。
scragar 14

@scragarはい。自動化は回帰テスト用です。
トーマスジャンク14

6

開発者の習慣については、主に2つの質問があります。

  1. 作成するコードの品質にどのように影響しますか?
  2. 生産性にどのように影響しますか?

両方の答えが「それが良くなる」なら、ねじ癖、他の人に教えてください!
一方の答えが「より良い」で、もう一方の答えが「より悪い」場合、それはスタイルであり、あなたはそれについて意識する必要があります。常に適用できるとは限らず、時々それを抑制する努力をする必要があるかもしれません。
両方の答えが「ネガティブ」である場合-あなたは深刻な問題を抱えています。

もちろん、最初の2つのケースについては、「プラスの効果を何らかの方法で自動化または制度化できますか」についても考慮する必要があります。たぶん、毎回異なるブラウザを試してみるよりもテストを書く方が良いでしょうか?(注意、Web開発で適切なレイアウトをテストするのはそれほど簡単ではないことを知っています。これが常に可能だとか、価値があるとは言いません)。

この特定のケースでは、品質が向上し、生産性が低下する可能性があります。小さな変更の場合、それはちょっと悪いです(特に変更が相互に関連している場合)、大きな変更の場合、ちょっといいです。最終結果もテストする限り(「各モジュールがテストされて機能するため、すべてのモジュールが機能するので、テストする必要はありません!」)。

したがって-勤務日の90%が本当に小さな変更を行っていない限り、完全に良い習慣です。あなたの仕事の日がそのようなものである場合、あなたはあなたの仕事スタイル(または職場)を見直したいかもしれません。


4

これはドメインに依存します。Webページをレイアウトするために、それはうまく動作し、すぐにフィードバックを得ることができます(ブラウザで直接行うこともできます!)。同様に、初期化に長い時間を必要としないすべての場合にうまく機能します。これは、メンタルワークロードを低く抑え、ミスの可能性を減らすため、推奨されます。

ただし、コードをコンパイルする必要があり、所要時間が重要でない(数分)非常に大きなプロジェクトの場合、多くのダウンタイムが発生する可能性があるため、次のことに頼らなければならないことがよくあります。

  • ワークフローを「並列化」する(たとえば、複数のビルドで同時に作業する)、または
  • できるだけ多くのことを一度に行う、または
  • 後で作業して大きなプロジェクトに統合するための小さな独立したパーツを作成します。

(おそらく他の方法もあります。)


ブラウザーで直接行うための+1。私は、これからやろうとしている実際の作業の捨て去りのプロトタイプとして、ブラウザーでCSSを微調整することがよくあります。
ラバーダック

0

他の人が述べたように、これは間違いなく悪い習慣ではありませ。私は通常、一度にいくつかの変更のみを行うことを好みます。唯一の例外は、すべてが相互に影響しない変更の大規模なリストがある場合です(マイナースタイルまたはコピーへの変更、異なるページでの変更など)。レイアウトを変更している場合は、次の問題に進む前に、サポートされているすべてのブラウザーですべてが100%であることを確認できるように、一度に1つずつ変更を行ってください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.