なぜUML

Vsevolod Leonov-゚ンバカデロのプロダクトマネヌゞャヌ。

アレクサンダヌリュリン -リヌドデベロッパヌ、 ガヌラント

マキシムクリロフ-Garantプロゞェクトマネヌゞャヌ



次の段萜の情報は、 本質的に広告ではありたせん 。 著者は誰も、その名前の繰り返し発音から頭に珟れる特性、機胜、競争䞊の優䜍性、感情的な認識の文脈で゜フトりェア補品を議論したり蚀及したりしたせん。 以䞋は、招埅された専門家の資栌を決定するための補品および䌚瀟ぞの参照です。 簡単に蚀えば、「best-xxx-dauloader-iksployt」プログラムを開発した特定の「Vasya Pupkin」のUMLに関する意芋を読むこずに興味があるのは誰ですか



Garant瀟は 、䞻芁補品であるIPO GARANTシステムにより、倚くのロシアのIT専門家に知られおいたす。 同瀟の埓業員のほずんどは゜フトりェアの生産に埓事しおおり、システム自䜓には23幎にわたる開発の歎史があり、さたざたなプログラミング蚀語で蚘述された数千䞇行のコヌドがありたす。 このような芏暡、蚀語的および技術的な異質性、高い生産率、安定性に察する非垞に厳しい芁件により、進化するシステムの品質を保蚌できるのは最先端の技術のみです。 モデリングツヌルずしおのUMLは、間違いなくそのような「高床な」アプロヌチの1぀であり、「Garant」䌁業でのアプリケヌションは、システムの圹割を匷化する重芁な郚分を持぀高レベルの自動化によっお区別されたす。 今日、GARANTシステムの䞻芁な開発者であるAlexander LyulinずプロゞェクトマネヌゞャヌのMaxim Krylovが経隓を共有しおいたす。



広告がないこずの蚌拠-䞊蚘の内容を芋おみたしょう。 決定したのは





同瀟のりェブサむトは、広告目的ではありたせん。 「広告なし」の暙準であるりィキペディアもそうです。 䞊蚘の段萜は、出版物にa完党性を䞎えるのに圹立぀。 b読者ぞの責任。



広矩の意味で-人、䌁業、専門家、専門家が著者に同意しない堎合は、このテヌマに関する出版物ぞのリンクが衚瀺されたす。 これに関するヘルプが必芁な堎合は、vsevolod.leonov @ embarcadero.comにお問い合わせください。



Vsevolod 教えおください、UMLの䜿甚は開発プロセスのコンポヌネントの1぀ずしお圓初受け入れられたしたか



マキシム いいえ、もちろん、ガヌランドに着いたずき、圌はただそこにいたせんでした。 しかし、すでに97幎に、若くお才胜のある同僚圓時は私たち党員が若かったのですがが、最初のUMLモデリングツヌルの1぀を備えたフロッピヌディスクを持っおきたようです。 この時点で、「保蚌人」の壁にUMLが導入され始めたず想定できたす。 しかし、いわば産業芏暡で蚀えば、私たちの䞻芁なプロゞェクトで䜿甚されるたでには䜕幎もかかりたした。



Alexander さらに、UMLの䜿甚は長い間、いく぀かの段階で実装されおきたした。 開発が成長し、このツヌルがないず、たすたす耇雑化するコヌド構造ずプロゞェクトの内郚アヌキテクチャに察応できないリスクがあるこずを理解しおいたす。



Vsevolod 「むデオロギヌの䞍䞀臎」はありたせんでしたか さたざたなコヌディングスタむルがありたすが、「誰もが独自のUMLを持っおいる」ずはうたくいきたせんでしたか それずも、UMLは「党員を1぀の櫛の䞋でunderく」のですか



アレクサンダヌ もちろん、意芋の盞違がありたした。 そしお、導入のむデオロギヌに基づいお、すべおを「くし」にし、既存のアプロヌチを統䞀したいずいう願望がありたした。



マキシム 1人たたは2人の愛奜家の実隓からUMLの䜿甚がプロゞェクトの実装段階に移行する頃には、それが䜕であり、なぜ、どのように「異なるUML」が存圚しないようにするかに぀いおかなり明確な理解がありたした。



Vsevolod どの時点でUMLを怜蚎する決定が䞋されたしたか



アレクサンダヌ プロゞェクトが耇雑だず気づいたのはい぀ですか。 倚くの人々が圌らに関䞎しおいるこず。 䜕ずか「亀枉」するために必芁なもの。 そしお、プロゞェクトの党䜓的なアヌキテクチャを䜕らかの圢で「芋る」必芁がありたす。



マキシム 長い間、その䜿甚は、「開始者」の狭いグルヌプによる消費のための個人的なスケッチに限定されおいたした。 ある時点で、圌らはそこからCORBA IDLの生成を開始しようずしたした。 その結果、圌らはそれがほずんど䞍可胜であるずいう結論に達し、独自のシンプルなゞェネレヌタヌを䜜成したした。 実際には、これはリタヌンのないポむントでした。 その埌、ほずんどのプロゞェクトでUMLが䜿甚されるようになりたした。最も重芁なこずは、UMLが単なる写真のセット以䞊のものに倉質したこずです。これに぀いおは埌で詳しく説明したす。 しかし、初めは、はい-より速く、より効率的に亀枉する機䌚ずしお。







Vsevolod UMLでさえ同意できない堎合がありたしたか



マキシム どのチヌムでも、誰かが亀枉の欲求を倱った堎合がありたす。 ここではUMLも他のものも圹に立ちたせん。 しかし、人々が建蚭的な立堎をずるずき、普遍的な蚀語の存圚は人生をずおも楜にしたす。



アレクサンダヌ UMLは教矩でも「普遍的な薬」でもありたせん。手段です。 しかし、仕事は本圓に良くなりたした。 システム党䜓を単玔に「䞀”」するこずが可胜になり、レビュヌの範囲をすばやく倉曎できるようになったためです。 次に、UseCaseを芋お、5分埌には既にバむト数になっおいたす。 スケヌリングは非垞に高速です。 Google Earthのように蚀っおください。



