重複の可能性:
静的コード分析とコードレビューの違いは何ですか?
静的テストとコードレビューの違いは何ですか?
ウィキペディアでいくつかの情報を見つけました。どちらの場合も、プログラマーは構文とコードロジックにバグがないかチェックします。
コードレビューでは、ソースコードは人間によって読み取られます。多くの場合、これは元の開発者以外の誰かですが、それは要件ではありません。たとえば、Personal Software Processを使用すると、特定の問題のチェックリストに基づいて個人コードのレビューを識別できます。または、他の人が関与する いくつかの手法 があります。ペアプログラミング、肩越しのチェック、正式な検査などです。
使用される手法に関係なく、コードレビューが実行される理由はいくつかありますが、特定の目的に向いている手法もあります。たとえば、新しい開発者が作成した大量のコードをレビューして、チームの規則に従っており、チームの設計と実装の目標を理解していることを確認できます。コードレビューでは、論理エラーやセキュリティの問題をチェックすることもできます。また、テストをレビューして、テストケースが要件に対応し、適切なカバレッジを提供していることを確認できます。
コードの静的分析は、ソースファイル、場合によってはバイナリファイルをスキャンするさまざまなツールによって実行され、インデックス作成エラーから不要な割り当て、セキュリティホールまで、潜在的な問題を特定します。これらのツールは通常、考えられる問題の場所と重大度を示すレポートを生成します。
多くの場合、静的分析とコードレビューを併用してカバレッジを提供します。私の経験では、個々の開発者は、コードレビューの前に、自分のコードに対して静的分析を実行しています。静的分析の結果を確認した後、問題の原因となる可能性のある問題を修正し、コードを送信して確認します。自動で簡単に特定できる問題を見つけて修正することにより、人間のコードレビューアは、問題の異なるサブセットに作業を集中できます。
違いはwhoにあります。静的テストはプログラマー自身が、できれば静的テストツールを使用して行います。コードレビューは別の人間によって行われます。
キャッチする静的コード分析ツールにまだ出会っていないのは、ロジックの間違いです。たとえば、コードはすべての技術的な角度から完全に美しく完璧であるかもしれませんが、メソッドTransferMoney()
がtargetAccount.withdraw()
ではなくtargetAccount.deposit()
を呼び出す場合、それはかなり明白なエラーですコードレビューを実施する人間は、TransferMoney()メソッドの意図されたsemanticsを理解するのに優れているため、コードレビューの途中まで徹底的に把握します。同様の間違いは、特にコードを作成する開発者にとって、それほど明白ではない方法で行われる可能性があります。
静的分析は、コードが技術的に正しいかどうかを判断できるだけであり、そのコードによって実装されるビジネスロジックについてはあまり実行できません。
静的分析とコードレビューに関する他の回答に同意します。両方にとって重要だと思うポイントをいくつか追加したいと思います。
静的分析(少なくともc#の場合)には、使い捨てパターンなどの実装の問題を特定できる、いくつかの本当に素晴らしいツール(FXCop)があります。また、カップリングや循環的複雑度など、コードの匂いを特定するための優れたツールでもあります。私はそれらが完璧であることを示唆しているわけではありませんが、問題を特定するのに役立つこれらの多くを見つけました。
コードレビューに関しては、私が作業する場所でコードレビューが使用される最大のものは、知識サイロを分解し、あなたが書いたものを他の人に教えることです。通常、すばらしい会話は、コードの記述方法に関するレビュー、さまざまな視点を持つ他の人への挑戦、新しい規則の学習などから生じます。
ご覧のとおり、これらは非常に異なるタスクであり、どちらもほとんどの開発者に使用されています。コンピュータはまた、人間が反対の方が優れているという非常に具体的なルールに違反するものを見つけるのに本当に優れています。
両方を活用して、どちらか一方を選ばないようにお願いします。