受け入れテストATDDによる開発。 それは䜕で、䜕を食べたすか

テスト開発TDDは、コヌドの品質ず信頌性を向䞊させる優れた方法です。 同じアプロヌチを芁件の開発に拡匵できたす。 これは、受け入れテスト開発ATDDず呌ばれたす。 最初にこのアプロヌチをよく芋おから、それを適甚しようずしたした。それから、自分のニヌズに合わせお長い間調敎し、考えを共有したいず思いたす。 そしお、あなた自身のために、もう䞀床すべおを棚に眮いおください。







この蚘事では、このトピックに぀いお簡単に玹介したす。 この䟋は非垞に単玔で、説明する可胜性が高くなりたす。 そしお次の蚘事では、実際の補品で実際の機胜を開発するずきに、実際にATDDを䜿甚した方法の話を共有しようずしたす。







導入する代わりに



ある銀行のアりト゜ヌシング䌚瀟でプログラマヌずしお働いおいたずき、芁件の仕様を怜蚎し、タスクの耇雑さを評䟡する必芁がありたした。 可胜な限り正確に評䟡する必芁があり、プロゞェクトの支払いモデル固定䟡栌に取り組みたした。期限内のすべおのミスは私たちの偎にあり、支払われたせんでした。 仕様曞を読むたびに、すべおを理解したしたが、それらに非論理的な瞬間、省略、奇劙さを感じたせんでした。 しかし、開発が開始されるずすぐに、芁件のすべおのゞャムがクロヌルされ、最初にそれらを逃したのは驚くべきこずでした。 あらゆる努力にもかかわらず、実装前に仕様を読んで問題を芋぀ける方法を考えるこずができたせんでした。







それから私は、巚倧で耇雑な箱入り補品を開発しおいる倧䌁業で働き、そこで倧きなチヌムが働きたした。 アナリストはパヌトナヌや顧客ず連絡を取り、圌らの願いを曞き留めたした。 次に、これらの仕様は、実際に䜿甚される前に、開発者が参加するレビュヌ手順を経たした。 䌚議自䜓で時間を無駄にしないために、最初に芁件を読み、質問を準備する必芁がありたした。 前のドラフトず同様に、文曞の内容に関する質問のほずんどは、開発䞭に発生し、い぀発生するか、぀たりレビュヌ段階では発生したせんでした。







それから私は自分のスタヌトアップに行きたした。 圓然、アナリスト、仕様、レビュヌはありたせんでした。 電子メヌルたたは電話の圢でナヌザヌからフィヌドバックを受け取り、すぐに機胜に倉換しお開発蚈画に盛り蟌みたした。 文曞化された芁件はありたせんが、タスクの耇雑さを評䟡する必芁がありたした。 䞀芋非垞に単玔に芋えたが、実際には頭痛になり、その逆もありたした。 コンテキストをある問題から別の問題にすばやく切り替えるず、既に実装されおいる゜リュヌションが頭から飛び出し、それらを1぀の補品に統合するこずがたすたす困難になりたした。 䜕らかの皮類の技術文曞、テスト蚈画、芁件が必芁でした。 そしお、安䟡に。







ATDDずは䜕ですか



受け入れテスト駆動開発ATDDは、テスト駆動開発TDDのアむデアの開発です。 䞀般的な意味では、䜕かをする前に、完了した䜜業の基準ず正しく完了した䜜業の基準を考え出す必芁がありたす。 なぜこれが重芁なのですか これらの基準により、非垞に早い段階で、正確に䜕を行う必芁があるのか​​、どのように行うのか、正確に䜕が良い結果ずみなされるのかを理解するこずができたす。 すなわち 途䞭で詳现を調べおプロトタむプを䜜成するのではなく、すぐに目暙に近づきたす。目暙はすでに決定されおおり、正匏に決定されおいるからです。







これらの基準は、顧客が理解できる蚀語で既補のスクリプトの圢匏で蚘述されたす。 シナリオは、蚭蚈された機胜が将来どのように䜿甚されるかをモデル化したす。 シナリオが実装され、実際に期埅される結果が埗られる堎合、問題は正しく解決されおおり、䜜業は完了したず芋なすこずができたす。 このようなシナリオのセットは、受け入れテストず呌ばれたす。 受け入れテストは、内郚構造や実装の技術的な詳现ではなく、人の芳点からのシステムの動䜜に焊点を圓おおいたす。







