Technical Information

テストの未来 テストエンジニアの「これまで」と「これから」を考える

asset_approach_column_veri-navi-101004_hero01.jpg

AI・機械学習活用の促進、IT技術のコモディティ化など、社会の変革が進む中、「テスト」のあり方は「これまで」と「これから」でどのように変わっていくのだろうか。ソフトウェア品質保証の第一人者である西康晴氏をお招きし、これからの時代を生き抜く「テストエンジニア」の在り方についてざっくばらんに語っていただいた。

西 康晴氏

国立大学法人 電気通信大学
大学院情報理工学研究所
 情報学専攻
経営・社会情報学プログラム
講師  西  康晴 氏

1.IT技術のコモディティ化にともなうテストの行方

 <ベリサーブ(以下色文字)>2020年には小学校でプログラミング教育が必修化されるなど、IT技術のコモディティ化※が進んでいるように感じます。今後は「プログラミング」だけでなくプログラムが不具合を起こした際に起こる事や、不具合を起こさないための「テスト」についても学校で教えていく必要があるのではないかと考えるのですが、いかがお考えでしょうか?
※本インタビューにおける「コモディティ化」は市場価値の低下ではなく、IT技術が広く普及する様子を指している。

 <西(敬称略)>非常にテスト会社的な発想ですね(微笑)。この問いについて考えるのであれば、まず現代の、そしてこれから出現するだろう技術について背景から見つめ直す必要があります。突き詰めると、最終的には「そもそもテストとは何か?」という根源的な問いに帰着することになると思います。

 もう何十年も昔の話ですが、私が幼い頃、コンピューターはまだ一般的なものではありませんでした。2000年代に入り携帯電話やスマホが一斉に普及し、近い将来、生まれたときからAI(人工知能)、VR(バーチャル・リアリティ)などの技術に接しているAI/VRネイティブ世代が現れます。

 その頃にはきっとソフトウェア開発環境は今よりもずっと簡単に扱えるように進化しているでしょう。DX(デジタルトランスフォーメーション)の促進により、あらゆる情報がデジタル 化され、デジタル化されたデータをもとに動く機械学習やVRのコンポーネントが提供されると考えられます。ソースコードなんて書かなくても、画面上でアイコンをつなげるだけでそれらのコンポーネントを組み合わせることができ、あらゆるデータやシステムに自由自在にアクセスできる。そのような技術的背景が生まれているはずです。

 彼らにとってプログラミングは特別なことではなく、自転車に乗ることのように身体能力の一部であったり、単なる「道具」だと認識されたりしていることでしょう。テスト会社が現在関わっている商業用ソフトウェア開発のような、他人が決めた仕様を実現すべく開発することとは違う世界が訪れます。子供たちは、あふれ出る好奇心や創作意欲を満たすために豊富な想像力を駆使して、まるで落書きをするように高度なソフトウェアをどんどん創っていくでしょう。したがって「テスト」についても、いわゆるテスト会社が想像する「テスト」とは異なる意味を持つようになっているはずです。ここを考えなくてはいけません。

