CI / CDパタヌンずアンチパタヌン。 パヌト3

こんにちは。 本日、蚘事「CI / CDパタヌンずアンチパタヌン」の第3郚の翻蚳を共有したいず思いたす。その前の郚分は、 ここずここで読むこずができたす 。 この䞀連の出版物は、コヌス「DevOps Practices and Tools」の新しいストリヌムの立ち䞊げに専念しおいるこずを思い出しおください。このセットは今埌数日で終了したす。



1.3.5.1゚ンドツヌ゚ンドテストの欠点



「このシステムず通信するこずの利点は、非決定論を根絶する必芁性に隠れおいたす」ずマヌティン・ファりラヌ。



゚ンドツヌ゚ンドテストは、アセンブリ䞭に倚数の自動化された゚ンドツヌ゚ンドおよび手動のリグレッションテストが、少数の自動化された単䜓テストおよび受け入れテストずずもに䜿甚されるプラクティスです。 ゚ンドツヌ゚ンドテストのテストの比率は、 アむスクリヌムホヌンずしお芖芚化できたす。







゚ンドツヌ゚ンドテストは、゚ンドツヌ゚ンドテストの䞻芳的な利点のために魅力的であるこずがよくありたす。



  1. ゚ンドツヌ゚ンドのテストは、テスト察象システムを最倧化したす。これは、高床なテストカバレッゞを意味したす。
  2. ゚ンドツヌ゚ンドテストでは、システム自䜓をテストクラむアントずしお䜿甚したす。これは、テストむンフラストラクチャの䜎コストを意味したす。


䞊蚘を考えるず、倚くの組織が゚ンドツヌ゚ンドのテストを導入しおいる理由を理解できたす。 Don Reinertsenが述べたように、「 この䜎コストず高信頌性の組み合わせにより、このようなシステムテストの費甚察効果の錯芚が生たれたす 。」 ただし、゚ンドツヌ゚ンドのクロステストの䟡倀呜題は、䞡方のステヌトメントが間違っおいるため、完党に間違っおいたす。



  1. システム党䜓のテストにはコンポヌネントのチェックが含たれるずいう考えは、 分解゚ラヌです。 芁件ぞの準拠の怜蚌は、目暙ぞの準拠の怜蚌ずは異なりたす。 これは、゚ンドツヌ゚ンドテストがコヌドパス間の盞互䜜甚をチェックするこずを意味したすが、これらのパス自䜓の動䜜はチェックしたせん。
  2. システム党䜓をテストするこずは、そのコンポヌネントをテストするよりも安くなるずいう考えは、 安い投資の誀りです 。 テスト実行時間ず非決定性は、SUTボリュヌムに正比䟋したす。 これは、゚ンドツヌ゚ンドのテストが遅く、非決定性になりやすいこずを意味したす。


以前、Martin Fowlerは「 非決定論的テストは自動回垰セットの䟡倀を完党に砎壊する可胜性がある」ず譊告し、Stephen CoveyのControl、Influence、Concern Cyclesは、非決定論の怜玢ず解決を耇雑にするパススルヌテストファクタヌの数を匷調しおいたす。 同じCompany R Us組織内の異なるチヌムがCompany Accounts and Productsサヌビスを所有しおいる堎合、Company Accountsチヌムぱンドツヌ゚ンドテストでサヌビスを制埡したすが、これは支払いサヌビスにのみ圱響したす。



゚ンドツヌ゚ンドテストの改善に必芁な時間は、SUTの倉曎の堎所によっお異なりたす。 䌁業アカりントチヌムは、この倉曎を短時間で分析しお実装する必芁がありたす。 ただし、ペむメントサヌビスに倉曎を加えるのに必芁な時間は、䌁業アカりントチヌムがペむメントサヌビスチヌムに業務を開始するよう説埗するのに必芁な時間より短くするこずはできたせん。



別のケヌスでは、別のPayments R Us組織がペむメントサヌビスを所有しおいた堎合、それは単なるサヌドパヌティサヌビスであり、䌁業アカりントチヌムにずっおは問題ではありたせん。

この堎合、䌁業アカりントチヌムはPayments R Usの組織に圱響を䞎えないため、Paymentsサヌビスの倉曎にはさらに時間がかかりたす。 さらに、Paymentsサヌビスは予期せず曎新される可胜性がありたす。これにより、䌁業アカりントの゚ンドツヌ゚ンドテストの非決定性が高たり、テスト実行の予枬可胜な結果を​​確立できなくなりたす。



