コヌドむンスペクタヌにあなたを愛させる方法





コヌド怜査に関しおは、人々は誰がそれを行っおいるかに焊点を合わせる傟向がありたす。ただし、コヌドを䜜成した開発者は、レビュヌ担圓者ず同じようにプロセスで重芁な圹割を果たしたす。怜査甚のコヌドを準備するための掚奚事項はほずんどないため、䜜成者は単に無知から間違いを犯すこずがよくありたす。



この蚘事では、䜜成者ずしおコヌド怜査に参加するためのベストプラクティスをたずめおいたす。あなたが読み終えるず、あなたは圌らがあなたぞの愛をもっお燃えるような完璧な倉曎のセットを怜査官に送り始めるでしょう。



しかし、私はコヌドむンスペクタヌが私を愛しお茝いおほしくない



そしお、圌らはただありたす。謙虚に。人類の歎史の䞭で、圌が生涯愛されすぎたず圌の死の床に䞍平を蚀った人はただいたせん。



なぜコヌド怜査を改善するのですか



効果的な怜査技術を孊ぶこずで、怜査官、チヌム、そしお最も重芁なこずに、あなたの生掻が楜になりたす。



  • 加速された知識移転プロセス。䞀連の倉曎を適切に準備するず、退屈なスタむルの欠陥ではなく、成長する必芁のある領域に怜査官の泚意が向けられたす。そしお、建蚭的な批刀を倧切にしおいるこずを明確にするず、レビュヌ担圓者はフィヌドバックにさらに力を入れ始めたす。
  • 他の人のための䟋。あなたの実行における良いコヌド怜査の実践はあなたの呚りの人々のための基準を蚭定したす。通垞、優れた手法が採甚されたす。぀たり、同僚の誰かがレビュヌのためにコヌドを送信するず、より簡単になりたす。
  • 最小限の競合。コヌド怜査はしばしばチヌムに緊匵をもたらしたす。責任を持っお慎重にビゞネスに取り組むず、玛争が発生する頻床が䜎くなりたす。


ゎヌルデンルヌルレビュヌアの時間を倧切にする



これは圓たり前のようですが、怜査官を個人的な品質管理の専門家ずしお扱う著者によく出くわしたす。そのような人々は、゚ラヌの少なくずも䞀郚をキャッチしたり、チェックに䟿利な䞀連の倉曎を加えたりするために指を打぀こずはありたせん。



あなたの同僚は、限られた泚意を払っお毎日仕事に来たす。圌らがその䞀郚をあなたに捧げるず、圌らはもはやこのリ゜ヌスを圌ら自身の仕事に費やすこずができなくなりたす。圌らの時間を最倧限に掻甚するこずは、単玔な正矩の問題です。



参加者がお互いを信頌できる堎合、コヌドレビュヌははるかに成功したす。あなたが圌の発蚀を真剣に受け止めるこずを圌が知っおいるならば、あなたの怜査官は努力を惜したないでしょう。審査官を克服する必芁のある障害ずしお認識した堎合、審査官からの䟡倀の䜎い掚奚事項を受け取るこずになりたす。



技術



1.



最初に自分でコヌドを確認したす同僚にコヌドを送信する前に、それを読んでください。゚ラヌをキャッチするこずに限定しないでください-このフラグメントを初めお芋るこずを想像しおください。それに぀いお䜕が混乱する可胜性がありたすか



私の経隓では、コヌドの蚘述ず線集の間に䌑憩を取るこずが圹立぀堎合がありたす。人々は䞀日の終わりにコヌドの新しい郚分を送信するこずがよくありたすが、怠慢によっお䜕かを芋逃す可胜性が最も高いのはこの期間です。朝たで埅っお、䞀連の倉曎を芋盎しおから、それを同僚に枡したす。







どんな銬鹿がそれを曞いたのですか

Cron Jobsず月のサむクルの同期ETL




パむプラむンを自然ず調和させるために、同期ロゞックを远加したした。怜蚌者の䜜業環境を可胜な限りシミュレヌトしたす。圌が行ったのず同じ比范ナヌティリティを䜿甚したす。愚かなバグは、通垞のコヌド゚ディタよりもこれらのナヌティリティでよく芋぀かりたす。



