web-dev-qa-db-ja.com

テストの修正が優先事項と見なされる環境を作成するにはどうすればよいですか?

私は中規模企業のソフトウェアエンジニアです。 TeamCityで実行されているかなり堅牢なテストプラットフォームがあります。すべてのチェックインでユニットテストを実行し、毎日のユニットテスト/ BVTを実行します。

問題は-壊れた単体テストがたくさんあることです。

頻繁に、ユニットテストが絶えず壊れて維持されていない場合、ユニットテストの無意味さを取り上げます。変更が原因で回帰が発生したかどうかを確認できないと、単体テストプラットフォームのほとんどの価値が失われます。

私は、良い習慣の文化を生み出す種を植えたいと思っています-壊れたときにテストを修正し、それらを貴重であると見なし、他の作業とともにテストの修正を優先します。

私は贈収賄(焼き菓子!)を試してみました。単純に尋ねて、チームリードに話しました。それは良いアイデアだと誰もが言いますが、私はそれについて何かをしている唯一の人であると思います。

他の人にテストの修正を奨励し、スプリント内でのテストの修正を優先させるための最良の方法は何ですか?

これを尋ねる主観性の低い方法がある場合、私はどんなヒントも喜んで受け入れます。

22
Codeman

テストを修正せずに実際に何かをリリースすることは不可能であるようにしてください。

  1. テストが失敗した場合は、ビルドを失敗させます。
  2. 無視されたテストがある場合、ビルドは失敗します。
  3. テストカバレッジが特定のレベルを下回った場合、ビルドを失敗させます(そのため、テストを削除して回避することはできません)。
  4. CIサーバーを使用してリリースビルドを実行し、onlyサーバーのビルドドロップからのビルドをUAT/staging/production/whateverに昇格できるようにします。

問題の事実は、ビルドが一度に約15分以上壊れた場合(そして失敗したテストを含む)、継続的な統合を行っていないです。

「核オプション」は、ビルドを破壊したユーザー以外のユーザーからのコミット/チェックインをソース管理サーバーに拒否させることです。明らかに、その人が休日に行った場合、管理者はこれを一時的に上書きできる必要がありますが、チーム全体が修正されるまでねじ込まれていることを誰もが知っている場合彼らのテストをすれば、すぐにそれを解決します。

優れたポリシー(自動化されている場合はさらに優れています)は、ビルドが失敗してから15分後にソースを最後の既知の安定したコミットに戻すことです。つまり、修正できない場合、またはビルドやテストが中断した原因がわからない場合は、元に戻して作業しますlocally問題が解決するまでは、他の開発者が気にしない問題を解決するまで、他の開発者の親指をいじらないでください。

追伸すでに多くのテストが失敗している場合、CIで「末尾しきい値」を使用できます。前回よりもテスト失敗が多く失敗した場合にのみビルドが失敗するように設定します。これは、カバレッジルールとともに、開発者が作業を続けられるようにしたい場合、最終的にテスト状況を改善するように強制します。

P.P.S.一部の人にとってこれは厳しいと思われるかもしれませんが、それはすべてあなたの文化にかかっています。人々がちょうどしないビルドが壊れたままにするか、テストが失敗したままになる場合(私のチームはほとんど決してそうしませんが、ときどき思い出させる必要があります)それら)、それからあなたは最も厳密なルールのセットを続ける必要はありません。 IMOですが、壊れた単体テストでは常にビルドに失敗するはずです。統合/ブラウザテストが失敗することがあります。

28
Aaronaught

失敗する単体テストは問題ではありません。それらは症状です。

本当の問題は文化にあります。あなたは優しく踏む必要があります:ここではドラゴンです。あなたは自分で文化を変えることはできません、そしてきしむ車輪であることは結局、あなたを追放者にします。文字通り。

あなたが大義を擁護して先導する先輩を見つけようとするなら、私は提案する。それが失敗した場合は、指さしたり名前を呼んだりせずに、一般的な開発者会議でそれを上げてみてください。もう1つの方法は、適切な作業を行う責任を自分で負うことです。チェックインを行うたびに、いくつかのテストを修正するだけです。時間の経過とともに失敗するテストの数を示すグラフを壁に貼ってください。他の人はそれを見るでしょう:多分彼らはオプトインするでしょう。

簡単な答えはありません。

10
andy256