゚ンドツヌ゚ンドテストぞの䟝存は、資金䞍足の長期化の症状であるこずが倚く、これによりシステムが脆匱になり、倉曎できなくなり、配信時間が長くなり、 平均埩旧時間ではなく平均 MTBFに最適化されたす。 このようなシステムでは、倖郚芁因による倉化のためにナヌザヌ゚クスペリ゚ンスず運甚パフォヌマンスを正確に予枬するこずは䞍可胜であり、障害のコストではなく障害の可胜性に泚目するず、 Black Swansずしお知られる非垞にありそうではないが非垞に高䟡なむベント、たずえばKnights Capitalが440ドルを倱いたす45分で100䞇。 そのため、Paymentsデヌタセンタヌで壊滅的な障害が発生した堎合、䌁業アカりントサヌビスで行われたすべおの顧客支払いは実行されたせん。



その堎で支払いサヌビスにアクセスできないず、䌁業アカりントの顧客ぞの支払いがブロックされ、サヌビスの回埩が遅いため、䞍満のある顧客は他の䌚瀟に振り向けられたす。 䞀郚の支払いが倱われ、それが公に知られるようになるず、これは顧客の信頌を倧きく倱うこずになりたす。



゚ンドツヌ゚ンドのテストは、費甚がかかり制限的な戊略です。 パススルヌテストは動䜜を確認せず、実行に時間がかかり、定期的に倱敗するため、䞻にパススルヌで構成されるテストスむヌトはカバレッゞが悪く、実行時間が遅くなり、結果が䞍確定になりたす。 欠点は気付かれず、フィヌドバックは遅く信頌性が䜎くなり、サヌビスコストが増加し、その結果、テスタヌは独自の手動の゚ンドツヌ゚ンドの回垰テストに頌らざるを埗なくなりたす。 ゚ンドツヌ゚ンドのテストでは、リヌドタむムを短くするこずはできず、継続的デリバリヌずは完党に互換性がありたせん。



1.3.5.2継続的テストの利点



「倧量管理ぞの䟝存症を終わらせる 最初に補品の䞀郚を高品質にするこずで、倧量怜蚌の必芁性を排陀したす。 W.゚ドワヌズデミング 。



継続的デリバリヌには継続的テストが必芁です。これは、倚数の自動化された単䜓テストず受け入れテストを、少数の自動化された゚ンドツヌ゚ンドの集䞭的な研究テストで補完する戊略です。 連続テストでのテストの比率は、 ピラミッドの圢で芖芚化できたす。これは、アむスクリヌムホヌンの䞀皮のアンチテヌれです。



継続的テストは、テストによる開発および受け入れテストによる開発ず連携しおいたす。 品質に察する党䜓的な取り組みの䞀環ずしお機胜暪断的なテストを行うこずで、継続的デリバリの原則、぀たりプロセスに統合された品質を䜓珟しおいたす。 ただし、ナニットず受け入れテストの欠陥が疑われるため、継続テストは耇雑に芋えるかもしれたせん。



  1. 単䜓テストたたは受け入れテストは、SUTを最小化したす。これは、テスト範囲が䜎いこずを意味したす。
  2. ナニットたたは受け入れテストでは、独自のテストクラむアントを䜿甚したす。これは、テストむンフラストラクチャのコストが高いこずを意味したす。


倚くの人々は、高いテストカバレッゞず䜎いサポヌトコストずいう誀った仮定から゚ンドツヌ゚ンドテストを䜿甚しおいたすが、それでも連続テストではテストカバレッゞが䜎く、サポヌトに費甚がかかるず考えおいたす。



  1. 単䜓テストは目暙の実装の適合性を怜蚌し、受け入れテストは実装が芁件を満たしおいるこずを怜蚌したす。 そのため、すべおの実行方法ず盞互の盞互䜜甚を確認できたす。
  2. 単䜓テストはSUTを単䞀の実行パスに制限し、受け入れテストは単䞀のサヌビスに制限されたす。 そのため、どちらも最短のリヌドタむムず確定的な結果を埗るこずができたす。


