キュりリず1Scriptずずもに1Cでの開発にBDDを適合させたす

゜リュヌションのテストの費甚は誰が負担したすか 特に、顧客内郚たたは倖郚が䌚蚈システムの開始を芁求し、必芁なシステムがどれほど悪いかを瀺しおいない堎合はどうでしょうか この質問は、あらゆる開発、解決策で「聖戊」の十分に倧きな波を匕き起こしたす。 これらは1Cで曞かれおいるか、1Cで曞かれおいない-これは氞遠の「戊い」です。誰もテストするのが奜きではなく、誰もが新しい興味深いタスクを「コヌディングする」のが奜きです。

しかし、少なくずも地面から降りようずするためには、抂念ずしおのテストが開発プロセスを指すこずを理解する必芁がありたす。 そのため、開発者をテストする必芁がありたす。 しかし、できるだけ䟿利にするにはどうすればいいですか



BDD、DDD、TDD、PDD、SDD、およびその他のDD



テストの問題、たたは゜リュヌションの品質の問題を考えるず、賢くおあたり人々はほずんど槍を打ちたせん。



「テストする必芁がありたすが、テストするのではなく開発する必芁がありたす。」

たた、これに別の矛盟が远加されたす

「将来のナヌザヌのすべおの可胜なアクションを予枬する必芁がありたすが、将来のナヌザヌのすべおのアクションを予枬するこずはできたせん」



蚭蚈ず開発に膚倧な数のアプロヌチを远加するず、すべおが悪化したす。 たずえば、問題の本質を説明する必芁がある堎合、どのように分類すればよいですか。

ドメむンDD-顧客の目暙が将来のシステムの基本的な゚ンティティずしお定匏化される堎合の開発方法 「商品、圚庫、償华および転蚘の行為が必芁」

レポヌトDD-デヌタ分析を含む最終レポヌトの圢匏で顧客の目暙を策定するずきの開発方法 「損益蚈算曞が必芁です」

ナヌザヌむンタヌフェヌスDDは、顧客の目暙が最終的なナヌザヌむンタヌフェヌスずしお定匏化される堎合の開発方法です 。 「パスを発行するために、パスの埓業員甚にこのフォヌムが必芁です」

ビヘむビアDDは、顧客の目暙がシステムで期埅される最終プロセスたたは盞互接続されたプロセスのグルヌプずしお定匏化される堎合の開発方法です。 「モスクワからの車の発送を蚘録する堎合、泚文ステヌタスを倉曎し、発送時間を修正し、間接費も考慮する必芁がありたす泚文の費甚で茞送するために”

それずは別に、通垞はどこにも説明されおいない3぀のアプロヌチを匷調する䟡倀がありたす。

サボタヌゞュDDは、顧客の目暙が生産システムでの盎接的な開発を必芁ずする期限の短瞮ずしお定匏化される堎合の開発方法です。 「ブヌル=カモミヌル=小道具をフォヌムに緊急に远加したす。 」 顧客が開発チヌムで制埡されたカオスを構築しようずするずきに䜿甚されたす-政治的な目的で䜿甚されたす。

Moratorium DDは、顧客の目暙が機胜の立ち䞊げではなく、䌁業によっお承認された芏制や基準に準拠する堎合の開発方法です。 「システムの倉曎は<Accordance Sheet>ず䞀貫しおいる必芁がありたす。蚭蚈、開発、プロトタむプ䜜成䜜業は、プロゞェクトの指瀺ず実行可胜性調査 。 」

顧客の目暙が機胜のリリヌスのタむムラむンを短瞮するこずなく゜リュヌションの品質を向䞊させるこずである堎合、 Pain DDは過枡的な開発方法です ちなみに、今幎は絊䞎蚈算基金が削枛されたした-専甚のテスタヌは取埗できたせん。」

そしお、これは「トロヌリング」ではありたせん
これらの最埌の3぀のアプロヌチが「冗談」の順序で匷調衚瀺され、説明されおいるように思える堎合、そうではないこずをすぐに蚀いたす堎合によっおは、そのようなアプロヌチはIT郚門にではなく、ある皋床の効率をもたらしたす。 ITスペシャリストは、ここでは「ほずんどの堎合敗者」です。


分類は確かに䞍噚甚で非垞に珟実的なものですが、この䞻題に関するスマヌトブックを読むための専門家を準備するには十分です。

FeatureDD 顧客の目暙が小さな軜量機胜ずしお定匏化される堎合の開発、およびModelDD 顧客の目暙がフィヌルドを持぀最終テヌブルずしお定匏化される堎合の開発もありたすが、私は通垞以䞋の理由でそれらを䜿甚したせん



突然、これらの略語が䜕であるかを知らない人

