PyCon JP 2024

あなたのアプリケーションをレガシーコードにしないための実践Pytest入門
2024-09-27 , 20F Track1

名著「レガシーコード改善ガイド」では、「テストがないコードはレガシーコード」と言われています。テストが無い(もしくは手動テストが大半を占める)アプリケーションは改修を重ねるたびにリリースが長期化し、いずれメンテナンス不可能なレガシーコードと成り果ててしまいます。

どのような分野・規模のアプリケーションであっても、テストは不可欠です。更に、アプリケーションを構築・改修して素早くリリースするためには、「高速かつ何度でもテストを実行できる仕組み」が非常に重要となってきます。

本セッションでは、Pythonの代表的なテストフレームワークであるpytestを用いた実践的なテスト方法を紹介します。シンプルなテストケースだけでなく、DBやネットワーク、ファイル入出力、時刻、OS情報など、複雑な依存関係にあるコードのテスト方法を解説していきます。また、テスト駆動開発(TDD)に基づくテストファーストな開発手法にも触れていきます。


本セッションでは、様々なPythonコードをpytestで自動テストする手法を解説していきます。

  • 昨年のPyConAPAC2023での先行発表「好きとか嫌いとかはいい、練習してテストを書けるようになるんだ」を更に発展させ、より複雑なコードをどのようにテストするかに焦点を当てて解説していきます。
  • コードが複雑なままだと、テストも必然的に複雑になります。本セッションでは単なる「pytestの使い方」の解説で終わらず、「テストを容易にするためのコードリファクタリング」も紹介し、テストを通じてコード品質を高める手法についても触れていきます。

タイムテーブルは以下で進める予定です。

  1. 導入(5min)
    - 自己紹介
    - なぜテストが必要なのか?
    - なぜ単体テストの自動化を重視するのか?
    - テスト駆動開発(TDD)の紹介
  2. pytest概説(5min)
    - AAAを意識したテストケースの書き方
    - fixtureによる前処理・後処理の実装
    - parametarizeによるパラメータテスト
    - tmp_pathによる一時ディレクトリの作成
    - pytest-covによるテストカバレッジの取得
  3. 様々なテストパターンとリファクタリング(18min)
    - DBに依存するコード
    - HTTPリクエストするコード
    - ファイル入出力を行うコード
    - 特定の日時で動作するコード
    - OS情報に依存するコード
  4. まとめ(2min)

Why did you choose this topic?:

テストケースの作成に苦手意識を持つ方は多いと思います。私もPythonを学び始めた当初はケース作成に負担ばかり感じてなかなか馴染めず、長年テストに対して苦手意識を持っていました。

しかし、従来の手動テストをpytestで自動化したり、テストとリファクタリングを繰り返すことでコード品質を安定的に向上できるようになってから、徐々に「テストは楽しい」と感じられるようになりました。現在は複数プロジェクトにてテスト自動化を推進しています。

本セッションの聴講者にも、テストの手法や重要性だけでなく、「テストすることの楽しさ」を共有したいと思い、本題材を選びました。

Knowledges and know-how the audience can get from your talk:
  • 自動実行可能なテストケースを作成することの重要性
  • pytestを活用して、シンプルなコードだけでなく、複雑な依存関係にあるコードをテストする方法
  • テスト駆動開発(TDD)の思想とその実践方法
Prior knowledges speakers assume the audience to have:

特にありません。

Audience experiment:

Beginner

Language of presentation:

日本語

Language of presentation material:

日本語

みずほリサーチ&テクノロジーズ株式会社 先端技術研究部に所属

アカウント
- Qiita: https://qiita.com/fujine
- SpeakerDeck: https://speakerdeck.com/mhrtech

過去の PyCon JP 発表経験
- PyConJP 2021: scikit-learnの新機能を紹介します
- PyConJP 2022: Pandas卒業?大規模データを様々なパッケージで高速処理してみる