静的コード分析とコードレビューの違いは何ですか?


9

静的コード分析とコードレビューの違いを知りたかっただけです。これら2つはそれぞれどのように行われますか?より具体的には、PHPのコードレビュー/静的分析に現在利用できるツールは何ですか?また、あらゆる言語のコードレビューに適したツールについても知りたいです。


コードレビューは通常、別のプログラマーがコードを確認する手動プロセスです。これは、コーディング規則などからの小さな間違いや逸脱を見つける方法であり、全体的なコード品質を改善する良い方法です。静的コード分析は、ツールを使用できるものですが、私自身はこれを行ったことがありません。他のユーザーの回答を確認したい

9
言い換えれば?「脳」。
MSalters 2012年

回答:


19

コードレビューは人々が行うことであり、静的分析はマシンが行うことです。(時には良い)静的分析ツールがあります。コードレビューは、同僚/メンター/教授/友人があなたのコードを調べて、建設的な批判を与えるときです。

一方、静的分析は自動化されたプロセスであり、マシンは、(通常は型システムから)分析している言語について何がわかっているかを知らされ、プログラムを分析して、間違っている可能性のあるものを見つけようとします。非効率的、貧弱なスタイル、またはその他の方法で最適ではない。


2
コードレビューは、ソフトウェアを実行せずにソフトウェアの状態を測定する方法なので、コードレビューは一種の静的分析であるという印象を常に受け​​ていました。
Buhb

4
@Buhb:コンテキストの知識を決定的に追加します。コードレビューアは、コードが期待どおりに機能しているかどうかを理解する必要があります。静的ツールは(せいぜい、言語が装飾/アサーション/契約を介してそれを許可している場合)形式的にすべてが問題ないことをチェックします...したがって、別の言い方をすれば、静的分析は一種のコードレビューであり、実行されますアルゴリズム的に。
フランチェスコ

追加するだけで、Lint(静的アナリスト):必要ありません。同僚(レビュアー):あなたもそうすることができます!!
Kushal 2013年

11

静的分析は、ソフトウェアを実行せずに分析するプロセスです。これは非常に良い方法であり、お勧めしますが、

  1. 静的分析ツールが異なれば、調査対象のコードに対する理解も異なるため、異なる問題を通知する(または通知しない)可能性があります。1つのツールは明確なレポートを提供でき、もう1つのツールは100万件について不満を言う可能性があります。
  2. 動的ツール(例を挙げると、valgrindを考えてください)は、リソース消費(時間、メモリ使用量)に深刻な負担を負わせて、他の多くの問題を見つけることができます。これは、通常、計測されたバージョンのソフトウェアを実行しているためです。何らかの方法でインストルメント化されている(mallocをデバッグ用のmallocで置き換える)ことにより、ソフトウェアと完全に同じではないことに注意してください(実行時間から確認できます)。

これらのアプローチは両方とも、コンテキストの欠如に悩まされています。swが何を達成することになっているかがわかりません。

コードレビューは、おそらくそれを知っていてチェックできる別のコーダーによって行われます

  1. コードが正しい場合
  2. ソフトウェアが意味的に正しい場合。

それははるかに高価であり、再現性の程度はさまざまですが、非常に役立ちます。

いつものように、すべてのバグを修正してすべての問題を回避する単一の特効薬はありません。適用-場所、コード、時間、3つのチェック形式(静的、動的、より多くの目(および頭脳)が実際にコードを見る)を考慮して、可能な限り推奨されます。

ps:通常、ツールを最初から適用する方がはるかに優れていることに注意する必要があります。レガシーシステムの変換は、誤検知が原因で、それほど楽しいものではありません。ゼロから始めて、常に分析ツールをクリーンに保つことを目的とする場合は、多くの問題を回避できるでしょう。

pps:ツールに関しては、それは言語に依存します。CおよびC ++の世界では、組み込みの静的分析ツールが含まれているVisual Studio自体を確認することから始めます。比較的完全なリストはウィキペディアにあります。

ppps:静的分析は、CやC ++などの静的言語により適しています。Pythonの場合、動的なプロパティのため、ある時点でリストを参照する名前がプログラムの他の部分のリストを参照するかどうかを判断するのは非常に難しい場合があります。これは、PyPyのようなJITの取り組みが示すように、何も実行できないことを意味するものではありません。


2

コードレビューとは、上級または専任機関がコード、コーディング方法、コードで準拠している標準、特にコードのロジックレベルをチェックすることです

静的分析に関する限り、ソフトウェアから構築されたプログラムを実際に実行せずに実行されるのはコンピュータソフトウェアの分析です(プログラムの実行時に実行される分析は動的分析と呼ばれます)。

テクノロジーごとのツールのリストは、以下のリンクに記載されています

静的分析のためのツールのリスト

したがって、コードレビューと静的分析は完全に異なる用語です。


