その本の「はじめに」には、著者の「伝えたいこと」がギュッと詰め込まれています。この連載では毎日、おすすめ本の「はじめに」と「目次」をご紹介します。今日はデイビッド・ファーリーさんの 『継続的デリバリーのソフトウェア工学 もっと早く、もっと良いソフトウェアを作るための秘訣』 です。

【はじめに】

 本書は、ソフトウェア工学に工学を取り戻す試みです。問題解決のために意識的に科学的、合理的な思考スタイルを適用するソフトウェア開発に対する実際的なアプローチを説明します。これらの概念、考え方は、私たちが過去数十年のソフトウェア開発の歴史から学んだことを矛盾なく使ううちに生まれたものです。

 私は本書を通じて、工学(engineering)というものは、おそらくみなさんが思っているのとは違って、ソフトウェア開発に正しく応用でき、効果的なものだということをみなさんに確信していただこうという野望を持っています。本書ではそこからさらに進んで、ソフトウェアに対するそのような工学的アプローチの基礎と、それがなぜどのようにして機能するかを説明します。

 本書はプロセスやテクノロジーの最新の流行を追いかけるような本ではありません。扱っているのは、何が機能して何が機能しないかについてのデータに裏付けられた実用的な意味のあるアプローチです。

 小さなステップで反復的に仕事をすれば、そうでない場合よりも効果的です。形式張らない小さな実験の連続として仕事を組み立て、フィードバックを集めて学びを充実させれば、私たちが飛び込んでいる問題空間を深く知り、より意識的に仕事を進められるようになります。仕事をコンパートメント化し、個々の部品が明確で理解しやすくフォーカスを絞り込んだものになるようにすれば、作業を始めたときに目的地が見えていない場合でさえ、安全かつ意識的にシステムを発展させていけるようになります。

 このアプローチは、答えがわかっていない場合でも、どこで何にフォーカスすべきかについての指針を与えてくれます。直面する難題の性質にかかわらず、成功の可能性を広げてくれます。

 本書では、優れたソフトウェアを作るために開発者のグループや組織をどのようにまとめていくか、単純なものだけでなく複雑なものであってもシステムを効率よく作るためにどうすればよいかのモデルを提示していきます。

 いつの時代にも、優れた仕事を残した人々がいました。私たちは、何が可能かを示してくれたイノベーティブな開拓者たちから多くのものを得ています。しかし、最近になって、ソフトウェア業界も何が本当に機能するかを今までよりもうまく説明できるようになりました。今ではどのような考え方がより一般的でより広く使えるかが以前よりもよくわかっていますし、裏付けとなるデータもあります。

 私たちはよりよいソフトウェアをより早くより信頼できる形で作れるようになりましたし、その裏付けとなるデータもあります。ワールドクラスの難問を解決できるようになりましたし、その裏付けとなる多くの成功したプロジェクトや企業の経験が積み上げられています。

 本書は、成功した以前の業績をもとに重要で基本的な概念のコレクションを築いていきます。新しいプラクティスというようなレベルでは、本書には新しい内容はありません。しかし、本書のアプローチは、既存の重要な概念やプラクティスをまとまった全体に組み立て、ソフトウェアを対象とする工学分野を確立するための基礎を提供するという点で新しいものになっています。

 これは、バラバラな概念を乱雑に集めたものではありません。本書で取り上げる概念は密接につながっており、相互に支え合っています。私たちの仕事についての考え、仕事の組み立てや取り組みに、これらの概念を組み合わせて首尾一貫した形で適用すれば、仕事の効率や品質に大きな影響を与えます。一つひとつの考え方や概念はおなじみのものかもしれませんが、私たちの仕事についてのこのような考え方は今までとは根本的に異なるものです。これらがひとつにまとまってソフトウェアにおけるあらゆる意思決定の指導原理として使われるようになれば、それはソフトウェア開発の新しいパラダイムになります。

 私たちはソフトウェア工学の本当の意味を学ぼうとしていますが、それはいつも予想通りになるとは限りません。工学とは、経済的な制約の範囲内で実際的な問題を解決するために、科学的合理主義のアプローチを取ることです。そのようなアプローチが純粋理論的なものや官僚主義的なものになることはあり得ません。工学は、その定義上、実際的、実用的なものです。

 しかし、ソフトウェア工学を定義するための過去の試みは、特定のツールやテクノロジーしか認めない過度に押し付けがましいものを作ろうとする過ちを犯しました。ソフトウェア工学は、私たちが書くコードや私たちが使うツール以上のものです。ソフトウェア工学には製造工学(生産工学)の要素はまったくありません。私たちの問題はそういうものではないのです。私が工学という言葉を使うのを聞いて官僚主義を連想するなら、本書を読んで考え直してください。

 ソフトウェア工学はコンピューター科学と混同されがちですが、両者は別のものです。ソフトウェアエンジニアとコンピューター科学者の両方が必要です。本書は、よりよいソフトウェアを信頼できる形で繰り返し作るために必要な規律、プロセス、概念を説明します。

 私たちがソフトウェアエンジニアの名にふさわしい存在になるためには、問題に対する高品質なソリューションを効率よく提供するために役立つソフトウェアのための工学分野が必要です。

 そのような工学的アプローチがあれば、まだ考えたこともないような問題を解くときにも、まだ発明されていないテクノロジーを使うときにも問題解決のために役立つでしょう。そのような学問分野の概念は汎用的で長持ちし広く浸透するはずです。

 本書は、そのように密接に関連し、もつれ合った概念のコレクションを定義する試みです。私たちがソフトウェア開発者、ソフトウェア開発チームとして判断を下すときにほぼかならず頼れるアプローチとなるような一貫性のあるものを作ることを目的としています。

 私たちがどのような意味付けをしたとしても、およそソフトウェア工学と呼ばれるものは、その概念上、単に新しいツールを取り入れる機会を提供するだけでなく、利益をもたらさなければなりません。

 概念や考え方はすべて平等ではありません。良い概念と悪い概念があります。その違いはどのようにして見分けたらよいのでしょうか。ソフトウェアやソフトウェア開発の新しい考え方を評価し、よいものになりそうか悪いものになりそうかを判断するために使える原則とはどのようなものでしょうか。

 ソフトウェアの問題を解決するための工学的アプローチと言えるものは、広い範囲で汎用的に使える基本的なものでなければなりません。本書はそういった概念を扱います。ツールを選ぶときにどのような基準を使うか、仕事をどのように組み立てていくべきか、成功の可能性を広げるために、構築しているシステムや書いているコードをどのようにまとめたらよいかといったことです。