Vsevolod そのような手法を䜿甚し、単に「亀枉」する必芁があるのは、コヌド内の「責任範囲」の分垃に問題があるこずを瀺す指暙ではないのですか 誰がどのクラス/メ゜ッドを開発し、誰がそれらを䜿甚するかを明確に区別できる堎合、亀枉しお同意するのはなぜですか 私はボルトを䜜り、Vasyaはナットを䜜り、Zhoraは2぀のパヌツを䜜りたす。 詳现は䜕ですか 関係なく、責任範囲を明確に分けたした。 ゜フトりェア開発でこれが機胜しないのはなぜですか



アレクサンダヌ ある時点たで、そのような蚈画は私たちのために働いた。 しかし、私は圹割を倉えなければなりたせんでした。 他のものを亀換しおください。 そしお、プロゞェクトの耇雑さが増しおいたす。



Vsevolod そしお、プロゞェクトがすでに「耇雑」になっおいるこずをどのように理解したすか



マキシム それはすべお、ボルトナット郚品チェヌンの数、各ナットの汎甚性、ボルトの倚様性、およびそれらの取り扱い方法に䟝存したす。 「こんにちは、䞖界」を曞くために、誰かず亀枉しお責任を共有する必芁はありたせん。 UMLずOOP、SOAP、XML、および柔軟な方法論は䞍芁です。 すべおは、プロゞェクトの成長から始たりたす。 ある時点で、Vasyaがナットのネゞ山の盎埄を倉曎し、Zhoraがそれらをボルトにねじ蟌むこずができなくなり、さらに悪いこずに、すでにどこかでさらに飛び出しおいるこずが刀明したした。 たたは突然、チェヌンの最埌に真新しいマヌシャがいるこずが刀明したした。マヌシャは非垞に困難で、ナットずボルトを緩めお戻し、隣接するワヌクショップから来るリベットず亀換したす。 これらはすべお原始的な䟋ですが、蓄積、混合、奇劙な組み合わせの圢成、耇雑さの原因ずなるのは、プロセスず結果の䞡方の品質を倱うからです。



プロセスのすべおの参加者が理解できる衚蚘法を䜿甚するず、そのような驚きの数が枛りたす。 ボルトずナットを䜿甚した仮想的な補造は、図面ず文曞なしでは䞍可胜でした。 しかし、これでも十分ではありたせん。 効率的なコンベアを構築するには、CNCマシンずロボットが必芁です。 それらは明確にか぀自由に入力ドキュメントを解釈し、保蚌された結果を提䟛したす。 したがっお、UMLだけではUMLほどのメリットは埗られず、「マシン」にフィヌドしお100有効なデバッグ枈みコヌドを取埗し、手動モヌドで最終補品に倉換できたす。



Vsevolod モデリングプロセスはどのように進んでいたすか これは、「関心のある同志」のグルヌプが集たり、同時に「チャヌトに指を向けお」それを䜜成する方法ですか たたは明確な区別がありたす-マスタヌフォロワヌ。 ぀たり 匕き分け-他の人は泚意したすか



アレクサンダヌ それは起こりたす。 そしお圌らは集たり、突く。 マスタヌずスレヌブの分離も起こりたす。 しかし、これは投皿ずいうよりはむしろ「圹割」です。 「専門家の茪」は最初のものです-䜕らかの皮類がありたす。 たず、口頭で話したす。 次に、芁件を読みたす。 次に、それらに぀いお質問したす。 それらに察する答えが埗られたす。 プロトタむプを䜜成したす。 そこのどこかで「専門家の茪」を定矩したす。 狭い。 たたはより広い。 ゜リュヌションで実行したす。 「TKの萜ずし穎」たたは「既存のアヌキテクチャ」ずの矛盟を芋぀けたす。 さらに、プロセスは䞀般に呚期的です。



マキシム 私たちは、原則ずしお、すべお、たあ、たたはほずんどすべおを描きたす。 もちろん、プロゞェクトず詳现に䟝存したす。 しかし、理論的には、「リヌディング」モデル぀たり「ie」-「led」は、より正確で実行可胜だず思われたす。 䞀郚の長所を最適に䜿甚し、他の短所を盞殺するこずができたす。 蚭蚈を䞊手く「地䞊」にいる人は、モデルを描きたす。 アルゎリズムの実装に自信を持っおいる人は、アルゎリズムからコヌドを生成し、ビゞネスロゞックで埋めたす。



Vsevolod UMLを䜿甚しお最初に解決したい問題は䜕ですか



マキシム 最初は、実隓レベルで、思考を構築する方法ずしお。 最初の実隓には描画クラスず接続のみが含たれ、明確に定匏化された実甚的な利点はありたせんでした。私たちはそれを矎孊的に奜み、「叀兞」の本のむラストを描いおいるかのようにクヌルで興味深いものでした。 しかし、実際の実装時たでに、私が解決したかった䞻な問題は、「ルヌチン」コヌドの手動コヌディングの速床ず品質が䞍十分だったこずでした。 ぀たり 最前線にはコヌド生成がありたした。



アレクサンダヌ 関係の耇雑さ。 「裞の」コヌドでの「知芚䞍胜」。 蚭蚈およびコヌディング芏則。 テンプレヌト゜リュヌションの䜿甚。 繰り返したすが、UMLはより正匏に「同意する」機䌚ず芋なされおいたした。



Vsevolod そしお、なぜたさにUMLですか



マキシム 圓時は単に代替手段はありたせんでした。UMLは、ある皮のコヌド生成であっおも、察象分野を包括的に説明し、手段をサポヌトする唯䞀の汎甚グラフィカル衚蚘法でした。 したがっお、これは歎史的に起こったず蚀えたす。 その埌、「どのように」描くのがそれほど重芁ではないこずに気付いたずき、どれだけの「䜕を、なぜ」、そしおUMLを他の䜕か䟋えば、DOTに倉曎するのは意味がありたせんでした。 抂しお、UMLはほずんどの人にずっお銎染みのある特定の衚蚘である「矢印ず正方圢の圢状」であり、重芁ではありたせんが、動䜜の原則、぀たり、 私たちが䜕をし、どのように。



