やらなイカ?

たぶん、iOS/Androidアプリの開発・テスト関係。

第1回AI4SEセミナーに行ってきました #AI4SE

昨年の12/14に開催された第1回AI4SEセミナーの聴講メモを下書きのまま放置してしまっていたので、今更ながら。

ai4se.connpass.com

TOC:

AIによるテスト・デバッグ技術 イントロ&チュートリアル

www.slideshare.net

  • AI4SEで扱うのは広義の「AI」
  • 自動でなにかすごいことをしてくれる楽しい技術・進んだ技術を
  • 機械学習工学やAI工学は、SE4ML、SE4AI
  • AI4SEといえば、リポジトリマイニング(MSR: Software Repository Mining)
    • ここ10年
  • 今回はSearch based SE/Testing/etc..
    • これもこの10年くらい
    • Facebookのあれ
    • Optimization based Falsification
  • データでなく論理ベースも?
    • Concolic testing
    • 静的解析
    • 例: www.rise4fun.com/
  • 進化計算:最適化の一手法
  • 強化学習
  • サーチベースドテスティング
    • 進化計算でテストケース、テストスイートを生成する
    • 自動運転車で、衝突させるようなケースを作る
    • 評価:カバレジ、テスト数、とか
    • 2018年のJava Unit Testing Competition
      • カバレジ、ミューテーションスコア(人工バグの摘出数)、テストケース数で評価
    • FacebookのSapienz
      • 指標:カバレジ、テスト長、検出バグ数
      • バグ修正も連携(SapFix)
      • 多目的最適化を使っているので、複数のテストスイートのパレートフロントが生成される
      • 意味がありそうなイベント列、リバースエンジニアリングで得た文字列
  • 自動修正
    • プログラムいろいろいじってみて、テストが全部通ったら「修正(案)」
    • テストスイートがしっかりしていることが当然の条件
    • 人の頭の「暗黙の期待」だと無理
    • 例:ミューテーションベース。">"を">="に修正して、テストが落ちるかを評価
    • 自然に近いバグの入れかた
  • 反例探索 (Falsification)
    • モデル検査

バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~

www.slideshare.net

  • 2003年:7兆円
  • 2013年:34兆円
  • 開発者は時間の50%をバグの局所化と修正に費やしている、というデータ
    • バグのfixまで:平均6ヶ月
  • 局所化
  • パッチ生成
    • 変更タイプ1:ステートメントレベル
      • 代表的なツール:GenProg, RSRepair
      • 探索範囲が広いため、探索方法に工夫が必要。遺伝的あるごとか
    • 変更タイプ2:テンプレートベース(最新はこちらが主流)
      • Prophet, PAR
      • 探索範囲は狭いが、テンプレート依存
      • テスト成功でも、正しいパッチとは限らない。誤ったパッチ(テスト漏れ)
  • 現在はレベル2(単純バグ自動修正)。3以上は直せない(複雑バグ、高度バグ、完全自動修正)
  • 課題
    • 小規模バグのみ修正可能
    • テスト実行が長いと、パッチ探索の時間がすごくかかる
    • 修正品質がテスト品質に大きく依存
  • SapFix by Facebook
    • 今わかっている範囲(詳細は非公表)
    • revert, template, 単純な変更を網羅的に試す
    • 特別なことはやっていないが、
      • 割り切りがいい。revert優先
      • 修正は実行時エラーに絞っている
  • 富士通
    • ELIXIR: AIを活用したバグ自動修正ツール
    • MLで過去の修正履歴から見つける
    • 開発者による修正は1h、ELIXIRは5min
  • バグ自動修正readyか? チェックリスト == テストコードの品質が重要
    • 1.自動テストがある
    • 2.自動テストのカバレジに基準がある(xx%以上
    • 3.単体と結合両方で自動化している
    • 4.CIしてる
    • 5.実行時間が規模に対して十分に短い
    • 6.バグが発生したときに再現テストコードを書く文化がある
    • 7.ミューテーションテストでテスト品質を確認している
  • 開発スタイルが変わる。CIで検出した単純バグはBotになおしてもらう
  • オープンソースではkGenProgが日本語で開発されている

github.com

Q&A

テスト十分性の基準は?

  • 理想はミューテーションまで。現実的なところは、カバレジか。

Facebookは実行時エラーのみに絞っている件、ほかは、テストケースがfailしたものも拾おうとしている

  • テストカバレジが必要なのはコスト的ネック、適用が難しい
  • その点も、SapFixの優位点

自動(運転)車システムのためのAI的自動テスト生成

www.slideshare.net

  • サーチベースド
    • 入力:歩行者配置、道路の構造、信号変化たいみんぐ、ほかの車の動きなど
    • 出力;安全性、快適性、法令遵守など(単項目ではない)
  • 最終的には人が見る。悪いケースにアタリをつける、絞り込む
  • 局所最適問題:あら捜し意識が強いと、やや悪い状況を探して、もっと悪い状況を見逃す
  • モンテカルロツリーサーチ、バンディット問題
  • AIシステムのテストへの応用

深層強化学習による制御系の検証の試み

  • 制御系が「おかしな振る舞い」をする入力を強化学習を使って自動生成した
  • 強化学習を使わない手法に比べて、効率的に探索できる(だいたいの場合
  • まだ実用化には程遠い(と思う
  • 強化学習のコツ
    • 入出力は正規化して小さい値にする。0-1とかがいい
  • 成功率の表、アルゴリズムの略称-次のアクションまでの間隔(1sec, 5sec, 10sec
    • 緑はDQN, 赤は既存手法

LT

LTはメモ取れておらず、公開されているスライドのみ貼ります

強化学習による制御システムの自動反例生成

speakerdeck.com

Generate and Validate Program Repair - 学術から産業へ持ち出してみて

www.slideshare.net

所感

バグ自動修正をしてくれるSapFixが話題になりましたが、その現実感とか、適用する前提条件が十分な自動テストというあたりを聞けてとてもよかったです。

テストカバレジは指標にとどめて100%を目指さなくていい、とずっと思っており公言もしていましたが、自動修正を見据えるとそうも言えなくなりそうです。また、ミューテーションテスト等、テスト自体の品質を上げる技法も注目度が上がっていきそう。

まだ実用レベルでないことは認識しつつ、いつか来そうではあるので早めに準備はしておきたい。