Codeisok、たたはBadooでのコヌドレビュヌの履歎





読者の皆さん、こんにちは 私の名前はむリダ・アダ゚フです。私はBadooでほが7幎間働いおいたす。 私の珟圚の職務ぱンゞニアリングディレクタヌ品質保蚌ず呌ばれ、実際、䌚瀟では倚くのこずを行っおいたす。品質管理、リリヌス゚ンゞニアリング、開発プロセスず方法論、さらには情報セキュリティです。 私の責任範囲内にある1぀の領域は、コヌドレビュヌです。 今日、私たちのプロセスの歎史ず結果 オヌプン゜ヌスのcodeisokになった  に぀いおお話したす。



この蚘事には歎史的な説明が含たれおいたすが、コヌドレビュヌのためのさたざたなツヌルの技術的な比范はありたせん。 それにもかかわらず、私はそのようなツヌルの䟋を提䟛したす、そしおあなたが質問に興味があるなら、あなたは自分でツヌルをむンストヌルしお比范するこずを詊みるかもしれたせん。

か぀おBadooでコヌドレビュヌはありたせんでした。 実際に。 倉曎されたコヌドに関する情報を亀換する最初の詊みは、単に倉曎をメヌルに送信するこずでした。 ちなみに、Gitも䜿甚されたせんでした。



2011幎の倏、私が最初に入瀟したずき、コヌドのバヌゞョンを保存するためにSVNが䜿甚されたした。 以前は、誰もがCVSで働いおいお、Mercurialに切り替える詊みが1回あったず蚀いたしたが、倱敗したした。 なぜ-誰も芚えおいない。 実際のずころ、Mercurialを詊しおみるこずにしたずき、別のVCSに切り替える必芁は特になかったのではないかず思いたす。 すべおがすべおの人に適しおいたす。 そしお、ファッションのためにファッショナブルなツヌルを必芁ずする人はいたせん。









いずれにせよ、私はそれらの時間を芋぀けたせんでした、そしお、プロゞェクトの私の知り合いはSVNず密接に関連しおいたす。 開発は1぀のブランチトランクで行われたした。 時々、サヌドパヌティの実隓的な事柄が別のSVNブランチで行われ、その埌、共通のブランチで発生したこずを枛らすための苊痛な詊みが行われたした。 驚くこずではありたせん。SVNはブランチでの䜜業に最も理想的なものではありたせん。



䜜業の流れは次のようになりたした。トランクヘッドを取埗し、コヌドを倉曎し、コミットしたすSVNはサヌバヌぞのコミットをすぐに共通コヌドに受け入れたす。 SVNから受け取ったリビゞョン番号を芚えお、チケットに曞き蟌みたす。これにより、レむアりトでどのタスクに入ったのかが明確になりたす。 明らかに、チケットのリビゞョン番号が本番リビゞョンに蚘茉されおいる番号よりも小さい堎合、このタスクのコヌドはコミットの履歎にありたす。



コミット埌、倉曎のある差分がメヌル、䞀般的なメヌリングリストに送信されたした。 これにより、コヌドの倉曎に粟通したい人はこれを行うこずができたす。 圓然、合理化されたコヌドレビュヌプロセスはありたせんでした。



Git



プロゞェクトにちょうど来お、プロセスの正しい構築に倢䞭になっおいたQA郚門の責任者ずしお、そのように生きるこずは䞍可胜であるこずがすぐに私に明らかになりたした。 1぀のブランチで開発されたコヌドは、問題や゚ラヌを分析するのが難しく、レむアりトするのが難しく、ロヌルバックできないので、適切なテストでは完党に倱敗したす。









したがっお、最初に行うべきこずは、パをカツレツから分離するこずです。 その結果、Gitぞの切り替えず機胜ブランチのむデオロギヌがもたらされ、このアプロヌチのすべおの付随的な利点が埗られたした。 2012幎のRIT ++でこの移行に぀いお詳しく説明したのは、 Yuri Nasretdinovずのペアレポヌト です 。



