SonarQube をどのように実装し、その倧きな可胜性を実珟したか

SonarQube をどのように実装し、その倧きな可胜性を実珟したか

私たちは、SonarQube コヌドの品質を継続的に分析および枬定するためのプラットフォヌムを、National Settlement Depository の DPO システム (Alameda 預蚗および枅算䌚蚈システムぞの远加) 開発の既存のプロセスに実装した経隓を共有したいず思いたす。

National Settlement Depository (モスクワ取匕所グルヌプ䌁業) は、50 兆ルヌブル以䞊の䟡倀があるロシアおよび倖囜の発行䜓の蚌刞を保管および蚘録する䞻芁な金融むンフラ䌁業の XNUMX ぀です。 システムによっお実行される操䜜量の増加ず機胜の継続的な増加により、システムの゜ヌス コヌドの高品質を維持する必芁がありたす。 この目暙を達成するためのツヌルの XNUMX ぀は、SonarQube 静的アナラむザヌです。 この蚘事では、SonarQube 静的アナラむザヌを郚門の既存の開発プロセスにシヌムレスに実装した成功䜓隓に぀いお説明したす。

郚門に぀いお簡単に説明するず

圓瀟の胜力には、NSD クラむアントぞの支払い、電子文曞管理 (EDF)、取匕リポゞトリ メッセヌゞの凊理 (取匕所倖取匕の登録)、クラむアントず NSD 間の電子察話チャネルなどのモゞュヌルが含たれたす。 䞀般に、運甚の技術面での倧きな䜜業が行われたす。 私たちはアプリケヌションに基づいお䜜業を行いたす。 窓口の申請はアナリストによっお凊理されたす。アナリストは顧客の芁件を収集し、それをプログラムにどのように組み蟌むべきかずいうビゞョンを私たちに提瀺したす。 さらに、暙準的なスキヌム: コヌド開発 - テスト - 詊行運甚 - 生産回路ぞのコヌドの盎接顧客ぞの配信。

SonarQube を遞ぶ理由

私たちの郚門にずっお、コヌド品質管理甚のプラットフォヌムを実装するのはこれが初めおの経隓です。以前はコヌド レビュヌのみで手動で行っおいたした。 しかし、䜜業量が増倧するに぀れ、このプロセスの自動化が必芁になりたす。 さらに、チヌムには瀟内の開発芏定に詳しくない経隓の浅い埓業員もおり、ミスが倚くなる傟向がありたす。 コヌドの品質を管理するために、静的アナラむザヌを実装するこずが決定されたした。 SonarQube はすでに䞀郚の NSD システムで䜿甚されおいるため、遞択にそれほど時間はかかりたせんでした。 以前は、他の郚門の同僚がこれを䜿甚しお、Alameda システム (NSD 独自の保管および枅算䌚蚈システム)、CFT (䌚蚈、残高、必須報告曞および内郚報告曞の䜜成のための情報システム) などのマむクロサヌビスのコヌドを分析しおいたした。システム。 実隓のために、SonarQube の無料バヌゞョンから始めるこずにしたした。 それでは、私たちのケヌスに移りたしょう。

実装プロセス

我々は持っおいる:

  • TeamCity でのシステムの自動組み立お。
  • GitLab のフィヌチャヌ ブランチからマスタヌ ブランチに MergeRequest 経由でコヌドをアップロヌドするプロセスをセットアップしたす (GitHub Flow に埓った開発プロセス)。
  • SonarQube は、スケゞュヌルに埓っお DPO システムのコヌドを分析するように構成されおいたす。

私たちの目的: AVE の CI/CD プロセスに自動コヌド分析を実装したす。

カスタマむズが必芁: メむン ブランチぞの MergeRequest ごずに静的アナラむザヌによっおコヌドを自動的にチェックするプロセス。

それらの。 タヌゲットの図は次のずおりです。開発者が倉曎を機胜ブランチにアップロヌドするずすぐに、コヌド内の新しい゚ラヌの自動チェックが開始されたす。 ゚ラヌがない堎合は倉曎を受け入れるこずができたすが、そうでない堎合ぱラヌを修正する必芁がありたす。 すでに初期段階で、コヌド内の䞀定数の゚ラヌを特定するこずができたした。 このシステムには非垞に柔軟な蚭定があり、システムやプログラミング スタむルごずに、開発者の特定のタスクに合わせお機胜するように構成できたす。

SonarQube での QualityGate の構成

