テスト自動化
ソフトウェア品質管理において、テストは主要な位置を占めていますね。
コンピュータプログラムが実行するアルゴリズムは、将来、人工知能が意思とか心を持つようなSFの世界は別として、プログラムが書かれた通りに忠実に動作します。動作しなかったり、期待とは違った動きをするのであれば、どこかに間違いがあるはずなので、それを見つけて改修することになります。
プログラムを開発して、そのまま実装して動かし始めてから、期待を違う動きをしては困りますから、開発の段階で十分なテストを行うことになります。
テストは通常、とても単調な作業になります。プログラムの仕様書から実現する機能を読み取って、何をテストするか決めておきます。例えば、Webページ制作であれば、トップページにはたくさんのメニューがあって、ボタンがあって、画像があって、テキストリンクがありますが、その1つ1つをクリックしたら何が起こるかは予め分かっているので、こうすればこうなるはずという動きを網羅的にリストアップしておきます。実際のテストはテスターとも呼ばれる人が担当して、テスト項目を順番に試して、その結果を記録します。テストを実施した証拠(エビデンス)を残すためにスクリーンショットを画像として残したり、スマホ画面の一連の動きを動画で残したりします。
従来、テストを行って正常性を確認したり、セキュリティ上の課題がクリアされていることを確認するのは、工程の後段でした。開発が始まってある程度の時間が経過してから、テスト項目を洗い出して、上がってくるプログラムのテストの準備をしていたのです。
今では要件が固まったら開発と並行してテストの準備を行う場合も増えているようです。通常、ガントチャートなどのスケジュールは、左から右へ時間が流れるように描きますから、テストケースの作成を早く始めるやり方を、左側へのシフト、レストシフトと呼んでいるようです。
スマホが世界中で普及するより前には、パソコンで使われているブラウザにはたくさんの種類があって、それぞれのブラウザは異なるバージョンが並行して使われていて、それらのテストは本当に大変だったみたいです。あるブラウザでは、ほかのブラウザでは見えるボタンが消えてしまったり、同じブラウザの別バージョンでは画像の配置が崩れて意味が分からないページが表示されてしまうということが頻発していたようなのです。
この状況は実は余り変わっていなくて、スマホにも大きく分けて2種類のOSがあって、それぞれのいろいろなバージョンが同時期に使われていて、スマホのほかにも画面サイズが違う大小のタブレットがあって、何かのOSのどれかのバージョンの何かのブラウザで見た時には正常であっても、別のデバイスで見たら全然ダメということがよくあります。テストのためには、いくつもの端末をそろえて、同じテストをそれぞれで実行して確認しなければなりません。これは本当に手間と時間がかかる作業です。
そのため、多くのデバイスとOSブラウザの組み合わせでWebアプリを自動テストするLambdaTestのようなフレームワークが登場していてクラウドでの利用が可能になっています。
Seleniumなどの自動テストのツールはオープンソースでC#、Python、PHP、Java、Ruby、Perlなど複数の言語に対応していて、複数のブラウザとOSをサポートしています。AIと機械学習はこの分野にも進出していて、テストの自動化から自動修復へと進化しつつあるようです。しかも、コードレスでの利用が可能となってきています。
開発チームと運用チームが一体になって開発すると、ソフトウェアそのものの品質も向上し、開発が終わった時点ですでに運用チームの準備が整っていることから、DevOpsが注目を集めてきたわけですが、QA(品質保証)もオペレーションと一体化するQAOpsも注目されています。
さらにインフラ保守において楽しくない業務を自動化するNoOpsという動きもあります。
AIや人工知能は、単調作業を肩代わりしてくれるので、動作確認テストにおいても大いに期待できる存在であるようですね。
<参考情報>