この堎合、䜕らかの方法でタスクのコヌドに加えられた倉曎を远跡する必芁があり、さらにリリヌスブランチで远跡する必芁がありたした。 䜕が行われたか、それをテストする方法、レむアりトする方法、゚ラヌの原因を芋぀ける方法などを理解するために、2぀のこずを行いたした。



  1. 圌らは、メヌルぞの手玙の圢で倉曎を通知する「叀い」メカニズムを残したした。 ちなみに、このアプロヌチは今でも䜿甚されおおり、倚くの゚ンゞニアが䟿利です。コヌドの特定のセクションや特定のタスクで特定の人が行った倉曎をメヌルでい぀でも芋぀けるこずができたす。 今日Badooでは、このメカニズムは通垞のコヌドレビュヌプロセスず䞊行しお機胜したす。

  2. コヌドビュヌアヌを䞭倮のGitリポゞトリにむンストヌルしたした。リポゞトリ内のブランチ、コミット、ファむルなどを確認できたした。タスクコヌドが䞀般的なリポゞトリに入るず、このWebむンタヌフェむスぞの倉曎ぞのリンクがGitフックに登録されたため、誰もが興味を持ちたしたリンクをたどっお倉曎を確認できたす。



その瞬間、cgitのほが完党なクロヌンであるGitPHPは 、この目的に最も適したツヌルのように思えたした。 ミニマルなむンタヌフェむスにより必芁なすべおのこずができるようになり、PHPのオヌプン゜ヌスコヌドにより、必芁に応じお䜕かを倉曎/远加できるため、このツヌルが気に入りたした。



残念ながら、ツヌルドメむンhttp://gitphp.org/は 、今日は死んでいたす。 GitHubのリポゞトリも削陀されたした-どうやら、䜜者はツヌルの開発ず保守をもはや望んでいないようです。 しかし、 https//github.com/xiphux/gitphpを芚えおおり、著者であるChris Hanには非垞に感謝しおいたす 。



私たちはオヌプン゜ヌスを愛し、尊重しおいたす。GitPHPでは、他の倚くのツヌルず同様に、いく぀かの改善を行いたした。 たずえば、2013幎11月のこの蚘事では、ツヌルの速床を最適化する方法ず、Chris Hanがそれらをメむンコヌドにどのように受け入れたかに぀いお話したした。



コヌドレビュヌ



Gitに切り替えお、プロセスをセットアップしたした。 次は 開発における倚くの事柄に戊略的に圱響を䞎えるもう1぀のポむントは、コヌドレビュヌです。 倚くのプラスマむナスもありたすが、どういうわけか別の蚘事で説明したすがあるプロセスは、圓瀟では構築されおいたせん。









コヌドレビュヌを敎理するためのさたざたなツヌルのテストを開始し、トラむアルむンストヌルを行い、問題を調査したした。 たず、BadooのメむンリポゞトリのすべおをPHPコヌドで敎理し、すべおがうたくいった堎合にのみ、䌚瀟党䜓に配垃したいず考えたした。



圓時のプロセスずツヌルに察しお行った最も重芁な芁件は次のずおりです。



  1. 瀟内でツヌルをホストする機胜。 知的ノりハりであるいく぀かの開発がありたすが、垞識の芳点から、゜ヌスコヌドがネットワヌクに挏れるこずは本圓に望たしくありたせん。

  2. コヌドをすぐに衚瀺/修正/チェックできるようにしたす。 すぐにフィヌドバックしおください。 たずえば、GitHubのプルリク゚ストで行われるように、開発者がすべおの準備が敎ったこずを正匏に瀺すたで埅たないでください。 さらに、 コヌドを䞀般的なリポゞトリにプッシュするずきに 、倚くの基本的なチェックを自動的に行いたす。

  3. 実装プロセスは透過的でスムヌズでなければならず、すでに組立ラむンにある珟圚のタスクを劚げおはなりたせん。したがっお、誰も特別な倉曎に気付かないようにしたすが、必芁に応じお人々は新しい機䌚を埗たす。

  4. Jiraずの統合。圓時Jiraはすでに瀟内で広く䜿甚されおいたした。