自分が完璧だず期埅しないでください。必然的に、バグ修正埌に削陀し忘れた郚分や、削陀しようずしおいた挂遊ファむルを含むコヌドを送信するこずになりたす。それは䞖界の終わりではありたせんが、それでも远跡する䟡倀がありたす。間違いのパタヌンに気づき、それを防ぐためにどのシステムを実装できるかを考えおください。同じ゚ラヌが頻繁に発生する堎合、怜査官はあなたが自分の時間を倧切にしおいないず結論付けたす。



2.倉曎セットの明確な説明を蚘述したす



前回のメンタリングの仕事では、経隓豊富なプログラマヌず時折ミヌティングを行いたした。最初の䌚議の前に、圌は私が線集した゜フトりェア蚭蚈文曞を入手するように私に頌みたした。圌に曞類を枡したずき、私はプロゞェクトが䜕であるか、そしおそれが私のチヌムの目暙にどのように関連しおいるかを説明したした。私のメンタヌは眉をひそめ、率盎に蚀った。「あなたが今蚀ったこずはすべお、文曞の最初のペヌゞにあるべきです。」



そしお圌は正しかった。私は自分のチヌムの開発者の期埅を蟌めおドキュメントを䜜成したしたが、郚倖者に読たれる可胜性があるこずを考慮しおいたせんでした。聎衆は私の郚門の境界に限定されおいたせんでした-パヌトナヌチヌム、メンタヌ、昇進に぀いお決定を䞋した人々がただいたした ..。文曞は、すべおが圌らに明確になるように曞かれおいるべきでした。この䌚話の埌、私は垞に理解に必芁な文脈で自分の䜜品を発衚しようずしおいたす。



倉曎セットの説明には、読者が必芁ずする可胜性のある背景情報を含める必芁がありたす。レビュヌ担圓者を察象に説明を曞いおいる堎合でも、レビュヌ担圓者のコンテキスト情報が思ったより少ない可胜性があるこずに泚意しおください。さらに、将来、他の同僚もこのコヌドを䜿甚する必芁がある可胜性がありたす。倉曎の履歎を衚瀺するずき、圌らはあなたの意図を明確にする必芁がありたす。



倉曎セットの目的ず、その方法を遞択した理由の抂芁を説明したす。



あなたは偉倧な蚘述を曞くの芞術に深くダむブしたい堎合は、「読み どのようにGitがメッセヌゞをコミット曞くためにクリス・ビヌムによっお」ず「 私のお気に入りのGitはコミットデビッド・トンプ゜ン」。



3.単玔なものを自動化



するフロヌティングカヌリヌブレヌスや自動テストの問題などの小さなこずを怜査官に頌っおいる堎合、圌の時間を無駄にしおいるこずになりたす。







すべおが構文に合っおいるかどうかを確認したすか私はコンパむラに目を向けたすが、圌の時間を無駄にするのは残念です。



自動テストは、チヌムの䞀員ずしおの暙準手順の䞀郚ず芋なす必芁がありたす。怜査は、継続的な統合環境での䞀連の自動チェック党䜓に合栌した堎合にのみ開始され たす。



チヌムが悲劇的に劄想的であり、継続的な統合を拒吊する堎合は、瀟内で自動監査を蚭定したす。コミット前のフック、リンタヌ、フォヌマッタヌを開発環境に実装しお 、すべおの芏則に埓い、意図した動䜜がコミットからコミットたで持続するようにしたす。



4.コヌド自䜓が質問に答えおいるこずを確認したす



この写真の䜕が問題になっおいたすか







機胜の目的がわかりたせん。

そしお、これはfrombobulateの実装がない堎合に呌び出したずきにFrombobulatorが枡された堎合です。




著者は私が関数を理解するのを手䌝っおくれたしたが、次の読者はどうですか倉曎の履歎を掘り䞋げお、すべおの議論を読み盎したすか著者が私の机に来おすべおを盎接説明するずきはさらに悪いこずです。第䞀に、それは私が集䞭するのを劚げたす、そしお第二に、生きおいる魂はもはや健党な情報にアクセスするこずができなくなりたす。



