継続的デリバリーのソフトウェア工学
https://m.media-amazon.com/images/I/51TviYFYuML.jpg
本書は、現代のソフトウェアエンジニアリングについて論じる本
目新しい概念は出てこないが、以下の 2 つが着眼点として優れている
これまでにもあった概念を整理し、意識の持ちようも含めて体系立てている
2 章 工学とは何か
物理的なものの製造は困難だが、デジタルでは製造コストは無視できる 我々がソフトウェアで作るモデルは実行できる
他の工学分野よりも、現実世界での評価がやりやすい
人間の能力頼みだと、人間の能力の範囲に制限される
スキルや創造性、イノベーションは工芸のみにあるわけではなく、設計工学でも中心的な役割
工学では、理論よりも証拠に基づいて決定を下してから、考えが機能するか検証する
完全に予測可能なプロセスではない
直面するトレードオフを理解することは工学的な意思決定のなかで超重要 3 章 工学的アプローチの基礎
効果的な計測ができていないために間違った考えを捨てられない アジャイルの世界では、ソフトウェア開発チームやプロジェクトのパフォーマンス計測は不可能だと考えられてきた 2つの属性に基づいたパフォーマンス評価
スピードと品質には密接な相関関係
ソフトウェアエンジニアリングの基本概念
2 つのカテゴリ
2 つの最重要スキル
学びのエキスパート
実用科学的な問題解決アプローチ
複雑さ管理のエキスパート
並行処理と結合 (カップリング) の本質的な難しさ
これらは IT システムだけでなく社会システムについても同様
2 部 学びの最適化
4 章 反復的な作業
完成までにどれだけの時間がかかるかどう考える?
意味のある完成の尺度はユーザーに価値を届けられたかどうか
非常に主観的
アイデアを最小限のコストで試すこと
漸進的な計画と実施により、変化に反応、適応できる
反復的に作業するには?
小さな単位で仕事をする
5 章 フィードバック
フィードバックがあれば、意思決定の証拠を明確化できる
様々なレベルでのフィードバック
アーキテクチャ
継続的デリバリーは高品質なフィードバックを必要とする
マイクロサービスでもモノリスでも、継続的デリバリーにより質を高められる
フィードバックの早さ
製品設計へのフィードバック
プロダクトのアイデアから本番システムに価値を届けるまでの間にフィードバックループを閉じるのが継続的デリバリーの真価
組織と文化に対するフィードバック
成功や進捗の度合いをどう測るか?
成功の指標がない中でも、役に立つフィードバックを得る 2 つのアプローチ
プロセスやツールよりも、個人と対話を
主観的ではあるが、重要
これが完璧というわけではないが、大きな前進
6 章 漸進主義
モジュラー性とコンポーネント化を活用
新しいことを学んだときに書き換えられるコードを書くことが目的
複雑なシステムを作るには、反復的な作業と漸進的な作業のどちらも必要
分離、切断がメリットのひとつ
技術的にも重要だし、組織的にもチームが独立できる
組織と文化の転換にも漸進的なアプローチが取れる
漸進主義のためのツール
より抽象度が低いもの
コード変更が与える影響を最小化するには?
システムを独立性の高い部品に分解する
フィードバックのスピードと質を上げる
7 章 経験主義
現実から集めた情報を元に、実験で検証できる理論を組み立てる
8 章 実験主義
他の工学分野と比べて、コンピュータは実験しやすい
様々な実験形態のなかでも、自動テストは群を抜いて柔軟 これらの技術で開発されたソフトウェアは、顕著にバグが少なくなる
3 部 複雑さ管理の最適化
9 章 モジュラー性
チーム間、各チームの出力間の結合と依存を取り除く
モジュラーなソフトウェアだけでなく、モジュラーな組織が必要
10 章 凝集度
書きやすさではなく、人が読みやすいコードを書く
11 章 関心の分離
いつ使うか? → サービスやモジュールの境界の変換レイヤが話題になっているとき
アダプターは API 全体を処理する必要
例えば送られてきたバイナリストリームが規約に沿っていない場合にも壊れないようにする必要
12 章 情報隠蔽と抽象化
「上司が〇〇 (リファクタリングだったり自動テストを書くことだったり) させてくれない」 というのは言い訳でしかない
既存コードを書き換えることは良いことであり、合理的であるというマインドセットを持つこと
13 章 カップリングの管理
開発のスケーリング : カップリングがあるとスケールしづらい
どう対応する?
5 つに分類
抽象化やデカップリングにはコストがかかるので、しすぎないことが大切
例えば注文の処理と格納の 2 つのサービスは、関心事の分離はよくできているが、密結合
重複を避けるためにカップリングしてしまう
カップリングが影響を与え始めると難しくなる
コードだけの問題ではない
組織のカップリングが問題
チーム間のカップリングを管理するための戦略
調整か分散の 2 つの戦略
間接的なコストとして設計コストがかかる
4 部 ソフトウェア工学を支えるツール
14 章 工学分野のためのツール
テストは必須 → 効率よく効果的にテストするには?
人の手によるフィードバックは遅すぎる
コードを書くときに学びたいことは 4 種類
正しい問題を解決しようとしているか?
ソリューションが期待通りに動作するか?
仕事の品質が高いかどうか?
効率よく仕事を進められているか?
テストするならコードをテストしやすくするべき ( テスト可能性) 合理的な時間内に開発の方向性を左右するフィードバックを得るにはスピードが重要
フィードバックを得るためにかかる時間の削減に力を注ぐこと
15 章 現代のソフトウェアエンジニア
本書に出てくる概念は互いに密接に関連しあっている