あなたの問題は、私が SQA https://sqa.stackexchange.com/a/3082で回答したものと似ています。この問題は、ツーリングを少し簡単にする Java に関連していましたが、以下にいくつかの提案があります。
他の多くの回答は、Python 用の優れたランタイム ツールがないことを示唆しています。私はいくつかの点でこれに同意しません:
- カバレッジツールは非常にうまく機能します
- Java のツールに関する私の経験に基づくと、Python の静的および動的分析ツールは、強く型付けされた動的でない言語よりも弱いですが、ここで優れたヒューリスティックを提供するには十分に機能します。非常に多くの異常な数の動的機能 (メソッドの追加と削除、メソッドとプロパティの呼び出しのインターセプト、インポートの操作、名前空間の手動変更など) を使用しない限り、問題はこのダイナミズムに関連している可能性があります.. .
- Pylint はより単純な問題を取り上げ、動的なクラス/インスタンスの変更とデコレーターの問題を検出しません。したがって、メトリック ツールがこれらを測定しなくても問題ありません。
- いずれにせよ、どこに焦点を当てることができるかは、依存関係グラフ以上のものによって決定できます。
コードを選択するためのヒューリスティック
改善するコードを選択する際には、個別に、または組み合わせて機能するさまざまな考慮事項があることがわかりました。最初に必要なのは、生産的な作業の継ぎ目を見つけることだけであることを忘れないでください。作業を開始する前に、絶対に最悪のコードを見つける必要はありません。
あなたの判断を使用してください。
コードベースを数サイクル使用すると、膨大な量の情報が得られ、作業を継続できる状態になります (さらに多くの作業が必要な場合)。
そうは言っても、ここに私の提案があります:
ビジネスにとって高い価値: たとえば、会社に多額の費用がかかる可能性のあるコード。これらの多くは (重要であるため) 明らかであるか広く知られているか、またはランタイム プロファイラーが有効になっているシステムで重要なユース ケースを実行することによって検出される場合があります。カバレッジを使用します。
静的コード メトリクス: メトリクスはたくさんありますが、気になるものは次のとおりです。
これらのツールはファイルベースであることに注意してください。プロジェクト自体に何百ものモジュール(ファイル)があると述べているので、これはおそらく十分な解決策です。
頻繁に変更される: 頻繁に変更されるコードは非常に疑わしいものです。コードは次の場合があります。
- 歴史的に多くの欠陥があり、経験的には今後もそうなる可能性がある
- 機能開発からの変更を受けている (VCS に多数のリビジョンがある)
この回答で後述するような VCS 視覚化ツールを使用して、変化の領域を見つけます。
カバーされていないコード: テストでカバーされていないコード。
単体テスト、他の自動テスト、およびカバレッジのある一般的なユーザー テストを実行する (または実行できる) 場合は、ほとんどカバレッジのないパッケージとファイルを調べてください。カバレッジがない理由は 2 つあります。
- コードは必要 (そして重要) ですが、まったくテストされていません (少なくとも自動的に)。これらの領域は非常にリスクが高い
- コードは使用されていない可能性があり、削除の候補です。
他の開発者に尋ねる
勤続年数の長い開発者とコーヒーを飲みながら収集できる「におい」の指標に驚くかもしれません。最も勇敢な魂だけが挑戦するコードベースの汚れた領域を誰かがクリーンアップしてくれれば、彼らはとても喜ぶに違いありません。
可視性 - 時間の経過に伴う変化の検出
あなたの環境には DVCS (Git や Mercurial など) または少なくとも VCS (SVN など) があると想定しています。何らかのイシュー トラッカーやバグ トラッカーも使用されていることを願っています。もしそうなら、利用可能な膨大な量の情報があります。開発者がコメントと問題番号で確実にチェックインしている場合はさらに良いでしょう. しかし、それをどのように視覚化して使用するのでしょうか。
単一のデスクトップで問題に取り組むこともできますが、 Jenkinsなどのツールを使用して、継続的インテグレーション (CI) 環境をセットアップすることをお勧めします。答えを短くするために、今後はジェンキンスを想定します。Jenkins には、コード分析に役立つ多数のプラグインが付属しています。私が使う:
これにより、時間の経過に伴う変化が可視化され、そこから掘り下げることができます。たとえば、PyLint 違反がモジュールで増加し始めたとします。私は増加の証拠を持っており、これが発生しているパッケージまたはファイルを知っているので、誰が関与しているかを突き止めて話をすることができます。
履歴データが必要で、Jenkins をインストールしたばかりの場合は、プロジェクトの開始時に開始して現在まで一連のジャンプを行う手動ビルドをいくつか実行できるかどうかを確認してください。VCS からマイルストーン リリース タグ (または日付) を選択できます。
前述のように、もう 1 つの重要な領域は、コード ベースの変更箇所を検出することです。これについては、 Atlassian Fisheyeがとても気に入っています。コミット メッセージ (バグ ID など) やファイル コンテンツの検索が得意なだけでなく、メトリクスを簡単に確認できます。
- ディレクトリおよびサブディレクトリ別の行数
- 任意の時点または特定のディレクトリおよび/またはファイルのコミッター
- ソースコード内の時間と場所の両方によるコミットのパターン