コード品質テストにはSonarQubeを使用しています。コードの機能ではなく、コードの品質をテストします。品質ゲートの概念があるため、たとえば90%の品質ゲートを設定できます。つまり、90%を超える品質のゲートはすべて合格と見なされます。
ここの何人かの人々はこのアイデアを好み、それを機能テストと単体テストに適用することに決めました。機能テストと単体テストを実行した後、合格したパーセンテージを確認し、テストの合格率が十分に高い場合は、コードを次の環境にプロモートします。コードを本番環境に昇格させるには、渡されるパーセンテージが100でなければなりません。
私にとって、テスト自体が品質ゲートです。テストが失敗することはありません。テストが失敗した場合、アプリケーション全体にリスクが発生するため、すぐに修正する必要があります。
コードが本番環境へのルート上でさまざまな環境を通過するときに、機能テストと単体テストの特定の割合のみに合格することを要求する有効な議論を見つけるのに苦労しています。誰でも提供できますか?
すべてのテストに合格した場合にのみ、テストスイートに合格する必要があります。そうでなければ、テストは価値がなくなります。重要な失敗とは何ですか?無視できる失敗とは何ですか?その結果、しばらくするとすべてのテストの失敗が無視されます。悪い。
これには1つの例外があります。テストスイートには、必要な機能がまだ実装されていないか、バグが修正されていないため、失敗することがわかっているテストが含まれている場合があります。このようなテストは、バグを明確に文書化しているため価値があります。しかし、それらの失敗はリグレッションではないので、それらの失敗はテストスイート全体を失敗させるべきではありません(逆に、彼らが合格し始めた場合、テストスイートがコードで最新でないことを示します)。理想的には、テストフレームワークにはそのような「TODOテスト」の概念があります。
品質指標は別の獣です。品質指標がしきい値を超える場合、それは何かがおそらくリファクタリングのために熟している必要はないことを示しています。ただし、一部の「違反」は、そのコードのコンテキストでは問題ない場合があります。特定のコード領域を特定の分析ツールから除外できる限り、その品質メトリックのゲートは問題ありません。明らかに、明示的な除外はコードレビューの危険信号であり、特別な調査の対象となりますが、例外的な状況のためにそのようなエスケープハッチを開いたままにしておくことは重要です。
特に、アーティファクトがリリースパイプラインを移動するときに増加品質を要求するという考えは、必ずしも良いとは限りません。必要な品質の増分はどこから来るのですか?コードを改善し、新しいアーティファクトをパイプラインに再送信する開発者から。パイプライン全体をトラバースするために必要な品質メトリックは事前にわかっているため、この品質のないアーティファクトを送信すると時間の無駄になります。なぜそれをしているのですか?おそらく、パイプラインのステージはプログラムのフィードバックを提供し、メインリリースの前に役立ちます。このフィードバックを取得するには、パイプラインを介して作成するつもりがない場合でも、コードを送信する必要があります。繰り返しになりますが、偽陰性は悪いことです。このようなワークフローはパイプラインモデルには適しておらず、フィードバックは独立して利用できるはずです。
それはあなたが質の高いゲーティングをあきらめる必要があるという意味ではありません。ただし、ターゲットがリリースの100%メトリックである場合、現在の品質メトリックは、技術的負債のバーンダウンチャートのように、プロジェクトの進捗インジケータになります。
私はアモンの良い答えに何かを追加します:
...テスト自体が品質ゲートです。
これらはa運用コードのゲートですが、テスト自体には、次のような独自の(潜在的な)品質測定があります。
@Ignore
?これらの属性、そしてもちろん多くのことは、テストだけでなく効果的にテストしているという確信を得るために、テストスイート自体(その一部はSonarQubeによってサポートされています)について測定できるものです。