この段階で、プルリク゚ストのむデオロギヌずは異なる2぀の新しい甚語を䜿甚する必芁がありたす。 これはbrunchdiffずbrunchlogです。 実際、これは単玔にベヌスブランチこの堎合はほずんどの堎合マスタヌずタスクブランチのコヌドの違いです。 Branchdiffは、2぀のブランチヘッド間の完党な差分です。 Branchlog-2぀のブランチのヘッド間の違いを瀺すコミットの完党なログ。 ブランチのトランクコミットが倧きくなるず、branchdiffおよびbranchlogのタスクが倧きくなりたす。



ゲリット



同じ頃、私がメむンのコヌドリポゞトリずPHPを敎理しおいるずき、私たちのsishniksはリポゞトリ倚くのコヌドがありたすでコヌドレビュヌを実斜し、 Gerritを詊しおみるこずにしたした。 この蚘事の Anton Dovgalは、それがどのようであったか、どのツヌルがただ怜蚎されおいるか、どのような問題を望み、解決できたかに぀いお詳しく述べたした。



今埌、BerooではGerritは珟圚䜿甚されおいたせん。 しかし、その時点では、倉曎のコミットに぀いおのみレビュヌを行うこずができたため、他の郚門には適しおいたせんでした。 コヌドは、ブランチ党䜓branchdiffのコヌドをレビュヌできたせんでした。 正盎に蚀っお、今できるかどうかはわかりたせん。 したがっお、私たちは䌚瀟党䜓のコヌドレビュヌのツヌルずしおGerritから拒吊したした。









Gitlab / GitHub



圓時、バックオフィスの責任者であるBoris Chernetsovは、コヌドレビュヌのためのツヌルの孊習を支揎したした。 Boryaはさたざたなツヌルを配眮し、それらがどのように機胜するかを瀺し、これらのツヌルがサポヌトするレビュヌプロセスを提案したした。



しかし、圓時考慮されたツヌルはどれも私たちに適しおいたせんでした暙準的なフレヌズは、あなた自身の自転車を発明する正圓な理由です。 私が芚えおいる限り、䞻な問題は次のずおりでした。



  1. 倚くのツヌルは、自己ホスト型゜リュヌションを提䟛したせんでした。 そしお、私たちにずっおこれは基本的な芁件の1぀でした。

  2. 事前受信フックがないため、怜蚌が遅れ、開発サむクルが長くなりたした。 すべおの自動チェックは、プルリク゚ストの䜜成埌、事埌のみ実行できたす。 これは、たずえばGitHubの仕組みです。これは有料サヌビスでもありたす。

  3. GitLabは非垞に生々しく、倚くのバグが含たれおいたしたが、最初は本圓に気に入っおいたした。 宣蚀された機胜の倚くは機胜したせんでした。 今日、私が知る限り、圌らはずっず先を行き、プロゞェクトをうたく開発したした。



Gitoriousなどのツヌルをさらに調べたしたが、GitLabに比べおも機胜がはるかに劣っおいお、必芁な機胜の倚くを提䟛しおいたせんでした。



コヌドレビュヌ甚のGitPHP



芋぀けたツヌルに䞍満を感じおいた私たちは、たったく異なる方法を採甚するこずにしたした。 私たちに100適したツヌルはなく、GitPHPコヌドの線集はそれほど難しい䜜業ではないので、GitPHPでコヌドをコメントするための最も簡単なメカニズムを䜜っおみたせんか 特に、サヌバヌにコヌドを保存する必芁がある他のすべおのもの、アクセス制埡Gitosis 、チケットぞのバむンド、ブランチぞの倉曎の衚瀺などはすでに存圚したす。



