コードレビュープロセスの有効性を判断する方法


14

組織内にコードレビュープロセスを導入しましたが、うまく機能しているようです。しかし、時間の経過とともにプロセスの有効性を測定できるようにしたいと思います。つまり、コードがクリーンであるためにバグを見つけられないのですか、それとも人々がバグを拾っていないのでしょうか。

現在、効果的な完全自動化されたテストプロセスはありません。私たちは主に手動テストを採用しているため、この段階で見つかった欠陥に頼ってコードレビュープロセスが機能していることを確認することはできません。

誰もこの問題に出くわしたことがありますか、コードレビューの測定で何がうまくいくのかについて考えたことはありますか?


7
コードレビューの目的はバグの発見だけではありません。彼らは、また、などのクロストレーニング、アイデアと技術のクロス受粉、コーディング標準を補強するために有用です
ジェイソン

おかげでジェイソンは&しかし、この場合には、私は、プロセスをできるだけ早くのdevの処理と同様に欠陥予防の中核目標を達成することを確実にする方法を把握しようとしている、理解

@ Johnv2020しかし、それはその中核的な目的ではありません...コードレビューのポイントを見逃しています。これは、ジェット機の艦隊に優れた新しい安全機能を追加し、crash落回数に基づいてその有効性を判断しようとするようなものです。安全機能によってクラッシュが発生しない確率を改善したという主張を正確に行うには、考慮すべき変数やその他の要因が多すぎます。
maple_shaft

@maple_shaft:弱いアナロジー。バグ率を測定しようとすることは、クラッシュした死者に使用されるcoの数を測定することに似ています。
S.Lott

1
私が参加したすべてのコードレビューで、多くのバグがユニットおよび高レベルのテストで既に修正されています。つまり、コードはコンパイルされたという理由だけでレビューの準備ができていません。
ピートウィルソン

回答:


7

コードレビューから収集できるメトリックは多数あり、プロジェクトのライフサイクル全体に及ぶメトリックもあります。

収集することをお勧めする最初のメトリックは、欠陥除去の有効性(DRE)です。欠陥ごとに、欠陥が導入されたフェーズと除去されたフェーズを特定します。使用するさまざまな欠陥検出技術はすべて同時に評価されるため、要件レビュー、設計レビュー、コードレビュー、単体テストに等しく適用されます、 等々。これはおそらく、コードレビューだけでなくユニットテストも含まれるため、コードフェーズで検出された欠陥の数に特に興味があります。コードフェーズからの多くの欠陥が統合テストフェーズまたはフィールドにまで及んでいる場合、ポストコーディングプラクティスを評価する必要があることがわかります。

さまざまな会議の測定基準も関連します。これらには、準備する時間、会議の時間、コードの読み取り行、レビューで見つかった欠陥などが含まれます。このデータからいくつかの観察を行うことができます。一例として、レビュー担当者がレビューの準備のためにコードを読むのに多大な時間を費やしているが、問題をほとんど見つけていない場合があります。DREデータと組み合わせると、統合テストまたはフィールドで欠陥がテストされている場合、チームは問題を見つけるためにレビュー手法に集中する必要があるという結論を導き出すことができます。もう1つの興味深いメモは、会議の時間と比較して会議で読み取られるコード行(またはその他のサイズ測定値)です。調査の結果、典型的なコードレビューの速度は1時間あたり150行のコードであることがわかりました。

これらのメトリックのいずれかを使用して、プロセスへの影響を理解することが重要です。why-becauseFive Whys、またはIshikawaダイアグラムなどの手法を使用した根本原因分析を使用して、コードレビュー(またはその他の品質改善手法)が(無効)効果がある理由を特定できます。

また、The Ganssle Groupからの検査に関するこの記事、欠陥ポテンシャルとDREに関するクロストークのCapers Jonesの記事にも興味があるかもしれません。


2

主に、コードレビューが、テストがキャッチする場合もキャッチしない場合もある潜在的な問題を拾い上げることは事実です。しかし、私の意見では、あなたは本当に安定した(事実上バグのない)コードを持っているかもしれませんが、それでも非常に読めないか、まったくメンテナンスできないような方法で書かれています。そのため、実際にコードに問題がなければ、コードレビューではバグが見つからない可能性があります。