怜査官がコヌド内のポむントに぀いお混乱を衚明した堎合、あなたの仕事はその人の状況を明確にするこずではありたせん。党員の状況を䞀気に明らかにする必芁がありたす。







- こんにちは

-6幎前にbill.pyを曞いたずき、なぜt = 6になったのですか

-お電話いただきありがずうございたす。これは6の販売皎によるものです。

- もちろん

-実装の決定を正圓化するための優れた方法。




質問に察する最良の答えは、それを削陀するコヌドリファクタリングです。ロゞックを倉曎する方法を明確にするために、䜕の名前を倉曎できたすかコメントは蚱容できる解決策ですが、自然にそれ自䜓を文曞化するコヌドの背景に間違いなく負けたす。



5.倉曎を郚分的に入力したす



境界を広げるこずは悪い習慣であり、コヌドを怜査するずきによく芋られたす。開発者はロゞックのバグを修正するこずを玄束したすが、途䞭でむンタヌフェむスの欠陥に遭遇したす。 「たあ、ずにかくこの䜜品を扱っおいるので、同時に修正したす」ず圌は思いたす。その結果、混乱が始たりたす。レビュヌアは、どの倉曎がタスクAで機胜し、どの倉曎がタスクBで機胜するかを把握する必芁がありたす。



最良の倉曎セット は1぀のこずを実行したす。倉曎がより正確で単玔であるほど、怜査官はコンテキストを念頭に眮くこずが容易になりたす。関係のない倉曎を共有するこずで、耇数のピアに䞊行しおレビュヌを䟝頌するこずもできるため、コヌドがより早く返送されたす。



6.



機胜的倉曎ず非機胜的倉曎を分離するスケヌリングの制玄から別のルヌルに埓いたす。機胜的倉曎ず非機胜的倉曎を混圚させないでください。



コヌド怜査の経隓がほずんどない開発者は、このルヌルに違反するこずがよくありたす。それらはある皮の内蚳の倉曎を行い、コヌド゚ディタはファむル党䜓のフォヌマットを即座に倉曎したす。開発者は、䜕が起こったのかを把握しおいないか、これがさらに優れおいるず刀断しおコヌドを送信したす。コヌドでは、1぀の機胜倉曎が機胜しない倉曎を含む数癟行に埋め蟌たれおいたす。







機胜的な倉曎はありたすか



そのような混乱は、怜査官の前で唟を吐くようなものです。フォヌマットのみの倉曎は簡単に確認できたす。機胜の倉曎も。フォヌマット倉曎の海での1぀の機胜障害は、無駄になり、狂っおしたう可胜性がありたす。



さらに、開発者はリファクタリングを䞻芁な倉曎にタむムリヌに組み合わせるのが奜きです。私は同僚の偎でコヌドのリファクタリングを匷く承認したすが、圌らが同時に新しい動䜜を実装する堎合は承認したせん。







リファクタリングの最䞭に埋め蟌たれた動䜜の倉曎



コヌドの䞀郚でリファクタリングず動䜜の倉曎の䞡方が必芁な堎合は、プロセスを2぀たたは3぀のセットに分割する必芁がありたす。



  1. 珟圚の動䜜のテストを远加したすない堎合
  2. テストで䜕も倉曎せずにコヌドをリファクタリングしたす


レビュヌアは、第2フェヌズでテストをそのたた維持するこずにより、リファクタリングが動䜜に違反しないこずを確認できたす。したがっお、第3段階では、ここで䜕がリファクタリングされおいるのか、䜕が動䜜を倉曎するのかを理解する必芁はありたせん。結局のずころ、事前に䞀方を他方から分離しおいるのです。



7.倧きすぎるチェンゞセットを



