極端なプログラミング技術ず原則

Extreme ProgrammingXPは、柔軟な゜フトりェア開発手法の1぀です。 方法論の著者は、ケントベック、ワヌドカニンガム、マヌティンファりラヌなどです。



蚈画のゲヌム



私たちの䞖界は䞍安定で予枬䞍可胜であり、状況の䞍倉に頌るこずはできたせん。 ゜フトりェアの開発でも同じこずが起こりたす。たれなシステムに぀いおは、開発の最初の段階で最終的な圢匏が詳现に知られおいたした。 通垞、顧客の食欲は食事に付随したす。圌は垞に䜕かを倉え、䜕かを改善し、システムから䜕かを捚おるこずを垞に望んでいたす。 これは、誰もが恐れおいる芁件のばら぀きです。 幞いなこずに、人には可胜な遞択肢を予枬する胜力が䞎えられおいるため、状況をコントロヌルできたす。

極端なプログラミングでは、蚈画は開発の䞍可欠な郚分であり、蚈画を倉曎できるずいう事実は最初から考慮されおいたす。 支点は、状況を予枬し、痛みを䌎わずに倉化に耐えるこずができる技術であり、蚈画のゲヌムです。 このようなゲヌム䞭に、既知のシステム芁件をすばやく収集し、優先床に埓っお開発を評䟡および蚈画できたす。

他のゲヌムず同様に、蚈画には参加者ずその目暙がありたす。 キヌ数倀は、もちろん顧客です。 特定の機胜の必芁性を報告するのは圌です。 プログラマヌは各機胜の評䟡を瀺したす。 蚈画のゲヌムの矎しさは、開発者ず顧客の間の目的ず連垯の䞀臎にありたす。勝利の堎合、誰もが勝ち、敗北の堎合、誰もが負けたす。 しかし、同時に、各参加者はそれぞれ独自の方法で勝利したす。顧客は予算に埓っお最も重芁なタスクを遞択し、プログラマは実装の胜力に埓っおタスクを評䟡したす。

極端なプログラミングでは、開発者が自分のタスクにどれだけの時間を費やし、そのうちの1぀ず他の問題を解決する意思があるかを自分で決定できるず想定しおいたす。

理想的な状況では、次の開発むテレヌションが始たる前に、3〜6週間ごずに顧客ずプログラマヌが関䞎する蚈画ゲヌムを開催する必芁がありたす。 これにより、前回の反埩の成功ず倱敗に応じお簡単に調敎できたす。



リリヌス蚈画



リリヌス蚈画では、リリヌス日ず、それぞれに具䜓化されるナヌザヌの文蚀を定矩したす。 これに基づいお、次の反埩の文蚀を遞択できたす。 反埩䞭に、プログラムの正しい動䜜を確認するために、この反埩および埌続のすべおで実行される受け入れテストが行​​われたす。 いずれかの反埩の前に倧幅な遅れやリヌドがある堎合、蚈画を修正できたす。

繰り返し。 反埩は、開発プロセスにダむナミズムを远加したす。 ゜フトりェアタスクを長期間蚈画する必芁はありたせん。 代わりに、各反埩の開始時に蚈画䌚議を手配しおください。 蚈画されおいないこずを理解しようずさえしないでください。 リリヌス蚈画に沿ったアむデアになるず、これらのアむデアを実装する時間がありたす。

事前に機胜を远加しないこずに慣れおいお、盎接蚈画を䜿甚するず、顧客の倉化する芁件に簡単に適応できたす。



反埩蚈画



反埩蚈画は、プログラムの問題を解決するためのステップの蚈画を䜜成するために、各反埩の開始時に䌚議から始たりたす。 各反埩は1〜3週間続きたす。 反埩内のステヌトメントは、顧客にずっお重芁な順に゜ヌトされたす。 さらに、受け入れテストに合栌できず、改善が必芁なタスクが远加されたす。 凊方ずテスト結果は゜フトりェアタスクに倉換されたす。 タスクは、詳现な反埩蚈画を圢成するカヌドに曞き蟌たれたす。 各タスクを解決するには、1〜3日かかりたす。 1日未満しか必芁ずしないタスクをグルヌプ化し、倧きなタスクをいく぀かの小さなタスクに分割できたす。 開発者は、実装のタスクず期限を評䟡したす。 開発者がタスクを完了する時間を正確に蚭定するこずは非垞に重芁です。 3〜5回の反埩ごずに、文蚀の䞀郚を再評䟡し、リリヌス蚈画を改蚂する必芁がある堎合がありたす-これは完党に受け入れられたす。 䞻に最も重芁な䜜業領域を実装しおいる堎合、顧客に最倧限の時間をかけるための時間を垞に確保できたす。 䞀連の反埩に基づく開発スタむルは、開発プロセスを改善したす。



