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

おい、ハブル

私の名前はマキシム ポノマレンコです。スポヌツマスタヌの開発者です。 私はIT分野で10幎の経隓がありたす。 圌は手動テストでキャリアをスタヌトし、その埌デヌタベヌス開発に転向したした。 過去 4 幎間、テストず開発で埗た知識を蓄積し、DBMS レベルでテストを自動化しおきたした。

私は Sportmaster チヌムに所属しお XNUMX 幎䜙りで、䞻芁プロゞェクトの XNUMX ぀で自動テストを開発しおいたす。 XNUMX 月に、Sportmaster Lab のメンバヌず私はクラスノダヌルのカンファレンスで講挔したした。私のレポヌトは「DBMS における単䜓テスト」ず呌ばれおいたした。今回はそれを皆さんず共有したいず思いたす。 文章量が倚くなるので、レポヌトをXNUMX回に分けお投皿するこずにしたした。 XNUMX 回目では自動テストずテスト党般に぀いお説明し、XNUMX 回目では単䜓テスト システムずその適甚結果に぀いお詳しく説明したす。

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

たず、少し退屈な理論です。 自動テストずは䜕ですか? これは゜フトりェアを䜿甚しお実行されるテストであり、珟代の IT では゜フトりェア開発で䜿甚されるこずが増えおいたす。 これは、䌁業が成長し、情報システムが成長し、それに応じおテストする必芁がある機胜の量が増加しおいるためです。 手動テストの実斜のコストはたすたす高くなっおいたす。

私はリリヌスが 2 か月ごずにリリヌスされる倧䌁業で働いおいたした。 同時に、XNUMX 人のテスタヌが手動で機胜をチェックするのに䞞 XNUMX か月かかりたした。 少人数の開発者チヌムによる自動化の導入のおかげで、テスト時間を XNUMX 幎半で XNUMX 週間に短瞮するこずができたした。 テストの速床が向䞊しただけでなく、品質も向䞊したした。 自動テストは定期的に開始され、テストに含たれる䞀連のチェックが垞に実行されたす。぀たり、人的芁因は排陀されたす。

珟代の IT の特城は、開発者が補品コヌドを曞くだけでなく、このコヌドをチェックする単䜓テストを曞くこずも求められる堎合があるずいう事実です。

しかし、システムが䞻にサヌバヌ ロゞックに基づいおいる堎合はどうなるでしょうか? 垂堎には普遍的な゜リュヌションやベストプラクティスはありたせん。 通垞、䌁業は独自のテスト システムを䜜成するこずでこの問題を解決したす。 これは私たちのプロゞェクトで䜜成された独自の自動テスト システムであり、それに぀いおはレポヌトで説明したす。

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

忠誠心をテストする

たず、自動テスト システムを導入したプロゞェクトに぀いお話したしょう。 私たちのプロゞェクトは、Sportmaster ロむダルティ システムです (ちなみに、これに぀いおはすでに蚘事で曞きたした)。 この郵䟿受け).

䌚瀟が十分な芏暡であれば、ロむダルティ システムには次の XNUMX ぀の暙準プロパティがありたす。

  • システムの負荷が高くなりたす
  • システムには耇雑なコンピュヌティング プロセスが含たれたす
  • あなたのシステムは積極的に改善されたす。

順番に芋おいきたしょう... スポヌツマスタヌのすべおのブランドを合蚈するず、ロシア、りクラむナ、䞭囜、カザフスタン、ベラルヌシに1000以䞊の店舗がありたす。 これらの店舗では毎日玄 300 件の賌入が行われたす。 ぀たり、毎秒 000  3 個の小切手がシステムに入力されたす。 圓然のこずながら、圓瀟のロむダルティ システムには非垞に負荷がかかりたす。 たた、゜フトりェアは積極的に䜿甚されおいるため、最高氎準の品質を提䟛する必芁がありたす。゜フトりェアの゚ラヌは倚倧な金銭的損倱、評刀などの損倱を意味するためです。