分割する膚匵したチェンゞセットは、広倧な境界の醜いいずこのようなもの です。状況を想像しおみおください。開発者は、機胜Aを実装するには、最初にラむブラリBずCのセマンティクスを修正する必芁があるずいう結論に達したした。倉曎がほずんどない堎合は、䜕があっおも、これらの倉曎が広がり、出力は倉曎の膚倧なリストになりたす。



倉曎ログの耇雑さは、圱響を受ける行の数ずずもに指数関数的に増倧したす。倉曎が400行以䞊に圱響する堎合は、怜査を芁求する前にそれらをチャンク化する方法を探したす。



たぶん、すべおを䞀床に行う代わりに、最初に䟝存関係を操䜜し、次のセットで新しい機胜を実装するこずが可胜になるでしょうか機胜の半分を今実装し、残りの半分を次のフェヌズで実装する堎合、コヌドを正垞に保぀こずは珟実的ですか



コヌドを分割しお機胜するわかりやすい郚分を䜜成する方法を考えるのは面倒な堎合がありたす。ただし、これによりフィヌドバックが向䞊し、レビュヌ担圓者の耇雑さが軜枛されたす。



8.批刀を芪切に受け入れる



テスト党䜓を台無しにする最も確実な方法は、敵意を持っお批刀するこずです。倚くの開発者は自分の仕事に誇りを持っおおり、自分の仕事を自分自身の延長ずしお認識しおいるため、抵抗するのは難しい堎合がありたす。そしお、怜査官が無知なコメントをしたり、人に行ったり するず、問題はさらに耇雑になりたす。



最終的に、䜜成者であるあなたは、 コメントぞの応答方法を自由に決定できたす。怜査官の蚀葉を、あなたの性栌の評䟡ずは䜕の関係もないコヌドの客芳的な議論ずしお扱っおください。あなたが防埡的になるならば、それは悪化するだけです。



私は助けず利益を埗るための詊みずしおコメントをずるようにしおいたす。レビュヌアがコヌドにばかげた間違いを芋぀けた堎合、私は本胜的に蚀い蚳を始めたす。しかし、私は代わりに圌の芳察を控えお賞賛したす。







-1900幎1月ず2月は、機胜したせん。

-たさに、よく知られおいたす




奇劙なこずに、怜査官がコヌドに明らかでない欠陥を芋぀けたずいう事実は良い兆候です。これは、スキャン甚のファむルの準備に長けおいるこずを瀺しおいたす。ずさんなフォヌマット、悪い名前、その他の目立぀ものがない堎合、レビュヌ担圓者はロゞックず蚭蚈に深く入り蟌み、より䟡倀のある芳察を行うこずができたす。



9.怜査官が間違いを犯した堎合は蟛抱匷く



時々、怜査官が単に間違っおいるこずが起こりたす。圌はあなたがバグを怍えるこずができるのず同じように完党に通垞のコヌドを読み間違える可胜性がありたす。そのような堎合、倚くの開発者は激しく自分自身を守り始めたす。圌らは誰かが自分の仕事を批刀しおいるこずに腹を立おおおり、䜕にも基づいおいたせん。



ただし、レビュヌ担圓者が間違っおいおも、ただ考えるこずがたくさんありたす。圌が䜕かを読み間違えた堎合、他の人が将来同じ間違いをする可胜性はどのくらいありたすか読者は、芋たバグがここにないこずを確認するために、コヌドを前埌に調べなければならないのではないでしょうか。







-すべおのNewNameLen文字を収容するのに十分なメモリが名前にあるかどうかの怜蚌が実行されなかったため、ここにはバッファオヌバヌフロヌがありたす。

-それは私のコヌドにありたすか考えられないコンストラクタヌはPurchaseHatsを呌び出し、CheckWeatherを呌び出したす。これは、バッファヌ長が䞀臎しない堎合に゚ラヌをスロヌしたす。最初に200,000行のコヌドを読んでから、どこかで私が間違っおいた可胜性をあえお認めたす。
ここですべおが正垞であるこずを䞀目で理解できる



ように、リファクタリングする方法、たたはコメントを远加する方法を怜蚎しお ください。誀解が蚀語のあたり知られおいない機胜の䜿甚に起因する堎合は、完党な知識を必芁ずしないメカニズムを䜿甚しおコヌドを曞き盎しおください。 10.わかりやすい反応を䞎える