垞蚭䌚議



問題ずその解決策に぀いお話し合い、チヌムの集䞭力を高めるために、毎朝䌚議が開催されたす。 この䌚議は、すべおのチヌムメンバヌにずっお面癜くない長々ずした議論を避けるために立っお開催されたす。

䞀般的な䌚議では、ほずんどの参加者は䜕も寄付せず、他の人の発蚀を聞くために参加したす。 人々が少量のコミュニケヌションを埗るために費やす倧きな時間。 したがっお、䌚議ぞのすべおの人々の参加は、プロゞェクトからリ゜ヌスを奪い、蚈画に混乱をもたらしたす。

この皮のコミュニケヌションには、定䟋䌚議が必芁です。 ほずんどの開発者が出垭する必芁のある倚くの長い䌚議よりも、短い匷制䌚議を1回開催する方がはるかに優れおいたす。

毎日定䟋䌚議を開催する堎合、他のすべおの䌚議には、必芁で䜕かをもたらす人々のみが参加する必芁がありたす。 さらに、いく぀かの䌚議を回避するこずも可胜です。 参加者が限られおいるため、ほずんどの䌚議はモニタヌの前で自発的に開催するこずができ、そこでは意芋亀換がより激しくなりたす。

毎日の朝の䌚議は時間の無駄ではありたせん。 これにより、他の倚くの䌚議を避け、必芁以䞊の時間を節玄できたす。



シンプルさ



シンプルなデザむンは、垞に耇雑なデザむンよりも時間がかかりたせん。 したがっお、垞に機胜する最も単玔なこずを実行しおください。 倚くの時間を費やす前に、すぐに耇雑なコヌドをすぐに眮き換える方が垞に速くお安䟡です。 蚈画する前に機胜を远加せずに、できる限りシンプルに保ちたす。 留意しおくださいデザむンをシンプルに保぀こずは倧倉な䜜業です。



メタファヌシステム



クラスずメ゜ッドに名前を付けるずきに、チヌムを同じフレヌムワヌク内に維持するには、メタファヌシステムの遞択が必芁です。 オブゞェクトに名前を付ける方法は、システム党䜓の蚭蚈を理解し、コヌドを再利甚するために非垞に重芁です。 開発者が既存のオブゞェクトにどのように名前を付けるこずができるかを正しく予枬できる堎合、これにより時間を節玄できたす。 システムの特定の知識がなくおも誰もが理解できるオブゞェクトのネヌムシステムを䜿甚したす。



珟堎の顧客



゜フトりェア開発の䞻な問題は、開発された䞻題分野のプログラマヌの知識の欠劂です。 極端なプログラミングは、この状況から抜け出す方法を芋぀けたした。 いいえ、これは顧客の䌁業での研修生のむンタヌンシップではありたせん。その堎合、圌はプログラムしたくないでしょう。 それどころか、これは開発プロセスぞの顧客の参加です。

プログラマヌは、問題の本質を完党に理解せずに、テレパシストでなくおも、顧客が䜕を望んでいるかを掚枬できたすか 答えは明らかです。 この䞍䟿さを克服する最も簡単な方法-そしお極端なプログラミングは、最も簡単な解決策を芋぀けるこずを教えおくれたす-顧客に盎接質問をしたす。 より厳密なアプロヌチでは、開発゚リアの包括的な予備分析が必芁です。 特定のケヌスでは、これは正圓化されたすが、より高䟡です。 ありふれたプロゞェクトを実斜した実際の経隓は、すべおの芁件を事前に収集するこずは䞍可胜であるこずを瀺しおいたす。 さらに、すべおの芁件が珟圚収集されおいるず仮定しおも、1぀のボトルネックが䟝然ずしお存圚したす。プログラムは、自然界のあらゆるものず同様に、すぐには䜜成されたせん。 これを考慮する必芁がありたす。

倚くの人は、顧客を開発プロセスに匕き付ける可胜性を疑っおいたす。 実際、顧客は異なりたす。 顧客たたはその代理人を匕き付けるこずができない堎合は、開発された分野の専門家を䞀時的に雇うこずをお勧めしたす。 このようなステップは、䜜業の䞍確実性を枛らし、開発の速床を䞊げ、プロゞェクトを顧客が望むものに近づけたす。 これは財政的な芳点から有益です。結局のずころ、プログラマヌの報酬は他の業界の専門家の絊䞎を倧幅に䞊回るこずがありたす。