ソフトウェア工学や品質管理は私たちを賢くする

 そもそも「テスト」の概念が現在の私たちと異なるようになる、ということですね。そのような背景において、未来の学校ではどのようなことを教えていけば良いとお考えでしょうか?

 子供たちが自転車に乗る際、落書きをする際に教えるべきことは何でしょう。AI/VRネイティブ世代が、DXや機械学習をはじめとする高度な技術に支えられ呼吸をするようにソフトウェアを創っていく際に教えなくてはいけないのは、「車道に飛び出してはいけない」とか「汚したら困るものには描かない」です。すなわち、高度なテクノロジーを使って「やってはいけないことは何か」といった、道徳・あるいはリテラシーのようなものだと思います。他人の身体を傷つけたり財産を奪ったりしてはいけない、プライバシーを侵害してはいけない、といったことは教える必要があるでしょう。しかし、それ以外は想像力に任せておけば良く、邪魔をしない方が良いのです。ではこの時、子供たちに教えるべき「テスト」とは一体何なのでしょう。もちろん道徳に著しく反していないか、最低限のリテラシーの有無もテストすべきでしょう。それ以上に大事なのは、自転車に乗れるようになったことを能力向上として、あるいは、落書きが創造的であり価値があるものとして評価してあげることだと思います。価値があることを評価するのも、テストの重要な役割です。翻って我々テストに携わる者は、価値があるかどうかの評価についてどれだけ考えているでしょうか?「仕様通り」としか評価できないテスト技術者は、こうした世界では不要になるわけです。

 一方、自転車で遠くまでサイクリングに行くようになったり、落書きが上手になって漫画を描いたりするようになると、目的地までの交通情報であったり、面白いお話の作り方であったり、新たに覚えなくてはならないことが出てきます。子供たちが当たり前のようにソフトウェアを創るようになると、おのずとソフトウェアの大規模化や複雑化が進みます。これまでも、ソフトウェア開発の規模や複雑度は指数関数的に大きくなってきました。そうした大規模で複雑なソフトウェアをうまく取り扱うために生まれたのがソフトウェア工学です。未来の小学校でも同様のことが起こるとすると、ソフトウェア工学のようなものの重要性が、改めて高まってくると考えられます。

 そもそもソフトウェア工学は、複雑なものや不確実なものを取り扱うための知識、知恵、技術の体系です。品質管理も同様ですね。最近ではVUCA(Volatality/変わりやすさ、Uncertainty/不確実さ、Complexity/複雑さ、Ambiguity/曖昧さ)というアルファベットが現代を象徴する言葉として使われるようになっています。ソフトウェア工学という文脈で考える場合、Scalability(大規模さ)も加えてVUCASの方がいいかもしれません。難しいことは分割して考えよう。大きなものは階層化して分割しよう。不確実な時は考えすぎず取りあえずやってみて、素早くどんどん改善しよう。同じようなことはまとめて済まそう。端っこは普通と違うから気をつけよう。手順だけ暗記してもいいことないよ、など。こうした原理や原則を教えれば、子供たちは大規模化や複雑化に挫けずにソフトウェアを創り、どんどん大きくなっていく好奇心や創作意欲を満たし続けることができるようになるでしょう。
 実のところ私は、こうした原理原則は人生にも役立つなと実感しています。VUCASな状況で我々はどのように人生を過ごしていけばいいか、について素晴らしい洞察を与えてくれるのです。ソフトウェア工学や品質管理は我々を賢くしてくれる、といっても過言ではないでしょう。

 また、IT技術のコモディティ化が進むと、ITに関わる専門的な技術や知識は隠蔽されます。なぜ倒れないかの力学的知識が無くても自転車には乗れますし、鉛筆の芯の分子構造を知らなくても落書きは描けます。その分、教育はより人間らしい、人間にしかできない教育ができるようになります。これもまた、子供たちをより賢くする方向の教育です。

 「賢さ」は左脳的・右脳的2つの能力に大別されると私は考えています。まずは、「ロジカルシンキング」や「クリティカルシンキング」に代表される左脳的な能力。これは物事を論理的に考える力、すなわち原因と結果、抽象化と具体化、個別と全体などさまざまな概念をきちんとつなげ行き来する力です。コンポーネントを組み合わせる力や、それ以上に大切な日本語の読解力に関わります。

 そして、「デザインシンキング」のような右脳的能力。これは、ストーリーを創り出す力であるとか、全体像を描き出す力。ほかにも、思いつく力、違和感のようなものを感じる力も挙げられます。また、みんなの力を合わせる力である「ファシリテーション」も右脳的と言えるでしょう。

 我々は現在、これらの教育を社会人になってからわざわざお金を払って受けています。IT技術のコモディティ化により人間らしい能力を育てる教育に進化した未来では、小学校からバランスよく身に付けられるようになるでしょう。子供のうちから磨いていくことで、ソフトウェアに限らず、VUCASな状況で価値あるものを上手に生み出せる人材が生まれてくる可能性が高まります。とてもワクワクしますね。

 そういった能力は現在のテストエンジニアにも必要だと思います。私たち現在のテストエンジニアは、何から身につけていけば良いでしょうか?

 テストエンジニアは、開発エンジニアよりも「賢く」なくてはなりません。彼らが創り出すものの価値を評価し、彼らの間違いや考慮不足を指摘するわけですからね。しかもテストエンジニアが生み出すテストスイート(テストケース群)もVUCASな状況に対応する必要があります。仕様通りにソースコードが動けばそれでいい、という仕事ではないのです。

 しかしその前に身に付けておかなくてはならない基礎的な力が存在しています。次の3つがそれに当たります。

  • 知的体力
  • 好奇心
  • 体系として知識を取り入れる力

 どんなに良い力を持っていても短い時間しか集中できない場合、それを活かしきることができません。長い時間集中して考え抜く脳の持久力、それを知的体力と呼んでいます。また、次々と新たなことに挑戦するためには「なぜ?どうして?」と興味や疑問を持ち続けることができる好奇心が必要となります。最後に、IT技術のコモディティ化が進んだ時代では、今までよりも多くの技術をスピーディに学ぶ必要があります。そのためには、知識を体系として効率よく取り入れる能力が不可欠となってくるのです。テストエンジニアに限った話ではないのですが、まずは知的基礎力が必要です。皆さんの周りのテストエンジニアは、この3つの知的基礎力を充分備えていますか?

