1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

1. はじめに:その「動くからOK」本当に大丈夫?

現場で「コードは動いてるし問題ないでしょ」とリリースした後、
バグがユーザーの手元で爆発🔥──そんな経験、誰しもあるのではないでしょうか?

ソフトウェア開発におけるテストは、ただの後処理でも形式的な儀式でもありません。
不具合を未然に防ぎ、品質を守り、安心してリリースするための武器です。

今回は、「テストって何?」という初歩的な疑問から、ユニットテスト実装例
現場でハマりやすい落とし穴TDDや自動化への展望まで、実践的に解説します!


2. ソフトウェアテストとは?ざっくり整理しよう

テストの目的

  • バグの早期発見・修正
  • 要件との整合性確認(仕様通り動くか?)
  • リファクタリングや新機能追加時の安心材料

主なテストの種類

テストレベル 説明
ユニットテスト 関数・メソッド単位の最小テスト
結合テスト 複数のユニットを組み合わせて確認
システムテスト アプリケーション全体を通しての動作確認
受け入れテスト ユーザー視点で仕様が満たされているか確認

今回の焦点は「ユニットテスト」。なぜなら、最も書きやすく、即効果を実感できるからです。


3. Pythonで始めるユニットテスト:pytestで実践

まずはシンプルな関数をテスト対象にします。

✅ テスト対象の関数(calculator.py

def add(a, b):
    return a + b

def divide(a, b):
    if b == 0:
        raise ValueError("0では割れません")
    return a / b

🧪 テストコード(test_calculator.py

import pytest
from calculator import add, divide

def test_add():
    assert add(3, 5) == 8
    assert add(-1, 1) == 0

def test_divide():
    assert divide(10, 2) == 5

def test_divide_zero():
    with pytest.raises(ValueError):
        divide(10, 0)

📌 実行方法(pytest)

pytest test_calculator.py

✅ 実行結果(一部)

3 passed in 0.05s

たったこれだけで、安全確認ができるようになりました。
「この関数壊れてないかな?」と不安になったらすぐ pytest


4. 現場で役立つTipsとハマりがちな落とし穴

💡Tips

  • 関数を書く前にテストを書く(TDD):思考整理に有効
  • CIと連携:GitHub Actionsなどで毎Push時にテスト自動実行
  • **pytestのマーク(@pytest.mark.parametrize)**で効率化
@pytest.mark.parametrize("a,b,result", [
    (2, 3, 5),
    (-1, -1, -2),
    (0, 0, 0)
])
def test_add_param(a, b, result):
    assert add(a, b) == result

⚠️ よくある落とし穴

  • 「とりあえず動いたからテスト不要」思考
  • 複雑すぎるテストコード → 保守困難
  • モックの使い方が不自然 → 本物と挙動が違う

5. 応用編:TDDとテスト自動化への一歩

テストは書いて終わりではありません。
次のステップに向けて、以下の観点でスキルアップを目指しましょう。

🔁 TDD(Test-Driven Development)

  1. まず失敗するテストを書く
  2. 最低限動くコードを書く
  3. テストが通ったらリファクタリング

これにより、仕様に沿った設計安全なリファクタリングが可能に。

🤖 自動化による継続的テスト

GitHub Actionsなどを使い、以下を自動化できます:

  • Pull Request作成時にpytest実行
  • カバレッジレポートの生成
  • デプロイ前のチェック
# .github/workflows/test.yml
name: Run Pytest
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Setup Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.10'
      - run: pip install -r requirements.txt
      - run: pytest

6. おわりに:テストは開発者の盾であり、武器である

✅ テストを書くメリット

  • 安心してコードを変更できる
  • バグが早期に見つかる
  • チーム開発での信頼性向上

🛠️ デメリット(あえて言えば)

  • 最初は学習コストがかかる
  • 書きすぎて逆に保守が複雑になる可能性

しかし、「壊れたコードを本番で出す」コストはもっと高い
だからこそ、まずは小さな関数からでもテストを書きましょう。


✅ まとめ

項目 内容
対象技術 Python + pytest
得られるスキル ユニットテストの書き方 / 自動化の基礎
難易度 初級〜中級
おすすめ対象者 若手エンジニア / 品質改善に悩む方

この記事を読み終わった今、ぜひ一つでも関数にテストを書いてみてください。
その一歩が、あなたの開発体験をきっと変えてくれます!


🧵 ご質問や改善提案があれば、ぜひコメントで教えてください!
次回は「テストケースとその書き方」も解説予定です 🙌


1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?