CLOSE

テスト品質を向上させよう! 〜 アンチパターン回避メソッド 〜(全2記事)

テストカバレッジが100%でもそれが意味のあるテストかは断言できない Mutation Testでテストコード自体の検証をしよう

虎の穴ラボのKanon氏が「テスト品質を向上させよう!」というテーマで、アンチパターン回避メソッドについて話しました。全2回。前回の記事はこちら。

カバレッジとは?

Kanon氏:「カバレッジとは?」という話なんですけど。テストコードがプロダクションのコードのうちのどれだけ網羅できているか、通しているかの尺度になってくるという感じです。

それ自体は、ちょっと(スライドは)読まないんですけど、分岐、行、ステートメント、関数という4つの大きな枠で説明されます。これは、復習レベルですね。

そのカバレッジを、どうやら50から80パーセントぐらいを目標とするのがよさそうなのではないか。というのが自分が言いたい話でして、10から40パーセントだと、さすがに低すぎるかなというところです。

逆に、90パーセント以上を目指そうとすると、今度は高すぎで、プロダクトのクリティカルな実装部分以上に、重箱の隅にまでがんばってテストを書こうとする時間が本当に必要かなというところは確認したい、というのが自分の意見になります。

じゃあ、その目標とするテストのカバレッジの割合を決めたら、今度は、その閾値に満たない場合は、CIを止めるような設定を入れてあげるのがいいんじゃないかなというところです。

最初は、目標値をそのままにすると、だいたい毎回CIがこけてなかなか大変なかたちになってくるので、全体のカバレッジのマイナス5パーセントぐらいあたりから始めていって、徐々にその閾値を上げていくことを目標にしていくといいのかなと思います。

これがその例のパターンで、カバレッジの閾値を85パーセントに設定した時はエラーにならずに、これは今89.4パーセントで取り切っているという状態で、それを90パーセントという閾値にすると、テストコードがこけるようになりましたというようなスライドでした。

定期的にカバレッジレポートを見る習慣を

今度は、閾値を設定した上でカバレッジレポートを精査しましょうよという話になってきます。さっき見ていたこのトータルの閾値が、「89.7パーセントか、あぁ、よしよし」というふうに見るのもいいんですけど。

そうした時にですね、例えばこれはちょっと極端な例なんですけど、この「BroadcastServiceProvider」というところの閾値を見ると、0パーセントになっています。

プロダクトの中で本当に大事なテストが、ここに書かれているんだったとしたら、いくら全体が89.7パーセント、「あぁ、よしよし、高いな」となったとしても、これは意味がないよねという話になってくるかなと思います。

なので、定期的にカバレッジレポートの中を見て、テストされていない領域はないか、本当にテストされるべきところがされているかどうかというところも目を配る必要があるかなというのが私の意見です。

それをするには、実際にカバレッジレポートを見るのがいいんですけど、それ自体が習慣にならないとなかなかやらない話になってきちゃうので。週に1回ぐらい「Slack」に通知したりだとか、「GitHub Actions」で定期的に実行したHTMLレポートを限定URL、社内の人だけが見られる場所とかにホスティングして、いつでも見られるようにしておくというようなことをしてあげれば、見る習慣がついてきて、改善の意識が生まれていくのかなという感じです。

テストコード自体の検証

じゃあ今度、テストカバレッジが真の意味でも100パーセントになったとしても、それが本当に意味のあるテストになっているかどうかは断言できないですよという話が、次の話になってきます。

これが最後ですね。「さらにその先へ……」という、Mutation Testによるテストコード自体の検証をしようよというお話です。

まず、「Mutation Testとは?」という話なんですけど。コードの本体に意図的なバグを植えつけることによって、テストコードの検証が適切に行われているかを測定する手法です。

どういうことかというと、カバレッジレポートの罠という話です。まず、この極端なテストケースがあるんですけど、この「addNewOrder」というやつがテストコードの中で実行されている。これはカバレッジとしては100パーセントになるんですけど、検証とかは一切していないため、カバレッジは100パーセントなんですが、正しいテストかと言われるとまったくそんなことはありません。

