継続的デリバリーのソフトウェア工学(英題: Modern Software Engineering)を読んだ。
ソフトウェア開発 見出しへのリンク
本書ではソフトウェア開発の効果的かつ効率的な方法を探求していく。
より良いソフトウェア開発を行うために、開発者は「学びのエキスパート」かつ 「複雑さ管理のエキスパート」になるべき、と述べている。
学びのエキスパートになるためには、実験 → フィードバック → 実験 → … のループを 高速で回すことが重要になる。
複雑さ管理のエキスパートになるためには
- モジュラー性
- 抽象化
- 疎結合
の実現が不可欠になる。
そして、上記の要素を達成するために
- テスト可能性
- デプロイ可能性
- スピード
- 変数の管理
- 継続的デリバリー
が重要になる。
ソフトウェア工学 見出しへのリンク
本書では、ソフトウェア開発は工学的に行われるべきだと述べられている。
これは、いわゆる工芸品のような、職人の一品物ではないということである。
また、科学のように厳密性を追求するのではなく、
あくまで開発に役立つプラクティスを追い求めるべき、ということでもある。
一方で、建築物のような製造工学に近い物ではなく、設計工学になるべきとも述べられている。
ソフトウェア開発が製造工学と違う点は、ソフトウェア開発は繰り返し作り直すことが容易である点である。
建築物は一度作ると作り直しが効かないため、事前の設計を念入りにやったうえで開発に入る。
一方で、ソフトウェアにおいてコードの書き直しは容易であるため、 設計 → 実装 → デプロイのループを早め、知見を得ることが重要になる。
上記のループがどの程度うまく行っているかを計る指標がFour Keysである。
学びの最適化 見出しへのリンク
フィードバックを早く得られるようにする。
設計に対するフィードバック、実装に対するフィードバック、…
小さく作って頻繁にマージ。
複雑さ管理の最適化 見出しへのリンク
TDDでテスト可能性を確保し、モジュラー性を進める。
関心の分離。本質的な複雑さと付随的な複雑さ(ドメインの複雑さと技術的な複雑さ)を分離する。
運用に関わる変数の数を少なくして、デプロイを安定的にする。
感想 見出しへのリンク
「ソフトウェア工学」とあったので多少学術的な内容を期待していたが、良い意味で裏切られた。
内容は「素早いフィードバックサイクルで効率的に学びましょう」と 「ソフトウェアの複雑さを管理しましょう」で、前者にスポットライトが当たっているのが斬新な気がする。
複雑さ管理には疎結合高凝集、それを達成するためのTDDと割と古典的な内容だったが、 デプロイ可能性を常に保ち、それを持って継続的デリバリーを実践していく的な部分は面白かった。