Swiftで静的コード分析を行う方法





静的コードアナライザーのトピックは使い古されています。 過去6か月間、この問題に関するスピーチなしの会議は事実上ありませんでした。 しかし、彼らは皆、内部からアナライザーについて話し、彼らの仕事のメカニズムを示しています。 同時に、彼らは本来意図されていたものを正しく説明することを忘れます。 ほとんどの場合、静的アナライザーの作業の理論的な部分が考慮され、実際の実装は行われません。 したがって、商用プロジェクトの実際のチームの静的アナライザーが追求する目標についてお話します。 また、当社のさまざまなアナライザーを使用した作業の編成の例を検討してください。







静的分析とは何ですか?



これは、実行せずに実行されたプログラムコードの分析です。 したがって、プログラムの実行時エラーはそれを使用してキャッチできません。 静的分析は、プログラムのテキストコードでのみ機能します。これは、開始するのに数秒かかりますが、バグを見つけるまでの時間を節約します。







アナライザーが機能する方法はいくつかあります。









静的解析を実装する理由



バグをできるだけ早く見つけるには、アナライザーが必要です。 私たちの場合、これはプロジェクトの編集です。 後のバグが見つかると、開発者とビジネス全体のコストが高くなります。







ただし、この目標はあまりにも一般的であり、特別なセマンティックの負荷はかかりません。 それをいくつかの小さなものに分解してみましょう:









カスタムルールを実装する方法



Swiftlint現在、 Swiftで最も人気のあるコードアナライザーです。 また、 テーラーを使用します。 最初の方法では、正規表現に基づいて独自のルールを作成できます。これにより、スタイルガイドのほとんどのルールを実装できます。







Swiftlintを使用すると、プロジェクトにある.swiftlint.yml構成ファイルに配置する必要があるカスタムルール作成できます 。 カスタムルールを記述する言語には、多くのパラメーターがあります。









たとえば、あなたの会社では弱いもののみを使用し、所有していないものは使用しません。 後者のパフォーマンスは前者よりも高くなっています。 しかし、弱点がアプリケーションをクラッシュさせないという事実は、あなたにとってより重要です。 これは正規表現を使用して簡単に実行でき、カスタムルールを作成できます。







unowned: name: "Unowned" regex: 'unowned' message: "Please use `weak` instead. " severity: error
      
      





コメントに関する別の例。 プロジェクトにヘッダーを書き込まないとします。 これには正規表現も理想的です。







 no_header_comments: name: "Header Comments" regex: '//\s*Created by.*\s*//\s*Copyright' match_kinds: - comment message: "Template header comments should be removed."
      
      





コードアナライザーのシステムを実装する方法



最も興味深い部分は、静的分析プロセスのスケーリングと自動化です 。 これは、複数のプロジェクトがあり、すべてのカスタムルールを同じにする場合に特に重要です。 すべてのアナライザーには、設定が保存される特定の構成ファイルがあります。 プロジェクトには、.swiftlint.yml、.tailor.yml、cpd_script.phpの3つのファイルがあります。

最後のファイルは、phpで記述されたスクリプトです。 迅速なプロジェクトのコピー&ペースト検出器によって生成されたファイルの分析を開始します。 その構成については、次の記事で説明します。







最も簡単なサポートオプションは、これらのファイル用に個別のリポジトリを作成することです。 このようにします。 サブモジュールを介してプロジェクトに接続できます。 構成ファイルの設定が更新された場合、サブモジュールを更新するだけで十分です。 次に、プロジェクトに実際のルールがあります。

さらに、いくつかの追加のgithub関数を使用できます。 課題システムを使用して、新しいカスタムルールを作成するか、現在のルールについて議論します。 これにより、ルールが拒否された理由を理解できます。 ステータスを便利に監視して、構成ファイルを変更します。

このシステムはCIでうまく機能します。 アナライザーがコード内に少なくとも1つの欠陥を検出した場合、プロジェクト内のすべてのプル要求を維持できないように構成できます。







分析システムを維持することを忘れないでください



静的分析は、アプリケーションのエラーを見つける最も早い方法の1つです。 その結果、最も安い。 静的アナライザーの構成ファイルを保管する最も単純なシステムが、プロジェクトを「同じ」ものにするのに役立つことを願っています。 また、テスト段階の前に複数のバグを見つけることができます。








All Articles