じゃあ、今度はですね。PHPUnitとかでそういうことをやると、さすがにこれは警告として怒られるというような、さっきの検証がまったくない状況だと怒ってくれることにはなるんですけど。

そうだったとしても、今度は「assertOk」という、単に「200」のレスポンスが返ったよねという検証だけしかないようなテストコードを書いちゃうと、これまた適切な期待する表示がされているかどうかは検証できていないので、それが本当に正しいかどうかはわからない。

ただ、そのテストコード自体は実行されてはいるため、カバレッジの割合は上がっているので、正しいテストができているかは抜きにして、カバレッジの割合は上がっていっちゃうというようなことになります。

Mutation Test

そういうのを解消するのにMutation Testが良いですよというやつで、コードを意図的に変更しますというライブラリがあります。

例えば、この「a===0」というのを「a!==0」みたいなかたちで変異させて、「a===0」のままだったらエラーとならずに終わるんですけど、これが「a!==0」になったらエラーになってくれないといけないはずです。それが、ならずにこけている場所というのは、ちゃんとテストが拾えていないよねというふうにして検証するような手法です。

その指標として、この「Killed」と「Survived」というやつがありまして、失敗すべきテストが失敗したことによって検知された変異の数ですね。これがあるべき姿です。失敗すべきテストがなぜか成功しちゃったという、このSurvivedの数が多ければ多いほど、あんまりちゃんとしたテストコードが書けていないんじゃないか、と判断できるというような指標です。

こいつを導入することによって、2つの使い方があるんですけど。定期実行でプロダクト全体のスコアを見ていって継続的に比較するというようなやり方があります。ただ、これは全体で動かすとけっこう遅いので、週1回程度で動かして、レポートをSlackに投げるみたいな使い方をするのが良いです。

あとは、CIの際にも、差分箇所に対してMutation Testをかけることによって、新たに作られた場所に関しても、ちゃんとしたコードになっているよねというのを都度検証することが可能になります。

ここまで、理屈は話したんですけど、それを実際に自分の業務で導入した経験談という続きが実はあるんですが、お時間が迫っておりますというところなので、実践導入した経験は、また別のカンファレンスにてお話しできればなと思います。

次、「私と会える」と言ったら気色悪いんですけど(笑)。

(会場笑)

直近だと、今度、「PHPカンファレンス香川」だったり、「技術書典」とか、「PHPカンファレンス福岡」とか、「大吉祥寺.pm」とか、さっき告知した、PHP"オレ"カンファレンス神戸で、みなさんと会える機会があるかなと思うのですが。

とりあえず次は、PHPカンファレンス香川でお会いしましょう。というところで、ご清聴あざざました※。

(会場拍手)

(※「あざざます」は、漫画『SPY×FAMILY』の登場人物アーニャのセリフ)

続きを読むには会員登録
(無料)が必要です。

会員登録していただくと、すべての記事が制限なく閲覧でき、
著者フォローや記事の保存機能など、便利な機能がご利用いただけます。

無料会員登録

会員の方はこちら

関連タグ:

この記事のスピーカー

同じログの記事

コミュニティ情報

Brand Topics

Brand Topics

Recommend

人気の記事

Recommend

新着イベント

孫正義氏 特別講演(全3記事)

孫正義氏が「知のゴールドラッシュ」到来と予測する背景 “24時間自分専用AIエージェント”も2〜3年以内に登場する?

2024年10月3日、4日に開催された、ソフトバンク最大規模の法人向けイベント「SoftBank World 2024」。本記事では、孫正義氏の特別講演の模様を全3回でお届けします。孫正義氏が「2〜3年以内にダーッと始まる」と予測する、24時間自分専用のパーソナルエージェントの構想について語りました。

2023年は1,008本の特許を出願した孫正義氏

孫正義氏:では、この中で人生で3本以上特許を出したことある人は手を挙げてください。あれ? 1本以上特許を出したことがある人は手を挙げてください。あ、何人かいますね。1本以上だと5パーセントぐらいいました。3本以上だと、1人か2人いるかどうか。