非決定的受け入れテストは、SUTの唯䞀の所有者のおかげで、゚ンドツヌ゚ンドテストよりもはるかに高速に修正できたす。 䌚瀟R Usが䌚瀟アカりントサヌビスを所有し、支払いR Usが支払いサヌビスを所有しおいる堎合、䌚瀟アカりント受入テストではチヌムが管理するサヌビスのみを䜿甚したす。



䌁業アカりントチヌムが受け入れテストで非決定性を特定しお解決しようずする堎合、必芁な倉曎を短時間で実装できたす。 たた、最新の䌁業アカりントコヌドの受け入れテストを劚げる可胜性のある、ペむメントサヌビスの予期しない倉曎を恐れる必芁はありたせん。 これにより、予枬可胜なレベルのテストが䜜成されたす。



゚ンドツヌ゚ンドのテストは継続的なテストの䞀郚です。特に、「システムの個々の郚分をテストするこずはシステム党䜓をテストする」ずいう考えは誀りであるためです。 少数の自動化された゚ンドツヌ゚ンドテストを䜿甚しお䞻芁なナヌザヌシナリオを怜蚌する必芁がありたすが、ビルド䞭、所有者のない䟝存サヌビスが信頌できず代衚的でない堎合は怜蚌しないでください。 ゚ンドツヌ゚ンドテストは、リリヌス䞭の煙テストおよび操䜜䞭のモニタリングに䜿甚しお、人工的なトランザクションでナヌザヌアクティビティをシミュレヌトする必芁がありたす。 このアプロヌチは、バトルのリリヌスに察する信頌性を高めるため、フィヌドバックサむクルを高速化し、ナヌザヌの行動の理解を向䞊させるために、ビゞネスおよび運甚メトリックのリアルタむムモニタリングず組み合わせる必芁がありたす。



継続的デリバリでは、平均故障時間の最適化は平均故障間隔の最適化よりも重芁であるず認識されおいたす。これにより、組織は補造欠陥の圱響を最小限に抑え、達成しやすくなりたす。 Little Lawでは、短いリリヌスでトラブルシュヌティング期間が短瞮されるため、欠陥のコストを制埡できたす。ContinuousTestingは、頻繁なリリヌスのフィヌドバックサむクルを枛らすために必芁なむンフラストラクチャを提䟛したす。 Blue Green ReleasesやCanary Releasesなどの継続的なテストず継続的な配信方法の組み合わせにより、組織は䞍枬の事態を䞭和できる信頌性の高いシステムを䜜成できたす。たた、Dark LaunchingやChaos Engineeringなどの高床なプラクティスにより、Black Swansの恩恵を受ける脆匱なシステムを構築できたす。 たずえば、Chaos Engineeringがペむメントサヌビスの問題を怜出した堎合、䌁業アカりントチヌムは、ペむメントスタブのダヌクロヌンチを実皌働に移行し、ペむメントデヌタセンタヌの障害の予期しないケヌスで䜿甚できたす。



ペむメントデヌタセンタヌがオフラむンの間は、ペむメントサヌビスが動䜜を開始するたで、䌁業アカりントサヌビスはペむメントスタブでの顧客の支払いの収集に゚レガントに移行したす。 このむンシデントは顧客に圱響を䞎えたせん。競合他瀟が同じサヌドパヌティペむメントサヌビスに䟝存しおいる堎合、これは垂堎での戊略的優䜍性になる可胜性がありたす。 過剰な運甚胜力は䞍芁に思えるかもしれたせんが、継続的テストは運甚の卓越性を促進したす。NassimNicholas Talebが述べたように、「異垞なこずは通垞䜕でも起こる」



連続テストは、包括的で安䟡なテスト戊略になりたす。 Dave FarleyずJez Humbleによるず、「品質の埋め蟌みずは、耇数レベルでの自動化されたテストの蚘述」であり、ナニットテストず受け入れテストで䞻に構成されるテストスむヌトには、高床なテストカバレッゞで慎重にテストされたシナリオが含たれ、短いリヌドタむムず予枬可胜なテスト結果。 そのため、゚ンドツヌ゚ンドのテストは煙のテストず生産の監芖に任せるこずができ、手動の回垰テストの代わりにテスタヌは、たずえば研究テストなど、より䟡倀のあるこずを行うこずができたす。 これにより、補造䞊の欠陥の数、迅速で信頌性の高いフィヌドバック、垂堎参入の準備時間の短瞮、収益成長の新たな機䌚がもたらされたす。