圌らはそれを決めたした。



最初のバヌゞョンを䜜成するのに時間がかかりたせんでした。 Nikolay Krapivnyは、 Atlassian Crowdを介しお承認を行うのを助け、数日でコヌド行をコメントアりトする最も簡単な圢匏を提䟛したした。 そしお、それがどれほど䟿利で䟿利なのかを理解したしたチケットのリンク誰もが慣れおいる以前にあったリ​​ンクをクリックするず、コヌドにコメントを曞くこずができたす。



コメントは電子メヌルで開発者に送信され、公開メヌリングに配眮できたす。 たた、Jiraのチケットに远加されたした。 ずおも快適です。 別個の「レビュヌ甚チケット」の䜜成に煩わされるためたずえばCrucibleのように、GitPHP内でレビュアヌを割り圓おるレビュアヌはJiraでの開発埌にチケットが転送されたものです、別個のレビュヌステヌタスなどは必芁ありたせん。 コメントがあり、チケットが再開されたした-぀たり、コヌドを修正する必芁がありたす。 すべお順調であれば、チケットをさらに転送したす。



このシンプルなスキヌムはプロゞェクトに有機的に適合しおおり、開発者はそれを非垞に気に入っおおり、迅速か぀簡単に取り䞊げられお䜿甚され始めたした。



る぀がずFishEye



しかし、バック゚ンドの開発者がすぐにアむデアを採甚し、ツヌルを広く䜿甚するようになり、䞀郚の開発者も開発に貢献したにもかかわらず、すべおが完璧ずいうわけではありたせんでした。



モバむル開発者は最初は匷く抵抗し、ツヌルの䜿甚を拒吊したした。 蚀い蚳は異なっおいたしたむンタヌフェヌスが快適ではないずいう事実から始めお、圌が緊急に必芁ずするものがないずいう事実で終わる。



垂堎に出回っおいるコヌドレビュヌツヌルを数回レビュヌし、状況を改善するこずを期埅しお適切なものを芋぀けようずしたした。 ツヌルは実際に開発され、倚くの䟿利な機胜を远加したすが、それほど倚くの機胜は远加されたせん。 しかし、これらすべおの問題は新しいものです。



そのため、次のレビュヌツヌルが調査に参加したしたUpsource、Crucible、GitLab、Phabricator、Review Board、Kallitheaなど。 残念ながら、それらの間で理想的なツヌルは芋぀かりたせんでした。



それにもかかわらず、CrucibleをGitPHPず䞊行しお䜿甚し、これら2぀のツヌルの䜜業を1幎間比范したした。 Crucibleは以前のプロゞェクトで倚くのモバむル開発者によっお䜿甚され、肯定的なフィヌドバックを提䟛したした。 圌はJiraずの最高の統合の1぀を持っおいたしたが、これは驚くこずではありたせん-圌もAtlassianによっお䜜られおいたす。



刀明した䞻なCrucibleの問題はパフォヌマンスです。 いく぀かの機胜を無効にしお、機胜を倧幅に削枛する必芁さえありたした。



開発者が掚奚する異なるハヌドりェア、異なる最適化を詊したしたが、䜕も達成したせんでした。 このツヌルから絞り出した最速の凊理は、プッシュ埌にツヌルにコヌドが衚瀺される10分前でした。 たた、いく぀かのタスクの堎合、䟝存関係は明確ではなく、数時間埅぀必芁がありたした。 リポゞトリずコミットの数を増やした埌、速床は非線圢に䜎䞋したした。 機胜の開発ず配信のダむナミクスにずっお、これは適切ではありたせんでした。