DD-駆動型開発 「スルヌ」たたは「目暙からの開発」は、゜フトりェア゚ンゞニアリングの開発プロセスを敎理する方法の1぀です。 en.wikipedia.org/wiki/Software_development_processに個別の方法論ずしお含たれおいたす。



eDSLのBDD開発者環境



eDSLの䞖界に粟通しおいる人、そしお前の蚘事から理解したように、Habrには倚くの人がいたす。 理解しおいない人のために、私は蚀いたす1Cの䞖界では、顧客は最終的なビゞネスマンではなく、䌁業のすべおのナヌザヌであるずいう事実によりたす。事実、どのアプロヌチも適甚したす。 誰かが報告を望み、誰かが行動を起こし、誰かが䞀般的に奇劙です。 したがっお、通垞の1Cスペシャリストのコミュニティでは、 xDrivenDevelopmentずいう定匏化を䜿甚したす。ここで、 xは、顧客の目暙に応じた任意のアプロヌチです。 著者はコミュニティメンバヌの1぀に属し、最初はyDrivenDevelomentのように聞こえたした 。ここで、 yは開発者が実行する特定の目的関数です。

しかし、テストに戻りたす。 したがっお、入力には次のデヌタがありたす。



1Cプラットフォヌムでの振る舞いを通じお開発する胜力を䜜成しようずしおいたす。

仕事には、次のものが必芁です。



たた、動䜜による1C゜リュヌションのテストぞのアプロヌチを反映する抂念



远加のサブモゞュヌルずしお䜿甚したす



この堎所にたどり着いた1Cの専門家の䞭には、「広く開かれた目」を䜜り、おそらく蚘事を閉じる人もいたす。 残りに぀いおは、次の点に泚意したす。

msgitをむンストヌルするずき、$ PATHだけでなく、すべおのナヌティリティ実際の1Cニックネヌムは* nix world-touch、mv、rm、grepなどのコン゜ヌルナヌティリティに慣れる必芁があるでむンストヌルされるようにしたいず思いたす。 .d。


ルビヌ 「キュりリ」をむンストヌルする必芁がありたす
python -gitフックを䜿甚しおいたした゜ヌスファむルを取埗するには、バむナリ1Cファむルをリポゞトリに配眮するむンタヌセプトを䜿甚したす。結局、゜ヌスコヌドリポゞトリは゜ヌスコヌドリポゞトリに存圚する必芁がありたす。

理論から実務ぞの急激な移行から珟圚苊しんでいる人々のために、私は条件に来お、読み続けるこずを提案したす

最初に理解しおおくべきこずは、テストもコヌドです。 たた、コヌドに぀いおは、コヌドリポゞトリを䜜成するだけです。 したがっお

$ mkdir EnterpriseAccounting $ cd EnterpriseAccounting $ git init./ $ mkdir features $ mkdir tests $ mkdir src $ touch README.md 


残っおいるのは、gitサヌバヌのどこにテストを保存するかを把握するこずです

 $ git set origin https://dev.example.com/foobar/EnterpriseAccounting $ git push 


誰ず觊れ合い、これらのチヌムは䜕ですか
msgitを正しくむンストヌルした堎合は、このコマンドが既にありたす。ヘルプはtouch --helpで確認できたす。

他のすべおは、゜ヌスコヌドを操䜜する際の兞型的なコマンドです。

  • ロヌカルディレクトリを䜜成する
  • 内郚のリポゞトリを初期化する
  • ディレクトリ構造を䜜成する
  • チヌムの将来のドキュメントに関するバックログを䜜成する
  • 䞭倮サヌバヌを指定する
  • センタヌに送信チヌムず共有




最終タスクのテスト、これは関数アルゎリズムのテストではありたせん



問題に盎接進みたす。 繰り返したすが、1C自動テストの開発を開始するずきの䞻な問題は、ビゞネスの最終的な機胜を「テストする方法」が理解できないこずです。 おそらく、有名なxUnitプロゞェクトの名前は「邪悪なトリック」を果たしおいたす。これは、倚くの流行語を読むen.wikipedia.org/wiki/XUnitを指したすが、ビゞネスタスクの最終テストからはかけ離れおいたす。

そしお、ここで、自動テストを担圓する初心者開発者が「ステレオタむプを砎る」ようになりたす。事実、1C Configuratorを䜿甚するず、機胜に぀いお考える必芁はなく、「なぜ」「誰」が機胜を必芁ずせずに、必芁な期埅される動䜜をすぐに実珟できたす。 圓初、すべおのビゞネス顧客ずeDSL蚀語の専門家は、可胜な限り「状況に応じお」いるず考えられおいたす。 1぀の動䜜に぀いおは、これが本圓である可胜性が最も高くなりたすが、䞀連の予想される動䜜および耇雑なシナリオの堎合、脳はタスクのシナリオ党䜓をコンテキストに保持できたせん。 この盎埌に、予想される動䜜をコヌドずしお扱い始めたす。

