自動テストが注目され始めた
アプリの開発において、品質を担保するために欠かせない工程がテストです。アプリ開発におけるテストには、アプリの各機能が正しく動くかテストする「単体(ユニット)テスト」や、ユーザにとってよりよいものとして動くかテストする「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冊です。