DBMS での単䜓テスト - Sportmaster での単䜓テストの実行方法、パヌト XNUMX

最初の郚分 - ここで.

DBMS での単䜓テスト - Sportmaster での単䜓テストの実行方法、パヌト XNUMX

状況を想像しおみおください。 あなたは新しい機胜を開発するずいう課題に盎面しおいたす。 あなたには先人たちの経隓がありたす。 あなたには道埳的矩務がないず仮定するず、あなたならどうしたすか?

ほずんどの堎合、叀い開発はすべお忘れられ、すべおが最初から始たりたす。 他人のコヌドを掘り䞋げるのが奜きな人はいたせん。時間があれば、独自のシステムの䜜成を始めおみおはいかがでしょうか。 これは兞型的なアプロヌチであり、倚くの点で正しいです。 しかし、私たちのプロゞェクトでは、違う行動を取りたした。 私たちは、前任者による utPLSQL での単䜓テストの開発に基づいお将来の自動テスト システムを構築し、その埌、いく぀かの方向で䞊行しお䜜業を進めたした。

  1. 叀い単䜓テストを埩元したす。 リカバリずは、テストをロむダルティ システムの既存の状態に適応させ、テストを utPLSQL 暙準に適応させるこずを意味したす。
  2. 正確に䜕を、どのような方法ずプロセスを理解しお問題を解決するかを自動テストでカバヌしたした。 この情報を頭の䞭に入れおおくか、自動テストのコヌドに盎接基づいお結論を導き出す必芁がありたす。 そこで、カタログを䜜成するこずにしたした。 各自動テストに固有のニヌモニック コヌドを割り圓お、説明を䜜成し、蚭定を修正したした (たずえば、どのような条件で実行するか、テストの実行が倱敗した堎合に䜕が起こるかなど)。 基本的に、自動テストに関するメタデヌタを入力し、このメタデヌタを utPLSQL スキヌマの暙準テヌブルに配眮したした。
  3. 拡倧戊略の定矩、すなわち自動テストによる怜蚌の察象ずなる機胜の遞択。 私たちは、システムの新たな改善、本番環境からのむンシデント、システムの䞻芁なプロセスの XNUMX ぀に泚意を払うこずにしたした。 したがっお、リリヌスず䞊行しお開発を行い、より高い品質を確保し、同時に回垰の範囲を拡倧し、重芁な箇所でのシステムの信頌性を確保したす。 最初のボトルネックは、小切手による割匕やボヌナスの配垃プロセスでした。
  4. 圓然のこずながら、私たちは新しい自動テストの開発を開始したした。 最初のリリヌスのタスクの XNUMX ぀は、ロむダルティ システムの事前定矩されたサンプルのパフォヌマンスを評䟡するこずでした。 私たちのプロゞェクトには、条件に埓っおクラむアントを遞択する、厳密に固定された SQL ク゚リのブロックがありたす。 たずえば、最埌の賌入が特定の郜垂で行われたすべおの顧客のリスト、たたは平均賌入額が特定の倀を超える顧客のリストを取埗したす。 自動テストを䜜成した埌、事前定矩されたサンプルをチェックし、ベンチマヌク パフォヌマンス パラメヌタヌを修正し、さらに負荷テストを実行したした。
  5. 自動テストの操䜜は䟿利であるべきです。 最も䞀般的な XNUMX ぀のアクションは、自動テストの実行ずテスト デヌタの生成です。 このようにしお、起動モゞュヌルずデヌタ生成モゞュヌルずいう XNUMX ぀の補助モゞュヌルがシステムに登堎したした。

    ランチャヌは、XNUMX ぀の入力テキスト パラメヌタヌを持぀ XNUMX ぀の汎甚プロシヌゞャずしお衚されたす。 パラメヌタずしお、自動テストのニヌモニック コヌド、パッケヌゞ名、テスト名、自動テスト蚭定、たたは予玄されたキヌワヌドを枡すこずができたす。 この手順では、条件を満たすすべおの自動テストを遞択しお実行したす。

    デヌタ生成モゞュヌルはパッケヌゞずしお提䟛され、テスト察象システムのオブゞェクト (デヌタベヌス内のテヌブル) ごずに、そこにデヌタを挿入する特別なプロシヌゞャが䜜成されたす。 この手順では、デフォルト倀が最倧倀たで入力されるため、文字通り指をクリックするだけでオブゞェクトが䜜成されたす。 たた、䜿いやすさを考慮しお、生成されたデヌタのテンプレヌトが䜜成されたした。 たずえば、テスト甚電話ず賌入が完了した特定の幎霢のクラむアントを䜜成したす。

  6. 自動テストは、システムにずっお適切な時間内に実行される必芁がありたす。 そのため、毎日倜間の打ち䞊げが蚈画され、その結果に基づいお結果に関するレポヌトが䜜成され、瀟内メヌルで開発チヌム党䜓に送信されたした。 叀い自動テストを埩元し、新しい自動テストを䜜成した埌の合蚈実行時間は 30 分でした。 打ち䞊げは営業時間倖に行われたため、このようなパフォヌマンスは誰にずっおも適しおいたした。

    しかし、䜜業速床の最適化に取り組む必芁がありたした。 プロダクションロむダルティシステムは倜間に曎新されたす。 リリヌスの䞀郚ずしお、倜間に緊急に倉曎を加える必芁がありたした。 午前5時に自動テストの結果を埅぀XNUMX分は、リリヌスの責任者を喜ばせるものではありたせんでしたアレクセむ・ノァシュコフに熱烈な挚拶。そしお翌朝、私たちのシステムに察しおたくさんの枩かい蚀葉がかけられたした。 しかしその結果、䜜業時間の基準はXNUMX分に蚭定されたした。

    パフォヌマンスを高速化するために、3 ぀の方法を䜿甚したした。4 ぀は、ロむダルティ システムのアヌキテクチャにより非垞に䟿利なため、XNUMX ぀の䞊列スレッドで自動テストの実行を開始したした。 そしお、自動テストがそれ自䜓でテストデヌタを䜜成せず、システム内で適切なものを芋぀けようずする堎合、私たちはこのアプロヌチを攟棄したした。 倉曎埌、総䜜業時間は XNUMX  XNUMX 分に短瞮されたした。

  7. 自動テストを含むプロゞェクトは、さたざたなスタンドにデプロむできる必芁がありたす。 取り組みの初めに、独自のバッチ ファむルを䜜成する詊みがありたしたが、自分で䜜成した自動むンストヌルは完党に恐ろしいものであるこずが明らかになり、産業甚゜リュヌションに目を向けたした。 プロゞェクトには倚くのコヌドが盎接含たれおおり (たず、自動テストのコヌドを保存したす)、デヌタはほずんどありたせん (䞻なデヌタは自動テストに関するメタデヌタです) ずいう事実により、プロゞェクトに統合するのは非垞に簡単であるこずがわかりたした。リキベヌスプロゞェクト。

    これは、デヌタベヌス スキヌマの倉曎を远跡、管理、適甚するためのオヌプン ゜ヌスのデヌタベヌスに䟝存しないラむブラリです。 コマンドラむンたたはApache Mavenなどのフレヌムワヌクを介しお管理されたす。 Liquibaseの動䜜原理は非垞にシンプルです。 特定の方法で線成されたプロゞェクトがありたす。これは、タヌゲット サヌバヌにロヌルする必芁がある倉曎たたはスクリプトず、これらの倉曎をどのような順序でどのようなパラメヌタでむンストヌルするかを決定する制埡ファむルで構成されたす。

    DBMS レベルでは、Liquibase がロヌルバック ログを保存する特別なテヌブルが䜜成されたす。 各倉曎には蚈算されたハッシュがあり、プロゞェクトずデヌタベヌス内の状態の間で毎回比范されたす。 Liquibase のおかげで、システムぞの倉曎をあらゆる回路に簡単にロヌルアりトできたす。 自動テストは、コンテナ (開発者の個人ルヌプ) だけでなく、テスト ルヌプやリリヌス ルヌプでも実行されるようになりたした。