7
OMの答えは基本的に正しいですが、「上級または専任機関があなたのコードをチェックする...」と私は誤解しています。一部の機能不全のショップがこの親/子の方法でコードレビューを実施していることは事実です。多くの(およびそれ以上の)ショップには、宿題の問題を採点する教師に似ていないピアツーピアコードレビューシステムがあります。私が働いている場所では、後輩が先輩の仕事をレビューするのと同じくらい一般的です。目的は、それがチェックインされる前に、目の第二の対は、すべてのコードを見て持つことです。
ジムでテキサス

2
@JimInTexas、当店でも同じ。コードレビューの最も重要な(長期的な)結果は、チーム全体に知識を広め、実践を統一し、アーキテクチャ/設計ビジョンを統一することです。この点で、ジュニアがシニアのコードをレビューすることは、最悪の場合、ローカルのベストプラクティスを学ぶのに最適な方法です。
ペーテルTörök

1

コードレビューはより定性的な評価であり、静的コード分析はより定量的な評価です。

こんにちは、この方法はもっと上手に書くことができます

vs、fe

パフォーマンスの低下。'wcslen(str)> 0'構文を使用して空の文字列を識別することは非効率的です。より効率的な方法は、str [0]!= '\ 0'をチェックすることです。

パフォーマンスの低下。strlen(MyStr.c_str())の種類の式は、MyStr.length()に書き換えられます。

パフォーマンスの低下。'Order'がイテレータの場合は、プレフィックス形式の増分を使用する方が効果的です。iterator ++を++ iteratorに置き換えます。

しながら、実際の誤差は(明らかに)存在することができ、SCAによって検出すること

形式が正しくありません。'Foo'関数のN実引数を確認することを検討してください

式が括弧で2回囲まれました:((expression))1対の括弧が不要であるか、誤植が存在します

「memset」関数を呼び出すと、バッファ「dest.lfFaceName」がアンダーフローします。


あなたを侮辱してすみません。私の(消えた?)コメントの意図するところまで-静的コード分析の出力の例として提供したのと同じコメントを人間が提供できない理由を知っていますか?
sq33G 2012年

@ sq33G:いいえ。事務用品(事実上無限の量の紙)を持っている人なら誰でも、任意のチューリングマシンをシミュレーションできます。しかし、それは退屈で時間がかかります。(おそらく指定されたものではなく、Cでの未定義の動作を示しています)。
Maciej Piechotka 2013年

ああ。したがって、OPの質問に対する本当の答えは、チューリングマシンは完全な人間ではないということです。
sq33G 2013年

0

静的分析は、成果物を実行せずに分析する場合です。任意のアーティファクトに適用できますが、多くの場合、ソースコードまたはオブジェクトコードに適用され、特定のツールを使用してこれらの作業成果物に関する情報を分析および取得することを指します。これらのツールは、作成中のシステムの品質を決定するために、および開発と保守の計画のガイドとして使用するためにエンジニアによって解釈されるレポートを生成します。ウィキペディアには、言語ごとに整理され、その機能の簡単な説明が記載された静的分析ツールのリストがあります

レビューは、一部の作業成果物の人間による評価であり、コードである可能性があります。デザインやその他のドキュメントについてもレビューを行うことができます。アイデアは、開発者以外の作業成果物に詳しい人々が、セキュリティの問題からコーディング標準の違反に至るまで、間違いを見つけるためにそれを見ているというものです。

技術的には、コードは実際にはレビュー中に実行されないため、コードレビューは静的分析の一種と考えることができます。ただし、一般的な用語では、「静的分析」は通常、ソースファイルまたはオブジェクトファイルのマシン解析を指し、「レビュー」は人間が分析を行っていることを示します。


-2

コードレビューは、ソースコードの問題を非常に早い段階で嗅ぐのに役立つテクニックです。この演習の一部として、パフォーマンス、スケーラビリティ、コーディング標準などの多くの問題が特定および修正されました。これにより、コードの品質が向上します。

静的分析は、循環的複雑度、保守性インデックス、継承の深さ、クラス結合などのコード品質メトリックを分析するために使用されます。コード品質を分析するために市場で入手可能なさまざまなツール。C#開発者は、Microsoft Visual Studioを使用してメトリックレポートを生成します。


-3

静的コード分析は自動化ツールによって実行され、コードがコミットされる前にコードレビューが行われます。

コードレビューのためのツール:

1.比較を超えて

2.バージョン管理ソフトウェアの違い

これらのツールは、古いバージョンと新しいバージョンの違いを生成するために常に使用されます。


2
1)コードがコミットされる前である必要はありません-コードレビューは人によって行われます。2)コードレビューツールは「興味深い」として、diffツールの説明は確かにレビュー用のコードを識別するために使用されるツールです。プロセスの管理に役立つコードレビューツールについてたずねられました(たとえば、KilnとCrucibleを使用しました)。
Murph、2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.