シ-ツ

更新投稿先 https://twitter.com/_shi_tsu_

感想: ロバストPython

もっとも使用している言語がPythonである以上読んでおいたほうが良さそうだと思い購入。

既に知っていたり、実務で活用している内容も多々あったが、「そんなのもあったんだ」と発見がある良い本だった。特に、プロパティベーステストは名前だけ知っている状態で、ミューテーションテストは名前すら知らなかったので是非試してみたいと思えた。

以下自分が良いと感じた部分。

  • Annotated型は現在コミュニケーション目的でしか使えない
  • LiteralとEnumの使い分け
    • まずはLiteralをためす。イテレーションや実行時チェック、名前に対応する値の指定が必要ならEnum
  • enum.Flagでビット演算ができる
  • TypedDictとDataclassの使い分け
    • 基本はdataclass推奨。振る舞いを足したり、イミュータブル性や等価・大小比較ができるのが嬉しい
    • 上のメリットが必要なく、元から辞書を使ってる箇所はTypedDict良さそう
  • namedtupleを使う必要はなくなってきている (dataclassで代用できる)
  • クラスが抱える不変式の維持を、パフォーマンスなどの観点により外だしする場合、保守性の低下を認識した上で他の手段(厳格なlint、厳格なレビュー)で補う必要がある
  • typing.Protocolでダックタイピングの支援
  • pydanticによるdataclass(pydantic.dataclasses.dataclass)を利用した実行時型チェック
  • 独自Pylintプラグインを実装してプロジェクト独自のチェック
  • dodgyによる機密情報探索目的の静的解析
  • Hypothesisによるプロパティベーステスト
  • mutmutによるミューテーションテスト

    • ミューテーションテスト
      • バグを発生させることを目的にソースコードを書き換える手法
      • テストがどれれだけ優れているかをテストとする意味でメタテストの一種
    • 導入の難点
      • ミューテーションテストそのものと、メリットが有ることがあまり知られていない
      • ミューテーションテストが役立つほど、コードベースのテストが成熟していない
      • コストパフォーマンスが悪い
    • ミューテーションテストはコードカバレッジに関する間違った思い込みからコードベースを守る方法でもある
  • 以下話の本筋ではないが紹介されたライブラリとその目的

    • backoffによるデコレータを使った再試行
    • pypubsubによるイベント駆動アーキテクチャ
    • rxによるリアクティブプログラミング
    • stevedoreによるプラグイン管理