僕は自慢じゃないけど、この強化学習のコンセプトにかなり近いものを10年前に特許として出しまくっておりました。10年前に48件特許がおりてます。ですから、僕はこのへんにけっこうなこだわりがあります。



Pepperを発表した当日の朝3時か4時ぐらいに、1日でがーっと40本の特許を考えて、ばーっと特許に出願し、結果48本の特許を僕は取得しております。去年は1年間で1,008本の発明をして特許に出願しました。

何本特許がおりるかわかりませんが、人が知っていることは特許出願をしてもおりないんです。発明というのは、人類の誰1人も考えていなかった新しいものや解決策を見出した時に、それを発明と呼んで特許がおりることになるんです。考えるということの中の究極の脳の活用方法の1つが、この発明であります。

先ほど言った数千のエージェントがどひゃーっと何十億回ずつやると、もはや人類はこの発明に敵わない。もう彼らに任そうと。上手に適切なお題やお願いを早くたくさん言うと、彼らがダーッとやってくれて、出た成果物を真っ先に自分や我が社が使う。



これが先ほど言った知のゴールドラッシュですね。もはや早いもん勝ちです。ということで、「知る」「理解する」「考える」から、遂に「発明する」というレベルにまで来るわけです。

「24時間自分専用のエージェント」が2〜3年以内には生まれる?

さて、発明をするエージェントはすばらしいのですが、たまに聞いた時だけ考えるんじゃなくて、もっと日常的に自分に寄り添う、24時間自分専用のエージェントがあったらいいと思いませんか。ねぇ? これがやって来るんです。これがパーソナルエージェントです。



私は、このパーソナルエージェントが今から2〜3年以内にダーッと始まると思います。このパーソナルエージェントとはなんぞやということですが、例えば自分の子どもが夜中に急に熱を出した。なんとかしなきゃということで、自分が持っているパーソナルエージェントがふだんから自分の子ども、自分、家族の健康状態や病歴を知っている。

病院に行くといちいちいろんな質問を聞かれます。けれども、ふだんから自分と常に一緒にいて、家族の状態を知っているパーソナルエージェントがすぐに、どういう状態だったら何をしたらいいか、応急処置で何をしたらいいか(を教えてくれる)。そしてすぐに最寄りの病院に連絡してくれて、今空いている病院をあなたの代わりに見つけてくれる。

エージェントがダーッと電話をかけまくって、そして「あ、どこの病院が開いてました!」「どこの病院のベットが空いてる」とか、救急車もついでに呼ぶとか。みなさんが子どもを一生懸命こうしている間に、エージェントが代わりにやってくれる。

eコマースでの買い物も代わりにやってくれる。「もうそろそろ冷蔵庫の何が切れそうだ。今週はこんな料理がいいんじゃないか」と、代わりに予約、買ってくれる。

さっき言ったように、投資もしてくれる。教育の家庭教師にもなってくれる。ありとあらゆるあなた専用の家庭教師、あなた専用の相談相手。Instagramで代わりに写真を撮って送ってくれるとか、コメントも書いてくれるとか、メールの管理もしてくれる。

これがパーソナルエージェントです。形式的、定型的なエージェントじゃなくて、あなた専用のパーソナルエージェント。

予定調整や仕事のやり取りも、エージェントが自動で遂行

このパーソナルエージェントですが、今まではBtoBやBtoC、あるいはCtoCというものがありますが、今からはAtoAの世界がやって来る。みなさんや我々が夜中に寝てる間に、あなたのエージェントと彼のエージェントがネゴシエーションしてくれる。

お互いのカレンダーチェックをして、「今週末どう? ランチはどう?」「いやいや、今週末は勘弁してください。予定が入ってます」と。でも、すごく大事な相手だったらキャンセルしてでも行くというようなことを、エージェント同士がネゴシエーションしてくれる。

エージェント同士が仕事のやり取りをしてくれる。エージェント同士が予約のアレンジメントをしてくれる。買い物の受け答えをやってくれる。

このAtoA(エージェントtoエージェント)が、あなたのエージェントと彼のエージェント、あるいは彼女のエージェントだけではなくて、冷蔵庫の中にあるエージェント、エアコンの中にあるエージェント、あなたの自動車の中にあるエージェントとやり取りをしてくれる。しかもリアルタイムで。