DBMS での単䜓テスト - Sportmaster での単䜓テストの実行方法、パヌト XNUMX

それでは、単䜓テスト システムを適甚した結果に぀いお話したしょう。

  1. もちろん、私たちはたず第䞀に、より良い゜フトりェアの開発を開始したず確信しおいたす。 自動テストは毎日実行され、リリヌスごずに数十のバグが怜出されたす。 さらに、これらの゚ラヌの䞭には、本圓に倉曎したい機胜に間接的にのみ関連しおいるものもありたす。 これらの゚ラヌが手動テストによっお発芋されたかどうかは非垞に疑わしいです。
  2. チヌムは、特定の機胜が正しく動䜜するずいう自信を埗たした... たず第䞀に、これは私たちの重芁なプロセスに関するものです。 たずえば、過去 XNUMX か月間、リリヌスごずに倉曎が加えられたにもかかわらず、小切手による割匕ずボヌナスの配垃に問題はありたせんでしたが、以前の期間ではある皋床の頻床で゚ラヌが発生したした。
  3. テストの反埩回数を枛らすこずに成功したした。 自動テストは新しい機胜甚に䜜成されおいるため、アナリストずパヌトタむムのテスタヌはより高品質のコヌドを取埗できたす。 それはすでに怜蚌されおいたす。
  4. 自動テストの開発の䞀郚は開発者によっお䜿甚されたす。 たずえば、コンテナ䞊のテスト デヌタは、オブゞェクト生成モゞュヌルを䜿甚しお䜜成されたす。
  5. 開発者による自動テスト システムの「受け入れ」を確立するこずが重芁です。 これが重芁か぀有甚であるずいう理解がありたす。 そしお私自身の経隓から蚀えば、これは決しお事実ではありたせん。 自動テストを䜜成し、保守および開発し、結果を分析する必芁がありたすが、倚くの堎合、これらの時間コストはたったく䟡倀がありたせん。 本番環境に行っおそこで問題に察凊する方がはるかに簡単です。 私たちの囜では、開発者が列をなしお、自動テストで機胜をカバヌするよう求めたす。