そうは言っても、なぜコードレビューをしたいのでしょうか?それが重要である単純な理由は、コードをより読みやすく、保守しやすく、進化可能にするために改善する必要があるということです。多くの人は、よりクリーンなコードを読み、それを理解できるはずです。その意味で、コードレビュープロセスの最も単純な目的は、クリーンなコードを生成することです。したがって、有効性の尺度は、コードがどれだけきれいになったかです。

あなたが測定可能な有効性を持ちたかったので、ここに私が提案するものがあります:

  1. リワークの量に関連するメトリック-同じ特定のモジュール/オブジェクト/ワークアイテムにリワークが適用される回数は、そのコードが保守性の面でどれだけ貧弱であるかの尺度です。効果的なコードレビューが適用された場合、同じモジュールでの再作業リクエストをどれくらいの頻度で減らすことができますか?

  2. すべての変更要求が被る変更の量に関連するメトリック。変更要求が発生するたびに- 因数分解が不十分なコードでは、常により多くのモジュールが影響を受けます。おそらく、コードレビューの後、過去の同様の変更要求に対するこのような変更の広がりが減少したということでしょうか?

  3. 変更要求に応答できる平均速度に関連するメトリック。コードがきれいになったら、必要な変更に対応するのが速くて良いです。レビュープロセスでコードがクリーンアップされた後、同様のサイズのリクエストへの応答がスピードアップします。

正確な測定単位を入れているわけではありません。おそらく、このアプローチからこれについてより正確な測定値を作成できます。これに関する上記のアプローチには、より多くの拡張形式があります。

基本的に、私のポイントは、コードレビュープロセスが特定するバグの数ではなく、コードレビューにより、コードをよりクリーンで無駄のない、維持しやすい状態にすることができたかどうかの観点から有効性を測定する必要があります。したがって、将来同様の変更要求がより効率的に応答されるようになった場合、その有効性を評価できます。


1
「バグ」ではありませんが、読みやすさ、保守性、進化性の欠如はコードの欠陥であり、そのように扱う必要があります。機能の実際のバグと同様に、これらを欠陥トラッカーで追跡できない理由はありません。これを行うことにより、コーディング段階で他の多くの欠陥関連メトリックを追跡する機能も開きます。
トーマスオーエンズ

1
開発者として、きれいなコードを見たいと思っています。ただし、コードレビューは非常にコストがかかります。したがって、プロジェクトに資金を提供するマネージャーとして、クリーンなコードは、開発予算に5〜10%のコストと時間を追加する説得力のある理由ではありません。特に(マネージャーとして)私のボーナス/レビューが、現在のプロジェクトを予定どおり/予算内で完了することに関連している場合。したがって、コードレビューの主な理由はクリーンなコードを取得することであるというあなたの意見は、優れたマネージャーにROIには価値がないと言うことです。あなたは程度の長期的なリターンを主張することができますが、その後でオン時間/オン予算提供マネージャは、そのPROBから離れて進めてきただろう
ダンク

...問題。コードレビューを推進したマネージャーは、メンテナンスプロジェクトは成功しますが、そうしなかったマネージャーのように、元のプロジェクトを予定どおり/予算内で完了できなかったためにリーマされます。OTOH、コードレビューがレビューの欠如がそうではなかったバグを見つけるのに役立ち、コードレビューマネージャーがプロジェクトをよりオンタイム/予算内で完了することができれば、それは別の話です。それは販売する必要がある物語です。また、クリーンなコードがコードレビューの理由になり得ないことも意味します。
ダンク

@Dunkコードレビューのコストは、コードレビューのタイプによって異なります。3〜5人の読者、モデレーター、および著者(部屋に5〜7人)がいる正式な検査には費用がかかります。別の開発者が10〜15分間コードをちらっと見るデスクチェックもコードレビューですが、形式的ではなくはるかに安価です。ペアプログラミングでさえ、一種の「コードレビュー」手法と見なすことができます。適切な手法は、コードの重要度、目的の不良率、投資する時間/金額などの要因によって決定されます(ただし、これらに限定されません)。
トーマスオーエンズ

@Dunk-プロジェクトマネージャーの手から「コードレビュー」の決定を下し、ソフトウェアプラットフォームの長期的な責任を負うマネージャーの手に委ねることについて、あなたは議論をしたと思います。IMOは、一般的に言えば、まともなコードレビューのために開発に5〜10%余分に費やすことは、開発中のシステムの寿命の観点から価値のある投資です。しかし、おそらく現在のプロジェクトの予算とスケジュールの面ではそうではありません。
ダウードはモニカ回復言う
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.