私はしばしばそのような状況に陥りたす。私は人にコメントを送り、圌はそれらのいく぀かを考慮しおコヌドを曎新したすが、同時に圌は黙っおいたす。䞍確実な時期がありたす。圌は残りのコメントを芋逃したか、ただ修正䞭です。仮に、すでに行われたこずを確認し始めるず、このコヌドがただ機胜しおいるこずが刀明する可胜性があり、私は時間を無駄にしおいたす。私たちが埅぀ず、行き詰たる可胜性がありたす-私たちは座っお、お互いから次のステップを埅ちたす。



チヌム内で特定のアクションの順序を確立しお、珟時点で誰が「バトン」を持っおいるかが垞に明確になるようにしたす。䜕が起こっおいるのか誰も理解しおいないずいう理由だけで、プロセスが遅くなるこずを蚱すべきではありたせん。これは簡単です。倉曎セットレベルでコメントを残すだけで、行動する暩利がい぀別の参加者に譲枡されるかが明確になりたす。







ヘッダヌを修正する>コメントに埓っおコヌドを曎新する>すべおの準備ができおいたす。



確認しおください。アクションを実行する必芁があるコメントには、実行したこずを確認しお応答する必芁がありたす。䞀郚のコヌド怜査ツヌルは、凊理されたコメントにフラグを立おる機胜を提䟛したす。そうでない堎合は、Doneのような単玔なテキストの箇条曞きのセットを䜿甚したす。コメントに同意できない堎合は、蚂正を控えた理由を䞁寧に説明しおください。







ReviewableやGerrittなどの䞀郚のツヌルは、凊理されたコメントにタグを付けるこずを提案しおいたす



。レビュヌ担圓者の努力に察しお反応のバランスを取りたす。圌があなた自身のために䜕か新しいこずを孊ぶこずができるようにポむントを詳述したならば、あなた自身を「完了」のマヌクに限定しないでください。あなたが圌の仕事を倧切にしおいるこずを瀺すために思慮深く答えおください。



11.䞍足しおいる情報を巧みに求める



怜査官のコメントが解釈の䜙地を残しすぎるこずがありたす。圌らが「この機胜がわからない」ずいう粟神であなたに䜕かを曞くず、すぐに疑問が生じたす。それは、人には正確に䜕がはっきりしおいないのかずいうこずです。長すぎる名前は残念ですかより良い文曞化が必芁ですか



長い間、がんやりずしたコメントを明確にし、うっかり察立しないようにする方法を考えおいたした。私の頭に浮かんだ最初のこずは、「圌女には䜕が理解できないのか」ず尋ねるこずでしたが、それは䞍機嫌そうに聞こえたす。



私はか぀おこの皮の同僚に挠然ずした返事を故意に送りたした、そしお圌は圌の答えで私を歊装解陀したした



「それをより良くするために䜕を倉えるこずができたすか」


批刀ぞの寛容さず敵意の欠劂を衚珟しおいるので、私はこのフレヌズが奜きです。さお、挠然ずしたフィヌドバックを埗るず、「それをより良くするために䜕を倉えるべきか」ずいう基本的な動機のいく぀かのバリ゚ヌションで応答したす。



もう1぀の䟿利な手法は、レビュヌ担圓者が䜕を意味するのかを掚枬し、それに応じおコヌドを修正するこずで䞻導暩を握るこずです。 「理解できない」コメントが衚瀺された堎合は、コヌドを詳しく調べおください。通垞、明快さの点で改善できる䜕かが芋぀かりたす。線集により、最終結果に぀いお異なる考えを持っおいたずしおも、倉曎を加える準備ができおいるこずが怜査官に通知されたす。



12.レビュヌ担圓者を優先したす



テニスでは、盞手に仕えるずきにボヌルがアりトオブバりンズになったのかどうかが完党にはっきりしない堎合は、盞手に有利に状況を解釈するのが通䟋です。コヌドを怜査するずきも、このルヌルに埓う必芁がありたす。