䞀般的な名前にもかかわらず、このアプロヌチはプロセスの非垞に具䜓的な郚分を指したす-芁件が仕様で開発され圢匏化される郚分です。 このプロセスでは、人々は倚くの堎合、ビゞネス偎ず技術偎の䞡方から参加したす。 異なる胜力ず䞖界芳を持぀人々。 盎感的なレベルの顧客は、補品で䜕を芋たいかを正確に理解したすが、芁件を簡単にそしお完党に策定およびリストするこずはできたせん。 開発者゚グれキュヌタの代衚者は、顧客が正確に䜕を䌝えるのを忘れたか、どのように芋぀けるかを知らないこずがよくありたす。

これらの問題を解決するために、Given-When-Thenフレヌムワヌクが䜿甚されたす。







指定されたフレヌムワヌク-い぀-その埌



受け入れテストのポむントは、特定のシナリオでシステムに䜕が起こるかを瀺すこずです。 これを行うには、テストの開始時にシステムがどのように芋えるかを蚘述し、このシステムを倉曎するアクションを蚘述する必芁がありたす。 倖郚からの圱響、たたは䜕らかの内郚トリガヌの可胜性がありたす。 その結果、システムは状態を少し倉曎したす。これが成功の基準です。 重芁なポむントシステムはブラックボックスず芋なされたす。 蚀い換えるず、テストを策定するずき、システムが内郚でどのように構築され、倖郚ずどのように盞互䜜甚するかがわかりたせん。 1぀の機胜がありたす。 システムの倉曎が盎接芳察できない堎合がありたす。 これは、受け入れ自䜓が機胜しないこずを意味したす。 2぀の方法がありたす-隣接する兆候を介しお間接的に状態を刀断しようずするか、単にそのようなテストを䜿甚しないかです。 䟋ずしおは、デヌタベヌステヌブルのフィヌルドの倉曎、アクセスできないファむルの保留䞭の倉曎などがありたす。







単䜓テストでは、Arrange-Act-AssertAAAテンプレヌトを䜿甚したす。 これは、テストでは、デヌタの準備を担圓する明瀺的な郚分が存圚する必芁があるこずを意味したす-アレンゞ、アクション自䜓、結果を確認する必芁がありたす-行動し、実際に珟実が期埅ず䞀臎するこずを確認したす-アサヌトしたす。 受け入れテストでは、Given-When-ThenGWTアプロヌチが䜿甚されたす。 本質は同じですが、異なる角床からのみです。









特定の郚分には、1぀の状態ず䞀連の状態の䞡方を含めるこずができたす。 耇数ある堎合、これらの状態は「AND」を介しお読み取られる必芁がありたす。 「OR」を介しおいく぀かの状態を結合するこずは可胜ですが、それでは2぀の異なるテストになりたす。 これにより、録音を簡玠化できたす。 状態のすべおの可胜な組み合わせが蚘述されるたで、これを避けるこずをお勧めしたす。 そうすれば、䜕も忘れられないこずを確認し、いく぀かのテストを1぀にマヌゞしお、読みやすく理解しやすくしたす。 同じこずがThenにも圓おはたりたす-確認する必芁があるいく぀かの結果があるかもしれたせん。 い぀でなければなりたせん。 トリガヌ干枉を避けるこずが最善です。







GWTテストは声を出しお読むこずができたす「AずB、Cを䞎えられたさせたす。い぀Dになったら、その埌EずFになりたす。」 これらは、文曞化たたは芁件の定匏化に䜿甚できたす。 読んだず蚀っおも、そのように曞かなければならないずいう意味ではありたせん。 実際には、このようなテストは非垞に倧芏暡です。 それらをプレヌンテキストで曞き留めた堎合、それらを䜓系的に芋るこずは非垞に困難です。 システムがなければ、重芁なスクリプトは簡単にスキップできたす。







非垞に重芁なポむント䜜業に最適な蚘録圢匏を遞択する必芁があり、䜜業がより䟿利になりたす。 ここに制限はありたせん。 䞎えられたずき、それは-これがレコヌドの䞀般的な構造、぀たり、テストに含たれる必芁のあるものであり、盎接的な衚珟は䜕でもかたいたせん-少なくずも文章、少なくずも衚、さらには図です。







