APIは、デジタルトランスフォーメーション時代におけるサービス開発、システム開発の重要なカギといっても過言ではない。しかし、APIの重要性が増すにつれ、開発の現場では課題も指摘されるようになってきた。「APIのテストをどう行うか」「テスト環境をどう整えるか」といった課題を解決するには、どうすればいいのだろうか。
ビジネス開発やサービス開発におけるAPIの重要性が高まってきている。API(Web API)とはプログラムがその機能を他のプログラムから利用できるようにするためのインタフェースのことだが、近年のデジタルトランスフォーメーション(DX)に向けた取り組みの中で、プログラムを外部から呼び出したり、逆に、外部に利用してもらったりする取り組みが活発化してきたことが背景にある。
例えば、FinTechと呼ばれる、金融機関の取り組みが代表的だろう。銀行やクレジットカード、証券会社などがシステムのAPIを公開し、それをサービスプロバイダーなどが利用することで、新しい決済や株取引のサービスを作り出すといった事例だ。
もちろんAPIは外部への公開にとどまらない。製造業においては、FAや自動車開発、IoTプラットフォームの開発などが積極的に行われているが、APIを通じてさまざまなシステムを連携できるようにすることで、従来のものづくりにとらわれない新しいものづくりの在り方や新しいサービスの提供につなげている。
APIは、DX時代におけるサービス開発、システム開発の重要なカギといっても過言ではない。しかし、APIの重要性が増すにつれ、開発の現場ではAPIに関する課題も指摘されるようになってきた。それは「APIのテストをどう行うか」「テスト環境をどう整えるか」ということだ。
サービス開発、システム開発を支援するさまざまなツールを提供しているテクマトリックスの福永一寛氏は、API開発を巡る課題について、次のように話す。
「APIを利用する側でよくある課題は『APIを開発する側の開発が遅延していて結合テストができない』『他社との調整が必須でテストできるタイミングが限定される』というものです。一方、APIを開発する側では『テストのやり方がよく分からない』『十分なテストが実施できていない』といった課題を抱えています。素早いリリースが求められる中、結合テストや並行開発でAPIテストがボトルネックになっています。これらが重なり合って新しいサービスのリリースが遅れるという事態も増えています」(福永氏)
APIに関するこのような課題は、サービスをAPIで利用するフロンドエンド(API利用側)と、APIを開発し提供するバックエンド(API開発側)に分けて考えると解決策が探りやすくなるという。テクマトリックスの飯山正史氏は、こう解説する。
「フロンドエンドは、ユーザーが操作できる画面を持っていて、スマートフォンやWebブラウザを使って操作できるといった特性を持ちます。一方、バックエンドは、ユーザーが操作できる画面を持っておらず、アプリケーションに対してデータや機能だけをAPIで提供するという特性を持ちます。この特性を踏まえながら、APIテストを効率化することがポイントです」(飯山氏)
テクマトリックスには「APIテストを効率化するにはどうすればいいか」という声がこの数年で急速に増えている状況だという。そうした声に応えるツールとして同社が提供しているのが、Parasoftが開発する「SOAtest/Virtualize」だ。
SOAtest/Virtualizeは、疎結合システムにおけるSOAP連携やMQ連携などで実績のあるテストツールだ。JSONを使ったREST APIや、XML、HTTP/HTTPSなどを含む多くのテクノロジーに対応しているため、近年のDXトレンドを受けて、APIテストの現場でも広く利用されるようになってきている。すでに国内においても、金融業におけるカード決済総合サービスや産業用ロボット、自動車、スマート家電などの開発現場に採用され、多くの成果を残している。
これら国内事例は後ほど詳しく紹介するが、その前に現場の課題と解決のアプローチをあらためて整理しておこう。
フロントエンドの課題は「とにかく待たされる」「十分なテストができない」などだ。待たされることの背景には、API開発側が遅れたり、共通のAPIを使用する他のチームのテストが終わるまでテストできなかったりという事情がある。また、十分なテストができないのは、他社との調整でテストできるタイミングが限定されたり、正常系/異常系でバリエーションのあるテストをしたいが自作したスタブでは限界があったりといった理由からだ。もちろんテスト時に課金されることで気軽に何度もテストできないことも大きなネックになっている。
一方、バックエンドの代表的な課題は「どうテストすべきか分からない、テストが不十分」「シナリオテストを行っていない」「性能/負荷テストを実施していない」の3つがよくあるパターンだという。テストが分からず不十分になる背景には「UIアプリとの結合テストをAPIテストとする」「正常系のテストを1パターン実行しただけでテスト完了」などと簡易に済ませてしまう事情がある。
また、シナリオテストを行っていない背景には、多くのAPIを公開していてさまざまな組み合わせで利用されることは分かっているものの、十分なテストパターンを作成できないという事情がある。同様に、性能/負荷テストについても、テスト用のスクリプト作成などが手間で実施できていないことが多い。
「非効率な方法でテストせざるを得ず、それに伴ってテストが不十分になっていることが問題の背景にあります。こうした現場の課題自体は、フロントエンド、バックエンドでそれぞれ認識されているが、有効な手段がすぐに見つからず、対策が打てずにいるのが現状です。そこでわれわれが提案しているのがフロントエンドとバックエンドを分割したテストの実施です」(飯山氏)
それを可能にするのが、SOAtest/Virtualizeを使ったAPIテストの自動化とサービス仮想化だ。フロントエンドとバックエンドでそれぞれが必要なタイミングで必要なテストを効率良く実施できるようになる。
SOAtest/Virtualizeは、1つの製品で大きく2つのテスト機能を提供することが特長だ。
まず、フロントエンドで行われるUIテストについては、VirtualizeというAPIを仮想化する機能(サービス仮想化)を活用する。サービス仮想化を使うと、APIの開発が間に合わず、本物のAPIがない状態であっても、Virtualizeで仮想化したAPIからのレスポンスをUIが適切に処理できるかを検証することが可能だ。
一方、バックエンドで行われるAPIテストについては、SOAtestという機能を活用してテストを自動化できる。UIが生成する電文(リクエスト)をSOAtestでシミュレーションすることで、APIコールに対するレスポンスの内容が適切であるかを検証することが可能だ。
「この2つの機能を使い分けることで、必要なテストをさまざまなケースで十分に実施できるようになります。例えば、Virtualizeを使うことで、UIの『検索』機能をテストする単機能テストや、『検索から購入まで』をテストするシナリオテスト、UI操作時に高負荷を与える性能/負荷テストなどが実施できます。同じようにSOAtestでも、通常の単機能テストと複数のAPIを順番にコールするシナリオテストはもちろん、SQLクエリを実行してAPIの実行結果がデータベース(DB)に書き込まれたかを参照した上で検証することや、*.exe、*.bat、*.shなどのバッチアプリケーションの実行と組み合わせて『バッチ実行から検索APIでの処理』といった、一連の流れのシナリオテストを実行することが可能になります」(飯山氏)
Virtualizeを使ったサービス仮想化は、従来の自作スタブによるテストと比較すると、スタブの開発やメンテナンスにかかるコストを削減し、テストを効率化してリリース速度を高めることができる。また、シナリオテストやデータ駆動型テスト、UIの性能/負荷テスト、CI(継続的インテグレーション)への統合といった、自作のスタブではできなかったことも実現できる。飯山氏によると、サービス仮想化の大きなメリットは、これらによる「シフトレフト」の実現にあるという。
また、SOAtestも、テストドライバーの開発やメンテナンスコストの削減に加え、シナリオテスト、CRUD操作によるDB内データの検証、バッチアプリケーションの実行や検証、ツールと連携したセキュリティテスト(例えばペネトレーションテスト)の実施、CIとの統合などが可能だ。「APIのテストを含め、テスト自動化の幅を広げるツール」(飯山氏)になるのだ。
SOAtest/Virtualizeは国内でどのように活用されているのだろうか。
FinTechでの活用事例の一つが、ある金融プロジェクトのカード決済総合サービスで採用されたケースだ。このプロジェクトは、複数のクレジットカード会社が提供するAPIを取りまとめ、複数のECサイト各社が共通のAPIとして利用できるようにするという大規模なものだった。
課題としては「異なるサブシステムを並行開発していたが、その結合テストが適切なタイミングで行えなかったこと」「APIテストの一環で、DB内データの検証とターミナルソフトでのコマンド実行が必要だったが、それぞれの実行が手動管理だったこと」「独自形式で電文を送受信するテストドライバーとスタブを作成していたが、その開発とメンテナンスにプロジェクトの主要メンバーが対応していて、本来の開発業務に影響が出ていたこと」などだった。
そこでまず、各社ECサイトが利用するAPIの開発にSOAtestを採用した。ECサイトに成り代わってSOAtestでAPIのテスト電文をシミュレーションし、APIの回帰テストなどを自動化。また、DB内データの検証やマクロ化したターミナルソフトによるコマンド実行時の検証作業をテストシナリオに統合して自動化した。一方、バックエンド側ではVirtualizeを採用し、クレジットカード会社側のAPIを仮想化しスタブ作成を効率化。さらに、独自形式の電文を送受信するテストも自動化した。
「複数のサブシステムがある環境下での並行開発、回帰テストを含めたテストプロセスの自動化、独自形式を送受信するAPIテストの自動化などを大規模なプロジェクトに展開した事例です。最終的に大幅なシフトレフトとテスト自動化を実現できました」(飯山氏)
金融業ではこの他にも、ある証券会社がFX取引システムにおける継続的なAPIテストを実現するために、Jenkinsを使ったCI環境にSOAtestを組み込んで構築した事例や、ある銀行が年金関連の業務システム開発のSLAを保証するために性能/負荷テストにSOAtestを採用した事例、ある生命保険会社が性能/負荷テストを素早く実施するためにVirtualizeを採用した事例などがある。
製造業では、産業用ロボットのIoTプロジェクトにおけるエッジゲートウェイ(GW)開発に活用された事例が面白い。この事例では企業が、製造設備としてのロボットアームから収集したデータをフロントエンドのWebアプリで可視化することに取り組んでいた。データはエッジGWを経由させてMQやRESTで収集されるが、そのエッジGWのAPI開発に当たって、APIテストとUIテストをどう効率化するかという課題を抱えていた。
この取り組みは当初、IoTのR&D部隊が新たにエッジGWの開発に取り組んだといういきさつがある。そのため、APIのテスト方法が確立されておらず、APIテストを効率化する必要があった。また、エッジGWの開発サイクルを何度か回す中で、Webアプリからデータの登録を可能にするAPIをエッジGWに追加したという事情もあった。UIテストとAPIテストをそれぞれ実施する必要があり、テストを一本化して自動化する方法を模索していた。
そこで採用されたのがSOAtest/Virtualizeだ。具体的には、SOAtestを使って、インタフェース定義ファイル(Swagger)からAPIのテストを自動生成して、それに適切なテストデータを設定して素早くAPIテストを実施できるようにした。
また、SOAtestのバッチ実行機能を活用して、UIテスト自動化ツールである「Ranorex」で作成したテストシナリオとAPIテストを、SOAtestの一連のシナリオテストとして実行できるようした。さらに、JenkinsからSOAtestをスケジューリングして多彩なシナリオテストを自動化できるようした。
「回帰テストを含めたAPIテストの効率的な実施、UIテストとAPIテストを一連のシナリオとしたテスト、継続的なテストなどを実現しています。この他、製造業のIoTの取り組みでは、自動車会社のカーナビ用コンテンツの開発などに採用された事例もあります。MQなどの製造現場で利用されている仕様やプロトコル、MongoDBなどのクラウド環境でも利用される新しいデータベースなどに対応していることが採用理由の一つです」(飯山氏)
IoT関連プロジェクトでは、スマート家電での活用事例も数多い。その中には、消費者向けのスマートスピーカーと連動するAV機器開発に活用された事例もある。スマートスピーカーとの連携はAPIで行われるが、そのテストを効率化するためにSOAtest/Virtualizeが採用された。
「毎回スマートスピーカーに話し掛けてテストするのは面倒です。インタフェース定義ファイルからAPIのテストを自動生成し、それに適切なテストデータを設定して素早くAPIテストを実施。また、『曲の再生』から『音量調整』までといったシナリオテストを効率良く行ったそうです」(飯山氏)
このように、DXの取り組みが加速する中でAPIテストの重要性がますます高まっている。多くの現場で課題となっている「待たされる」「十分なテストができない」「非効率な方法でテストしている」といった課題はSOAtest/Virtualizeを用いて、フロントエンド、バックエンドそれぞれで解消することが可能だ。
とはいえ、現場の悩みは千差万別であり、どのようにツールを活用していくかにはノウハウも必要だ。そこでテクマトリックスでは、SOAtest/Virtualizeのための評価支援も行っている。具体的には、要望をヒアリングし評価の内容や範囲を整理するためのコンサルティングや、SOAtest/Virtualizeでテスト環境を構築して評価したり、トレーニングを実施したりするオンサイト支援などだ。
ライセンスも規模やユーザーに応じて幾つかのエディションを設け、利用しやすい価格帯で提供されている。
さらに、15日間無料の体験版も提供している。APIテストに何らかの課題を感じたら、まずは評価版をダウンロードして試してみることをお勧めしたい。
Copyright © ITmedia, Inc. All Rights Reserved.
提供:テクマトリックス株式会社
アイティメディア営業企画/制作:@IT 編集部/掲載内容有効期限:2018年4月3日