先日、AppleからiPhone向けの新OS、iOS 13がリリースされ、多くの端末へのアップデート提供が開始されました。同時にMac向けのmacOS Catalinaも配信が開始し、同じく多くの端末にアップデートが適用され始めています。
しかし、アップデート直後からバグの報告が多発。日本でもiPhone 11との組み合わせでドコモの電波をキャッチできないなど、致命的な欠陥がいくつも見つかっています。
Appleに18年間勤めた元AppleエンジニアのDavid Shayer氏が、「iOS 13とmacOS Catalinaがこんなにもバグだらけな6つの理由」をApple系ニュースに精通したニュースサイト、TidBITSに寄稿しました。
目次
機能が多すぎてスケジュールチキンに
スケジュールチキンとは、ソフトウェア開発のマネジメントで主に用いられる用語。複数人のチームでスケジュール通りに開発が進んでいない場合、それぞれのメンバーは自分以外の誰かが最初に上司へ遅れを伝え、その責任を逃れようと試みます。日本語でもチキンプレイなどの表現がありますが、アメリカのスラングで"Chicken"は「臆病者」という意味にもなります。
なにかの機能に携わる部署のうち、どこかが一つでも開発の滞りを隠して全体の進行を続けた場合、最終的にはOSのリリースに間に合わなくなってしまいます。
完璧主義のAppleとしては予定通りに全体が完成しない場合はリリースを送らせたいところですが、定期アップデートが必要なOSソフトウェアに関しては大幅な遅れは認められません。そのため、不完全なままか、その部分を省いてリリースすることになります。
クラッシュレポートが報告するのは「クラッシュした場合」だけ
Appleのものを含め多くのOSにはクラッシュレポートの機能があります。OSがクラッシュしてしまった場合にその過程や状況などを自動的にOSのメーカーへ送信する機能で、収集されたデータは将来のOSの改善に役立てられます。
しかし、「クラッシュレポート」はあくまでクラッシュレポートなので、OSがクラッシュするほどではない細かいバグは見つけることができません。
もちろんAppleはこれらのバグを無視しているわけでは有りませんが、その検証方法は「旧式」だとのこと。実際に人間がOSを操作して調べるヒューマンテスター、自動のテスト、サードパーティの開発者からのレポート、そして中でもApple Supportからのレポートがメインだといいます。
見つかったバグを重要度に応じてトリアージしている
トリアージとは「選別」という意味で、主に災害時の医療現場で大量の患者を重症度に基づいて優先順位をつけるときに使われます。
Appleの開発ではアルファ版の前には当時確認できるほとんどのバグが修正されますが、ベータ版に入ると重要な機能が使えなくなるような大きなバグのみが優先され、リリース前にもなるとデータを失ったりクラッシュするようなさらに重要なバグが重点的に修正されるようになります。これは悪いことではなく、バグを直そうとコードを書き換えれば他の場所でバグが発生することは十分ありえるため、重要なものを優先するというのは理にかなっています。
しかし、David氏は「残念だがまれに、単に少し混乱するようなレベルの軽微なバグはトリアージされさらに後のバージョンまで後回しにされることがある」としています。
新しく出来たバグは修正されるが、昔からあるものは無視されている
エンジニアが開発をしているときに、誤って新たなバグを生み出してしまった場合は「リグレッション」と呼ばれ、早急に修正するよう手配されます。
しかし、デバッグをして見つけたバグを調べていると「実はそのバグが昔のバージョンから長く存在していた」ということが発覚した場合にはなかなか修正されません。
David氏はApple時代の思い出として、他のチームが「Not a Regression」と書かれたTシャツを着ていたというある種の笑い話を紹介しています。
自動テストがあまり使われていない
Appleでは、他のソフトウェアメーカーと比べて自動のテストをあまり使っていません。
バッテリーやSafariのテストなど一部の領域では自動で検査を行っていますが、Appleは未だに多くのテストを手動で行っています。
Dabid氏は「テストを自動化すればAppleのソフトウェアの品質改善に役立つだろう」と考えています。
Appleエコシステムの複雑さが増した
昔、AppleがMacのみを販売していた頃にはCPUのコアは一つだけで、多くの場合はシングルスレッドで、コードも10万行もあれば長いと考えられていました
それに対して最新のApple製OSのコードは数千万行にわたり、Mac、iPhone、iPad、Apple Watch、AirPods、HomePodはみな相互に細かく通信し連携しています。すべてのアプリはマルチスレッドで動作し、インターネットを使って通信しています。
一つのデバイスで同時に動作する複数のアプリ、プッシュ通知、ネットワーク遅延などのあらゆる可能性をテストするのは事実上不可能です。
そのため、開発は過去と比べて非常に難しくなっています。
まとめ - Appleは必ずちゃんと修正してくれる
今回、AppleはiOS 13のリリース直後にiOS 13.1をリリースしました。その後も高い頻度での更新が続いています。David氏は「Appleはこのソフトウェアの質が深刻であると考えていて、多くのリソースを費やして今回のバグを修正するだろう」と指摘しています。
今回のアップデートの問題点はAppleブランドそのものに対しても強いダメージを与えており、Appleは高級機としての威信をかけた早急な対応が望まれます。
Source:TidBITS
てんこ盛りに機能をつけるから、バグが多発するんだよ。
利用度の少ない機能は削除して良いんじゃ?
あるレベルまでは便利に感じるが、限度を超すと、便利になりどころか複雑になりすぎ利用者はわけ分からなくなる。
制作しているプログラマーはもっと訳が分からなくなる。
利用率に順位をつけて、40%を下回った機能が削除した方が良い。
iOS 14 では、追加ではなく簡略化してほしい。