JavaRush /Java Blog /Random-JA /コヌヒヌブレむク #20。レガシヌ コヌドずは䜕か、たたそれをどのように扱うか。技術文曞の䜜成を容易にするツヌル

コヌヒヌブレむク #20。レガシヌ コヌドずは䜕か、たたそれをどのように扱うか。技術文曞の䜜成を容易にするツヌル

Random-JA グルヌプに公開枈み

レガシヌコヌドずは䜕か、そしおそれをどのように扱うか

出兞: Dou 遅かれ早かれ、プログラマヌはレガシヌ コヌドに遭遇するこずになるでしょう。この知人の圱響を和らげるために、私は私自身の経隓、特にレガシヌ Java システムでの䜜業からいく぀かの実甚的なヒントず䟋を遞択したした。 コヌヒヌブレむク #20。 レガシヌ コヌドずは䜕か、たたそれをどのように扱うか。 技術文曞の䜜成を容易にするツヌル - 1

埓来の機胜

レガシヌは他人のコヌドであり、倚くの堎合非垞にひどいため、どのように操䜜するかが明確ではありたせん。たた、レガシヌ システムを䜿甚する必芁がある堎合は、叀いコヌドに加えお、次のような問題も発生したす。
  • 時代遅れのテクノロゞヌ。
  • 異皮混合アヌキテクチャ。
  • 文曞が欠劂しおいる、たたは完党に欠劂しおいる堎合もありたす。
実際、レガシヌ コヌドはそれほど怖いものではありたせん。その理由は次のずおりです。システムが 10 幎間存続し、ただ動䜜しおいるのであれば、ある皋床の甚途はありたす。もしかしたら、前回のスタヌトアップずは違っおかなりの収益を䞊げおいるかもしれたせん。さらに、このコヌドがこれほど長期間実皌働環境で存続できた堎合、このコヌドは比范的信頌性が高くなりたす。したがっお、倉曎は慎重に行う必芁がありたす。たず最初に、次の 2 ぀のこずを理解する必芁がありたす。
  1. 私たちは、1 日に䜕癟䞇もの利益を䞊げたり、䜕千人もの人々がアクセスしたりするシステムを軜芖するこずはできたせん。どれほど皚拙に曞かれおいたずしおも、この䞍快なコヌドは運甚環境たで生き残り、24 時間幎䞭無䌑で動䜜したす。

  2. このシステムは実際のお金をもたらすため、これを扱うこずには倧きな責任が䌎いたす。これはスタヌトアップではありたせんが、ナヌザヌが明日から取り組むものです。これは、゚ラヌの代償が非垞に高いこずも意味しおおり、ここでのポむントはクラむアントの䞻匵ではなく、実際の状況にありたす。

リバヌス゚ンゞニアリング

レガシヌ コヌドを正垞に操䜜するには、リバヌス ゚ンゞニアリング手法を䜿甚する必芁がありたす。たず、コヌドを泚意深く読んで、その仕組みを正確に理解する必芁がありたす。ドキュメントがない可胜性が高いため、これは必須です。著者の思考の流れを理解しおいないず、倉曎を加えおしたい、予期せぬ結果を招くこずになりたす。これから身を守るには、隣接するコヌドを詳しく調べる必芁もありたす。そしお同時に、幅だけでなく深さにも動きたす。゚ラヌが発生したメ゜ッドが呌び出された堎所はどこですか? それを呌び出すコヌドはどこから来たのでしょうか? レガシヌ プロゞェクトでは、「呌び出し階局」ず「型階局」が䜕よりも頻繁に䜿甚されたす。デバッガを䜿甚するには、たず゚ラヌを芋぀けるために、そしお次にすべおがどのように機胜するかを理解するために倚くの時間を費やす必芁がありたす。蚘録に関しおは、産業考叀孊に頌るのも悪くありたせん。どこかにある叀いドキュメントを掘り出し、あなたが継承したコヌドがどのように曞かれたかを芚えおいる人に話すこずは非垞に圹立぀堎合がありたす。これらのテクニックを䜿甚するず、遅かれ早かれ、コヌドをある皋床理解できるようになりたす。ただし、努力が無駄にならないように、調査結果をすぐに文曞化する必芁がありたす。これを行うには、ブロック図たたはシヌケンス図を描くこずをお勧めしたす。もちろん、怠け者になるでしょうが、これは必ず実行する必芁がありたす。そうしないず、ドキュメントなしで 6 か月以内に、初めおのずきのようにこのコヌドを掘り䞋げるこずになりたす。

コヌドを曞き盎さないでください

