2024/09/27 –, 20F Track1
名著「レガシーコード改善ガイド」では、「テストがないコードはレガシーコード」と言われています。テストが無い(もしくは手動テストが大半を占める)アプリケーションは改修を重ねるたびにリリースが長期化し、いずれメンテナンス不可能なレガシーコードと成り果ててしまいます。
どのような分野・規模のアプリケーションであっても、テストは不可欠です。更に、アプリケーションを構築・改修して素早くリリースするためには、「高速かつ何度でもテストを実行できる仕組み」が非常に重要となってきます。
本セッションでは、Pythonの代表的なテストフレームワークであるpytest
を用いた実践的なテスト方法を紹介します。シンプルなテストケースだけでなく、DBやネットワーク、ファイル入出力、時刻、OS情報など、複雑な依存関係にあるコードのテスト方法を解説していきます。また、テスト駆動開発(TDD
)に基づくテストファーストな開発手法にも触れていきます。
本セッションでは、様々なPythonコードをpytest
で自動テストする手法を解説していきます。
- 昨年のPyConAPAC2023での先行発表「好きとか嫌いとかはいい、練習してテストを書けるようになるんだ」を更に発展させ、より複雑なコードをどのようにテストするかに焦点を当てて解説していきます。
- コードが複雑なままだと、テストも必然的に複雑になります。本セッションでは単なる「
pytest
の使い方」の解説で終わらず、「テストを容易にするためのコードリファクタリング」も紹介し、テストを通じてコード品質を高める手法についても触れていきます。
タイムテーブルは以下で進める予定です。
- 導入(5min)
- 自己紹介
- なぜテストが必要なのか?
- なぜ単体テストの自動化を重視するのか?
- テスト駆動開発(TDD
)の紹介 - pytest概説(5min)
-AAA
を意識したテストケースの書き方
-fixture
による前処理・後処理の実装
-parametarize
によるパラメータテスト
-tmp_path
による一時ディレクトリの作成
-pytest-cov
によるテストカバレッジの取得 - 様々なテストパターンとリファクタリング(18min)
-DB
に依存するコード
-HTTP
リクエストするコード
- ファイル入出力を行うコード
- 特定の日時で動作するコード
-OS
情報に依存するコード - まとめ(2min)
テストケースの作成に苦手意識を持つ方は多いと思います。私もPythonを学び始めた当初はケース作成に負担ばかり感じてなかなか馴染めず、長年テストに対して苦手意識を持っていました。
しかし、従来の手動テストをpytest
で自動化したり、テストとリファクタリングを繰り返すことでコード品質を安定的に向上できるようになってから、徐々に「テストは楽しい」と感じられるようになりました。現在は複数プロジェクトにてテスト自動化を推進しています。
本セッションの聴講者にも、テストの手法や重要性だけでなく、「テストすることの楽しさ」を共有したいと思い、本題材を選びました。
オーディエンスが持って帰れる具体的な知識やノウハウ –- 自動実行可能なテストケースを作成することの重要性
pytest
を活用して、シンプルなコードだけでなく、複雑な依存関係にあるコードをテストする方法- テスト駆動開発(
TDD
)の思想とその実践方法
特にありません。
オーディエンスの経験レベル –Beginner
発表の言語 –日本語
発表資料の言語 –日本語
みずほリサーチ&テクノロジーズ株式会社 先端技術研究部に所属
アカウント
- Qiita: https://qiita.com/fujine
- SpeakerDeck: https://speakerdeck.com/mhrtech
過去の PyCon JP 発表経験
- PyConJP 2021: scikit-learnの新機能を紹介します
- PyConJP 2022: Pandas卒業?大規模データを様々なパッケージで高速処理してみる