開発者向けの通垞のサンプルプロセス



タスクアカりンティングシステム内の顧客からのタスクは次のように聞こえたす

「クラむアントが私たちに出荷した金額以䞊を支払った堎合、前払いずしおお金を考慮する必芁がありたす。」


それでは、実際にどのように芋えるかを芋お、1CでBDDに必芁なものを掚定したしょう。



次のステップは、「行動による開発」のかなり重芁で非垞に矩務的なステップです。行動の予想シナリオたたは私たちの分析、たたは有胜な顧客を䜜成したす。 実際、ガヌキン、そしおそれを䜿甚したすが、将来のテストシナリオのグルヌプを蚘述するDSL蚀語があるずいう事実によっお、ここで私たちを救いたす。 あなたはおそらく、私が将来のテストに぀いお䜕を蚀ったか疑問に思ったでしょうか ただし、調敎する必芁がありたす-BusinessReadableDSLを䜿甚しおシナリオを説明した埌、実際にテストする必芁があるものず実装する必芁があるものを理解したすこのトピックに関するMartin Fowlerの蚘事を参照しおください。

そのため、問題の元のステヌトメント、次の内容に基づいお蚘述するフィヌチャヌファむルがありたす。

 $ touch ./feature/account_loan.feature $ notepad++ ./feature/account_loan.feature 


 :                          ,           ,    :    ' 3.0 ()'    ' '    '   1'    02.01.2014    '   2'    03.01.2014     :          ' '  2   2 ' '   1000  300      ' '   1100       '62.01'  '   1'   1000      '62.01'  '   2'   100    '62.01'  '   2'     200  


このような機胜ファむルの䜜成方法
私はガヌキンからの兞型的な䞀連の質問に単に答え、次のリストでもう少し詳现な情報を顧客に尋ねたした。
  • どんな機胜
  • なんずいう圹割
  • 目的は䜕ですか
  • どのような行動シナリオを期埅しおいたすか
  • この機胜はどのようなコンテキストで必芁ですか



「GenerateEpf」パラメヌタヌを指定しおvanessa-behavior.osを実行し、テスト甚の完成した凊理ファむルを取埗したす。

 $ oscript.exe vanessa-behavior.os --GenerateEpf --ProjectPath="<   Feature >" --1cConnectString="File=<1>" 


そしお、それがすべおであったものを取埗したす-動䜜に基づいお凊理をテストし、 その埌、組み蟌みの1C蚀語のコヌドを入力したす



ご芧のずおり、次のこずが起こりたした。

機胜ファむルの各行に手順が䜜成されたした。

たずえば、文字列

    ' 3.0 ()' 


になった

  (01)  




これらのプロシヌゞャヌを呌び出すためのパラメヌタヌ番号、行、日付が定矩され、いわゆるスニペットも定矩されたした。次に䟋を瀺したす。
 //“@(01,02)” 



これで䜕ができるか芋おみたしょう。
最初に目を匕くのは、パラメヌタヌ名Param01Strokaがあたり明確ではないこずです。 たあ、それを取り、名前を倉曎しおください、䟋えば、 Configuration Nameで 。 はい、プロシヌゞャの名前はThere is a Configurationに眮き換えられたす 。
それは刀明したす

  ()  


ただし、同じ機胜ファむルを䜿甚しお1C凊理を再床生成しようずするず、プログラムは叀い名前のプロシヌゞャを芋぀けるこずができず、すべおが機胜しなくなるこずがありたす。 しかし、ここでスニペットが私たちの助けになりたす

  //@(01) 


どのメ゜ッドを呌び出すかを垞に決定できたすただし、凊理゜ヌスを解析し、スニペットずプロシヌゞャの実際の名前のテヌブルを䜜成する必芁がありたすが、そのような些现なこずは私たちを怖がらせたせん。

あなたが気づくこずができる2番目のものは、機胜ファむルに2぀の同様の行があったこずです

    '   1'    02.01.2014    '   2'    03.01.2014 


ただし、これらのメ゜ッドは1぀だけ䜜成されたした。

  (01,02)  


スニペットは䞡方の行で同じになるため、これは驚くこずではありたせん。 したがっお、ここでコヌドの再利甚が行われおいるように芋えるかもしれたせん。 Iiiiiiiii ...はい これだ この機胜ファむルたたは他のプロゞェクトのどこかに次のように蚘述したす。

     '-  '    '- ' 


このテストコヌドは、 ExistingAccount withAccount Dateメ゜ッドに既に実装されおいるこずがわかりたす。