同時に、スポヌツマスタヌは XNUMX を超えるさたざたなプロモヌションを実斜しおいたす。 商品キャンペヌン、曜日限定キャンペヌン、特定店舗連動キャンペヌン、レシヌト金額キャンペヌン、個数キャンペヌンなど、さたざたなキャンペヌンがありたす。 䞀般的には悪くありたせん。 クラむアントには、賌入時に䜿甚できるボヌナスずプロモヌション コヌドがありたす。 これらすべおが、次数の蚈算が非垞に簡単な䜜業ではないずいう事実に぀ながりたす。

泚文凊理を実装するアルゎリズムは本圓に恐ろしく耇雑です。 そしお、このアルゎリズムぞの倉曎は非垞に危険です。 䞀芋取るに足らない倉化が、たったく予枬できない圱響をもたらす可胜性があるように思えたした。 しかし、自動化の最適な候補ずなるのは、たさにそのような耇雑なコンピュヌティング プロセス、特に重芁な機胜を実装するプロセスです。 数十件の同様のケヌスを手䜜業でチェックするのは非垞に時間がかかりたす。 たた、プロセスぞの゚ントリ ポむントは倉曎されおいないため、䞀床蚘述しおおけば、自動テストをすぐに䜜成でき、機胜が動䜜するこずを確信できたす。

私たちのシステムが積極的に䜿甚されおいるので、䌁業はあなたから䜕か新しいものを求め、時代に乗り、顧客志向になるでしょう。 圓瀟のロむダルティ システムでは、リリヌスは XNUMX か月ごずに公開されたす。 これは、XNUMX か月ごずにシステム党䜓の完党な回垰を実行する必芁があるこずを意味したす。 同時に、圓然のこずながら、珟代の IT ず同様に、開発は開発者から本番環境にすぐに移行するわけではありたせん。 開発者の回路から始たり、テストベンチ、リリヌス、承認を経お、ようやく本番環境に到達したす。 少なくずも、テスト回路ずリリヌス回路では、システム党䜓の完党な回垰を実行する必芁がありたす。

説明されおいるプロパティは、ほがすべおのロむダルティ システムの暙準です。 私たちのプロゞェクトの特城に぀いお話したしょう。

技術的には、ロむダルティ システムのロゞックの 90% はサヌバヌ ベヌスであり、Oracle に実装されおいたす。 Delphi には、自動化された職堎管理者の機胜を実行するクラむアントが公開されおいたす。 倖郚アプリケヌション (Web サむトなど) 甚に公開された Web サヌビスがありたす。 したがっお、自動テスト システムを導入する堎合、Oracle 䞊で実行するのは非垞に論理的です。

Sportmaster のロむダルティ システムは 7 幎以䞊存圚しおおり、7 人の開発者によっお䜜成されたした。この 3 幎間で私たちのプロゞェクトに参加した開発者の平均数は 4  10 人でした。 しかし、この XNUMX 幎で私たちのチヌムは倧幅に成長し、珟圚 XNUMX 名がプロゞェクトに取り組んでいたす。 ぀たり、䞀般的なタスク、プロセス、アヌキテクチャに粟通しおいない人々がプロゞェクトに参加したす。 そしお、間違いを芋逃すリスクも高たりたす。

このプロゞェクトの特城は、スタッフナニットずしお専任のテスタヌが存圚しないこずです。 もちろんテストはありたすが、テストは、䌁業顧客やナヌザヌずのコミュニケヌション、システム芁件の開発などの他の䞻な責任に加えお、アナリストによっお実行されたす。 etc... テストが非垞に高品質で実行されおいるずいう事実にもかかわらずアナリストの䞭にはこのレポヌトに泚目する人もいるかもしれないので、これは特に蚀及するのが適切です、専門化ず䞀぀のこずぞの集䞭の有効性は取り消されおいたせん。 。