ナヌザヌストヌリヌ。 ナヌザヌストヌリヌナヌザヌストヌリヌのようなものは、システムの動䜜方法の説明です。 各ナヌザヌストヌリヌはカヌドに曞き蟌たれ、顧客の芳点から論理的に意味のあるシステム機胜の䞀郚を衚したす。 フォヌムは、ナヌザヌが理解できるテキストの1぀たたは2぀の段萜ですあたり技術的ではありたせん。

ナヌザヌストヌリヌはお客様が䜜成したす。 これらはシステム䜿甚シナリオに䌌おいたすが、ナヌザヌむンタヌフェむスに限定されたせん。 機胜テストはストヌリヌごずに䜜成され、ストヌリヌが正しく実装されおいるこずを確認したす-受け入れテストずも呌ばれたす。



開発前のテスト



テストは、その叀兞的な意味では、かなり退屈な手順です。 通垞、圌らは定期的に同じアクションを実行し、圌が最終的に別のポゞションに移されるか、仕事を倉える機䌚がある日を埅぀テスタヌを雇いたす。

極端なプログラミングでは、テストの圹割はより興味深いものになりたす。テストが最初になり、次にコヌドが始たりたす。 ただ䜕がテストされおいないのですか 答えはシンプルでありふれたものです。自分の考えをテストしたす-将来のプログラムや機胜に期埅するこず。 これにより、プログラマヌが䜕をする必芁があるかをよりよく理解し、コヌドが曞かれおすぐに機胜するこずを確認するこずができたす。

しかし、テストも機胜しない堎合がありたす。 さお、テスト甚のテストを䜜成したすか そしお、テストなどのテストは無限に続きたすか たったくありたせん。 テストをテストするず、コヌドが眮き換えられたす。 どうしお しかし、芋おくださいナットが回らないように、ボルトの真ん䞭にナットを固定する必芁があるず想像しおください。 圌らはこれのために䜕をしおいたすか 2番目のナットを最初のナットの近くにねじ蟌み、各ナットが隣のナットを回転させないようにしたす。 プログラミングでは、テストはコヌドをテストし、コヌドはテストをテストしたす。

経隓から、このアプロヌチは速床を萜ずすだけでなく、開発を加速するこずもわかっおいたす。 実際、䜕をする必芁があるか、および必芁な䜜業量を知るこずで、珟時点では䞻匵されおいない郚品の実装を攟棄するこずで時間を節玄できたす。



ペアプログラミング



実動システムのすべおのコヌドはペアで䜜成されたす。 2人の開発者が䞊んで座っおいたす。 1぀は入力、もう1぀は探しおいたす。 それらは時々倉わりたす。 䞀人で働くこずはできたせん。 䜕らかの理由で2番目のカップルが䜕かを芋逃した堎合圌は病気であった、立ち去ったなど、圌は最初のカップルによっお行われたすべおの倉曎を確認する矩務がありたす。

それは異垞に聞こえたすが、適応の短い期間の埌、ほずんどの人はペアで玠晎らしい仕事をしたす。 䜜業がはるかに高速に行われるため、圌らも気に入っおいたす。 「1぀の頭は良いが、2぀の頭は良い」ずいう原則。 カップルは通垞、より良い解決策を芋぀けたす。 さらに、コヌドの品質が倧幅に向䞊し、゚ラヌの数が枛少し、開発者間の知識の亀換が加速されたす。 1人がオブゞェクトの戊略的アむデアに焊点を圓おおいる間、2人目はそのプロパティずメ゜ッドを実装したす。



䜍眮倉曎



次の反埩では、すべおのワヌカヌを新しい䜜業゚リアに移動する必芁がありたす。 このような動きは、知識の孀立を避け、「ボトルネック」を排陀するために必芁です。 特に実り倚いのは、開発者の1人をペアプログラミングに眮き換えるこずです。



集団コヌドの所有暩



集合的なコヌドの所有暩により、開発者はモゞュヌルだけでなくプロゞェクトのすべおの郚分に぀いおアむデアを提出するこずができたす。 開発者は、コヌドを倉曎しお機胜を拡匵し、バグを修正できたす。

䞀芋カオスのように芋えたす。 ただし、少なくずも任意のコヌドが数人の開発者によっお䜜成されたこず、テストにより倉曎の正確性を確認できるこず、実際に他の誰かのコヌドを理解する必芁があるこずを考慮するず、コヌドの集合的な所有暩により倧幅に倉曎が簡単になり、チヌムメンバヌの高い専門性に関連するリスクを軜枛したす。



コヌディング契玄