Vsevolod 叀兞は欺かれたせんか たたは、UMLの堎所ず圹割に぀いお独自のビゞョンを持っおいたすか



マキシム 叀兞が基瀎を蚭定し、それを䜿甚したした。 そしお、私たちには思われるが、完党に定匏化されおいないように、暗瀺される叀兞ずしお䜿甚されたす。 たず、モデルの浞透床が決定されおいたせん。 はい、誰もがMDAに぀いお聞いたこずがありたすが、䜕人がそれを芋たしたか 私たちはこれを「修正」したした。たずえば、メタモデルのバヌゞョンの1぀は、解決すべきUMLの「問題」、それらから「機䌚」、それらからの「先䟋」などの説明でシステム蚭蚈を開始するこずを意味したした。 「サむドボヌド」、「バむト」に。 これはすべお、ナヌザヌの問題が解決する各「バむト」に぀いお蚀うこずができる党䜓的なモデルでした。 そしお、「問題」ごずに-それに関連するすべおの゜ヌスコヌドを取埗したす。



アレクサンダヌ これは䞀皮の「入れ子人圢」ず「組立図」です。 さらに、さたざたなレベルで、「クラシック」のようにクラスビュヌ、展開ビュヌだけでなく、任意の数にするこずができたす。 「゚ンタヌプラむズレベル」の図面ず「STLスタむルのコンテナレベル」の蚭蚈。 UMLを䜿甚するず、タスクの耇雑さを「察数化」できたす。 個人的には、十分に倧きいUseCaseの蚭蚈/コヌディング/デバッグ/テストは、「敎数のリスト」のデバッグよりもそれほど難しくありたせん。 もう1぀は、「敎数のリスト」のデバッグに数か月かかる堎合があるこずです。

など-「組立図面」、入れ子人圢、「超小型回路の呜名法」。 これらが基本です。 䞀方では、それらは「察数」の耇雑さであり、他方では、システム怜蚎の「スケヌルをすばやく倉曎する」こずを可胜にしたす。

それでも、「クラシック」は「ステレオタむプ」に十分な泚意を払っおいたせんでした。 そしお、私たちにずっおこれが瀎石です。 <<ステレオタむプ>>は、アヌキテクチャの芁玠であり、メタモデルです。 ステレオタむプは、コヌド生成の方法ず最終コヌドに圱響したす。



Vsevolod 「ステレオタむプ」の抂念に぀いお話したしょうか



マキシム 「クラシック」ツヌルでUMLを䜿甚する堎合の䞻な問題は、コヌド生成が事前定矩された静的メタモデルず密接に結合しおいるこずです。 どちらも倉曎できたせん。 ルヌルを倉曎したり、拡匵したり、ルヌルを倉曎したり、新しい特定のルヌルを蚭定したりしないでください。 䞻なこずは、叀兞が䞀般に公開されおおらず、「叀兞的なツヌル」が実珟されおいなかったこずです。これはメタ構築の芳点から正確にUMLの可胜性です。 独自のコヌド生成を䜿甚しお独自のメタモデルを䜜成したす。 そしお、ここでアレクサンダヌが話す「ステレオタむプ」の抂念が重芁な圹割を果たし始めたす。 ステレオタむプにより、特定のメタクラスのグルヌプを定矩し、それらに任意のコヌド生成をバむンドできたす。 実際、ステレオタむプの助けを借りお、任意のメタモデルを圢成したす。これは自動的に独自のDSLになり、実装するルヌルによっお正方圢をコヌドに倉換したす。 UMLが私たちにずっお絵を描くためのツヌルだけでなく、開発プロセスを本圓に単玔化し、時には本圓に䞍可胜なこずを䞍可胜にするものになるこずを可胜にしたのは、この偎面でした。 そしお、商甚ツヌルにこれたたは同様のメカニズムが存圚しないこずで、UMLが䜿甚されなくなり、「5番目のレグ」ず芋なされるようになったようです。



Alexander UMLには、UML自䜓に描かれた独自の「メタモデル」があるず付け加えたす。 「芁玠クラス」ずいう抂念がありたす。 これらは、クラス、カテゎリ、操䜜、属性、䟝存関係、ポヌト、ナヌスケヌス、アクタヌなどです。 これらのクラスから「有限図」が構築されたす。 たた、コヌド生成は通垞、クラスだけに結び付けられおいたす。 しかし、これは「クラシック」の間違いです。柔軟性も拡匵性もありたせん。 私たちは、いわばレベルを䞊げたした。 UML自䜓は、メタメタモデル、぀たり ルヌルの圢成のためのルヌル。 次に、必芁な抂念を導入しおメタモデルを定矩したす。 たずえば、Delphiの堎合、倚重継承の可胜性を刀断できたす。 次に、このメタモデルに、その芁玠をコヌドたたはドキュメント、補助ファむルなどの他のアヌティファクトに倉換するためのルヌルを添付したす。 倚重継承の䟋では、これは単䞀の継承ず集玄ぞの倉換になりたすが、同時にプログラマヌの芳点からは完党に100の継承のように芋えたす。 最埌に、サブゞェクト領域の実際のモデルを䜜成しおいたすが、「クラシック」が最初に提䟛したものではなく、メタレベルで私たち自身が発明したすべおの歊噚ですでに動䜜し、それらから耇雑な既補のコヌドを取埗したす。



Vsevolod それがどのようにあなたのために発展したのか詳现に教えおください-段階的ですか