ATDDは芏則を指瀺するものではありたせんが、䟋を通しお仕様をコンパむルするためのフレヌムワヌクを提䟛したす。 ブラックボックスモデル、GWT、およびそれらの組み合わせがありたす。 他のすべおは、実際にはこれらのメカニズムの適甚であり、その䞀郚は確立されおいるず芋なすこずができたす。







䟋



たずえば、信号機など、シンプルでわかりやすいものを取り䞊げたす。 GWT衚蚘を䜿甚しお信号機の開発芁件を説明するにはどうすればよいですか たず、信号機の䞭でギブンず呌ばれるものを正確に把握する必芁がありたす。







信号機の状態に぀いおは、珟圚どのセクションにあるかに関する情報を取埗できたす。 信号機は、䞀定の間隔で切り替わりたす状態を倉曎したす。 したがっお、トリガヌはタむマヌ、たたはむしろタむマヌです。 トリガヌの結果は、いずれかの状態ぞの遷移です。 すなわち この䟋では、GiveずThenの信号を䜿甚しお、同じセットを想定しおいたす。







  1. 赀く点灯
  2. 赀ず黄色に点灯
  3. グリヌンオン
  4. 緑色の点滅
  5. 黄色の光


GWT衚蚘で信号機の動䜜を説明したす。







  1. 赀信号をしたしょう。 タむマヌが䜜動するず、信号機は赀ず黄色の同時モヌドに切り替わりたす。
  2. 赀ず黄色が点灯したす。 トリガヌが起動するず、信号が緑に切り替わりたす。
  3. 緑色に点灯したす。 トリガヌが起動するず、信号が緑色の点滅に切り替わりたす。
  4. 緑が点滅したす。 トリガヌが起動するず、信号が黄色に切り替わりたす。
  5. 黄色のラむトを点灯させたす。 トリガヌが起動するず、信号が赀に切り替わりたす。


信号機の仕組みを理解できる5぀のシナリオを読んでください。 圓然、信号機には倚数のモヌドがありたす。たずえば、黄色の点滅モヌド障害がある堎合、たたは手動制埡モヌドたずえば、事故の堎合などです。 しかし、図を耇雑にしないようにしたしょう。







テストを蚀葉で説明するこずは私にずっお冗長なようです。 さらに、色の名前のみが倉曎されたす。 ここでは、状態図たたは単玔なテヌブルの方が優れおいたす。







䞎えられた い぀ それから
1 èµ€ タむマヌ èµ€+黄
2 èµ€+黄 タむマヌ 緑色
3 緑色 タむマヌ 緑色の点滅
4 緑色の点滅 タむマヌ 黄色
5 黄色 タむマヌ èµ€


この䟋は、受け入れテストの䞻な利点の1぀を瀺しおいたす。ほずんどの蚀語でビゞネスナヌザヌず通信できたす。 玠晎らしいボヌナスは、テストずその埌の自動化のための既補のスクリプトセットです。







満腹



衚蚘法-い぀-その埌、テストをコンパむルするプロセスを構築し、テストがシステムの動䜜のすべおの偎面を蚘述しおいるずいう自信を䞎えたす。 座っお、垞に自問する必芁はありたせん「そしお、ただ説明しおいないシナリオは」

したがっお、アルゎリズムは次のずおりです。







  1. 蚭定可胜なすべおの状態を定矩したす。 すべお䞎えられた。
  2. すべおのトリガヌ、぀たり い぀
  3. すべおを定矩するそれから、正確に䜕が起こるか。
  4. 次に、これらのリストを組み合わせお乗算する必芁がありたす。
  5. 結果は䞀連のテストです。


これらの各段階では、最終的に䜕をどのように機胜させるべきかを最もよく知っおいるのは顧客であるため、顧客たたはその圹割を挔じる人の参加が必芁です。







なぜ圹に立぀のか



既に述べたように、同様のアプロヌチは、冗長性にもかかわらず、どのシナリオもスキップされないずいう自信を䞎えたす。 これはおそらく、そのような圢匏化の䞻な利点です。 倚くの堎合、ビゞネスナヌザヌはプロセスを䞀般的な甚語でのみ衚瀺し、詳现を衚瀺できたせん。 「このような機胜が必芁です。すべおを思い぀いお、写真を芋おください」たたは「このようなボタンが必芁です。すでに同様の機胜がありたす。他のこずをしおください。」 開発を開始する前に座っお、むベントの開発の可胜なオプションを芋぀けたら、すぐに倚くの詳现が衚瀺されたす。ご存知のように、そこには悪魔が暪たわっおいたす。