0.1 ソフトウェア工学をどのように定義するか

 私は、本書のなかでソフトウェア工学を次のようなものとして考えることを主張しています。

 ソフトウェア工学とは、ソフトウェアの実際的な問題に対する効率的、経済的な解を見つけるための経験的、科学的なアプローチの応用のことである。

 私の目標は野心的です。ソフトウェアを対象とする本物の工学分野の概要、構造、アプローチを提案したいと思っています。その基礎にあるものは次の3つの考え方です。

●科学とその実用的な応用である「工学」は、技術分野を効果的に発展させるために欠かせないツールである。
●ソフトウェア開発は、基本的に学びと発見の分野なので、成功するためには学びのエキスパートにならなければならない。そして、科学と工学はもっとも効果的に学ぶための手段である。
●私たちが構築するシステムは複雑なことが多く、ますます複雑度を上げている。そのようなものの開発に立ち向かうためには、複雑さ管理のエキスパートにならなければならない。

0.2 本書の内容

 第1部「ソフトウェア工学とは何か」は、ソフトウェアのコンテキストで工学がどのような意味を持つかを考えます。工学の原則と哲学を論じ、それらをソフトウェアにどのように応用するかを考えます。第1部はソフトウェア開発の技術哲学です。

 第2部「学びの最適化」は、小さなステップで前進していけるような仕事の組み立て方を明らかにします。すばらしい前進を果たしているか、単に明日のレガシーシステムを今日作っているに過ぎないかの評価方法を示します。

 第3部「複雑さ管理の最適化」は、複雑さ管理で必要とされる原則とテクニックを掘り下げていきます。個々の原則を深く掘り下げ、タイプの違いにかかわらず高品質なソフトウェアを作ろうとするときに個々の原則がどのような意味を持ち、どのように応用できるかを示します。

 最後の第4部「ソフトウェア工学を支えるツール」は、学びの機会を最大限に広げるとともに、小さなステップで前進し、システムの成長にともなって増してくる複雑さを管理する私たちの能力を後押しするアイデアやアプローチを説明します。

 随所に含まれている補足説明(囲み記事)は、ソフトウェア工学の歴史と哲学、思考の発展過程についての考察であり、本書で取り上げられているさまざまな概念、考え方がどのようなコンテキストで生まれてきたかを理解する上で役に立つはずです。


【目次】

画像のクリックで拡大表示
画像のクリックで拡大表示
画像のクリックで拡大表示
画像のクリックで拡大表示
画像のクリックで拡大表示
画像のクリックで拡大表示
画像のクリックで拡大表示
画像のクリックで拡大表示
【関連記事】世界最速書評●酒匂寛が推す「もっと高品質、もっと速くソフト開発できる良書」