ソフトウェア開発でクリティカルな障壁となるQAやテスト

 先日、実行委員として第二回Androidテスト祭りに参加させて頂きました。今回はレポート係も担当したので後ほどCodezineに報告記事を掲載する予定です。
 なお今回改めて実感したのが「QAやテストが、ビジネスにとってクリティカルな障壁となっている」という現状です。その実感は自分のいる医療産業でも感じることですが、Android開発では違った理由からそうなっているのが興味深いと感じています。

Android開発の現状

 ちょっと前置きが長くなりますが、まずAndroid開発では開発で取り得る選択肢が多種多様になっています。例えば多種多様なツールやフレームワーク、情報、ライブラリ、サービスなどがあり、それらを組み込むことで色々な機能を実現できます(例えばDropBox APIを使えば共有ストレージ機能を実現できますし、Twitter APIを使えばSNSとの連携も実現されます)。こうなっている背景として以下があります。

  • ここ数年のAndroid携帯の爆発的普及の影響で、Android開発に多数のツールベンダ・サービスベンダ等が参入してきています。結果、Android開発を支えるウェブサービス、開発ツール、受託、テスト等々が次々と出てきています。
  • フィーチャフォンやApple製品の垂直統合型開発に対し、Android開発はオープンソース文化を伴うオープンイノベーション型開発の傾向を強く持っています。そこではFLOSSプロジェクトや個人活動により様々なツールやライブラリ、フレームワークが作られているほか、既存のオープンソースの活用も活発に行われています。
  • Android開発は、Javaという普及言語、普及IDEを標準で採用しているほか、技術情報の公開も活発です。そのため開発者が取り掛かりやすい分野となっており、その需要に応じてサンプルや教材、情報などがあふれています。

 こうした背景があるので、Android開発ではアプリの競争力向上につながる機能の実現が比較的容易です。

Androidアプリケーション開発の問題

 が、実現が容易といっても、実際にビジネスとしてそれを市場に投入するとなると困難が伴います。
 様々なFLOSSやサービスを組み合わせて開発を行う分、プロダクトが複雑化し、品質リスクが高まってきます。
 またフラグメンテーション問題や継続的なアップデートサポートといった、Android特有の問題もあります。膨大なターゲット・中長期のライフサイクルにおける品質確保を、小規模開発の中で実現する必要があります。
 さらにアプリケーションの競争も激しいことから、品質確保と開発スピード向上の両立が求められます。

QAやテストがクリティカルな障壁となる

 上記のような背景があるため、ビジネスとしてのAndroidアプリケーション開発では「作るのは簡単だが、そのテストや品質保証を行うのが困難」という傾向が特に強まっていると感じます。
 そこではQAやテストがビジネスのクリティカルな障壁になりがちで(もちろんまず優先すべきはアプリケーション自体の競争力ですが)、例えば以下のような傾向が出てきます。

  • 多数のバージョンや端末での動作保証を実現するテスト体制を構築できなければ、アプリケーションのユーザは限られてしまいますし、バージョンアップへの対応が困難になる点でアプリケーションのライフサイクルも短くなります。
  • 小規模開発の中でも適切な品質を確保できるテストプロセスを構築できなければ、初期不具合で躓いたり、セキュリティ上のトラブルを起こしたりする可能性も高まります。またアプリケーションの競争力を高める機能やUIの実現が可能となっても、その動作保証ができないという理由で採用しずらくなることがあります。
  • 軽快なテストやQAを実現できなければ、OSのバージョンアップ、話題のウェブサービスAPI公開、ライバルアプリケーションへの後追いといった機会で遅れをとることになります。


 逆に上記のような問題を克服できれば、アプリケーションの対象を広げ、開発を構築化し、魅力的な機能やUIをガンガン投入できるようになります。
 ただその実現にあたっては、当然ながらテストやQAの中で閉じた改善だけでは困難です。そこでは例えば以下のような、ソフトウェア開発ライフサイクル全体でテストやQAを支える改善が要求されると感じます。

  • 製品への要求としてテスタビリティ(特にフラグメンテーション対策としてテスト自動化)を意識する必要があります。テストの障害は開発上流から取り除くべきですし、テストのための仕掛け(例えばテスト自動化用インターフェース)を設計段階から積極的に組み込むべきです。フレームワークやサービスを選ぶ際も、テスタビリティを選択の指針の1つにする必要もでてくるでしょう。
  • 有限な時間や予算を効率的に使うためのリスクマネジメントも重要です。セキュリティや動作不良等ユーザに対するリスクをピックアップ・特定し、リスク軽減手段の組み込みといった工夫が有効になります。
  • テストの前倒しも重要です。テスト実施の前倒しでテストの障害を明らかにしたり、テスト分析やテスト設計を前倒しして、テストの品質やテスタビリティの向上にフィードバックをかけるといった対策が有効になります。
  • テストプロセスの現代化も重要です。必要なテスト観点を分析して、コンパクトかつ十分なテストで、効率的に品質を確保するのも重要です。


 こうしたテストやQAの考え方は、「より製品の品質を高める」という目的だけでなくて、「軽快な開発をより軽快にする」「より製品の競争力を高める」「製品仕様の選択肢を広げる」という攻めの要素も多く含んでいます。
 そこでは「テストの網羅度を高める」「工程レビューを厳格化する」とかいったありがちなテスト重厚化志向が通用しません。開発と一体となって、コンパクトな案件の中で開発高速化と高品質化を両立するアプローチが求められます。