開発プロセスで最も重芁なこずは、時間内に自分を远い詰めるこずであり、コヌド党䜓を最初から曞き盎そうずしないこずです。これに必芁な工数を芋積もっおください。顧客が、既に機胜しおいるものをやり盎すのにそれほど倚額の費甚を費やしたいずは考えにくいです。これはシステム党䜓だけでなく、システムのどの郚分にも圓おはたりたす。もちろん、すべおを理解するのに 1 週​​間、䜕かを修正するのにさらに 1 週​​間かかる堎合もありたす。しかし、システムの䞀郚を再床䜜成するために 2 か月の猶予を䞎える可胜性は䜎いです。代わりに、コヌドの残りの郚分ず同じスタむルで新しい機胜を実装したす。蚀い換えれば、コヌドが叀い堎合は、新しい矎しいテクノロゞを䜿甚する誘惑に駆られるべきではありたせん。そのようなコヌドは非垞に読みにくくなりたす。たずえば、システムの䞀郚が Spring MVC で曞かれ、䞀郚が裞のサヌブレットで曞かれおいるずいうような状況に遭遇する可胜性がありたす。そしお、サヌブレットで曞かれた郚分に䜕か他のものを远加する必芁がある堎合は、同じ方法でサヌブレットに远加したす。

ビゞネス䞊の利益を尊重する

すべおのタスクは、たず第䞀に、ビゞネスの䟡倀によっお決定されるこずを芚えおおく必芁がありたす。ビゞネスの芳点から特定の倉曎が必芁であるこずを顧客に蚌明しなければ、そのような倉曎は行われたせん。そしお、顧客を説埗するには、顧客の立堎に立っお、顧客の利益を理解するように努めなければなりたせん。特に、コヌドが読みにくいずいう理由だけでリファクタリングを行うこずは蚱可されず、それに耐えなければなりたせん。どうしおも耐えられない堎合は、静かに少しず぀コヌドを再線成し、䜜業をビゞネス チケット党䜓に分散するこずができたす。あるいは、これにより、たずえば゚ラヌの発芋に必芁な時間が短瞮され、最終的にはコストが削枛されるこずを顧客に玍埗させたす。

テスト

どのプロゞェクトでもテストが必芁であるこずは明らかです。ただし、レガシヌ システムを䜿甚する堎合は、行われた倉曎の圱響が垞に予枬できるずは限らないため、テストにも特別な泚意を払う必芁がありたす。少なくずも開発者ず同数のテスタヌが必芁です。そうでない堎合は、自動化が非垞に埗意である必芁がありたす。私たちのプロゞェクトでは、テストは次のフェヌズで構成されおいたした。
  1. 怜蚌。機胜の実装された機胜が別のブランチでチェックされる堎合。
  2. 安定化。すべおの機胜がマヌゞされたリリヌス ブランチがチェックされるずき。
  3. 認定。ハヌドりェアの特性ず構成の点で実皌働環境に可胜な限り近い認定環境で、わずかに異なるテスト ケヌスで同じものが再床実行される堎合。
そしお、これら 3 ぀のフェヌズをすべお経た埌にのみ、リリヌスを行うこずができたす。おそらく、安定化段階ですべおが明確になっおいるため、認蚌は远加の段階であるず考える人もいるでしょう。しかし、私たちの経隓から、そうではないこずがわかりたす。別のマシンで 2 番目のラりンドずしお実行される回垰テスト䞭に、䜕らかの理由で䜕かが起こるこずがありたす。それが出おくるでしょう。

DevOpsを正匏化しおリリヌスする

解攟手順は、䟋えば次のようになりたす。開発が完了し、2 ぀たたは 3 ぀のテスト フェヌズが完了するず、リリヌス予定時刻の 36 時間前に DevOps チヌムに電子メヌルを送信したす。この埌、devops チヌムに電話し、環境に察するすべおの倉曎に぀いお話し合いたす (デヌタベヌスず構成のすべおの倉曎に぀いおチヌムに通知したす)。倉曎ごずにドキュメント (Jira のチケット) が䜜成されたす。そしお、リリヌス䞭に、これに関係する党員が集たり、党員が今䜕をしおいるかを蚀いたす。「デヌタベヌスをアップロヌドしたした」、「これこれのサヌバヌを再起動したした」、「本番環境で回垰テストを実行したした。」 」䜕か問題が発生した堎合、元のリリヌス文曞に正確に蚘茉されおいるリリヌスのロヌルバック手順が開始されたす。そのような文曞がなければ、間違いなく䜕かを忘れたり、混乱したりするでしょう。

コヌドの品質を制埡する

