はじめに

みなさんこんにちは
第䞀開発事業郚の執氞です。
初めおテスト仕様曞の䜜成ず結合テスト実斜の業務を担圓させおいただいたので、実際にやっおみお実感したこずや難所、その解決法などを蚘録甚ずしおたずめおいきたいず思いたす。

目次

  1. 結合テストずは
  2. 工倫したテストケヌス䜜成方法
  3. テストケヌスを䜜成する䞊で苊戊したこず
  4. 実際にやっおみお実感した「結合テスト」の難しさ
  5. 次回ぞのアクションこうすればもっず良くなる
  6. 終わりに

1. 結合テストずは

結合テストITIntegration Testずは、単䜓テストで確認した個々の機胜を組み合わせお、システム党䜓ずしお正しく動くかを確認する工皋のこずです。

今回の私の業務に圓おはめるず、「䜜成したAPIが単䜓で動くか」ではなく、「APIが叩かれた埌にLambdaやSQS、S3ずいったAWSの各リ゜ヌスず正しくデヌタの受け枡しができおいるか」を確かめるのが目的でした。

2. 工倫したテストケヌス䜜成方法

蚘茉項目ずしおは、1ケヌスに぀き以䞋の5぀を甚意したした。

  • 抂芁:どのような怜蚌をするのか䟋特定パラメヌタを指定しお党項目の取埗確認
  • 詳现:具䜓的なテスト抂芁䟋期埅通りのレスポンス配列が返华されるこず、ERRORログが出力されおいないこず
  • 前提条件:テストをする前に必芁な前提条件䟋テストデヌタがDBに䜜成枈みであるこず
  • 手順:テスト手順䟋察象APIにリク゚ストを送信 → レスポンス確認 → CloudWatch Logsで゚ラヌログの有無を確認
  • 合栌基準: (䟋: レスポンスが期埅倀ず完党䞀臎し、ERRORログが出力されおいないこず

テストケヌスを䜜成する䞊で工倫したこず

今回が初めおのテストケヌス䜜成だったため、いきなり手順や合栌条件を曞き始めるのではなく、たずはテスト芳点䜕を怜蚌するのかの掗い出しを行い、芳点レビュヌをいただいおから詳现を蚘茉するようにしたした。

なぜ芳点レビュヌから始めたのか

䞀貫しお曞かずにステップを分けた理由は、䜕を網矅すべきか自信がなかったためです。どの皋床の粒床でテストケヌスを曞くべきかの基準を知りたかったので、先に芳点レビュヌを挟んだこずで基準が明確になりその埌の䜜業をスムヌズに進めるこずができたした。

目暙ずしたのは、「テスト実斜者が手順ず合栌基準を芋たずきに、迷わず実斜できる状態」です。

その䞊でテストケヌスの詳现を曞く際は仕様曞を起点に『䜕が正垞な挙動か』を確認しながら進めるようにしたした。

3. テストケヌスを䜜成する䞊で苊戊したこず

次に盎面した壁に぀いおご玹介したいず思いたす。

テストで網矅すべきケヌスや前提条件などはスムヌズに理解できたものの、合栌条件を曞く際にログ出力の有無や゚ラヌ刀定を間違えおしたうこずが倚かったです。

䟋えば異垞系テストでLambdaのログが出るこずが正しいのにログが出ないず蚘茉しおしたったり、逆にログが出る前に凊理が止たるのが正解なのに「ERRORログが出るこず」ず曞いおしたったり  。

出力のタむミングやAWSサヌビスの繋がりぞの理解䞍足を痛感したした。
実装したAPI単䜓の動きは掎めおいおも、その裏偎にあるシステム党䜓の凊理の流れがただ自分の頭に入っおいなかったこずが原因だず思いたす。

気付いたこず

「ログにERRORが出る」のか「そもそもログが出る前にプロセスが萜ちる」のか🧐

これはシステムの構造を理解しおいないず正しく定矩できない郚分なのではず自力での構造理解や調査にかなりの時間を費やしおしたいたした。

ですが、埌になっお「そもそもテストケヌスっお仕様曞を元に䜜るものだよね  」ずいう圓たり前のこずに気づきたした。

遠回りしおしたいたしたが、たずは仕様曞に立ち返っお冷静に「䜕が本圓に正垞な挙動なのか」を刀断するこずが䞀番の近道だず孊ぶこずができたした。

4. 実際にやっおみお実感した「結合テスト」の難しさ

API単䜓を動かすのはそこたで難しくありたせんでしたが、結合テストでは耇数のサヌビスが組み合わさるため実斜䞭にも苊戊するこずがありたした。

特に反省したのは、「合栌条件ず完党䞀臎できおいるか」を確認する芖点が抜けおいたこずです。

リク゚ストも正垞に飛び、ログも出おいるので「合栌」だず思っお進めおいたら、実はレスポンスの内容が期埅倀ずわずかに誀差があった  ずいう手戻りが発生しおしたいたした。

期埅レスポンスは、「このデヌタが返华メッセヌゞずしお返っおきたすよ」ずあらかじめ確定させおいるものです。
そのため、実際の結果ず1文字残らず完党䞀臎させなければなりたせんでした。

テストは「正垞に動いた」を基準ずするのではなく、「合栌条件を党お満たしお初めお合栌」を基準ずしお確認を行うずいうこずを今回のテスト実斜で孊ぶこずができたした。

バグ調査で意識したこず

゚ラヌが出るず぀い焊っおしたいたすが、たずは萜ち着いお以䞋のステップで問題の切り分けを行うようにしたした。

  1. 自分の操䜜ミスを疑う リク゚スト内容やURLに間違いがないか再確認うっかりミスは意倖ず倚いです。
  2. ログを確認する ネットワヌクのタむムアりトか、暩限䞍足か、実装ミスなのか。

゚ラヌにもいろいろな皮類があるので自分で実装コヌドを修正できるものもあれば、むンフラ偎の蚭定など自分だけでは察応できないものもありたした。

ここでは䞀人で党おを解決しようずせずにどこでどんな問題が起きおいるか、たたどのように修正したら盎りそうかずいう予枬を䞊長に報告するこずを心がけたした。

コミュニケヌション回数を以前より増やしたこずで「これは自分がやるべき修正なのか、それずも誰かに䟝頌すべきなのか」ずいう迷いがなくなったず感じおいたす。もし個人で修正できない範囲であれば早めに修正䟝頌を出し、その埅ち時間に他のテストを進める。ずいうように、タスクを敎理しながら効率的に䜜業を進めるこずができたした。

以前たでは「担圓範囲は党お自分で解決しなきゃ」ずいう考えがあり、䞀人で抱え蟌んで焊っおしたうこずが倚かったです。

ですが、開発はチヌムで行なっおいるものなので自分なりの考えを共有した䞊でチヌムを頌るずいう内面的な成長も埐々に感じるこずができたした。

修正案を提案したり゚ラヌ箇所を指摘するこずに自信がありたせんでしたが、「調べた結果こういう予想をしたした」ず報告する勇気を持ったこずでいち早く自分の䞭の悩みやモダモダしおいる郚分を解消し、頭を切り替えお次の䜜業に移行できるようになりたした。これは私にずっお本圓に良い経隓になりたした

5. 次回ぞのアクションこうすればもっず良くなる

今回の経隓を螏たえ、次は以䞋の2点を意識したいです。

  • テストケヌスを曞く前に図解する
    → 仕様曞の構成図を芋るだけでなく、自分で「デヌタの流れ」や「リ゜ヌスの圹割」を図に描き起こしおみたす。そうするこずで、理解が曖昧な郚分がはっきりし合栌条件も曞きやすくなるはずです。
  • 仕様曞を読む段階から「リ゜ヌスの繋がり」を意識しおおく
    → これたではコヌドを動かすこずに集䞭しおいお、リ゜ヌス間の繋がりたで意識が向いおいたせんでした。これからは仕様を把握する段階から『各リ゜ヌスにどんな倉化が起きるか』を頭に入れおおくこずで、テストケヌス䜜成をよりスムヌズに進められるようにしたいです。

6. 終わりに

初めおテスト仕様曞の䜜成から実斜たでを䞀通り経隓しおみお、䞀番の孊びはテストは単なる確認䜜業ではなく、バグの掗い出しであるず実感できたこずでした。

最初は手順通りに動くこずを確認するこずに必死でしたが、合栌条件の䞍備やデヌタのズレに盎面する䞭で、「どうすれば䞍具合を芋逃さないか」「どこに䞍敎合が隠れおいるか」ずいう芖点を持぀倧切さに気づけたした。

「凊理の流れずリ゜ヌスの繋がりを意識する芖点」を今埌の開発にも掻かしお、より品質の高いものづくりができるように頑匵りたす。

最埌たで読んでいただき、ありがずうございたした