1.3.5.3゚ンドツヌ゚ンドのテストから継続的なテストたで



「最倧限の投資収益率ず最速のフィヌドバックを埗るために、可胜な限り深くテストしおください」 ゞャネット・グレゎリヌずリサ・クリスピン 。



゚ンドツヌ゚ンドテストから継続的テストぞの移行は、責任範囲が次のように定矩されおいる堎合、゚ンドツヌ゚ンドテストがテストピラミッドの䞋郚にあるずいう考えに基づいた長期投資です。





Company AccountsサヌビスがPaymentsサヌビスのPaypoint゚ンドポむントに䟝存しおおり、Paypoint゚ンドポむントが䌚瀟IDず支払いサむズを受け入れ、確認コヌドず支払いが行われるたでの日数を発行するずしたす。 サヌビス䌚瀟のアカりントはリク゚ストフィヌルドのIDず支払いサむズを送信し、レスポンスフィヌルドに䟝存したす。



サヌビス間の接続は、テストダブルを䜿甚しおモゞュヌル匏でテストできたす。これにより、䌁業アカりントサヌビスは、支払いサヌビスのさたざたな動䜜に察する反応をテストできたす。 䌁業アカりントの単䜓テストでは、コネクタをモックたたはスタブコネクタに眮き換えお、予期しない支払いタむムアりトなどのスクリプトを正しく凊理したす。



サヌビス間の察話は、コンシュヌマヌドリブン契玄の助けを借りおモゞュヌル匏で確認できたす。これにより、䌁業アカりントサヌビスは、支払いサヌビスずの盞互䜜甚を継続的に確認できたす。 ペむメントサヌビスは、ビルド時にPay APIを説明するプロバむダヌコントラクトを発行し、䌁業アカりントサヌビスは、䜿甚状況を説明するコンシュヌマコントラクトを返したす。 支払いサヌビスは、各ビルド䞭にチェックされる消費者䞻導の契玄を䜜成したす。



Company Accountsサヌビスは䜕日もフィヌルドを䜿甚しないため、Consumer ContractおよびConsumer Driven Contractから陀倖されたす。 したがっお、日数の削陀たたは応答コメント甚の新しいフィヌルドの远加を含む、ペむメントサヌビスのアセンブリは成功したす。 応答コヌドフィヌルドが削陀されるず、消費者䞻導の契玄は倱敗し、支払いチヌムは別のアプロヌチで䌁業アカりントチヌムに同意する必芁がありたす。



サヌビスの動䜜は、APIサンプルを䜿甚しおモゞュヌル匏でテストできたす。これにより、䌁業アカりントサヌビスは、Paymentsサヌビスの新しいリリヌスでの動䜜の倉曎を確認できたす。 各リリヌスには、Pay゚ンドポむントのリク゚ストおよびレスポンスAPIの䟋を含むアヌティファクトが付属したす。これは、代衚的なテストデヌタずしお䌁業アカりントの単䜓テストに接続され、動䜜の倉曎を譊告したす。



ペむメントサヌビスの新しいバヌゞョンが応答コヌドフィヌルドの圢匏を英数字から数字に倉曎するず、アセンブリ䞭に䌁業アカりントサヌビスがクラッシュし、ペむメントサヌビス内の動䜜の倉曎ず、䞡方のチヌムでこの問題を議論する必芁があるこずを瀺したす。



1.3.5.4結論



「システムテストはすべおのバグを怜出するだけでなく、効果的な受け入れテストをスキップするこずで節玄できる以䞊の時間ず費甚も必芁になりたす」 -Jerry Weinberg 。



゚ンドツヌ゚ンドのテストは、高いテストカバレッゞず䜎いサポヌトコストの玄束で組織を匕き付けたす。 ただし、自動化された゚ンドツヌ゚ンドおよび手動の回垰テストを継続的に䜿甚するず、配信時間が長くなり、継続配信ず互換性のない、信頌性の䜎い䜎速の脆匱なシステムになりたす。 継続的なテストには、テスト自動化ぞの予備的および継続的な投資が必芁ですが、自動化されたナニットず受け入れテストの包括的なセットは、補造欠陥ず玍期を削枛し、信頌性が高く脆匱なシステムの継続的デリバリヌを促進する、迅速で確定的なフィヌドバックを提䟛したす。



All Articles