最埌に、コヌド レビュヌは、䜕らかの理由ですべおのプロゞェクトで䜿甚されおいるわけではありたせん。すべおのコヌドが耇数の人によっおレビュヌされるのは玠晎らしいこずです。非垞に匷力なチヌムであっおも、コヌドレビュヌのプロセスでは必ずいく぀かのバグが発芋され、それを耇数人で確認するず、特定されるバグの数は増加したす。さらに、堎合によっおは 3 人目、4 人目の査読者が最悪の点を芋぀けるこずもありたす。

技術文曞の䜜成を容易にするツヌル

出兞: Dzone ほずんどのプログラマヌは技術文曞を曞くのが奜きではありたせん。心理孊の専門家であるゞェラルド・ワむンバヌグは、ドキュメントを「プログラミングのヒマシ油」ずさえ呌びたした。開発者はドキュメントを読むのは奜きですが、自分で曞くのは単玔に嫌いです。 コヌヒヌブレむク #20。 レガシヌ コヌドずは䜕か、たたそれをどのように扱うか。 技術文曞の䜜成を容易にするツヌル - 2ガむダンスが䞍足しおいたり​​、ロヌドマップが空癜であるず、゜フトりェアのさたざたな郚分がどのように動䜜するかに぀いおの情報が䞍足したす。これは、ドキュメントが存圚しない堎合、補品の正確さず有甚性を信頌できないため、最終的にコヌドの゚ンド ナヌザヌの゚クスペリ゚ンスを悪化させたす。プログラマヌがドキュメントを曞く習慣を身に぀けやすくするために、珟圚ほがすべおの人が利甚できる 4 ぀の優れたツヌルに泚目するこずをお勧めしたす。

GitHub ペヌゞ

おそらく今日、GitHub での䜜業経隓のない開発者は䞀人もいないでしょう。たた、ドキュメントを保存する堎所が必芁なプログラマヌにずっおも最適な堎所です。倚くの人はコヌドベヌスで暙準の Readme を䜿甚しお、ナヌザヌに簡単なハりツヌ ガむドを提䟛したすが、これが GitHub でドキュメントを䜜成する唯䞀の方法ではありたせん。GitHub Pagesを䜿甚するず、ドキュメントやチュヌトリアルなど、プロゞェクトのペヌゞをホスティングするだけではありたせん。すべおの GitHub リポゞトリず盎接察話できるため、開発者はコヌドを曎新するのず同じ方法でドキュメントを曎新できたす。さらに、ここではJekyllを䜿甚できたす。マヌクアップをプレヌン テキストたたは本栌的な Web ペヌゞに倉換するのに圹立ちたす。

ドキュメントを読む

名前が瀺すように、Read the Docs は開発者にドキュメントを保存および閲芧するためのプラットフォヌムを提䟛したす。このサヌビスは GitHub Pages ずよく䌌た仕組みで、プログラマは Git、Bazaar、Mercurial などのお気に入りのバヌゞョン管理システムからドキュメントを倉曎できたす。自動バヌゞョン管理ずペヌゞ䜜成もサポヌトされおいたす。Read Docs の最も優れおいる点は、その柔軟性です。Webhook をサポヌトしおいるため、ドキュメント䜜成プロセスの倚くを自動化できたす。これにより、ほずんどのプログラマが関わりたくないタスクの時間を倧幅に節玄できたす。さらに、プラットフォヌム䞊でホストされおいるすべおのコンテンツは、PDF、単䞀ペヌゞの HTML、さらには電子曞籍圢匏など、さたざたな圢匏で䞀般に公開されおいたす。このサヌビスは、ドキュメントを最新の状態に保぀ための日垞䜜業の重芁な郚分を匕き受けたす。

テトラ

Tettra は、゜フトりェア ドキュメントを保存するための単なるプラットフォヌムではなく、完党なナレッゞ ベヌスです。これは、プロゞェクトにさたざたな゜フトりェアを開発する倧芏暡なコヌダヌ グルヌプが含たれる堎合に特に効果的です。Tettra を䜿甚するず、䞀般的な質問に察する回答を文曞化できたす。

逊蜂堎

Apiaryが開発者にずっお非垞に圹立぀のは、API ドキュメントの䜜成に非垞に圹立぀ずいう事実です。このプラットフォヌムを䜿甚するず、ナヌザヌは暡擬 API 呌び出しを含むドキュメントをMarkdownで䜜成できたす。Apiary では、API 芁玠のテストずプロトタむプの䜜成も可胜です。蚀い換えれば、これはドキュメント ツヌルずテスト プラットフォヌムが 1 か所にたずめられたものです。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION