ソフトウェアテストのプロが伝授! キャッシュレス決済システム開発で起こりうる不具合防止について

最終更新日時:2021.01.07 (公開日:2021.01.08)
ソフトウェアテストのプロが伝授! キャッシュレス決済システム開発で起こりうる不具合防止について

1.はじめに

この数年で、「キャッシュレス決済」は日常的に使われる機会が急増しています。

経済産業省は2018年4月に『キャッシュレス・ビジョン』と『クレジットカードデータ利用に係るAPI※ガイドライン』を策定するなどして、社会のキャッシュレス決済の利用を後押しています。キャッシュレスを推進することが日本経済の活性化に繋がると期待されていることがわかります。

※API = Application Programming Interface

このような背景もあり、デジタルトランスフォーメーション(DX)化が進んでいく日本では飛躍的にキャッシュレス決済システムが普及していくと考えられており、関連するシステムの開発も急加速しています。

しかし、同時にキャッシュレス決済にまつわる事故・トラブル・不具合に関する報道・報告が続いていることは皆さんご存知のとおりです。「キャッシュレス系では『何か』が起こる」といっている関係者も少なくないそうです。

そこで今回は、ソフトウェアテストのプロが指摘する、キャッシュレス決済のシステム開発で起こりうる不具合の「あるある事例」を「決済系」「ポイント還元系」に分けてご紹介します。

2.キャッシュレス決済システムで起きている不具合

20201222_4.jpg

まず、キャッシュレス決済の概要を見てみましょう。

キャッシュレス決済は、支払いが発生するタイミングで、(1)プリペイド(前払い)、(2)リアルタイム(即時払い)、(3)ポストペイ(後払い)の3つに大きく分類されています。他にキャッシュレス決済に使用するツールでスマホ決済、カード決済と分けられることもあります。さらに接触型、非接触型や提供する事業者による区分けもあります。

(分類の一例)

支払いが発生するタイミング サービス事例
プリペイド(前払い) 電子マネー(交通系/流通系)
リアルタイム(即時払い) デビットカード
ポストペイ(後払い) クレジットカード/電子マネー

キャッシュレス決済システムの特徴は、基本的に1社で完結せず、決済事業者とFinTech(Finance Technology)企業がAPIで連携して稼働していることにあります。そのため、システムも開発体制も複雑な構造になっていることが多いといわれています。

今回は、キャッシュレス決済のシステム開発で起こりうる不具合を「決済系」「ポイント還元系」に分類しています。

ここでいう「決済系」とは、キャッシュレス支払いを"ピッ"としたときにお金を引き落とすシステムのことです。「ポイント還元系」とは、基本的に購入行動をトリガーにして、その内容がキャンペーンの条件を満たしていると判定されるとポイントを付与するといったイベントやサービスのことです。流れとしては、決済系システム → ポイント還元系システムとなります。

2-1.キャッシュレス決済システムの不具合例① ~決済系システムの場合~

お金があるのに、支払期日に支払えないケース

主にポストペイ(後払い)を利用したユーザーが、支払い能力があるにも関わらず支払いができなくなる不具合です。

原因

データベースの登録タイミングのズレ。購入した際のデータが正常に登録できていなかったり、登録タイミングが異なっていたりしたため、その後の処理で問題が発生しています。

検証すべきポイント

重要なポイントは、購入データが適切に登録できているかを確認することにあります。

防止策

重複したデータが送られないように「冪等性(べきとうせい)」を開発時に担保しておく必要があります。冪等性が担保できていないと、取り消しが2回できてしまうといった問題が発生することがあります。

こういった問題は外部とAPIで外部やり取りをした際に発生しやすいので、支払いのシステムを使うときは経由する外部システム、サービスとの連携状況をよく検証しておくことが大切になってきます。

意図しない金額を引き落としてしまうケース

キャッシュレス決済では、"ピッ"としたとき、ユーザーのID、決済金額、使用通貨(日本円・外貨の種別)といったパラメーターが並んだ電文がAPIを経由して外部サービスへ一瞬で送信されています。この設定をミスすると、意図しない金額が引き落とされる不具合などが開発中に発生することがあります。

原因

送信側と受信側とで電文内容の食い違いが発生しています。受け取り側が期待する内容とは異なる電文が送られることで齟齬が生じます。開発をしている2社間で接続試験をした際によく発生する問題です。設定ミスが原因となっていることが多く、ある意味で人為的な不具合だといえます。

検証すべきポイント

基本的に外部の会社との接続試験は「何か起きるだろうな」と考えて、余裕を持って実施することが大切です。発生しやすい不具合なので、起こりうるものとして予め対策などを考慮しておくこともポイントとなります。

防止策

