高品質のソフトウェアを開発する
Tarcio Saraiva氏とAdam Crough氏が,オーストラリアのメルボルンで開催された第1回のカンファレンスで,品質の高いソフトウェアの開発について講演した。InfoQは,ソフトウェアの品質についての見解と高品質がもたらすビジネス上のメリット,品質を管理する方法について両氏に聞いた。また,高品質のソフトウェアを提供する上でのテストの持つ役割や継続的インテグレーションが品質に持つ意味,さらには高品質のソフトウェア製品の提供を望む企業へのアドバイスなども聞いた。
InfoQ: ソフトウェアの品質とは何なのか,お二人の意見を聞かせてください。
Saraiva: バグが少なく機能に優れた,そしてコードの理解が容易な,よりよい製品への方向性を決める,概念的目標だと思います。この方向性は内部的な視点 – 開発者のような – からも,外部的な視点 – エンドユーザのような – からも見ることができますが,品質に関するとらえ方はそれぞれ違います。難しいのは,お互いが妥協しないようにすることですね。
Crough: 簡単に言ってしまえば,品質とは良さと悪さの度合いである,と定義してもよいでしょう。定義が主観的なのは,品質とは何かという認識には個人の感覚が影響しているからです。
高品質のソフトウェアを構成するものについてコンセンサスを得ようとするならば,個別の目標について認識する必要があります。開発者はコードベースに注目して,その保守性を評価するかも知れませんし,エンドユーザは,ポータブルデバイスに自分の好きな音楽をすべて保存できることに満足するかも知れません。
InfoQ: 企業はなぜ高品質を望むのか,どのようなメリットがあるのか,ご自身の経験から教えて頂けますか?
Saraiva: 品質は,ビジネス上の価値を提供する機能拡張を事前に計画し,それを実施するための管理能力を提供します。高品質のソフトウェアを開発する,適切なプロセスを実現することによって,ビジネスの発展と変革の実現が容易になるだけでなく,新たな戦略やテクノロジの採用も可能になります。
開発に携わっていると,新しい技術や方法論に出会うことがよくあります。私たちはDiUSで,今何が新しいのか,それをプロジェクトに取り入れるにはどうすればよいのか,いつも話し合っています。私たちにとって品質が重要な理由もそこにあります - このような価値を顧客である企業に提供することは,実践的であること,迅速な行動が重要であることを,彼らに理解してもらうためでもあるのです。
Crough: 投資に対する利益,堅牢性,信頼性,市場投入時間の短縮,顧客満足の向上といったものは,いずれも品質への投資と管理に対する副産物です。それらはすべて,ソフトウェア開発において企業が追い求めるべき重要な特質なのです。もっと個人的なレベルで言うならば,品質を追求して人に満足を提供するということは,さまざまなレベルにおいて,私たちが生来持っている性質なのだと思います。この意味から,企業にとってのメリットは2つあると言えます。
まずひとつは,ソフトウェアチームのメンバにとって,定められた基準を満足するだけでなく,それを超越することを目標とできるような環境,あるいは文化が作り上げられることです。もうひとつは,利用適合性と顧客満足を提供可能な製品を開発する個人,あるいはチームの知識が尊重されることです。
InfoQ: “品質保証”あるいは“品質コントロール”といったことばがよく用いられますが,品質とは管理可能なものなのでしょうか?
Saraiva: 品質は測定可能なものですから,管理という活動の対象になり得ると思います。継続的インテグレーションによる可視化で,例えばテストの失敗数のような問題があれば,それを認識することができます。この可視性がチームに対して,問題に関する議論と原因の理解,修正の実施といった活動を促すことになります。
私の経験では,自己管理型のチームは,ツールやテクニックを駆使して,品質を管理するための優れたインプットを提供することが可能で,それが卓越した品質を達成するための手段になります。一方で企業の側は,社内で実現したそのようなテクニックを活用することで,自らの品質を管理するための新たな道を模索する機会が得られるのです。
Crough: 先程述べたように,品質には主観的な面があるのですが,だからといって管理やコンセンサスへの到達が不可能ということにはなりません。
ソフトウェア開発において,品質保証と品質コントロールは,しばしば同じような意味で使用されています。いずれも全体的な意味としては品質管理の一部ですが,役割はまったく別です。簡単に言えば,品質保証とは防止の手段であり,品質コントロールは検出の手段であると考えられます。自己管理型チーム,反復型開発サイクル,継続的改善の実践などはすべて,アジャイルプロジェクトにおいて品質管理を可能にするためのテクニックないしプロセスなのです。
InfoQ: 高品質のソフトウェアを提供する上で,テストがどのような役割を果たしているのか,詳しく説明して頂けますか?
Saraiva: この数年間でテストは,“テスト工程に引き渡す”的なアプローチから,“これをテストしよう”というアプローチに移行しつつあります。この変化が結果として,“どうすればこれをうまくできるのか”,という考え方に繋がっています。
ソフトウェアプラクティスとしてのテスト駆動開発が優れているのは,それが,よりよいソフトウェアを開発する設計的判断へのチャレンジを促すだからです。これにペアリングを併用すれば,さらに素晴らしいものになります。アイデアを共有し,問題の理解を拡げることによって,考えられる最高のソリューションが実現されます。
最近になって具体化されてきたプラクティスのひとつとして,探索的テストがあります。通常の自動テストスイートではカバーできないような,機能やユーザフローの非正規なパスを試す能力をチームに提供してくれる手法です。
簡単に言えば,テストが提供してくれるのは信頼性です。一連のテストプラクティスが,組織に前進する力を与えてくれます。
Crough: アイデアあるいはコンセプトが認識された瞬間から,テストはその会話の一部でなくてはなりません。アイデアをテストすることは,それが人々の望むものなのか,製品として実現可能なのか,ビジネスにおいて必要なものなのかを判断する上での洞察力を与えてくれます。新規あるいは既存ユーザとの会話や,紙に書いてみるといった簡単なテストでも,それによってコンセプトを検証したり,あるいはイノベーションを推進することが可能です。
信頼性のテストは,開発チームが日々行なう作業の中で重要な位置を占めていますが,エンドユーザのテスト参加を奨励することもまた,ソフトウェアの品質が使用に適しているかを判断する上で非常に重要です。エンドユーザは,あなたやチームが思いもかけない方法でソフトウェアを使用しますから,少しでも早くソフトウェアをエンドユーザに届けることが,開発されたソフトウェアをテストするには最高の方法なのです。
InfoQ: 継続的インテグレーションが品質をいかに向上させるか,という意味での実例はありますか?
Saraiva: 私が現在携わっているプロジェクトでは,継続的デプロイメントでゼロダウンタイムを実現しています。これは継続的インテグレーションがなければ不可能です。
“開発サイクル” – プッシュ,ビルド,レポート – が重要なのは,構造的ないし機能的な品質が正しいという自信を私たちに与えてくれるからです。しかしながら,継続的インテグレーションの本当のメリットは,それがチームのプラクティスの拡大と,現代的なプラクティスへの扉を開く“ロボット”として組織の発展の力になることなのです。
Crough: 開発プロセスの一部としての継続的インテグレーションは,開発者が行なったチェックインのひとつひとつが自動ビルドによって検証されることで,チームが問題を早期に検出できるという自信を与えてくれます。
これが開発チームだけでなく,ビジネスオーナやプロダクトオーナにとっても,開発中のソフトウェアが基準を遵守していることが継続的にテストされているという自信につながります。絶えずテストを行なうことで,継続的にプロセスを改善するという視点を持つこともできます。
InfoQ: 高品質の製品を提供したい企業に対して,どのようなアドバイスをしたいと思いますか?
Saraiva: 品質に王道はない,ということですね。私たちがこれまでの開発経験で学んだのは,品質はインサイドアウトに構築し,フィードバックはアウトサイドインに求めるという方法です。変化を受け入れ,常に新しいやり方にチャレンジし,チームをそれに参加させてください。
Crough: 外部的には,ユーザが誰であるかを理解して彼らの声を聞き,製品が提供する,あるいはすでに提供している価値を正しく理解することです。
内部的には,ユーザとのビジョンの共有を大切にしてください。実験を積極的に実施して,失敗への不安を個人ないしチームの不利益ではなく,学びの機会として捕える文化を確立するのです。開発チームの声を聞き,彼らと協力しましょう。
この記事を評価
- 編集者評
- 編集長対応