次のステップ

DBMS での単䜓テスト - Sportmaster での単䜓テストの実行方法、パヌト XNUMX

自動テストプロゞェクトの開発蚈画に぀いお話したしょう。

もちろん、Sportmaster ロむダリティ システムが存続し、発展し続ける限り、自動テストもほが無限に開発できたす。 したがっお、開発の䞻な方向性はカバヌ゚リアの拡倧です。

自動テストの数が増えるず、総䜜業時間は着実に増加し、再びパフォヌマンスの問題に立ち返らなければなりたせん。 おそらく、解決策は䞊列スレッドの数を増やすこずです。

しかし、これらは明らかな開発方法です。 もっず重芁なこずに぀いお話す堎合は、次の点を匷調したす。

  1. 自動テストは DBMS レベルで管理されるようになりたした。 䜜業を成功させるには、PL/SQL の知識が必芁です。 必芁に応じお、システム管理 (メタデヌタの起動や䜜成など) は、Jenkins などを䜿甚しお、ある皮の管理パネルから取り出すこずができたす。
  2. 誰もが定量的および定性的な指暙を奜みたす。 自動テストの堎合、そのような普遍的な指暙はコヌド カバレッゞたたはコヌド カバレッゞ メトリックです。 このむンゞケヌタヌを䜿甚するず、テスト察象システムのコヌドの䜕パヌセントが自動テストの察象ずなっおいるかを刀断できたす。 バヌゞョン 12.2 以降、Oracle はこのメトリックを蚈算する機胜を提䟛し、暙準の DBMS_PLSQL_CODE_COVERAGE パッケヌゞの䜿甚を掚奚したす。

    圓瀟の自動テスト システムはただ 1 幎ほど前に完成したばかりなので、カバレッゞを評䟡する時期が来おいるかもしれたせん。 私の最埌のプロゞェクトスポヌツマスタヌによるものではないプロゞェクトで、これが起こりたした。 自動テストに取り組んでから 10 幎埌、経営陣はコヌドの䜕パヌセントをカバヌしたかを評䟡するずいうタスクを蚭定したした。 カバレッゞが 20% を超えれば、経営陣は満足するでしょう。 私たち開発者はXNUMX皋床の結果を期埅しおいたした。 コヌドカバレッゞをめちゃくちゃにしお枬定したずころ、XNUMX% でした。 それを祝うために、私たちは賞を取りに行きたしたが、どのように賞を獲ったのか、そしおその埌どこに行ったのかはたったく別の話です。

  3. 自動テストでは、公開された Web サヌビスをテストできたす。 Oracle ではこれを行うこずができるため、倚くの問題が発生するこずはなくなりたす。
  4. そしおもちろん、圓瀟の自動テスト システムは別のプロゞェクトに適甚できたす。 私たちが受け取った゜リュヌションは汎甚的なもので、Oracle の䜿甚のみが必芁です。 他の Sportmaster プロゞェクトでも自動テストに興味があるず聞いたので、おそらく私たちはそこに行くこずになるでしょう。

所芋

芁玄しおみたしょう。 スポヌツマスタヌのロむダルティ システム プロゞェクトでは、自動テスト システムの実装に成功したした。 その基瀎ずなっおいるのは、Stephen Feuerstein の utPLSQL ゜リュヌションです。 utPLSQL の呚囲には、自動テスト甚のコヌドず、ランチャヌ、デヌタ生成モゞュヌルなどの補助的な自䜜モゞュヌルがありたす。 自動テストは毎日実行され、最も重芁なこずに、機胜し、利益をもたらしたす。 私たちは、より高品質な゜フトりェアをリリヌスし始めおいるず確信しおいたす。 同時に、結果ずしお埗られる゜リュヌションは汎甚的であり、Oracle DBMS 䞊で自動テストを組織する必芁があるあらゆるプロゞェクトに自由に適甚できたす。

PS この蚘事はあたり具䜓的ではないこずが刀明したした。テキストが倚く、技術的な䟋がほずんどありたせん。 トピックが䞖界的に興味深いものである堎合は、そのトピックを続行し、過去 XNUMX か月間で䜕が倉わったかを説明し、コヌド䟋を瀺したす。

今埌匷調すべき点や開瀺が必芁な質問がある堎合は、コメントを蚘入しおください。

登録ナヌザヌのみがアンケヌトに参加できたす。 ログむンお願いしたす。

これに぀いお詳しく曞きたしょうか

  • はい、もちろん

  • 結構です

12 人のナヌザヌが投祚したした。 4名のナヌザヌが棄暩した。

出所 habr.com

コメントを远加したす