せっかくなんで、時事ネタに絡んでみようと思いますw
Android版COCOAで通知が届かないという不具合が発見されたということで……スマホアプリの品質にも関わる人間としては気が気でない内容でした。
最初の報道では一部端末のみとか、一部バージョンのみの話かなーと思っていましたが……どうもAndroid全般だったようで……いやはや……。
今回どんなことが起こってしまったのかなーと、ちょっと妄想してみたいと思います。
1. 実機テストしていない……
まず、通常のフローで考えると、開発時のプログラム単体に対してのユニットテストがあり、それらを組み合わせた結合テストがあり、画面の見た目や操作性なども含めたシステムテストがあり……という感じになります。
また、AndroidはOSのバージョンや機種によって挙動が違うことがあり、システムテストの場合には、対応されるメジャーバージョンや端末のメーカーなどを考慮して端末を選定しテストします。
記事をよむに……基本的なテストしかしていなかったとのことで、何を基本的なテストとするかなのですが……実機を使っていなかったということは、ユニットテストを自動で走らせたのみだったのかもなーと思っています。
まぁ、初期リリース時はしっかりテストして、ちょこっとしたアップデートはざっくりで済まして……というケースはあるといえばありますが……
バグが入ってしまったバージョンとされる1.1.4はこんなリリースノートになっています。
修正版「1.1.4」では、陽性者との接触があった旨のプッシュ通知を表示する際の接触の判定と、接触確認アプリに陽性者との接触があった旨の表示をする際の接触の判定とを整合的に行うようにプログラムの修正を行うとともに、接触の検出精度の適正化を図るため、内部処理の改良を行いました。
んー、ちょこっとした不具合修正のみというよりは、メインの機能に手が入ってるようですね。
2. must、never要件が定まっていない??
サービスについては、要件を決めるときに「must(できないといけない)」「want(できて欲しい)」「never(起こってはいけない)」などの要素を考えたりします。
これが定まっていると、「この機能のneverは○○だから、それが起こってない確認をしよう」という流れでテスト計画を作れます。逆に「こういう事象はneverとかmustじゃないから見なくてもいいかー」って判断もできるわけです。
これができていないと、気になることは全部やれ!って感じになり……テスト面倒になります。やりたくなくなります。やらなくなります……。
3. 状況作るのが難しくなっている??
COCOAの仕様を見ると、こんな感じだそうです。
アプリを持っているユーザーが、他のユーザーと1m以内に15分以上いた場合、14日間の期間で「接触している」と記録されます。それらのユーザーが陽性登録をした場合、そのユーザーと接触していた他のユーザーに通知が飛ぶということのようですが……この条件をリアルで作るのは若干面倒です。
なので、テストするときは、陽性にするユーザーと接触しているという情報をツールで付加して確認したりするはずなのですが……そういう仕組みがないとテストが辛くなります。やらなくなります。
4. クロスプラットフォームだから??
COCOAはiOS版とAndroid版、見た目が全く同じです。
もちろん、どちらのOS用にもサービスを出しているアプリは多くあるのですが、結構細かい見た目が違うことが多いです。
理由としては基本的には別な言語で作らなければならなかったりするからなんですが……昨今クロスプラットフォームのフレームワークで作られるアプリも増えてきました。
本来は別の言語で作らなければいけず、その手順もiOS用とAndroid用では別々なのですが……
クロスプラットフォームのフレームワークを使うと、一つの言語でプログラムを書き、ツールを噛ませればiOS用のアプリとAndroid用のアプリをどちらも作ることができます。
COCOAではXamarinというフレームワークが使われていたようです。
これを使うと、こんな判断をしがちというか……ちょっとあり得る話かもなーと思っているのが、iOSではテストしていたという話です。
「同じプログラムでできていて、iOSで問題なかったから、Androidでも問題がないでしょ?」と言われると、ちょっとそうかも……と感じるかもしれませんが、そうではないんです。
結局できているものが違うので、両方でテストする必要があります。
という形で、起こったことを考えると色々ありそうだなーと妄想膨らますことができます。
こういうのを糧に、日々の業務に生かせればいいですねぇー。