AIを活用したシステムでも、AIはWebAPIを通して使うことが主流。
なので、WebAPIを使うテストと変わらない点があるが、
学習をさせたり、周囲の状況変化に対応させる必要が有る場合が異なる。
●WebAPIと従来のシステムとのテストのちがい
・単体Unitテストが異なる。
具体的には、従来の単体テストは、ホワイトボックステスト(C0,C1とか)
だったけど、WebAPI自体は、中身を見れないので、ブラックボックステスト
になる。
そもそも、ホワイトボックステストでは網羅率というのが意味あったけど、
Kerasでディープラーニングのプログラムを書いた場合、学習が不完全でも、
(=従来ならバグとなる)上から下まで取っているので、書いたプログラムの
網羅率は100%だ。逆に、すべてのノードを通っているかというのは、
完全に学習しても通ってない(パラメータの係数が0)はありえるので
網羅率というものに、「意味がない」。
したがって、網羅率を基準とするC0,C1に、「意味がない」。
・運用後でも、テストが必要なことがある
WebAPIが、API提供者の都合(セキュリティの場合、そうは言い切れないけど)
で変更になる可能性がある。この場合、結合、総合テストをしなおす必要がある。
実際には、回帰テストを行うことになるけど、回帰テストをいちいちしている
「予算がない」なので、自動的に行う必要がある。定期的に回帰テストプログラム
を流して監視するとか・・・
●普通の(ロジックを書いた)APIと、機械学習を使ったAIのAPIの違い
・単体Unitテスト項目の立て方が違う
ロジックの場合、同値ないし、境界値を調べればよい。
AIの場合、それらは当然調べるけれど、AIが変なふうに学習している
可能性もあるので、ランダムなデータを入れて確認しておかなければならない。
また、ロジックの場合は、100%正解が出ないといけないが、
AIの場合、100%でなくてもOkということもある。
で、この場合、何回か、テストを行わないと(乱数が入らないなら違うデータで
どこかに乱数が入るなら、同じデータでも)、ある場合には、結果が著しく悪い
ということもあるので、注意が要る。
・運用後のテスト
WebAPIの場合、環境の変化は、外因的なものだと気づかないが、
内因的なもの(自分で修正を書けたもの)は、まず、うまく行くものをコミット
する。したがって、テスト結果が悪くて、元に戻すということは少ない。
しかし、機械学習の場合、学習が不断に行われる場合、つねに回帰テストをする
必要がある(内部のプログラムを治していなくても)。
そして、学習したら、あるとき突然成績が悪くなる可能性がある。
この場合、元に戻さなければならない。つまり、コミットしてから、ステージング環境
で一回テストし、学習結果によっては元に戻すということが、頻繁に行われること
もありうるということを意識したテストをしないといけない。
(テスト・実運用の構成管理大事)
ざっと、こんなところかなあ・・・