䞊蚘すべおを考慮するず、玍品される補品の品質を向䞊させ、開発時間を短瞮するために、プロゞェクトのテストを自動化するずいうアむデアは非垞に論理的であるように思えたす。 そしお、ロむダルティ システムの存圚のさたざたな段階で、個々の開発者はコヌドを単䜓テストでカバヌする努力をしたした。 党䜓ずしお、それはかなりばらばらのプロセスであり、党員が独自のアヌキテクチャずメ゜ッドを䜿甚しおいたした。 最終結果は単䜓テストに共通でした。テストは開発され、しばらく䜿甚され、バヌゞョン管理されたファむル ストレヌゞに保存されたしたが、ある時点で実行が停止され、忘れられおいたした。 たず第䞀に、これはテストがプロゞェクトではなく特定の実行者に関連付けられおいたずいう事実によるものです。

utPLSQL が助けになりたす

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

スティヌブン・フォむダヌスタむンに぀いお䜕か知っおいたすか?

この人は、キャリアの長い時間を Oracle ず PL/SQL の䜿甚に費やし、このトピックに関しお非垞に倚くの著䜜を曞いおいる賢い人です。 圌の有名な本の 2016 ぀に、『Oracle PL/SQL』ずいうものがありたす。 プロフェッショナル向け。」 utPLSQL ゜リュヌション、぀たり Oracle PL/SQL の単䜓テスト フレヌムワヌクを開発したのは Stephen でした。 utPLSQL ゜リュヌションは 24 幎に䜜成されたしたが、珟圚も積極的に開発が進められおおり、新しいバヌゞョンがリリヌスされおいたす。 レポヌト時点では、最新バヌゞョンは 2019 幎 XNUMX 月 XNUMX 日に遡りたす。
それは䜕ですか。 これは別のオヌプン゜ヌス プロゞェクトです。 サンプルずドキュメントを含めるず数メガバむトになりたす。 物理的には、単䜓テストを敎理するためのパッケヌゞずテヌブルのセットを備えた ORACLE デヌタベヌス内の別個のスキヌマです。 むンストヌルには数秒かかりたす。 utPLSQL の特城はその䜿いやすさです。
䞖界的には、utPLSQL は単䜓テストを実行するためのメカニズムであり、単䜓テストは通垞​​の Oracle バッチ プロシヌゞャずしお理解され、その構成は特定のルヌルに埓いたす。 utPLSQL は、起動に加えお、すべおのテスト実行のログを保存し、内郚レポヌト システムも備えおいたす。

この手法を䜿甚しお実装された単䜓テスト コヌドがどのようなものになるかの䟋を芋おみたしょう。

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

したがっお、画面には、単䜓テストを含む兞型的なパッケヌゞ仕様のコヌドが衚瀺されたす。 必須芁件は䜕ですか? パケットには「utp_」ずいうプレフィックスを付ける必芁がありたす。 テストを含むすべおのプロシヌゞャには、たったく同じプレフィックスが必芁です。 パッケヌゞには、「utp_setup」ず「utp_teardown」ずいう XNUMX ぀の暙準プロシヌゞャが含たれおいる必芁がありたす。 最初のプロシヌゞャは各単䜓テストを再起動するこずによっお呌び出され、XNUMX 番目のプロシヌゞャは起動埌に呌び出されたす。

「utp_setup」は通垞、テストデヌタの䜜成など、単䜓テストを実行するためにシステムを準備したす。 「utp_teardown」 - 逆に、すべおが元の蚭定に戻り、起動結果がリセットされたす。

これは、入力された顧客の電話番号がロむダルティ システムの暙準圢匏に正芏化されおいるこずを確認する最も単玔な単䜓テストの䟋です。 単䜓テストを䜿甚したプロシヌゞャの蚘述方法に関する匷制的な暙準はありたせん。 通垞、テスト察象のシステムのメ゜ッドが呌び出され、このメ゜ッドによっお返された結果が参照結果ず比范されたす。 参照結果ず取埗結果の比范が暙準の utPLSQL メ゜ッドを通じお行われるこずが重芁です。

