人間の筆記試験


私は私がほぼ完全に私のコードをテスト終了する日の話を教えてみましょう.
今週の10回目には、CCIはこの不可解なエラーメッセージに失敗しました.
<div
  - className="myClassName" >
  + className="myNewClassName" >
  + <div>
    Hello world
  + </div>
</div>
それは、このテストを修正するために意味がないと感じました:クラス名が異なっているならば、なぜ、それは重要ですか?
これは、チームの誰もスナップショットの更新を読み取るとして回帰を導入から私を維持しません.
私はとても失望した、私はほとんどコンピュータを壊した.
しかし、代わりに、私はこのエネルギーをよりポジティブなものへと流れることに決めました.
私は、プロジェクトテストがどのようにそのような状態になったかについて考え始めました.
どのように皆が我々のコードベースをテストする必要があることに同意します.
私は欲求不満である唯一の1つだったか.(いや)
人々がTDDを使うと言うとき、私は彼らを信じませんエミリーフリーマン
)
なぜ、誰もこれについて何かをしていませんか?

悪循環理論またはどのように人間のためのテストを書くのを停止


ここでは、このような状況を理解する私の理論です.
私はそれを「テストの悪循環」と呼びました™:
  • 開発者は、機能のためにコードを変えます.テストは失敗しますが、理由は不明です.
  • 開発者はテストを修正します.
    彼らはなぜテストが最初にここにあったか知りません.
    彼らは、それを修正するために彼らの時間投資の価値がないという考えに、成長します.
  • 次の時間、この開発者はコードを書く、彼らは少ない時間と労力テストを書く過ごす.
  • とトップに戻る.

  • これがあなたと共鳴するならば、あなたは仕事のためにCiのためにテストを書いていました、しかし、チームメイトのためにあなたの意図を理解するためにでなく.
    テストは、コラボレーションツールですが、彼らはあなたのチームメイトの失敗時に読むことを意図されています.
    あなたは、あなたが何をすべきかについてのすべてを忘れてしまった月にそれらを理解することができることを確認する必要があります.

    Tests are meant to be read by humans, not your CI.


    どのように、あなたは人間のためにテストを書きますか?
    あなたのための私の3つのヒントは、ここにあります:

  • なぜ:あなたがテストしている理由を知る必要があります.テストは、ソフトウェア工学の普遍的な真理であるため、それはあなたのプロジェクトでそれを行う必要がある理由を忘れて簡単です.どのような動機を見つける:それはあなたが読んで他の人が欲しい良いテストを書くことをご案内します.

  • 何:あなたは集中する必要があります.私は、それをすべて行うようにしようとするよりも1つの事を行うのが良いと思うし、それを平凡に行う.テストしたいものを選んでください.

  • 方法:あなたの目標に適応ベストツールを選択します.彼らはあなたが読むことができ、
  • を維持する品質テストを書くのを助ける必要があります

    Thank 1 :なぜテストを書くのですか?


    人間のための偉大なテストを書く時間がかかる、あなたがやっていることに投資する必要があります.
    あなたが正確になぜあなたが偉大なテストを書く必要があるかわからない場合はできません.

    Do not write tests because you have to. Make sure you and your team know why you write tests.


    自動テストはしばしばプロジェクトの品質ツールを設定するときに与えられます.
    あなたのLinterとは異なり、テストは毎日失敗しない、彼らは長期的なコードの品質への投資です.
    それはあなたがなぜそれをやっているのかを見失うのは簡単です.
    テスト環境を設定する前に、テストしている理由を明確にする必要があります.
    あなたは長期的に何を期待していますか?
    より良いドキュメンテーション?
    より少ない退行バグ?TDDの開発者向け体験ツール?
    あなたとあなたのチームがなぜそれをやっているかを確認してください.それはとても悪いテストの悪循環に陥るのはとても簡単ですので、もしあなたがなぜあなたがテストを書くために駆動されているかを知っていれば、あなたの目標から逸脱しているときに早くキャッチすることができます.あなたの目標を明確にあなたのテストにチームメイトの所有権を与えると、彼らはあなたが必要なときに改善をプッシュするのに役立ちます.

    どれも部品を最初にテストする必要があります


    私のプロジェクトにスナップショットを使用することを選択した場合、それは速く行くことでした.
    我々は多くの時間を投資せずにすべてのコードベースをテストしたかった.
    100 %のカバレッジを維持することを目指して、我々は機能を追加するたびに維持するために必要なテストを書き始めた.彼らはあまりにも頻繁に変更したので、我々は退治をキャッチするのを助けることができなかった.
    投資がどんなに小さくても価値はなかった.

    Do not aim for a 100% code-coverage of generic tests, aim for 100% of readable tests


    すべてをテストする必要はありません.
    あなたのセットアップは、コードのあらゆる面に適応されないかもしれません.
    私はいつも非常に論理関数の単位テストを書きます.
  • 彼らは読むのは難しいし、簡単に破る.テストは、別の開発者がそれを中断しないようにするためのセーフガードです.
  • セットアップと書き込みが安い.
  • 高速なので、CIを遅くしません.
  • しかし、コードの大部分の場合、それはケースバイケーススタディです.
    私は私のフロントエンドアプリUXをテストする必要がありますか?
    私が複雑な一つのページ・アプリを書いているならば、UXは非常に進化しそうです.
    私は私のアプリのユーザーの感謝に大きな影響を与える退行を防ぐことができるので、それは私の優先順位であることがありますテスト.
    私はこのための統合またはエンドツーエンドのテストを書きたい.
    あなたのフロントエンドのアプリのUIをテストする必要がありますか?
    私は共有コンポーネントライブラリを書いている場合は、私はUIに焦点を当てているいくつかの論理コンポーネントがあります.
    私の最初の使命は、信頼性と一貫性のUIと私のユーザーを提供することです.
    UXロジックをテストすることは、最初にこれに集中して、選択をしないことはOKです.

    あなたのツールを右


    たくさんの偉大なテストツールがご利用いただけます.
    あなたがなぜあなたがテストを書きたいか、そして、コードのどの部分があなたが集中したいかについてわかっているので、あなたは手袋のようなニーズに合うツールを見つけることができます
    別のプロジェクトでは、私は反応テストライブラリを使用してフロントエンドの反応アプリをテストすることを選んだ.
    私はツールを欲しかった.
  • は我々の反応アプリ部品論理をテストして、彼らが
  • をしたものを文書化します
  • は、新しい開発者がプロジェクト
  • を始めるとき、自信があるのを感じるのを援助します
  • は、チームが
  • を変えたとしても、我々がこれらのゴールに集中するのを援助するでしょう
    だから、私はそれを統合テストを書くために反応テストライブラリを選んだ理由です.
    それは偉大な開発者の経験であることが判明.
    私はまた、偉大なレビューをたくさん持っていたこの新しいツールを試しての個人的な目標を持っていた.
    テスト楽しみを書いたり、テストドリブン開発をしたいツールを見つけてください.

    準備ができました。


    今、あなたは知っています:あなたがあなた自身がテストを考えているのが役に立たないか、維持するのが苦痛であるとわかるならば、あなたは多分テストの非常に悪循環においてあります.
    これをエスケープするには、次の手順を実行します.
  • はテストがドキュメンテーションと協同ツールであるということを覚えています、彼らはチームによって維持されて、人間
  • によって読まれなければなりません
  • あなたのチームがなぜあなたがテストを書いているかを知っていることを確認します.
    これは、あなたが誇りに思うことができる良いテストを書くことを動機とします.
  • それをすべてしようとしないでください.
    カバレッジはちょうど数です、それはコード品質のトークンではありません.
    フォーカスは、いくつかの部分ではなく、すべてのそれよりも悪い方法でテスト.
  • はあなたに合うツールを選びます、そして、それは開発者経験楽しみ
  • になります