キャッシュレス決済は、購入時の"ピッ"が起点となり、そこから電文のやり取りをするのがメインの処理になるので、データ不一致などのトラブルは発生しやすい傾向があります。この不一致は不正な取引となるため、普通であればシステムに弾かれますが、弾く処理をしていなければ、引き落とし金額の間違いなどの不具合に繋がります。

これを防ぐには、自社だけでテストを終わらせるのではなく、外部としっかり認識を合わせることが大切です。外部の会社と、ケースを通してみるといった検証も必要になってきます。

本番前にテスト環境で仮の電文を作成してもらって受け、APIのレスポンスを返した際に正しく動作するか確認しておく必要があるでしょう。できれば「一気通貫」のシミュレーションをしておくなど、検証を細かくしておくとトラブルを防ぐことができます。

スマートフォン端末固有の問題によって不具合が発生するケース

20201222_3.jpg

キャッシュレス決済では、特定のクライアント(スマートフォン)機種でアプリ等を操作すると動作が停止してしまう現象(不具合)が発生することがあります。

原因

多くの場合、クライアント端末固有の機能や不具合が原因となっています。全体の問題としてではなく、個別の問題として決済できないといったトラブルになります。特定のOSや端末で問題が発生する傾向が見られることもあります。

検証すべきポイント

かなり検知しにくく、問題発生の予測も難しいとされています。検証ポイントとしては、できるだけ多くのテスト機を使ってリリース前にテストする以外には方法はありません。

ただ、さすがにすべての機種をチェックすることはできないので、最低限でもAndroid、iOSのバージョンごとにテストをしておく必要があります。この際、事前に問題が発生しそうな機種、販売台数の多い人気機種でもテストしておくことがポイントになります。

また、画面表示の「崩れ」が発生することも想定できるので、「OS✕端末の種類✕画面サイズ」を組み合わせて検証することも忘れないようにしましょう。

防止策

すべての機種、すべての環境でテストできないため、できるだけ検証を多く行うことが不具合の防止に繋がります。特殊な動きをする端末や問題が集中しやすい端末を事前に把握し、テスト環境に加えておくことも防止策として有効になります。

2-2.キャッシュレス決済システムの不具合例② ~ポイント還元系システムの場合~

ポイント没収後の挙動が考慮されていないケース

キャンペーン参加条件を満たす決済が発生し、ポイント付与後、その元となった決済が取り消されるとポイントは没収されます。一回はポイント還元をしても没収しているため、還元済みの回数としてカウントすべきではありませんが、カウントする処理がされてしまうなど、没収後の挙動について考慮漏れがある場合があります。

原因

エンジニアのミス、あるいは考慮漏れ、要件にあっても失念による実装漏れなどが原因となることが多いようです。

検証すべきポイント

ユーザーが決済後にキャンセルするのはよくあることだと考え、新実装の機能がない場合でもポイントの付与と没収の挙動は、常にどちらも継続的に確認するのが、最低限の観点となります。

没収後の挙動、例えば還元回数を元に戻す動作については、没収によって起こりうるシナリオを派生して考え、付与、没収と一体のものとして気をつけておくことがポイントになります。このような不具合が発生することを予め想定しておくことも対策に繋がります。

防止策

新たにキャンペーンを実装するときはロジックの漏れがないか、実装方針を開発チームとしっかりと決めておきます。

防止策としては、仕様・実装方針のすり合わせの徹底や、ポイント没収後の挙動や還元上限到達後の挙動など、あらゆるユースケースを想定して関係者全体で懸念を潰すこと、許容ケースの認識合わせをしておくことが考えられます。

キャンペーン対象ではない人にポイントを付与してしまったケース

各ユーザーがキャンペーン対象かどうか判定するために必要な情報をまとめたテーブルのデータ過不足によって、対象ではない人にポイントを還元してしまう不具合などが発生することがあります。

原因

データ(リスト)の誤り。ほとんどが人為的なものです。データのテーブルを更新した際に古くからのユーザーデータが漏れてしまうケースもあります。キャッシュレス決済だけでなく、他のジャンルでも起こりうる問題として認識されています。

検証すべきポイント

システムが正しく稼働していても、そもそもテーブルのデータに過不足があるために発生する不具合で、ある意味、防ぎようがないケースともいえます。テストにかかるコストを度外視するなら、データアナリストのようなチームだけでなく、テスト担当者も検証できるよう、本番データを検証環境に持ってくるなどの工夫をして検証することも考えられます。

防止策

テーブルの更新が正しく行われているかだけでなく、そもそもそのテーブルに存在するデータが十分かなど細かいところまでチェックしておくことが大切です。また、コストをかけないようにして、できるだけ本番同様のデータを使って検証できるような環境を作り、最大限のチェックをしていくことが何よりの防止策になります。

キャンペーンのLP(Landing Page)の表示・動作が意図通りにならないケース