さらに、このメ゜ッドは私たちの前に他の誰かによっお実装されたこずが刀明するかもしれたせん。 そしお、それを再利甚するだけです。 そしお、これは自然に起こりたす。 これはプログラマヌの倢ではありたせんか 顧客は自分が望むものを曞きたすこれが私たちの機胜ファむルです-そしお、コヌドの半分は既に実装され、テストされおいたす぀たり、テストでカバヌされおいたす。その堎でピックアップされたす
友人、BDDぞようこそ



ミニサマリヌを芁玄したす。



ある蚘事では、BDDのような倧きなトピックず、それを1Cの䞖界に適応させる方法をカバヌするのは困難です。 このトピックに完党に焊点を圓おた別の蚘事があるこずを願っおいたすが、すでにより詳现な䟋がありたす。

機胜むンベントリず技術的負債



通垞、最初の蚘事で述べたように、この資料を研究する人々は、テストを通しお曞き始めるこずを拒吊したす。

これは、次の2぀の理由で発生したす。



少しの歎史、たったく知識がない人のために
それずは別に、すべおがどのように始たり、どのように発展したかを蚀う䟡倀がありたす。

xDDコンセプトの怜蚌は2004幎より正確にTDDで始たり、2004幎ず1C 7.7プラットフォヌムで始たりたした。 ここのリヌダヌは、プロゞェクトwww.1cpp.ruのフレヌムワヌクに含たれるモスクワのテスト孊校ず、 www.kint.ruのテストのためのむゞェフスク孊校であるず考えられおいたす。

バヌゞョン1C 8のリリヌスでは、すでに確立されたプロセスを攟棄する人はいたせんでしたが、閉じられたプラットフォヌムにより、盎接的な方法で皌働時間を盎接転送するこずができたせんでした。 プロセスは少し停止したした。

しかし、ここではYandexずテスト郚門の長が党員を救った ;-)はい、はい-Yandexにも1Cがありたした。

その結果、最初のドラフトのinfostart.ru/public/15492 は非垞に機胜しやすく、耇数の開発が組み合わされるず、1Cプラットフォヌムで゜リュヌションの品質を開発する開発者向けにプロゞェクトgithub.com/xDrivenDevelopment/xUnitFor1Cが生たれたした。 この補品のリヌダヌは、 志を同じくする人々のチヌムを持぀アヌサヌ・アナカノフです。

しかし、1C゜リュヌションをテストするためのむゞェフスク孊校を思い出すしかありたせん。 珟時点では、ここの䞻なフロントマンはむゞェフスクのシステムテストです。ここのチヌムはテスト収益化スキヌムを構築し、すでに商甚補品のラむンを開発しおいたす。

vanessa-behaviorプロゞェクトは、xDDコンセプトの開発の継続ですが、異なるアプロヌチを䜿甚しおいたす-珟圚はテストからではなく、動䜜の芁件からです。





よくある質問

Q詊したしたが、成功したせんでした。 どうやっお䜿うの
Aプロゞェクトは1Scriptの最新開発バヌゞョンで動䜜しおおり、 1.0.9リリヌスのリリヌスを埅っおいたす。たた、珟圚のタスクに合わせお䜓系的に曎新されたす。 したがっお、心配しないでください-すべおがなりたす。

Qこの䞻題に぀いお䜕を読むべきですか
A倚くの資料がありたすが、



Qガヌキンがここにいるのはなぜですか
A芁件を蚘述するための Gherkin DSL蚀語は、芁件の管理の問題ず、それが自動的に解決される方法ぞの盎接の参照です。

Q暙準1C゜リュヌションの兞型的な機胜をテストする理由は䜕ですか
A繰り返し述べたように、自動テストは「長期にわたる」ものです。 実装されたシステムから予想される動䜜が存圚するこずで、暙準の1C構成の新しいバヌゞョンぞのアップグレヌドが簡玠化され、暙準構成に基づいお開発が行われたす。 確かに、この問題はすでに別の「オペラ」からのものです英語を知っおいる人向け 。 これに加えお、既に拡匵の可胜性があるサむドラむンを芗くこずを匷くお勧めしたす。拡匵は既にテストを考慮しお開発する必芁がありたす。

QxUnitFor1Cに぀いおの出版物はい぀ですか
A長い議論の埌、xDrivenDevelopment組織の著者グルヌプがxUnitでの発行を行うべきだず考えたした。 最初の8時間のビデオコヌスずInfostartでの発行しか共有できたせんが、 この補品のリヌダヌは xUnitFor1Cでの発行を行う必芁がありたす

Q次の出版物は䜕ですか
A docker-composeおよびdocker-machineの公匏リリヌス埌、および1.5ぞのdockerの開発埌も1CのDockerのたたであり、今では尊敬されおいるHabrコミュニティに本圓に圹立ちたす。

Source: https://habr.com/ru/post/J252473/


All Articles