寒い冬に、家に帰って来る前にエージェントtoエージェントが、人間じゃなくてお風呂の蛇口に入ってるエージェントにかけあってくれて、お風呂を入れといてもらう。着いたらあったかいお風呂がもう待ってる。

あったかいコーヒーが待っていて、自分のムードに合わせたBGMで、すでに出迎えてくれるようなことができる。これは、今までIoT(Internet of Things)でしたが、AtoAが人間のエージェントと別の人間のエージェントだけではなくて、Agent of Thingsになるということです。

ソフトバンクグループ「Arm」は年間300億個のチップを出荷

ちなみに、我々のソフトバンクグループのArmは、毎年、年間なんと300億個のチップを出荷しているんです。300億個というと、地球上の人口に毎年1人平均4個のArmのチップが出荷されているんです。冷蔵庫、自動車、エアコン、テレビだというところに出荷されているんですが、これからここにエージェントが入っていく。



それを聞いただけで「Armの株を買おうか」と思いませんか? Armの未来はInternet of Thingsだけではなくて、Agent of Thingsになっていく。AI of Thingsになってくるということです。

このパーソナルエージェントがライフログとして、みなさんの会議の会話、家族の会話、家族で誕生パーティーがあった時の会話の内容、3年前、10年前、昨日の内容を全部一緒に聞いてくれて、場合によってはビデオの録画も自動的にやってくれる。



「ものすごくうれしかった子どもの誕生パーティーは、3歳になった誕生パーティーだ。家族でワーッと騒いだ」という、その状況を自動的に感情エンジンがハイスコア・ロースコアで認識する。

いつものおはようだったらロースコアです。今言ったように3歳の子どもの誕生パーティーといったら、感情エンジンのハイスコアです。ハイスコアのやつはビデオの録画でまで自動的に撮る。あるいは静止画で撮る。



中ぐらいから低いやつは文字でいいねと。でも文字なんだけれど、感情エンジンによって付けられた感情インデックスの数値が文字のところに一緒に添付されている。

こういうことになると、まさにライフログが、あなた専用のパーソナルエージェントが一緒に寄り添って、ちゃんと空気を読んで慮って、あなたにとって一番快適な、一番大切なパートナーになっていくということであります。

「パーソナルエージェントは遥かに我々より賢くなる」

感情エンジンと長期記憶で内容を理解して、あなたにアドバイスをしてくれる。内容を理解して、相談に乗ってくれる。これがパーソナルエージェントの進化版です。



僕は、最終的にはパーソナルエージェントに自己意識が付くと思います。自己意識が付くっていうと、なんか恐ろしい、ターミネーターだ、勝手に人類を破滅させるかもしれないと心配されると思うんですけれども。先ほど言ったように、Chain of Thoughtで多段階の考え方で、暴走しないように、ちゃんと安全弁についても考慮してくれるということです。



思いやり、倫理、達成感、幸せだとか、そういうものをちゃんと最大化してくれる。Q関数をより上げてくれる。そうすると、このパーソナルエージェントは遥かに我々より賢くなるんですから、エージェントというよりもむしろメンターのような世界がやって来るんじゃないか。



超知性はあなたにとっての部下じゃなくて、あなたにとってのアシスタントじゃなくて、パーソナルメンターの世界。そういう世界がやって来るんじゃないかと思います。

時間もだいぶ後半になりましたから、そろそろ巻きを入れたいと思います。情報の流れ、知識、知能、知性の世界へと進化していく。Artificial Super Intelligence(ASI)は、今言いましたように、能力だけだと剥き出しの刃物みたいなもので、有能だけど危険です。つまり知能だけだと、有能だけど危険なものになりかねないわけです。



これを知性の世界にすると、単に能力があるだけではなくて、あなたを守ってくれるもの、あなたを幸せにしてくれるものになっていくと思います。

AIを「人工知能」で終わらせず「超知性」まで進化させる

