ヒトリ歩き

愚痴とかいろいろ書きます

ロバストPythonがすごい!

ロバストPythonを年末年始の休みで読み終わったので、感想をまとめる。

目次

  • 1章 ロバストPython入門
  • 2章 Pythonデータ型入門
  • 3章 型アノテーション
  • 4章 型制約
  • 5章 コレクション型
  • 6章 型チェッカのカスタマイズ
  • 7章 実践的な型チェックの導入
  • 8章 列挙型
  • 9章 データクラス
  • 10章 クラス
  • 11章 インタフェースの定義
  • 12章 部分型
  • 13章 プロトコル
  • 14章 pydanticによる実行時の型チェック
  • 15章 拡張性
  • 16章 依存関係
  • 17章 コンポーザビリティ
  • 18章 イベント駆動アーキテクチャ
  • 19章 プラガブルPython
  • 20章 静的解析
  • 21章 テスト戦略
  • 22章 受け入れテスト
  • 23章 プロパティベーステスト
  • 24章 ミューテーションテスト

アノテーションの付け方のルールを決めべし

アノテーションの付け方のルールをチームで決めたほうがいい。
Pythonの良いところは動的型付けにある。そのため、全ての変数に型をつけるとコーディング量も増えるので、効率が悪い。
それに対して、型アノテーションをつけない場合、保守する人はどんな値が入るのかデバッグしないとわからないケースが出てくる。   関数には型アノテーションをつけて、変数にはつけないのが著者の見解。
この意見は、自分も同意。

ファンアウト、ファンインって何?

依存元は多数あるが、依存先が少ない場合は、ファンインが大きい。   依存元はそれほど多くないが、依存先が多数ある場合、ファンアウトが大きい。
ファンイン、ファンアウトという用語を初めて聞いた。
ファンイン、ファンアウトは論理回路で使われる用語のようだけど、依存性を示す用語としても使われるようだ。
要するに一般的ってことね。知りませんでした。

ja.wikipedia.org

xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com

コンポーザビリティは言葉で言うのは簡単だ

言葉はなんとなく理解できるが、実際にできるかと言われると出来ない。実際に、作れるかという意味で。
実例としては、loggingモジュールが参考になるようなので、もう少し勉強が必要。

品質とは誰かにとって価値があるものだ

プログラムテストによってバグの存在は示せるが、バグがないことは示せない

確かにそうだ。テストでバグが見つからなかったから、バグがないとは言えない。
ソフトウェアテストの7原則の1つでもある。他の原則もあるので参考にするといい。

shiftasia.com

品質も誰かにとって価値があるもの。自分がテストをやって満足してはいけない。
ユーザが満足しないと品質は満たせたことにならない 当たり前品質ってこと。

shiftasia.com

ミューテーションテストが一番の衝撃

ミューテーションテストはバグを発生させることを目的にソースコードを書き換えるテスト手法のこと。
この書籍で初めて知った手法。
プロジェクトでカバレッジは取得しているが、テスト対象の関数のアウトプットのチェックやモックを使って、渡されたパラメータのチェックをしてないテストがあった。
このミューテーションテストを使用すれば、テストコード自体の品質を確認できるので、自分が懸念していたことが解決する。
この書籍を読まなかったら、出会うことがなかったであろうテスト手法だ。

sqripts.com

感想

Pythonのベストプラクティスやこういう実装をすべきというような提言の本ではない。Effective Pythonとか、JavaでいうEffective java
保守性の高いコードをPythonでどう作ればいいのかというところに着目している。
実装だけではなく、アーキテクチャやテスト、静的チェックなど設計からリリースまでの工程を含めた書籍になっている。
1度読んで終わりではなく、今後の開発の中でその都度、この書籍を参考にシステムを作ったり、チームで議論するのに使える書籍だ。
特に、ミューテーションテストを知れてよかった。ミューテーションテストが指標になるかもしれないので、紹介されたOSSを使って理解しておこうと思う。担当プロジェクトにも取り入れたい。