QualityGate 分析は、むンタヌネットの奥深くで読たれおいるものです。 圓初、私たちは別のアプロヌチを䜿甚しおいたしたが、より耇雑で、ある意味完党に正しいずは蚀えたせんでした。 たず、SonarQube でスキャンを XNUMX 回実行したした。機胜ブランチずその機胜ブランチをマヌゞするブランチをスキャンし、゚ラヌの数を比范したした。 この方法は安定しおおらず、垞に正しい結果が埗られるずは限りたせんでした。 そしお、SonarQube を XNUMX 回実行する代わりに、発生する゚ラヌの数に制限を蚭定し (QualityGate)、アップロヌドしお比范するブランチのみを分析できるこずがわかりたした。

SonarQube をどのように実装し、その倧きな可胜性を実珟したか

今のずころ、ただかなり原始的なコヌドチェックを䜿甚しおいたす。 SonarQube は、Delphi などの䞀郚のプログラミング蚀語ず互換性がないこずに泚意しおください。 珟時点では、私たちのシステムでは PLSql コヌドのみを分析しおいたす。

次のように機胜したす。

  • プロゞェクトの PL/SQL コヌドのみを分析したす。
  • QualityGate は、コミットによっお゚ラヌの数が増加しないように SonarQube で蚭定されおいたす。
  • 最初の実行時の゚ラヌの数は 229 でした。コミット䞭にさらに゚ラヌが発生した堎合、マヌゞは蚱可されたせん。
  • さらに、゚ラヌを修正すれば、QualityGate を再構成するこずが可胜になりたす。
  • テストによるコヌド カバレッゞなど、分析甚の新しい項目を远加するこずもできたす。

䜜業スキヌム

SonarQube をどのように実装し、その倧きな可胜性を実珟したか

スクリプトのコメントを芋るず、機胜ブランチの゚ラヌ数が増加しおいないこずがわかりたす。 それですべおOKです。

SonarQube をどのように実装し、その倧きな可胜性を実珟したか

「結合」ボタンが䜿甚可胜になりたす。

SonarQube をどのように実装し、その倧きな可胜性を実珟したか

スクリプトのコメントを芋るず、機胜ブランチの゚ラヌ数が蚱容倀を超えおいるこずがわかりたす。 ぀たり、すべおが悪いのです。

SonarQube をどのように実装し、その倧きな可胜性を実珟したか

「結合」ボタンは赀色です。 珟時点では、誀ったコヌドぞの倉曎をアップロヌドするこずは犁止されおいたせんが、これは責任のある開発者の裁量で行われたす。 将来的には、そのようなコミットがメむン ブランチに察しお行われないようにするこずができたす。

SonarQube をどのように実装し、その倧きな可胜性を実珟したか

バグに自分で察凊する

次に、SonarQube は厳栌な基準に埓っお分析するため、システムによっお怜出されたすべおの゚ラヌを確認する必芁がありたす。 圌が゚ラヌだず考えおいるものは、実際には私たちのコヌド内の゚ラヌではない可胜性がありたす。 したがっお、これが本圓に間違いであるか、たたは条件を線集する必芁がないかどうかを確認しおメモする必芁がありたす。 したがっお、゚ラヌの数が枛りたす。 時間が経぀に぀れお、システムはこれらのニュアンスを理解できるようになりたす。

私たちは䜕に来たのですか

私たちの目暙は、この堎合、コヌド怜蚌を自動化に移行するこずが適切かどうかを理解するこずでした。 そしお結果は期埅に応えたした。 SonarQube を䜿甚するず、必芁な蚀語を操䜜でき、かなり有胜な分析を行うこずができ、開発者のヒントから孊ぶこずができる可胜性がありたす。 党䜓ずしお、私たちは SonarQube での最初の経隓に満足しおおり、この方向にさらに開発する予定です。 将来的には、コヌドレビュヌにかかる時間ず劎力をさらに節玄し、人的芁因を排陀するこずでコヌドレビュヌを改善できるようになるず期埅しおいたす。 おそらくその過皋で、プラットフォヌムの欠点を発芋するこずになるでしょう。あるいは、逆に、これが倧きな可胜性を秘めた玠晎らしいものであるこずを改めお確認するこずになるでしょう。

この抂芁蚘事では、SonarQube 静的アナラむザヌに぀いお説明したした。 ご質問がございたしたら、コメントにご蚘入ください。 このトピックに興味がある堎合は、新しい出版物で、すべおを正しく蚭定し、そのようなチェックを行うコヌドを蚘述する方法をさらに詳しく説明したす。

テキストの䜜者 アタンダ

出所 habr.com

コメントを远加したす