開発にスピードと品質をもたらす自動テストとは

自動テストが注目され始めた

アプリの開発において、品質を担保するために欠かせない工程がテストです。アプリ開発におけるテストには、アプリの各機能が正しく動くかテストする「単体(ユニット)テスト」や、ユーザにとってよりよいものとして動くかテストする「UIテスト」などがあります。自動テストとは、このようなテストをその名のとおり自動で行うものです。

開発者たちの間では、この自動テストが注目され始めています。iOSアプリの開発始まってから10年が経ち、昔に比べてアプリの開発はどんどん複雑になり、対応するべきiOS端末の数もどんどん増えてきました。そんな中で、開発者やテスターによる手動のテストだけでは、開発スピードや品質を保つことが難しくなってきてしまいました。

なぜ、テストを自動化するか

自動テストを取り入れると、開発のスピードアップと品質向上につながります。それは、自動テストが以下の4つを得意としているからです。

  • 素早いテストの実行
  • テストのくり返し
  • 人為的ミスの軽減
  • 属人性の排除

自動的にテストを行えることで、開発に必要なテストをスピーディにくり返し行えるので、開発スピードが上がりまます。また、自動化されたテストは、手動テストで起こり得る人為的なミスを減らしてくれます。さらに、自動テストを書くことで、テストや開発仕様を外部に書き出すので、プログラムの属人性を排除し、メンテナンス性や開発効率をアップできます。

テストピラミッドを知る

自動テストの実装するうえで大切なことを、ここでは1つだけ紹介しましょう。

まず大切なことは、テストピラミッドを意識することです。テストピラミッドとは、Mike Cohn氏が著書『Succeeding with Agile』の中で紹介したもので、各種テストの時間やコストの理想的なバランスを表しています。

 テストピラミッド
図 テストピラミッド

テストピラミッドでは、下層のユニットテストほど多く、上層のテストほど少ないテストケースで担保するのがよいとされています。

一般的に、UIテストなど上層のテストほど担保できる範囲は広くなります。しかし、すべてのテストをUIテストで行うのは、開発のコストや安全性の面からよくありません。開発コストが高い上位のテスト量が増えてしまうと、逆ピラミッドの形になってしまい、不安定な状態が続いてしまいます。

テストピラミッドのように、できるだけ下位のテストで担保できる部分を増やし、上位のテスト量を少なくすることが、安定したテストにつながります。テストを自動化する際にも、このテストピラミッドの安定性を意識することが大切です。

iOSアプリ開発の自動テストを学ぶ

自動テストをもっと学ぶには、iOSテスト標準のXCTestによるユニットテストやUIテスト、サードパーティのOSSの活用、fastlane・アプリ配信サービスデバイスファームを駆使したCI/CDなど、広範囲の技術を押さ得ることが重要です。本書iOSアプリ開発自動テストの教科書 ~XCTestによるユニットテスト・UIテストから、CI/CD、デバッグ技術までは、⁠iOSアプリ開発における自動テストの地図」になるように、自動テストにかかわる広範囲の知識・ノウハウを押さえています。⁠これからは自動テストもしっかりと押さえないと」⁠開発をもっとスピードアップしたい」⁠アプリの品質をしっかりしたい」というエンジニアにお勧めの1冊です。