前提として求められる3つの力

体系として知識を取り入れる力

 左脳的能力は、一つ一つのテストケースを設計する時に重要です。ただ一般にテストエンジニアは、概念のつなげ方が弱く短いと思いますし、行き来できませんし、抽象化もそれほど得意ではありません。右脳的能力は、テストアーキテクチャのような全体像を設計する時に重要になります。一般に、テストエンジニアはとても苦手ですね。ただ一部の優れたテストエンジニアは違和感を感じ取る能力に優れており、探索的テストで素晴らしい成果を挙げています。経験のあるテストエンジニアやテストマネジャーは、テストチーム内、そして開発エンジニアや開発マネジャーとの間のファシリテーションに優れていますね。何から身に付ければいいか、という一本道のルートはありません。知的基礎力はまず備えておかねばなりませんが、その後は自分の性格や好み、所属する組織やお客様の強み弱みに合わせて取捨選択することで、自分の能力を「デザイン」することになります。

2.AI技術とテストについて、改めて考える

AI for Testingの「今」

 先ほどはAI/VRネイティブ世代というAI技術がすっかり普及した世の中のお話をしていただきましたが、昨今注目を集めている、AI技術のテストへの応用は、実際はどの程度進んでいて、活用方法をおおまかに分類するとどのような傾向がみられるのでしょうか?

 いろいろな分類の仕方がありますが、その一つとしてテスト開発ライフサイクル上の工程×人の認知プロセスの二軸で整理することができます。

 AIや自動化の技術はテストにもどんどん応用されており、競争力を大きく左右します。しかし、国内ではAI技術の活用までたどり着いている組織は非常に少ないでしょう。なぜならば、AIや自動化技術の活用をするためには、テストエンジニアが各プロセスで何を認知し、思考し、どのような判断を行い、どのような行動を取ったのかについて、AIが認識できる形で中間成果物を残す必要があるからです。いわば、テストのDX化が完了している必要があります。従ってテストエンジニアは、どのようにしてテストを行っているかについて、きちんと理解し、それを説明できるようにすることが非常に重要となります。テスト開発方法論は必須でしょう。テストの方法論化やDX化を進めることで、AI技術の活用領域を少しずつ広げることが可能となっていくのです。

テスト開発ライフサイクルにおけるAIや自動化の活用

 AIを活用することによって、テストはどう変わっていくのでしょうか?

 私は、AI for Testingには以下のようなレベルがあると考えています。

 一番下のレベルは「機械が入ることで余計に面倒になる」というものです。人間に依存した仕事ばかりしているので、機械を使おうとするとかえって非効率となってしまう、というレベルを指します。2番目に上がると「機械でできることは人間がやらない」状態となり、導入のコストに見合うようになります。3番目のレベルは、機械しかできないことができるようになり、機械によって人間の力がブーストされる状況です。例えば、探索的テストの探索行為をAIがアシストすることで、人間がより気付くようになるといった試みがあります。

 レベル3にたどり着くと、組織の作業は効率化され、より「人間にしかできないこと」に時間を費やすことができるようになります。何年も前にテスト自動化が同様の進化をたどりました。しかし残念なことに、単にコストダウンしか視野になく人間の単純作業をアドホックに置き換えただけで投資をやめてしまった企業が非常に多かったためレベル2に留まり、テスト自動化は一部の企業を除きあまり成功することはありませんでした。

 レベル3で進化を止めずに進むと、機械ではブーストできない人間の創造性を活かしたテストや品質保証を行えるレベル4に進化します。お客様の事業における価値やビジネスモデルの良さを評価しながらお客様と一緒に創造したり、自組織とお客様を含めたバリューチェーンを一緒に構築できるようになったりします。そしてレベル5では、人間の気付きや創造性をAIに与えることでAIが賢くなり、賢くなったAIによって人間がさらなる気付きや創造性を得る、という状況になります。単なる道具として一方的にAIを使うのではなく、あるいは、単なるAIに対する入力源として一方的に人間が使われるのでもなく、AIと人間が共に賢くし合うという好循環を生み出すことが理想的ですね。世界のトップクラスの企業は、このレベル感で技術戦略を立案していますよ。