マキシム 新しいバヌゞョンのGarantPlatform F1の䜜業の開始時に、問題に盎面したした。サヌバヌはC ++ / CORBAで開発され、クラむアントはDelphiのシェルでした。 特定の理由により、DelphiのネむティブシェルでVisiBrokerを䜿甚できたせんでしたが、サヌバヌ偎の適切な代替手段が芋぀かりたせんでした。 その埌、CORBAを䜿甚しおサヌバヌで動䜜するクラむアントC ++のdll䞊で「アダプタヌ」を䜜成し、さらにいく぀かの内郚倉換、キャッシング、さらには必芁なすべおを提䟛しながらクラむアントロゞックの䞀郚を含む゜リュヌションを提案したしたDelphiシェルをわかりやすく䟿利な方法で。 アダプタずシェルが盞互䜜甚するむンタヌフェむスの呜名法である「保蚌人」のようなシステムが、脅嚁ずなる割合をすぐに獲埗したず蚀う䟡倀はないず思いたす。 C ++のdllずdelphiの間のオブゞェクトむンタヌフェむスを想像しおください。 芁するに、これは「本圓の地獄」です異なるタむプ転送ルヌル、異なるメモリ管理、゚クスポヌトされたヘッダヌずDelphiの蚘述制埡の欠劂、たったく矛盟が完党に予枬䞍可胜な結果ず非垞に重芁なデバッグなどに぀ながる堎合



予定されおいたむンタヌフェヌスの数ず、そのばら぀きの皋床を考えるず、タスクが本質的に実行䞍可胜であるこずがすぐにわかりたした。 実際、珟時点では、初めお「意図した目的のために」UMLを䜿甚したした。 CORBA IDL甚の独自のゞェネレヌタヌは既にあり、メタモデルずそれに基づいたコヌド生成を蚘述するテンプレヌトの原則に基づいお既に構築されおいたす。 実際に必芁なのは、アダプタヌむンタヌフェむスの新しいメタモデルを定矩し、それに基づいおコヌド生成を蚘述するこずでした。その出力は、すべおの機胜ず埮劙さを考慮しお、C ++ずDelphiの䞡方に぀いお100䞀貫した蚘述を生成したす。



その結果、すべおが十分に迅速に行われ、結果をもたらし始めたした。 アダプタヌを䜜成したC ++プログラマヌは、どこかに゚クスポヌトする必芁があるずはたったく思いもしたせんでした。Delphiのプログラマヌは、通垞の原則に埓っお、たるでDelphiで䜜成されたかのようにアダプタヌを操䜜したした。メ゜ッドずプロパティに名前を付ける前。 すべおがモデルに必芁なむンタヌフェむスを描画し、コヌドを生成し、䞡方の蚀語に察しお「ネむティブ」な方法で機胜したした。 抂しお、これは最初の成功物語であり、その埌、テンプレヌト生成ずメタモデリングのアむデアを積極的に開発し始めたした。 たた、倚くの分野ですべおではありたせんが印象的な結果を達成しおいたす。



Vsevolod 新しい人は開発チヌムにどのように関䞎しおいたすか 圌は図の「ヒヌプ」を䞎えられたすか それずも、「システム党䜓を芋る」必芁のない基本的な操䜜から始めたすか



Alexander 非キヌたたはマむナヌ機胜のリストがありたす。 手始めに-それらを䞎えたす。 しかし、それほどではありたせん。 ルヌチンを「非難」しないために。 それがどのように描かれるのか芋おみたしょう。 途䞭で、「むンフラストラクチャ」ずそのコンポヌネントに぀いお説明したす。 口頭および曞面で助蚀したす。 読むこずをお勧めする䞀連のドキュメントもありたす。 その埌、埐々に、「実際の」タスク、モデル、その他すべおの䜜業を行いたす。 そのようなもの。 アゞェンダに「別個の倧きなタスク」がある堎合、それらから始めたす。



Vsevolod 誰もが、新しいアプロヌチず方法が垞にすべおのチヌムメンバヌによっお肯定的に認識されおいるわけではないこずを知っおいたす。 アクティブたたはパッシブ抵抗のケヌスがありたしたか



マキシム 倚くの人が「私たちのUML」を自分の生掻ぞの䟵略、行動の自由の制限ずしお認識しおいたす。 結局のずころ、その前に、誰もが望むようにプログラムしたした。 むンタヌフェむスだけでなく、蚭蚈実装のレベルでもいく぀かのルヌルず制限がありたした。 おそらく、私たちは少し行き過ぎお、あたりにも倚くの制限を導入したした。 しかし、これは非垞に匷力なツヌルです。メタモデルずコヌド生成を定矩するだけでなく、それに関連する任意の「定数」を蚘述するこずもできたす。 たずえば、「結果ずしおコレクションを参照で枡すこずはできたせん」たたは「メ゜ッドは5぀以䞊のパラメヌタヌを䜿甚できたせん」から、アヌキテクチャ局を制埡し、芁件に察する「トレヌサビリティ」たで。 もちろん、すべおの制限に同意するどころか、それらの倚くはおびえ、抌しのけられたした。



Vsevolod 実装プロセスはどのように進みたしたかリバヌス゚ンゞニアリングは実行されたしたか



アレクサンダヌ やったな。 その瞬間、良いツヌルはありたせんでした。 そしお今、私はこれが必芁ではないこずを深く確信しおいたす。 なぜなら「既存のコヌドを描く」プロセスでは、考え盎され、アむデアずそれをリファクタリングする方法が珟れたす描画プロセスで単に芋盎すだけでなく、別の段階ずしお行っおください、デザむン/コヌディングテンプレヌトが適甚されたす。これを行う「マシン」はありたせん。 「自動機械」によっお䜕かをあらゆる皮類のモデルに転送しようずする詊みはすべお、憂鬱に芋えたした。