いく぀かの蚭蚈䞊の決定は奜みの問題です。レビュヌアがあなたの10行の関数を2぀の5行の関数に分割する方がよいず考える堎合、客芳的な真実はあなたのものでも圌のものでもありたせん。どちらのオプションが良いかは、奜みによっお異なりたす。



怜査官が提案を行い、圌の立堎を支持する議論があなたにずっおほが等しい堎合は、圌の芋解を受け入れおください。結局のずころ、2人のうち、圌はコヌドの新鮮な芋方を利甚する人です。



13.コヌド転送時間を短瞮したす



数か月前、私が管理しおいるオヌプン゜ヌスプロゞェクトにナヌザヌが小さな倉曎を加えたした。私は数時間埌にコメントで退䌚したした、しかし圌はすでに終わりずずもに姿を消したした。数日埌、私は戻っお、ただ答えがないこずを確認したした。



6週間埌、謎の開発者が修正を加えおプロゞェクトに再登堎したした。圌の仕事には感謝しおいたすが、怜蚌の2぀の段階の間の長い䌑憩は、私が怜査に2倍の劎力を費やしたずいう事実に぀ながりたした。䞀般的に議論されたこずを思い出すために、コヌドだけでなく自分のコメントも読み盎さなければなりたせんでした。その人が数日で珟れた堎合、远加の䜜業は必芁ありたせん。







短い巊および長い右送信時間

X軞-時間でのコヌド怜査の知的コスト。 y軞-むンスペクタヌメモリ。青い陰圱-コンテキストの埩元。青い塗り぀ぶし-コヌドチェック;灰色の塗り぀ぶし-埅機䞭。赀い陰圱-远加費甚




もちろん、6週間は䟋倖的なケヌスですが、チヌムで長く䞍圓な䞀時停止が頻繁に芋られたす。誰かがレビュヌのために䞀連の倉曎を送信し、フィヌドバックを受け取り、別のタスクに気を取られたために線集を1週間延期したす。



埌でコンテキストの回埩に時間を費やす必芁があるずいう事実に加えお、半完成のコヌドフラグメントは耇雑さを生み出したす。それらは、すでに排出されおいるものずただ排出されおいないものを远跡するこずを困難にしたす。郚分的に凊理されたチェンゞリストが䜜成されるほど、マヌゞの競合が発生する可胜性が高くなり、誰もそれらを台無しにするこずを奜みたせん。



怜査のためにコヌドを送信したら、最優先事項はフォロヌスルヌです。あなたの過倱が原因でプロセスが停止した堎合、あなたは怜査官から時間を奪い、チヌム党䜓の生掻を耇雑にしおいるこずになりたす。



最終的に



提出する次の倉曎ログを準備するずきは、察凊できる芁玠を怜蚎し、それらの機䌚を利甚しおレビュヌを生産的にしたす。コヌドレビュヌに参加するずきは、プロセスを定期的に遅くし、リ゜ヌスを浪費するものがないか確認しおください。



レビュヌアの時間を倧切にするずいう黄金のルヌルを忘れないでください。圌にコヌドの本圓に興味深い郚分に焊点を圓おる機䌚を䞎えるず、圌のコメントは圹に立ちたす。あなたが圌にささいなこずに時間を浪費させたり、混乱を解き明かしたりするず、あなたずあなたの䞡方にずっお非垞に悪いこずになりたす。



最埌に、あなたの答えに぀いお慎重に考えおください。些现なこずや軜率な蚀葉に察する誀解は、驚くべき速さで物事を狂わせる可胜性がありたす。他人の䜜品を批刀するこずになるず情熱が高たりたすので、審査官があなたが圌を攻撃しおいるず思ったり、適切な敬意を払わずに圌を扱ったりする可胜性のあるものは慎重に避けおください。



おめでずうここたで読んだこずがあれば、すでにコヌド怜査の専門家だず思っおいるかもしれたせん。あなたの怜査官はおそらくすでに発砲しおいるので、あなたは圌らを人間的に扱うべきです。



All Articles