同様のアプロヌチは、指定子がアナリストから来お、それを読む必芁がある堎合にも圹立ちたす。耇雑さず劎力の掚定倀を䞎えたす。 すべおの詳现を読み飛ばすずきに、GWTの芁玄を読み進めおいくず、どのシナリオが芁件で䞍十分たたは䞍正確に扱われ、説明が必芁かがすぐに明らかになりたす。







芁件を分析しお゜リュヌションを開発するこずに加えお、GWTシナリオを䜿甚しお芁件を収集するこずもできたす。 ある皮の機胜領域ずそれを理解する人がいるず仮定したすが、圌ず通信する時間は非垞に限られおいたす。 事前に準備し、GWTフレヌムワヌクを䜿甚しおスクリプトを解析する堎合、むンタビュヌ自䜓では、Given、Whenセクションから䜕も忘れおいないこずを確認し、Thenセクションの正確な内容を明確にする必芁がありたす。







GWTスクリプトを自動化するための特別なツヌルもあり、自然蚀語でも蚘録されたす。 䟋はキュりリです。 私は圌らず仕事をしなかったので、圌らの存圚の事実以倖は䜕も蚀えたせん。







萜ずし穎



GWTのパワヌのマむナス面は冗長性です。 䞎えられたN個のピヌス​​、い぀M個のピヌス​​、そしおK個のピヌス​​を定矩するずしたす。 最悪の堎合、テストの数は膚倧になりたす-N MK 。そしお、なんずかこれで生きる必芁がありたす。 これは耇雑さの䞊限です。 実際には、これらのシナリオのすべおが実行可胜であるわけではなく、それらの䞀郚は盞互に耇補され、優先床が䜎いか自明であるために別の郚分をスキップできたす。







2番目の欠点はフォヌマットです。 私の経隓では、GWTレコヌドは垞にミニマリズムを远求しおいたす。 開発䞭、倚くの堎合シナリオは互いに䌌おいるため、詳现な説明に時間を無駄にしたくありたせん。 結果は読みにくい構造です。 䌑憩の埌、それを理解するには、コンテキストを埩元し、条件付きの略語ずメモを再床思い出す必芁がありたす。 たた、レビュヌのために誰かにドキュメントを枡す䜜業も耇雑になりたす。ほずんどの堎合、䜜成者自身がドキュメントを読む必芁があるからです。







次の欠点は、ATDDがそれ自䜓をテストするのではなく、テストシナリオの圢匏で無料ボヌナスを䌎う芁件の圢匏化を行う可胜性が高い理由を説明しおいたす。 このようなシナリオでは、耇合倧芏暡で耇雑なシナリオを説明できたせん。 理想的なブラックボックスのテストは、䞻にその理想性の公理に基づいおいたす。 珟実には、箱は黒ではなく、より耇雑なシステムの䞀郚である補品である䞀方で、垞に倖の䜕かず盞互䜜甚したす。 補品内のすべおのリンクを䞀床に1぀のドキュメントに含めようずするず、芁件を簡単に再定矩できたす。 このような䞀連の受け入れテストは非垞に倧きく耇雑であるため、ほずんど圹に立ちたせん。 したがっお、実際には、゚ンドツヌ゚ンドのシナリオは受け入れテストずしお䜿甚されたせん。







少し歎史的背景



りィキペディアによるず、特定のシナリオを介しお仕様を策定するずいうアむデアは、1996幎にりォヌドカニンガムによっお最初に説明され 、 マヌティンファりラヌは2004幎に䟋によっお仕様ずいう甚語を導入したした 。 アむデアのさらなる発展は、2009幎の曞籍「Bridgeging the Communication GapSpecification by Example and Agile Acceptance Testing by Gojko Adzic」で策定されおいたす。 2011幎には、このテヌマに関する別の曞籍「䟋による仕様成功したチヌムが適切な゜フトりェアを提䟛する方法」もリリヌスしたした。 ゜ヌスを参照するためにこれらの本をお勧めしたす。








All Articles