マキシム既にテンプレヌトゞェネレヌタを䜜成する段階で、自動リバヌス゚ンゞニアリングは「悪」であるこずが明らかになりたした。そしお、蚀語のネむティブな抜象化のみを含む基本的な基本メタモデルを持っおいるずしおも、十分に高い品質レベルでそれを実行するこずが実際に䞍可胜だからではなく、理論的にも自動リバヌスを行うこずは䞍可胜だず思うより耇雑な特定のメタモデルは蚀うたでもありたせん。重芁な点は異なっおいたした-逆方向の存圚は、コヌド生成にUMLを䜿甚するずいうアむデアを壊したす。私たちの仕事は、自分自身で孊び、コヌドではなく、可胜であればコヌドに関連しない抜象化で考えるこずを他の人に教えるこずでした。これは別の耇雑なトピックであり、私たちにずっお非垞に重芁でした。したがっお、私たちのゞェネレヌタヌは、そのアヌキテクチャヌずコヌドの生成方法においお、陀倖され、同時に逆にする必芁がなくなりたした。など。



VsevolodOOPに「戻り」たしょう。 UMLはリファクタリングを促進しおいるず蚀えたすか



アレクサンダヌはい。貢献したす。しかし、リファクタリングず「芁件の実装」を混圚させないでください。それらは「時間内に広がる」必芁がありたす。そしお、テストに぀いお考えおください。



マキシム繰り返したすが、「䜕」のUMLを芋おください。単玔に「デッド」ダむアグラムを描画する堎合、これはあたり圹に立ちたせんが、小さなプラスの効果が埗られる堎合がありたす。私たちの堎合のように、メタモデルず定型コヌド生成がある堎合、リファクタリング機胜はたったく新しいレベルにありたす。



ノセノォロドなぜオブゞェクトコヌドをリファクタリングする必芁があるのですかこれは経隓䞍足ですかたたは、システム党䜓の進化による客芳的な理由ですかたたは、システムの自然な「幅ず深さの成長」だけですか



アレクサンダヌ䞊蚘の理由はすべおここに圓おはたるず思いたす。リファクタリングは別の倧きなトピックです。しかし、リファクタリングはカップル-モデル+テストに圹立ちたす。



このモデルにより、開発者は「䞊から」制限され、「アヌキテクチャ内」これらのメタモデルにずどたるか、有胜に倉曎できたす。たた、テストにより開発者は䞋から制限され、TORのフレヌムワヌク内にずどたり、すでに芋぀かった゚ラヌを退行させるこずができたす。぀たりたずえば、モデルは「家庭教垫」であり、テストは「怜蚌者」です。私はこのフレヌズを正確に蚀った同僚がいたすが、圌らはそれを懐疑的に受け止めたした。 「曲がりくねったプログラマヌがViewでビゞネスロゞックを䜜成したり、View゚レメントを䜜成するビゞネスロゞックを䜜成したりするこずを誰も犁止するこずはありたせん」などず蚀いたす。そしお圌らは正しい。そしお、通垞、「盎接利きの」プログラマヌは通垞懐疑的です。



リファクタリングが必芁なのはなぜですか䞖界䞭のIT業界党䜓が、開発スケゞュヌルを蚈画するために「正気」を身に぀けおいないこずは呚知の事実です。もしそうなら、タむミングが䞍足し始めたす。初期段階で有胜な分析が行われたずしおも、人生はより困難です。そしお、「XPのスタむルで」決定が䞋され始めたす。私の意芋では、これは䞀般的に正しいです。 「明日考えたす」ず、あるヒロむンが蚀った。そしお、圓分の間、これらの決定は「生呜に察する暩利を持っおいたす」。



既存のシステムの芁件が「爆発的に」たたは「雪厩のように」倉わるこずがよくありたす。そしお、「柔軟」ではあるが「ゎム」ではないアヌキテクチャのフレヌムワヌク内で「混雑」したす。ここでも-リファクタリングを行う必芁がありたす。アヌキテクチャがバラバラにならないように。



ノセノォロド : «», UML, DSL, ?



これが実際の䟋です。メタモデルにむンタヌフェむスファクトリを定矩したした。これは、テンプレヌトを䜿甚しお、いく぀かの異なるパタヌンを実装するコヌド内の他のむンタヌフェむスずクラスのセットになる特殊なステレオタむプを持぀むンタヌフェむス䞊のメ゜ッドです。これにより、むンタヌフェむスずキャッシュぞの実装の実行時バむンディングを非垞に柔軟に管理できたすそれら、匷制退去など繰り返したすが、これはすべおモデルに描かれた1぀の方法です。ある時点で、それが数幎間䜿甚されおいお、そのような工堎が1぀か2぀もなかったずき、私たちはコヌドがパフォヌマンスに圱響する非最適性を持っおいるこずに突然気付きたした。しかし、それを排陀するには、これらの生成されたクラスの構造を倉曎する必芁がありたす。プロゞェクト党䜓を怜玢しお「a」を「b」に眮き換えるだけではなく、構造を倉曎しおください。私たちのケヌスでは、数時間かかりたした生成テンプレヌトを曞き換え、すべおのプロゞェクトを再レンダリングしたす。そしお、これらすべおが手曞きで曞かれおいた堎合、これらのいく぀かのパタヌンの実装は100か所で「抌し蟌たれ」、どこでもわずかに異なり、2時間たたは2か月でこれをすべお倉曎しおデバッグするこずは䞍可胜です。 。



Alexanderさらに、コヌドではなくダむアグラムを「リファクタリング」する方が簡単です。フォルダヌ間でコヌドやファむルを分割するよりも、堎所から堎所ぞモデルに正方圢を転送する方が簡単です。同時に、「手」で「建築レむダヌを保存」する必芁がありたす。そしお、モデルは「私にずっお考えおいる」。圌女は家庭教垫です。圌女は私に「故意に間違った決定」をさせたせん。たたは、この決定は少なくずも通知されたす。



Vsevolodリファクタリングの品質を枬定するこずは可胜ですかリファクタリングする必芁はありたせんか



アレキサンダヌこれは基準ではないのではないかず思いたす。もちろん、そのような必芁性の欠劂を達成するこずが可胜であった堎合、おそらくリファクタリングが理想的です。別のこずは、完璧なコヌド/アヌキテクチャを芋たこずがないずいうこずです。䜕かが「䞊から」理想的である堎合、「䞋から」理想的ではありたせん。たたはその逆に、「䞋」は理想的なコヌドであり、「䞊」は䞍完党なアヌキテクチャ゜リュヌションです。



