「ちょうぜつソフトウェア設計入門」を読む
長らくソフトウェアエンジニアリングに関わることをしていなかったので、リハビリがてら読んでいく。
「凝集度」「結合度」「安定度」という言葉をクリーンアーキテクチャ本で読んだけどすっかり忘れてしまったな。
凝集度(Cohesion)
Claudeより、
一つのモジュール内の要素がどれだけ強く関連しているかを示す指標
例えば単一のクラスの中で全くもって別の情報を扱ったメソッドが2つあると凝集度が2。両者のメソッドの中で1コでも同じインスタンス変数やプライベートメソッドを参照している場合は凝集度が1になる。
低ければ低い方が「凝集度が高い」となり、モジュールとしては「良い」とされている。
凝集度そのものを図る方法はいろいろある。上記がLCOM4という方法。
結合度(Coupling)
Claudeより、
モジュール間の依存関係の強さを示す指標
2者間のモジュールでどれだけ依存が存在するかを示す度合い。どうやら定性的に判定することが主流らしい。
それは依存の方向が一方向なのか?とか、クラスではなくインタフェースに依存しているのか?とかで結合度は変わる。
そして結合度は量というよりはその質の観点で評価をする。
安定度(Stability)
Claudeより、
モジュールがどれだけ変更の影響を受けにくいかを示す指標
これはわかるので割愛。
開発者はヒアリングで聞いたいくつかのサンプルを分析して、いちいち面倒な場合分けを一般化できるんじゃないだろうかと考えます。そのとき初めて、Petのような抽象を設けるのが都合よさそうだと気づきます。 そのような流れで発見された抽象こそが、実際に役に立つ期待値の高い抽象です。こうした継承の逆向きの、現実のバリエーションから帰納的に抽象を発見していくアプローチを、汎化と言います。無駄のない良い抽象の設計は、後に残るコードの依存順とは逆に、先に具象の分析をやったあと、その汎化プロセスによって生まれてきます。
田中 ひさてる. ちょうぜつソフトウェア設計入門――PHPで理解するオブジェクト指向の活用 (pp.111-112). 株式会社技術評論社. Kindle 版.
「汎化」というワードを初めて知った。
オブジェクト指向、構造化プログラミングといったワードについて解説していたが、どこまで実践的なものなのだろうか。そもそも学ぶ必要があるのかがまだ懐疑的だ。
この類のワードに関してはいろんな本で出場してはその度に学んではいたものの、結局のところ実務で意識することはなく、少し経つと忘れてしまう。
テストをなぜ書くのかに関しては、「バグを見つけやすくするため」という意味合いでしか記述されていなかった。
xUnit Patternsではドキュメンテーションとして、またリスクを減らすものとしてもテストを書くべき。ということが書かれている。