キャンペーンページやLPで、ユーザーの状態に応じて内容を出し分けるとき、仕様の意図通りでない問題が発生することがあります。例えば、本人確認済みのユーザーに次のステップに移るための導線が表示されなかったり、再度、本人確認を促す表示をしてしまったりする不具合です。

また、キャンペーン意図がユーザーに伝わらなかったり、誤字脱字で意味不明になっていたりすることもあります。

原因

不審な挙動は多くの場合、エンジニアのミスが原因であるといわれています。表記の場合は、出し分けの要件が正しくメンバーに伝わっていなかったため、実装漏れあるいは実装不備として発生することが多いようです。

検証すべきポイント

これらの問題は「画面を見て、読んでわかる」ことが多く、仕様のチェック漏れが原因のため、ほとんどが公開前に対応できているようです。開発物の品質全体を保証するQA(Quality Assurance)部門や担当者が最後の砦的な存在です。QA担当者と一緒に確認の手間を惜しまないことがポイントになります。

防止策

キャンペーンの仕様が固まった段階で、実装フェーズに入る前にスペックのレビュー会等を開き、メンバー間で認識を揃えておくことが防止策になります。キャンペーンの概要や注意事項は企業によってはリーガル部門やカスタマーサポート部門がレビューを加えることで対策していることがありますが、それでも漏れが発生することがあります。

キャンペーンは連続して実施されることも多いので、時間がなくても、繰り返し仕様の確認をすることが防止策として有効です。

3.ここに注意! キャッシュレス決済システム開発全体について

20201222_2.jpg

キャッシュレス決済システムの開発現場でよくある不具合の原因は、(1)外部要因、(2)仕様のチェック漏れの2つに大別できます。時代の最先端をいく開発ですが、意外にも「チェック漏れ」など、不具合はアナログな原因で発生していることが多いようです。

(1)外部要因

キャッシュレス決済システムは、基本的に決済事業者と企業がAPIで連携して実現しているため、外部とのやり取り時に不具合が発生するケースが多くみられています。報道ベースで見ると、2020年には「ゲートウエイシステムの通信処理の実装ミス」や「認証障害」「情報管理システムに情報が反映されない不具合」といった事例が報じられています。

外部に要因がある場合、大きなトラブルへ発展してしまうことが多いようです。キャッシュレス決済システムを支えるAPIは通信をしていますが、開発する人間同士も開発情報のやり取り、つまり「通信」をしています。APIを正しく動かすためには、仕様とその確認が何より大切で、自社だけでテストを終わらせるのではなく、外部としっかり認識を合わせていくことが開発時のポイントだといえそうです。

(2)仕様のチェック漏れ

先ほども述べましたが、意外なことに仕様のチェック漏れといった基本的なミスが元で不具合を発生させてしまっているケースが多いようです。幸いなことに公開前に対応できていることが多いようですが、時間等のロスが発生してしまい、開発全体の効率を悪くしてしまうマイナスがあります。

ロジックを変更するときは、リリース前とリリース後で差異が発生して問題が生じることがあります。リリース前後で差異が発生しないかといった観点から、全体を見直してみるとよいでしょう。

とくに、ポイント還元系システムを利用したキャンペーンを開催すると、ユーザーの関心が一気に高まります。サービスを提供する会社側としてもアクティブユーザー数を増やし、資金が大量に動くインパクト強のイベントとなるため、入念なロジックチェックと検証は必須となります。

もし、対象でないお客様にポイント付与してしまうと、サービス提供会社は無駄に資金を浪費することとなります。また、キャンペーンの対象となるお客様にポイントが付与されないと、カスタマーサポートに問い合わせが集中し、その対応や、事後の手動でのポイント付与などコストの高い作業が発生するデメリットがあります。

急激に成長を続けているキャッシュレス決済だけに、開発にも尋常ならざるスピード感が求められているのは事実ですが、基本に一歩立ち返って、しっかり仕様を確認することが求められています。「急がば回れ」ということかもしれません。

4.おわりに

政府の後押しもあり、今後ますます重要性が高まっていくキャッシュレス決済システムの開発。不具合の発生を前もって意識しておくことで高品質なサービスを実現することができます。そのためには、仕様を確認し、テストのプロからの助言を仰ぐなどして計画的にテストを繰り返すことが重要になってきます。

また、ユーザーに接することが多いシステムだけに「ユーザー目線」を持つことも大切です。ユーザーに損をさせないことを第一に考えて開発をすることが一番のキモなのかもしれません。

今回は、キャッシュレス決済システム開発で「よくある不具合」をいくつかご紹介しました。この記事が少しでも皆さんのお役に立てたのであれば幸いです。

執筆者:Qbook編集部

ライター

バルテス株式会社 Qbook編集部。 ソフトウェアテストや品質向上に関する記事を執筆しています。