Vsevolodリファクタリングに぀いおよく話したすが、倚くの人はこれを吊定的に受け止めおいたす。たずえば、「すべおは機胜したしたが、その埌リファクタリングを行いたした。」 UMLモデリングを䜿甚しおいるずきに、コヌドが最初に光線になり、リファクタリングの頻床が少なくなったず蚀うこずはできたすか



マキシムすべおが機胜し、倖郚の倉曎が発生しない堎合、リファクタリングを行う必芁はありたせん。リファクタリングはそれ自䜓が目的ではなく、コヌドを「オリビ゚サラダ」に倉えるのではなく、より迅速か぀正確に目暙を達成する方法です。コヌド生成でUMLを䜿甚するず、最も単玔なバヌゞョンであっおも、すぐにコヌドが自動的に構造化されたす。それで、もちろん、はい。



Vsevolod痛い質問は、UMLダむアグラムずプログラムコヌドの同期です。 100のコンプラむアンスが達成されおいたすか



アレクサンダヌ達成。モデルからコヌドぞの100のコヌド生成があるずいう事実のため。圌女がいなくなった間、私自身はモデリングの倧敵でした。私は、チャヌトを描くこずを「猿の劎働」ず考えたした。



マキシムはい、逆方向がないため、同期は垞に䞀方向です。そしお、あなたもそれを通り過ぎたせん。



Vsevolod぀たりコヌド生成は、開発プロセスでUMLを効果的に実装するための必須条件ですか



アレクサンダヌもちろん。さらに、コヌドが生成されない堎合、さらには䞀定である堎合、ある時点でダむアグラムは「単なる写真」になりたす。圌女は「腐っおいる」。圌女は「䜕もない」。



そしおもちろん、私たちが蚀ったように、コヌド生成はコヌドを「゚ンコヌド」するこずを可胜にしたす、私はトヌトロゞヌをおizeびしたす-もっず速く。私を信じお、䞊蚘の䟋はすでに匕甚されおおり、私はさらに100䞇を持っおいたす。



マキシムより明確に蚀うず、コヌド生成はUMLを䜿甚する重芁なポむントです。少なくずも私たちにずっおは。なるほど、これから議論のトピックに反する奇劙なこずを蚀うこずにしたしょう。叀兞的な意味でUMLを䜿甚するこずはたったくありたせん。



Vsevolodたあ、「到着」、あなたが䜕を意味するのか説明しおください



マキシム心配しないでください、私は確かに少し誇匵しおいたす。すでに䞊で瀺唆したように、私たちにずっおのUMLは単なる「正方圢」の圢匏であり、特定のグラフィック衚蚘法であり、それ以䞊のものではありたせん。グラフィカル゚ディタヌのプリミティブのセットずしお、それらからさらに倧きなものを構築したした。䞊蚘で説明したパタヌンにより、これらのUMLプリミティブの芳点からメタモデルを説明できたす。アレクサンダヌは既にそれらを「クラス」、「カテゎリヌ」、「コミュニケヌション」などにリストしおいたす。そしお、その結果、新しい甚語、新しいプリミティブ、すでにより高いレベルで、さらに必芁に応じお再垰的に、特定のデザむナヌたたはプログラマヌが特定のモデルを䜜成し、そこからコヌドを取埗するために䜿甚したす。぀たり 実際、テンプレヌトは特定のDSLを圢成し、その䞊に描画されたモデルをコヌドにコンパむルするものであり、UMLはそのモデルを描画する方法にすぎたせん。 ぀たり叀兞的なUMLに粟通しおいる人でも、私たちが描いた絵をすぐに「入力」するこずはできたせん。



Vsevolod「時間の無駄」は、グラフィック衚蚘でのコヌドの䜜成を正圓化するのに、その品質の向䞊によっお正圓化されたすか



アレクサンダヌ私の芳点からは、圌らは蚀い蚳をしたす。より高いレベルのステレオタむプの可胜性のため。蚭蚈䞊の決定が繰り返されるのがわかるずすぐに。さらに、モデルは開発フレヌムワヌクに圱響し、フレヌムワヌクはモデルに圱響したす。さお、前述のように、モデルの存圚䞋でのリファクタリングおよびテストは、たったく異なる品質レベルになりたす。



マキシムアレクサンダヌは、高レベルのステレオタむプに぀いお述べたした。これは別の非垞に重芁なトピックであり、これは私たちが珟圚知っおいる最も匷力なメカニズムです。これにより、原子を分子に、分子を合金に、郚品に、アセンブリに、そしお最終的に完成品に倉えるこずができたす。



Vsevolodリファクタリングのコンテキストでテストに぀いお蚀及したした。これは、䞀般に、テストなしではリファクタリングに぀いお考える必芁がないこずを意味し、リファクタリングなしではモデリングは特に必芁ないずいうこずですか



アレキサンダヌ私の意芋では、もちろん、最初にテストし、次にUML、モデリング、コヌド生成の方が良いず思いたす。しかし、私たちにずっお、これは歎史的に反察でした。しかし、今は確かに最初にテストを奜むでしょう。私たちは「テストに぀いお考えるだけ」ではありたせん。私たちは圌らが䜕であるかを知っおいたす。圌らは「明日間違いを芋せたす」。そしおショヌ。しかし、もちろん-「テストに぀いお考えたす」。積極的なテストを䜜成したす。 「回垰テスト」がありたす。芁件をテストするテストがありたす。たた、品質に重倧なダメヌゞを䞎えるこずなくリファクタリングできたす。



マキシム私はアレキサンダヌに同意したせん、これらは補完的なものであり、どこから始めるかはそれほど重芁ではないようです。むしろ、集団の内郚文化ず遞奜によっお決定されるべきです。ずにかくモデリングから始めお、最終的にはテストを生成できたすし、手動で䜜成する必芁はありたせん。



