ソフトウェア開発者にとって、テストは常に頭の痛い問題です。システムが複雑になればなるほど、開発工程におけるソフトウェアテストの工数は膨れ上がっていきます。しかも、テストをきちんとやらなければ不具合だらけのソフトウェアをリリースすることになり、高いツケを払わされることになるかもしれません。
開発現場が抱える課題
ソフトウェアテストが、開発現場にとって大変な重荷であることは事実です。なぜなら、前述のようにテストをするためには膨大な工数がかかる上に、効果的なテストを設計することは、実はシステムを設計するのと同じくらいに大変な作業だからです。
とは言え、実際の開発現場はテストのための潤沢な予算や時間を確保できない場合がほとんどです。そのため、開発現場は常に限られた工数の中で、いかにテストをきちんと行うのかという問題に頭を抱えることになります。
その上、近頃のシステムはどんどん複雑化し、それに伴ってソフトウェアテストの工数も膨大になってきました。
最近ではテストを自動化するツールも多く利用されるようになってきており、それらを活用すればある程度テストは自動化できるようになっています。しかし、導入コストが高い、テストスクリプト作成に手間がかかる......などの理由で、有効に利用されているとは言い難いのが現状です。
それどころか、実際に現場で行われるテストはExcelシートにテスト項目を羅列し、それをテスト担当者が一つひとつこなしていくという原始的なやり方が相変わらず主流になっています。
AI(人工知能)技術とは
開発現場が抱える問題を克服するには、どのようにすればよいのでしょうか。近年、そのための方法の一つとしてAI(人工知能)導入の有効性が注目されています。
人工知能の概要についてご説明します。
現在、世界は第3次AIブームが進行中だと言われています。「第3次」という言葉からわかる通り、実は過去3回AIブームがありました。
1回目が1950年代、2回目が1980年代でしたが、いずれも実用的な製品開発やイノベーションにつながる成果を出せずに10年前後で収束してします。
しかし、2000年代以降に起こり、現在も継続中の第3次AIブームにおいては、ディープラーニング(深層学習)という新しい技術の登場により、AIが本格的に活用されるようになりました。
自動車の自動運転、さらには世界的なトップのプロ棋士を打ち負かしたことで有名な囲碁ソフト「Alpha Go」は、いずれもこのディープラーニングを活用した技術です。
ディープラーニングは機械学習と呼ばれるコンピューターが自律的に学習を行うことができるアルゴリズムの一種であり、学習を繰り返すことによってコンピューターがどんどん賢くなるという特徴があります。
囲碁のように従来は人間を超えることが不可能とされてきた分野でも、コンピューターが人間を超えることができるようになりました。将来的には現在人間が行っている仕事の多くをこの技術を応用したコンピューターによって奪われるであろうとさえ言われています。
AI技術を使ったテストスクリプトの自動生成
このディープラーニングには、ソフトウェアテストと親和性が高いという特徴があります。
前述の通り、ソフトウェアテストはExcelシートを用いた原始的な方法ばかりではなく、専用のテストスクリプトを書くことにより自動化できるシステムが利用されています。そういったシステムに、このディープラーニングを適用すれば、テストスクリプトを自動的に生成することも可能なのです。
現在の段階で、システム全てのテストを自動生成するところまでには至っていませんが、部分的にはテストを自動生成することが可能です。その一例がGUI(グラフィカルユーザインタフェース)のテストです。
現在のテストスクリプトの問題点
現在利用されているGUIのテストスクリプトとしてメジャーなものは、AppiumやSeleniumなどです。これらのツールはGUIテストを自動化することができるため、使いこなせるようになれば大変便利なのですが、テストスクリプトを作るのが難しかったり、手間がかかりすぎたりする問題があります。
なぜこのような問題が発生するかというと、「人間がテストを考えなくてはならないから」です。裏を返せば、その問題さえ解決できればテストは格段に容易になります。
実用段階にきた、AI技術によるテストの自動生成
GUIはユーザーがソフトウェアやシステムを操作するためのものです。自動車に例えるならば、ハンドルやアクセル・ブレーキがある運転席に相当します。
自動車の自動運転はカメラに写った画像をもとにして車を自動的に操作します。それに対し、GUIのテストシナリオは、GUIの外見からどのような操作が想定されるかを考えて構築します。つまり、GUIのテストシナリオを構築するという作業は自動車を自動運転させる作業に非常によく似ていることが分かります。
そのため、どのような操作をすれば何が起こるのかということを網羅的に調べることは、実は人間が考えるよりもコンピューターに任せた方がはるかに精密に行えます。
また、ディープラーニングはどんどん賢くなっていくので、一度作成したテストスクリプトを自律的に改善したり、新しいシステムでも過去に作成した類似システムのテストスクリプトを参考にして効果的なスクリプトを組み上げたりすることも可能です。
つまり、AIの応用分野として、ソフトウェアテストはとても相性が良いということになります。
AIに期待されるソフトウェアテストの自動化
現在、GUIのように部分的な領域におけるソフトウェアテストの自動生成は、すでに技術的に成功しています。
しかし、ディープラーニングの特性を考えれば今後はGUIのような定型作業のみならず、その他の非定型作業の自動化が期待され、さらには工程全体の効率化に至るまで、AIで行うことが可能になることが予想されます。
ここでは、実際に実用化されているAI技術をベースとしてソフトウェアテストの自動化にどのような応用が可能であるかを考えてみることにしましょう。
コールセンターの自動化とソフトウェアテストへの応用の可能性
一例として参考になるのが、コールセンターの自動化です。コールセンターでは、電話応対を録音し、音声データなどを使ってAIにディープラーニングで学習させる取り組みも始まっています。
現在、ディープラーニングをベースとしたIBMのAIプラットフォームWatsonを導入することにより、コールセンターの自動化が急速に進んでいます。
Watsonは自然言語処理を行うことができるAIシステムです。その上多言語対応しており、テキストを瞬時に他の言語に翻訳することまで実現しています。その機能を活用し、顧客からの問い合わせやクレームを自動的に理解・処理しているのです。
このような機能をソフトウェアテストに適用した場合、担当者が口頭でどのようなテストをしたいのかをコンピュータに入力すると、テストケースが作成され、テストを自動的に実行してくれるようになるかもしれません。しかも多言語に対応しているため、テストを人件費の安い海外の企業に委託して行うことも可能になるわけです。
おわりに
ご説明したように、AI技術の中にはソフトウェアテストに応用可能なものが多くあります。これらを活用することにより、従来は大きな負担であったソフトウェアテストの工程を自動化できるだけでなく、人間より精密にできるようになる可能性が十分あります。ソフトウェアテスト分野においてAI技術の適用はまだまだ始まったばかりですが、今後急速に活用が進むことは間違いありません。