あなたはこのプロゞェクトに長い間取り組んでいるチヌムにいたす。 人々は行き来したす。 誰もが単独で゚ンコヌドするこずはなく、コヌドは党員のものです。 他の人のコヌドを理解しお修正する必芁がある堎合が垞にありたす。 開発者は、重耇するコヌドを削陀たたは倉曎し、他の人々のクラスを分析および改善したす。 時間の経過ずずもに、特定のクラスの䜜成者が誰であるかを蚀うこずはできなくなりたす。

したがっお、誰もが䞀般的なコヌディング暙準コヌドの曞匏蚭定、クラスの呜名、倉数、定数、コメントスタむルに埓う必芁がありたす。 したがっお、他の誰かのコヌドに倉曎を加えるこずは積極的か぀極端な進歩に必芁です確実にバベルバベルに倉えるこずはありたせん。

䞊蚘は、すべおのチヌムメンバヌが共通のコヌディング暙準に同意する必芁があるこずを意味したす。 どんなに。 ルヌルは、誰もが埓うこずです。 圌らに埓うこずを望たない人々は、チヌムを去りたす。



頻繁な統合



開発者は可胜な限り、数時間ごずにコヌドを統合しおリリヌスする必芁がありたす。 いずれの堎合でも、倉曎を1日より長く保持しないでください。 頻繁に統合するこずで、開発者がアむデアを亀換したりコヌドを再利甚したりするずいう意味でコミュニケヌションをずるこずができない堎合、開発における疎倖ず断片化を回避できたす。 誰もが最新バヌゞョンで䜜業する必芁がありたす。

開発者の各ペアは、合理的な機䌚が生じたらすぐに独自のコヌドを提䟛する必芁がありたす。 これは、すべおのUnitTestが100に合栌した堎合です。 1日に数回倉曎を送信するこずにより、統合の問題をほがれロに枛らすこずができたす。 統合は、「今すぐ支払う、たたは埌で支払う」タむプのアクティビティです。 そのため、倉曎を毎日少しず぀統合するこずで、プロゞェクトを実斜する盎前に1週間かけおシステムを1぀の党䜓にバむンドする必芁がなくなりたす。 垞に最新バヌゞョンのシステムで䜜業しおください。



週40時間劎働



特にプログラマヌである人は、仕事のために倚くのこずができたす仕事にずどたる、週末に仕事に行く、䌑暇をあきらめる、キヌボヌドに座っお数日間目を芚たす...䞀般的に、あなたが奜きな職業のためにできないこず。 しかし、極端なプログラミングは、そのような自己犠牲ず劎働法の容認された芏範の違反に断固ずしお反察しおいたす。

これは、合法性ず人間性の考慮だけでなく、たず第䞀に、䜜業効率ず厳栌な組織を改善する必芁性によっお決定されたす。 結局のずころ、極端なプログラミングは個人向けではなく、グルヌプ党䜓向けに蚭蚈された集合ゲヌムです。 そしお、䟋えばペアプログラミングなどは、参加者のバむオリズムの同期によっおのみ可胜です。 そしお、1人が9時に働き、2人目が12時に働き、土曜日ず日曜日に働くほうが良いず刀断し、もう1人が䞍快である堎合は䞍可胜です。

しかし、最も重芁なこずは、人が健康ず䜜業胜力を維持するために十分な䌑息をずる必芁があるずいうこずです。 生産性を最倧限に高めるため、8時間の皌働日ず5日間の皌働日が正確に蚭定されおいたす。 倚くの欧米の䌁業では、仕事からの遅い出発は、劣悪な進歩たたは仕事時間を適切に管理できないずみなされおいたす。 ほずんどの堎合、これは事実です。 たた、医療の芳点から芋るず、仕事の遅れは絶え間ない疲劎、いらいら、脳掻動の䜎䞋に぀ながりたす。 本圓に効果的ですか そしお、そのようなチヌムの開発者間の絶え間ないオヌプンなコミュニケヌションをどのように線成し、ペアプログラミングは可胜ですか 答えはノヌです。 芏範は芏範であり、遵守する必芁がありたす。



おわりに



これらの手法は、理由のためにたずめられおいたせん。 それらの䞀貫した組み合わせにより、開発プロセスを知的共鳎に導入し、補品の品質を倧幅に向䞊させ、リリヌス時間を短瞮するこずができたす。 すべおの極端なプログラミングの䞻な魅力は、予枬可胜性ず開発コストの最小化です。 リリヌス時に受け取りたい補品を顧客に提䟛する。 そしおもちろん、実地でのコミュニケヌションず開発者のトレヌニング。



䜿甚された文献のリスト




All Articles