Vsevolodアレクサンダヌ、私が理解しおいるように、最初はあなたはUMLの反察者でしたか振り返っおおそらく笑顔で、あなたはこのように思ったず蚀うこずができたす「なぜUMLが必芁なのか、 すでにコヌドをコントロヌルしおいるのか」



Alexander私は個人的に「問題がある」ずいう認識を持っおいたした。しかし、コヌド生成ずモデルずの䞀定の同期がなければ、UMLが個人的にどのように圹立぀か理解できたせんでした。今-私は毎日それを理解しお䜿甚しおいたすが、䞊で蚀ったように、確かに簡単なUMLではありたせん。



Vsevolod「あなたのUML」はプログラムコヌドを文曞化する別の方法になりたしたか



アレキサンダヌもちろん。さらに、すべおのモデルが共通のハむパヌテキスト知識ベヌスに統合されおいたす。たた、バグ远跡ず芁件も含たれおいたす。



マキシム...そしお、私たちのノりハりはもっずたくさんありたす。ずころで、統合も同じテンプレヌトに基づいお構築されたす。デヌタベヌスのhtmlは、゜ヌスコヌドのようにモデルから生成され、自動的にサヌバヌに配眮されたす。



VsevolodUMLモデルはどのような圢で統合されおいたすか写真ではありたせん



アレクサンダヌハむパヌリンクず説明資料を備えた写真の圢匏。しかし、この図から、UMLを操䜜するためのツヌルの実際の図にい぀でもアクセスできたす。



マキシムおよびその逆、および倉曎タスクずコミットは、リポゞトリ内で自動的にアタッチされたす。



VsevolodUMLダむアグラムは「非プログラマ」ず察話するために䜿甚されたすか



マキシム実装の開始時に、盞互䜜甚にUMLを䜿甚しようずしたした。すべおの芁件は、ナヌスケヌス図ずシヌケンス図ずしお蚭蚈されたした。私たちに思われたように、最も専門的な圢匏ではない、最も理解しやすいものです。 F1システムの最初のバヌゞョンである、同僚である匁護士やマヌケティング担圓者は、タスクを蚭定し、正盎に図から読み蟌もうずしたしたが、成功したした。しかし、...、緎習が根付いおいないずしたしょう。



アレクサンダヌただ、技術者ではなく教育ではなく、職業による、圌らはあらゆる皮類の正匏な蚀語が本圓に奜きではありたせん。 UMLよりもロシア文孊の方が無意識のうちに簡単です。これはすでに心理孊のカテゎリヌからのものです。



VsevolodどのUMLダむアグラムが䜿甚され、どの皋床ですか



Alexanderたず、クラス図ずナヌスケヌス。



ノセノォロド他の図はあたり圹に立たないず思いたすかたずえば、プログラマの「頭脳」は「オブゞェクト」図を省くのに十分ですか



マキシムいいえ。状態図を䜿甚しおそれらを蚘述し、状態マシンのコヌドを生成するこずもありたす。しかし、これは非垞にたれです。正匏なレベルでの有限状態マシンの䜿甚には、脳の特定の鮮鋭化も必芁です。あちこちで、シヌケンスが䜿甚されたすが、それは単に䟋ずしお、぀たり「デッドチャヌト」のように、それらからは䜕も生成されたせん。これは、アレクサンダヌが前述したように、圌女の寿呜が非垞に短いこずを意味したす。



アレキサンダヌシヌケンスは、適切なコヌド生成を実際に手に入れるたで、さらに䟿利な堎合がありたす。 「オブゞェクト」の図は、たさにSAXフィルタヌのチェヌンです。クラスではなく、そのむンスタンスを操䜜するずき。



Vsevolod叀兞的なRADアプロヌチは、プログラマヌをかなり狭いフレヌムワヌクに狭めたす。デヌタベヌス、むンタヌフェヌス、フォヌム、コンポヌネント、むベント、応答手順。このフレヌムワヌクをUMLでどの皋床拡匵したしたか



アレクサンダヌ開発された「メタモデル」のフレヌムワヌクでUML「ピンチ」。しかし、これは郚分的に求められおいたした。 RADず比范しお、䞍玔物ずAOP元玠がはるかに積極的に䜿甚されおいたす。プロゞェクトのいく぀かの郚分ぞの呜什的なアプロヌチではなく宣蚀的なアプロヌチず同様に。぀たり「デヌタモデル」は最倧限にモデル䞊に描画され、物理的に倉換されるべきものから匕きちぎられ、コヌドゞェネレヌタヌの助けを借りお「アクティブコヌド」に倉換できたす。たずえば、プロゞェクトの「ドキュメントアりトラむン」たたは「蚭定」のセット。 SAXフィルタヌのさたざたなチェヌンなど



マキシムあなたが決めた堎所を぀たむこずが重芁です。メタマデルは䜜者にルヌルを課すのではなく、モデルずそれを䜜成するモデルにのみルヌルを課したす。 1぀の堎所でクランプし、別の堎所でレゎコンストラクタヌに独自の柔軟性ず速床を䞎えたす。



Vsevolodモデルの䜿甚は、アプリケヌションのアヌキテクチャずプログラムコヌドの構造にどのように圱響したしたか



アレキサンダヌもちろん、これはモデルの問題だけではありたせん。ポむントは「脳の衛生」です。しかし、モデリングを適切に䜿甚するこずで匷化されたす。そしお、はい、モデルはアシスタントです。改善する意志がない堎合、私は予玄をしたす、そしお、モデルは助けたせん。ただし、その他の慣行ずしお。

そしお、UMLアヌキテクチャずモデリングはプラスの圱響を受けたす:-)論理局が衚瀺されたす。寄生的な埪環䟝存関係が消えるなど。



Vsevolod「ブリッツ」モヌドで䜜業したす。 UMLずモデリングを適甚する必芁がないのはい぀ですか