AI for Testing によって進化しうる組織のレベル

  • レベル 1
    • (AIなどの)機械が入ることで余計に面倒になる
  • レベル 2
    • 機械でできることは人間がやらない
  • レベル 3
    • 機械によって人間の力がブーストされる
  • レベル 4
    • 機械ではブーストできない人間の創造性を活かしたテストや品質保証を行う
  • レベル 5
    • 人間と AI が共に賢くし合いながらテストや品質保証を行う

Testing(QA) for AI

 AI技術の活用の一方、今後はAI技術を用いたアプリケーションをテストしていくことになっていくかと思います。Testing for AI の領域についてはどこまで議論が進んでいるのでしょうか?

 AI、特に機械学習やニューラルネットワークを活用したソフトウェアや製品、サービス(AIプロダクト)の品質保証についての研究開発や啓発活動を目的として、昨年からAI プロダクト品質保証コンソーシアム(QA4AIコンソーシアム)という組織の立ち上げや運営に携わりました。AIプロダクトの品質保証に関する相談・質問は非常に増えてきています。

 従来のプログラムは「こう作れば、こういう結果になる」というように因果関係が予想できる中で作られており、演繹的開発と呼びます。それに対し、AIプロダクトは結果を大量に学習させてプログラムを自動的に生成するという全く逆の考え方で作られており、帰納的開発と呼びます。帰納的開発では、因果関係が予想できないため、プロセスの監査や統計的なメトリクスの遵守など従来の品質保証の手法がほとんど役に立ちません。

 QA4AIでは、そういった状況の中でどのようにAIプロダクトの品質保証を行っていくかについて議論を行っており、5つの視点からバランスを取りながら品質を保証していくことを提唱しています。

 AIプロダクトの品質を保証するための5つの視点を以下に紹介します。

  • Data Integrity(データはきちんとしているか)
    • 量は充分か、求める母集団のサンプルか、偏りやバイアス、汚染は無いか、など
  • Model Robustness(モデルはきちんとしているか)
    • 機械学習モデルの精度や汎化性能は高いか、ノイズに対して頑健か、劣化しないか、など
  • System Quality(システム全体として価値は高く、何かが起きても何とかなるか)
    • 価値は適切に提供されているか、品質事故は発生しにくいか、発生しても被害は小さいか、など
  • Process Agility(プロセスは機動的か)
    • 自動化は充分か、迅速な意志決定や行動は可能か、開発チームは納得感を共感できているか、など
  • Customer Expectation(良くも悪くも、顧客の期待は高いか)
    • 顧客の期待が高いか、顧客は機械学習の原理や特性を理解しているか、適切な権限を持っているか、など

 大事なことは、Customer Expectationとそれ以外の4つの視点とのバランスを取ることと、Customer Expectationを適切に抑え、保つことです。それは、自動運転に対する社会的な理解を深める、といった従来の品質保証の範疇を超えた活動も含まれます。従来でも同じですが、QAにタブーや聖域はありません。高い品質を達成するために必要なあらゆることをしなくてはならないのです。

 AIプロダクトを品質保証するために必要なことは、これまでとは大きく変わります。自動車会社が単なる「車を作る」会社から「モビリティ(移動という行為による高い価値)を提供する」の会社に変革したように、テスト会社は「何をする」会社であるべきなのかをいち早く見いだすことが、時代をリードできるかどうかのカギとなります。テストという名の「労働」を提供する会社に留まれば、早晩没落します。

3.「街の品質」とテストの未来

