ソフトウェア開発のコンテキストとは
ソフトウェア開発のコンテキストとは、ソフトウェア開発の置かれた状況や背景を指します。コンテキストを明確にすることにより、あるソフトウェア開発において効果が得られたことが自身の開発ではうまくいくかもしれない、あるいは、うまくいかないかもしれないといった判断を助けます。他の開発で効果のあった技術、プロセス、プラクティス、手法を取り入れたときに、コンテキストが異なっているために同じような効果が得られないということはよくあります。
講演、セミナー、勉強会でソフトウェア開発の成功事例が公開されるようになって、「お、いいな」と思うような技術、プロセス、プラクティス、手法を見聞きする機会が増えました。しかしながら、見聞きした事例の前提や制約を把握して、自身の開発でも適用可能かどうかを判断しないと期待する効果が出ないことがあります。そういった前提や制約をコンテキストと呼んでいます。たとえば、些細なバグであればリリース後に修正できる、少人数での開発、スケジュール変更が絶対に許されない、法律による規制があるといったもので、着目している技術、プロセス、プラクティス、技法の効果を得るために必要となるものです。
私の専門分野であるエンピリカルソフトウェア工学でもコンテキストの議論が重ねられています。コンテキストは成功要因あるいは制約条件なので「組込み開発をやっている自分のコンテキストは組込み開発だ」といったようにカテゴライズするだけではわかりません。では、どうすればいいのでしょうか。私自身も「何がコンテキストなのかどうやって明らかにするのでしょうか?」という質問をいただくことも多いです。しかし、コンテキストを明確化する手順は現時点では明らかになっておらず、様々な側面から成功要因や制約条件を検討するしかありません。
効果が得られるための前提、あるいは効果が得られない前提をいろいろな側面から考えるトレーニングやそもそもどういった側面があるのかを知ることが第一歩です。トレーニングとして2つの質問とプロダクト、プロセス、プラクティス・ツール・技術といった側面を紹介する機会をソフトウェアテストシンポジウム北海道でいただきました。当日の資料はこちらから。また、Slideshareでも公開しています。