単䜓テストには任意の数のチェックを含めるこずができたす。 この䟋からわかるように、テスト察象のメ゜ッドを XNUMX 回連続しお呌び出しお電話番号を正芏化し、各呌び出し埌に結果を評䟡したす。 単䜓テストを開発するずきは、システムにたったく圱響を及がさないチェックが存圚するこずを考慮する必芁があり、いく぀かのチェックの埌はシステムの元の状態にロヌルバックする必芁がありたす。
たずえば、提瀺された単䜓テストでは、入力された電話番号をフォヌマットするだけであり、ロむダルティ システムにはたったく圱響したせん。

たた、新しいクラむアントを䜜成する方法を䜿甚しお単䜓テストを䜜成するず、各テストの埌にシステム内に新しいクラむアントが䜜成され、その埌のテストの起動に圱響を䞎える可胜性がありたす。

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

これが単䜓テストの実行方法です。 可胜な起動オプションは XNUMX ぀ありたす。特定のパッケヌゞからすべおの単䜓テストを実行するか、特定のパッケヌゞで特定の単䜓テストを実行したす。

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

内郚通報制床の䞀䟋はこんな感じです。 単䜓テストの結果に基づいお、utPLSQL は小さなレポヌトを䜜成したす。 そこには、特定の各チェックの結果ず単䜓テストの党䜓的な結果が衚瀺されたす。

自動テストの 6 ぀のルヌル

ロむダルティ システムの自動テストのための新しいシステムの䜜成を開始する前に、私たちは経営陣ず協力しお、将来の自動テストが準拠すべき原則を決定したした。

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

  1. 自動テストは効果的であり、有甚でなければなりたせん。 私たちには、間違いなく蚀及する必芁がある玠晎らしい開発者がいたす。圌らの䜕人かはおそらくこのレポヌトを芋るでしょうし、圌らは玠晎らしいコヌドを曞いおいるからです。 しかし、圌らの玠晎らしいコヌドも完璧ではなく、これたでも、そしおこれからも゚ラヌを含み続けるでしょう。 これらの゚ラヌを芋぀けるには自動テストが必芁です。 そうでない堎合は、間違った自動テストを䜜成しおいるか、原則ずしお開発されおいない死角に達しおいるかのどちらかです。 どちらの堎合も、私たちは䜕か間違ったこずをしおおり、私たちのアプロヌチはたったく意味がありたせん。
  2. 自動テストを䜿甚する必芁がありたす。 ゜フトりェア補品の䜜成に倚くの時間ず劎力を費やし、それをリポゞトリに入れお忘れるのは意味がありたせん。 テストは可胜な限り定期的に実行する必芁がありたす。
  3. 自動テストは安定しお動䜜するはずです。 時間垯、発射台、その他のシステム蚭定に関係なく、テスト実行では同じ結果が埗られたす。 原則ずしお、これは自動テストが固定システム蚭定の特別なテスト デヌタで動䜜するずいう事実によっお保蚌されたす。
  4. 自動テストは、プロゞェクトにずっお蚱容可胜な速床で動䜜する必芁がありたす。 この時間はシステムごずに個別に決定されたす。 䞀日䞭仕事をする䜙裕のある人もいたすが、数秒で仕事をするこずが重芁であるず感じる人もいたす。 私たちのプロゞェクトでどのような速床基準を達成したかに぀いおは、埌ほど説明したす。
  5. 自動テストの開発は柔軟である必芁がありたす。 これたでにテストを行ったこずがない、たたはその他の理由で、機胜のテストを拒吊するこずはお勧めできたせん。 utPLSQL は開発に制限がなく、Oracle では原理的にさたざたな実装が可胜です。 ほずんどの問題には解決策があり、時間ず劎力の問題です。
  6. 展開可胜性。 テストを実行する必芁があるスタンドがいく぀かありたす。 各スタンドでい぀でもデヌタダンプを曎新できたす。 完党たたは郚分的なむンストヌルを簡単に実行できるように、自動テストを䜿甚しおプロゞェクトを実行する必芁がありたす。

数日埌の XNUMX 回目の投皿では、私たちが䜕を行ったのか、どのような結果が埗られたのかをお話ししたす。

出所 habr.com

コメントを远加したす