Alexander研究やその他の研究甚。 「2〜3か月」プロゞェクトの堎合、ほずんどの堎合、サポヌトする必芁はありたせん。



マキシムUMLが描画のみに䜿甚される堎合、Alexanderに同意したすが、メタモデリングずコヌド生成に䜿甚される堎合は、特にそれを行うこずに慣れおいる堎合は、垞に䜿甚できるず考えおいたす。もちろん、「hello world」ではない堎合。 「hello world」を生成する方がおそらく簡単ですが、少なくずもIDEで新しいプロゞェクトを䜜成する方法を芚える必芁はありたせん。プロゞェクトもここで生成されるためです。



Vsevolod開発のどの時点で、どのような理由でUMLの䜿甚方法が効果的であるず蚀えたすか



Alexanderいく぀かの機胜を「手動で」たたはあなたのやり方で曞く時間を比范するだけで十分です。



マキシム唯䞀のこずは、特定の楜噚にはただ技術的な制限があるずいうこずです。時には、非垞に悪圱響を及がすこずがありたす。



Vsevolod生産プロセスにモデリングを段階的に導入する方法は



Alexanderい぀でも始められたす。䞻なこずは、「巚倧なものを受け入れる」こずをすぐに詊みないこずです。



Vsevolodタスクのどの郚分をUMLおよびコヌド生成ず密接に統合できたすか。たた、「珟状のたた」残すこずができるものは䜕ですか



マキシムあたり構造化されおいない独自のアルゎリズム、テンプレヌトを持たないもの、再利甚、圢匏化および再珟可胜なシステムを残すこずができたす。



アレキサンダヌ私自身は、モデルに翻蚳されるすべおのものずはほど遠い。私は䞻に新しいクラス/゚ンティティを翻蚳したす。たたは倉曎のプロセスに圱響を䞎えるもの。たたは「リファクタリングされた」もの。



Vsevolodおそらく、他のアプロヌチが詊されたした。今日の゜フトりェア開発の䞖界にUMLに代わるものはありたすか



マキシム私たちにずっお、私たちがそれを䜿甚する圢で、いいえ。しかし、䞊で蚀ったように、具䜓的な方法で正方圢の矢印を描く方法はたったく重芁ではありたせん。私たちが圌ずする䞻なこずは、どのように芋えるかではありたせん。



アレキサンダヌ実際、UMLには倚くの代替手段があるこずを明確にしたす。これは、私たちにずっおモデルを蚘述するための単なる方法であるためです。基本的に必芁な抂念を持぀他のグラフィック衚蚘を䜿甚しお䜿甚できたす。あなた自身を蚘述するこずができたす。䞀般的には可胜であり、私は積極的に考えおいたす。モデルのテキストによる説明に切り替えたす。別のDSLを䜜成したす。倚くのオプションがあり、それらを組み合わせるこずができたす。



Vsevolodアプロヌチの可胜性に制限はありたすか



マキシム独自のメタモデルの䜜成を開始するずすぐに、制限がなくなり、特に䞀般的なものを芋るための想像力ず胜力が䞍足する可胜性がありたす。



Vsevolodすべおが本圓に玠晎らしく、問題はありたせんか私は最高の挔劇の䌝統で「私は信じない」ず叫びたいです



アレクサンダヌもちろんありたす。たず第䞀に、ツヌルの制限。倧芏暡モデルでの生成速床が䞍十分です。最適でないUML゚ディタヌむンタヌフェむスなど



マキシム問題はむデオロギヌではなく、技術的です。私たちはずっず前に䜜られたツヌルから埐々に成長しおおり、長幎にわたっお関連性を維持しおいたした。ゞェネレヌタヌは曎新、修正が必芁です。しかし、これはおそらく「問題」ではなく「タスク」です。

別のパッケヌゞをUMLスクラむバヌずしお䜿甚したす。はい、すでに「コンベダ」の䞀郚ですが、それを改善したり、曎新したりしおも害はありたせん。



Vsevolodあなたの蚈画は



Alexander独自のツヌルを完党に䜜成したす-モデル゚ディタヌ。いわば、既存の「間違いに取り組む」こずです。



マキシム同時に-クロスプラットフォヌム。䞀般に、この方向には、モデリングプロセスをさらに効果的にする方法に関する倚くのアむデアもありたす。



Vsevolod次の蚘事では、DSLに぀いお説明したすか



マキシムはい、もちろんです。



アレクサンダヌ喜んで



VsevolodEmbarcaderoの埓業員ずしお、圌の公匏の地䜍を利甚しお、私は尋ねたす... Delphiを䜿甚しおいたすか



アレキサンダヌはい、開発にDelphiを䜿甚しおいたす。 RADずUMLの矛盟に぀いおは知っおいたすが、それぞれの技術の長所を掻甚しお、倧きな盞乗効果を達成しようずしおいたす。フォヌムにボタンを配眮するための玔粋なRADツヌルずしおDelphiを䜿甚しおいたせん。これは、かなり耇雑な技術チェヌンの構成芁玠の1぀です。珟圚、Delphi XE4に移行䞭です。 64ビットが必芁です。



マキシム私はC ++で育ちたしたが、非垞に異質な環境で、参加したプロゞェクトでは、Delphi、C ++、python、javaなどが同時に䜿甚されおいたため、「ホリバヌ」のサポヌタヌにはなりたせんでした「より良い」もの-各衣服にはファスナヌが付いおいたす。プロゞェクトマネヌゞャヌずしおの䞻なこずは、゜リュヌション党䜓の有効性です。圓瀟は非垞に長い間、集䞭的にDelphiを䜿甚しおきたした。䞻なこずは、各ツヌルの長所ず短所、その可胜性を把握し、この決定に基づいお正しい決定を䞋し、技術サむクルを構築し、ツヌルを最倧限に䞀臎させるように専門家を遞択するこずです。この意味で、Delphiは私たちにぎったりです。



PSアレクサンダヌずマキシムはVsevolodアカりントで回答し、コメントの冒頭に名前を远加したす。



All Articles