スーパーシティ構想と品質保証

 AI技術やIoTの活用促進により、街全体が一つの大きなシステムとなっていくスーパーシティ構想という話を耳にするようになりました。近い将来、デジタルネイティブと呼ばれる世代が社会の中心を担うようになり、今後街の在り方は大きく変わっていくと考えられます。そのような背景のもと「街に住んでいるある人が幸せであるか」というような、街の質が品質保証の対象となったとき、これまでプロダクトとしての製品を主に検証してきた私たちテストエンジニアは、今まで培ってきた検証の知見を適用することは可能なのでしょうか?

 その質問は、ソフトウェアや品質保証についてテスティングの側面からのみ見ている人の質問、という感じがしますね(微笑)。そもそも、スーパーシティ構想といった国を挙げたプロジェクトに関わるトップ企業は、自分の企業の発展だけを考える時代ではなくなっています。

 例えば、自動車会社は、車に関わる技術を使って少子高齢化や、過疎化の問題の解消を目指した取り組みを行っています。これは社会的問題やSDGs(Social Development Goals:持続可能な開発目標)と呼ばれています。ビジネスの要素と社会的な問題の解決の両立を図る「ソーシャル・アントレプレナーシップ」という考え方でもありますね。電気自動車で有名なテスラが多くの感度の高いアメリカ人の共感を得たのは、創始者であるイーロン・マスクの「地球を救いたい」というコンセプトが根底にあるからです。人類そのものの価値観が変化し、環境について真剣に考えることがクールであるというものの見方にシフトしつつある中で、同じような目線に寄り添える会社でない限り、今後こういった企業と仕事をすることはできなくなっていくでしょう。

 スーパーシティ構想ではさまざまなものがソフトウェア化されていきますが、ソフトウェアはやはり単なる手段にすぎません。そのため、評価すべき内容はその街が地域全体の社会的問題解決にどれだけ貢献できるのか、他の問題を悪化させないのか、その社会の仕組みは適切であるか、個人のなりたい姿(well-being)を短期的、長期的に実現しうるのか、提供されるサービスはどうかと続き、その後初めてシステムはどうか、インフラ、デバイスは故障がないか、といった話になってきます。このように考えると、街の品質保証には政策の評価や提言が必須になりますので、そのための技術を持っていることが必要となってきます。

 そう言われると、とても難しく畑違いの技術のような気がします。しかしそうではありません。「なぜ、ある人は体に悪いとわかっているはずのタバコをやめられないのか?」というような身近な問題を分析するときにも用いる技術なのです。一見、単なる「好み」の問題に見えるこの事象も、分析するとほとんどの場合は「煙草を吸わざるを得ない」さまざまな原因にとらわれていることが見えてきます。

 それらを解き明かすための分析に必要なのは、複雑に絡み合ったさまざまな状況や関係を的確にとらえる技術と言えます。優れたテストやQAのエンジニアは、暗黙的かもしれませんが、現場で問題をモデル化し原因を分析して改善につなげています。そうした技術の適用先を「個人の習慣の問題」から「社会的問題」にスケールすれば、テストやQAのエンジニアが持っている品質評価や改善の知識やスキルを、社会的問題の解決にも応用できるわけです。

 街の品質を普段のテスト業務の観点から捉えようとすると、都市計画や建築といったドメイン知識(事業領域における知識)が不足していることにより、自分の仕事ではないとテストエンジニアは感じてしまいがちです。しかしその思い込みを転換し、テストエンジニアはあらゆる「質を評価」し、「より良くするためのアドバイス」をする役割であると捉え直すことができれば、さまざまな領域に活躍の場を広げることができるでしょう。

4.「クラシックなテスト」と「モダンなテスト」を考える

 ここまでお話をお伺いして、これからのテストエンジニアはこれまでの「テスト」にとらわれない意識の改革が必要であるということが見えてきました。改めて「クラシックなテスト」と「モダンなテスト」を、どのように定義することができるかお聞かせください。

 クラシックなテストをあえて定義するならば、「人が決めた何か」をひたすら手動で何かすることと言えます。テストは非常に大切な技術ではありますが、プログラミングと同様、手段にすぎません。そのように考えると、モダンな「テスト」という言い方すらすでに適切ではないのかもしれません。「テスト」という範囲にとどまらず、AIや自動化ツールを駆使しながらお客様に寄り添ってビジョンと納得感を共有し、共に質を創り上げ高めていくあらゆる活動を指すわけです。

 そう考えると、テストエンジニアの役割はもはや「クリエイター」と呼んでいいのではありませんか?

 お客様が初めて挑戦する未知なる取り組みに寄り添い、まだ見ぬサービスの品質と、それを高めるためのプロセスを含めた全体像をデザインしてアイデアを提供する。まさに「顧客共創」のあるべき姿です。目まぐるしいスピードであらゆることが変化していくこの時代、テストや品質保証といったテーマにかかわる者は今後、その在り方を大きく変革することが求められているのです。

 テストやQAは本来、とてもクリエイティブで夢のある仕事です。今後、私たちが想像もつかないようなサービスが生まれた時に、現在皆さんが閉じ込められている従来型の労働集約的なテストという狭い枠組みにとらわれることなく、グローバルな舞台で展開されるあらゆる「質」の提供をミッションとすることで、テストの付加価値は大きく高まります。テストエンジニアが未来の社会を支える存在として、ますます飛躍していくことを期待しています。