Crucibleが内郚で構築および保存し、差分、ログ、および非難ブロックを衚瀺するための基瀎ずなるむンデックスは、非垞にゆっくりず構築されたす。 さたざたなデヌタベヌス゚ンゞンも詊したした。 時々、䜕らかの未知の理由で、クルヌシブルはゞラを「䞭断」し始めたした。 䞡方のシステムを再起動するこずで凊理されたした。



結局、GitPHPも䜕倍も高速に動䜜するこずがわかりたした。モバむル開発者の芁求に応じお、倚くのりィッシュリストを远加するこずができたした。Crucibleには倚くの問題がありたす。 したがっお、Crucibleで1幎間遊んだ埌、モバむル開発者にもGitPHPを実装するずいう匷い意思決定を行いたした。



珟圚、このツヌルはすべおの郚門の暙準ずしお圓瀟で䜿甚されおいたす。 そしお、Gerritで遊んだナヌザヌはこのツヌルを䜿甚し、モバむル開発者、PHP開発者、およびレむアりトデザむナヌを持぀JS開発者、䞀般的にはすべおすべおを䜿甚したす。



コデむ゜ク



もちろん、GitPHPの䜿甚を開始しお以来、倧量の氎が流れおおり、元のツヌルをほずんど認識できたせんでした。 圌は、新しい機胜、新しいデザむン、倚くの远加機胜、最適化、改善を受けたした。









JiraずCrowdだけでなく、たずえばRedmineなど、いく぀かの認蚌方法を远加したした。 構文の匷調衚瀺を倉曎し、サむドバむサむドモヌドを完党に曞き盎したした。 Gitosisを取り陀き、リポゞトリ、ナヌザヌ、およびWebむンタヌフェむスを介したそれらのアクセスの管理を実装したした-簡単で䟿利です SashaずZhenya 、ありがずう。 ファむル Sasha 、ありがずう、拡匵子、diffの倉曎、レビュヌ甚のフィルタヌを远加したした。 すべおをドッカヌで包むこずで楜噚のむンストヌルを簡単にしたした。 デザむンを完党に倉曎したした。 たあ、コヌドレビュヌを行うこずの可胜性を忘れないでください。コヌドレビュヌも進化し、はるかに䟿利になりたした。



䞀般的に、このツヌルは完党に異なるものになったため、新しい名前をCodeisokず名付けたした 。 「ok from code」ず衚瀺され、コヌドがすべお正垞であるこずを意味したす。



この衚珟は瀟内のミヌムであり、ダむアログで䜿甚されたす。



「タスクを確認しおください。」

-芋た、codeisok'nul



そしお本日、 Codeisokがオヌプン゜ヌスコミュニティで利甚可胜になったこずをお知らせいたしたす。 このツヌルはすでにBadoo以倖のいく぀かのプロゞェクトで機胜しおおり、肯定的なレビュヌがありたす wetrend.comやturbocontract.ruなど 。 あなたもそれを気に入っお、圹に立぀こずを願っおいたす。 私たちは、改善ずプルリク゚ストを喜んで受け入れたす-私たちは垞にオヌプン゜ヌスツヌルの開発を手䌝っおくれる人たちに喜んでいたす。



たた、この機䌚を利甚しお、プロゞェクトの開発ず改善にご協力いただいたすべおの方々に深く感謝いたしたす。 みんなありがずう あなたは信じられないほどクヌルです



ニキル・ノァヌマ

スタス・むグナテンコフ

アレクサンダヌ・むズマむロフ

アントン・ドノガル

ナヌリ・ナスレッディノフ

ニコラむ・クラピブニヌ

コンスタンチン・ゞュむン

ミロス・ポポビッチ

アレクサンダヌ・トレガヌ

゚フゲニヌ・マクロフ

デニス・コレネフスキヌ

パベル・マトリギン

アレクサンダヌ・グリシン

ロヌマン・ラザレフ

アレクサンダヌ・オビダンキン



信頌できるコヌドで

むリダ・アゞェ゚フ、バドゥ



All Articles