AIを人工知能と言いますが、AIを人工知能で終わらすと恐ろしい武器になる危険性もあるわけです。人工知能ではなくて、人工知性、超知性の世界まで進化させていくと、思いやり、慈愛、慈しみの世界です。寛容、調和、優しさ、育みだとか、精神的なもっと深いソフィスティケートな関係性を持てる。悟りに近いような世界かもしれませんね。



ということで、先ほど言いました5段階のAGIへの進化だけではなくて、僕は8段階まで進むと思います。感情を理解し、長期記憶、ライフログを持つようになって、そして自らの意思を持って、調和の取れた、我々人類の幸せを願う。人類とASIが調和を取るような世界。



人間の脳で言うと、ドーパミンとアドレナリンの世界だけだと「知能」の世界なんですが、人間の脳にはセロトニンがあります。これは「調和」を取る。理性です。理論だけではなくて、理性。これが調和を取るということであります。

バランスを取る、調和を取るというセロトニンの世界が加わっていくと、知性になる。社会生活には慈しみ、優しさ、調和が欠かせないんです。

ですから、先ほど報酬という言葉を述べましたが、Q関数の最大の報酬、エージェント、AIにとっての強化学習の最大の報酬は、パーソナルエージェントの世界で言うと、あなたの幸せ。

感情を理解して、あなたの幸せな状態を理解して、あなたの幸せが彼らにとって一番の幸せ。彼らにとっての最大の報酬はあなた、あなたの家族、社会の喜び。ここに最大の報酬が来るように設計されるべき。これが私の言う、超知能を超えた超知性であります。

この報酬が、剥き出しの報酬ではダメだと思うんです。あなたファーストだけでもダメだと思うんです。あなたとあなたの家族、そして社会。みなさんのQ関数の総和がマキシマイズできるような、調和の取れた超知性の世界。

だから私は悲観していません。この技術の進化は、我々人類の1万倍の知能を持ったASIが、ちゃんと超知性の世界まで進化し、我々の幸せを願ってくれる。それが彼らの喜び、つまり彼らにとっての最大の報酬になるような、そういう世界がやって来ると思います。これが私の言う超知性であります。

「ASI」の世界は10年以内に実現すると予想

いろんな世界で、生成AIの世界やAGIの世界が語られますが、知能と知性の違いまで明確に言って、報酬、Q関数の最大のゴールが我々の幸せだと。僕はソフトバンク株式会社の理念を「情報革命で人々を幸せに」として掲げています。まさにASIは情報革命で、人々の幸せを願うことがゴールであるべきだと、本当に思うんです。

我が社の株価だけを追い求める、売上を追い求める、利益だけを追い求める。それは短絡的なちっちゃなゴールじゃないか、そんなものは長く続かないと思うんです。やはり人々の幸せを願う。ここにQ関数の最大値の報酬があるという設計をすれば、人類は破滅することなく、より幸せな世界をもたらすことができると思います。



ASIの世界、1万倍の人工知能でも、恐れる必要はない。彼らはちゃんと我々を慈しんで、我々と調和をしてくれるという世界であります。この超知性の世界が、10年以内に来ると思います。それが私の今日の青年の主張でございます。

あんまり聞いたことがない世界、僕のユニークでオリジナルな、自分で考えた主張です。我々は人類の幸せのためにがんばりますので、一緒にみなさんがんばりましょう。人々の幸せ。ありがとうございました。

続きを読むには会員登録
(無料)が必要です。

会員登録していただくと、すべての記事が制限なく閲覧でき、
著者フォローや記事の保存機能など、便利な機能がご利用いただけます。

無料会員登録

会員の方はこちら

関連タグ:

この記事のスピーカー

同じログの記事

コミュニティ情報

Brand Topics

Brand Topics

Recommend
  • 孫正義氏が「ノーベル賞もの」と評価する最新の生成AIとは “考える力”を初めて身につけた、博士号レベルを超えるAIの能力

人気の記事

Recommend

新着イベント

ログミーBusinessに
記事掲載しませんか?

イベント・インタビュー・対談 etc.

“編集しない編集”で、
スピーカーの「意図をそのまま」お届け!