0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python CGI その3:単体テストという考え方

Last updated at Posted at 2025-12-18

PythonでCGIのその3です。

前置きです、
前回のその2ではPythonのCGIで、Web入出力(HTTP)と OS入出力(ファイル)をつないで「Webアプリの基礎」を体験してみました。

Python CGI その2 「名前+ひとこと」をPOSTで受け取りファイル操作と検索を試す

今回はその続きとして——

 単体テストという考え方 
〜 構造化することで「テストできる」ようになる 〜 

を体験します。

プログラムでの新しい機能追加ではなく、
「なぜ処理を分割したのか」「それが何につながるのか」
を整理します。考え方や実務(仕事)にどうつながるかについてです。

また、「構造化」というワードを使いますが、以下でも取り上げました。
構造化プログラミングと構造化設計(Hello World発展編)

🧩 なぜファイルを分けたのか?

ここから本題です。
その2では、次のように処理を分割しました。

post_form.py   … CGIの入出力(HTTP / 標準入出力)
data_store.py  … ファイル保存・検索などのデータ処理

これは単なる整理ではなく、
構造化設計 の基本的な考え方です。

🔹 構造化=役割を分けること

それぞれの役割は明確です。

ファイル 役割
post_form.py Web(HTTP/CGI)とのやりとり
data_store.py データの保存・検索・取得

このように分けることで、

  • Webの知識がなくても data_store.py は読める
  • CGI以外の用途でも data_store.py を使える
  • 修正範囲が限定される

といったメリットが生まれます。

🧪 単体テストが「できる形」になる

構造化の最大のメリットは、
単体テストが可能になることです。

もし分割していなかったら…

  • CGIの環境変数が必要
  • Webサーバが必要
  • POSTデータを偽装する必要がある

結果として、

「ブラウザから動かして確認するだけ」

になりがちです。

分割している場合

data_store.py純粋なPythonモジュール なので、
WebやCGIとは無関係にテストできます。

例(単体テストのイメージ):

from data_store import save_message, load_messages

def test_save_and_load():
    save_message("nishida", "hello")
    data = load_messages()
    assert "nishida" in data
  • CGI不要
  • Webサーバ不要
  • Pythonだけで確認可能

これが 単体テスト です。

📄 テスト仕様書・テスト結果という考え方

実務では、次のようなドキュメントを作ることがあります。

🔹 テスト仕様書(例)

No テスト内容 入力 期待結果
1 データ保存 name="A", msg="test" ファイルに1行追加
2 検索処理 name="A" 該当データのみ表示

🔹 テスト結果(例)

No 結果 備考
1 OK 正常
2 OK 正常

案件によっては、
このテスト仕様書・結果が納品物となり、
検収対象になることもあります。

🔄 テスト工程は単体テストだけではない

今回は 単体テスト までの説明にしていますが、
実際の開発工程では次の流れがあります。

  1. 単体テスト
  2. 結合テスト
  3. システムテスト
  4. 受け入れテスト

すべてを毎回やるとは限りませんが、
この流れを知っているかどうか は大きな差になります。

👥 チーム開発・製品開発という視点

  • 複数人での開発
  • 他人が書いたコードの修正
  • 数年後の保守対応

こうした現場では、

  • 構造化されていること
  • テストできること
  • 動作確認の証拠が残っていること

品質 になります。

🧠 地味だけど「戦力」と見なされる理由

正直なところ、

  • テストは地味
  • 面倒
  • 楽しい作業ではない

です。

それでも、

  • 不具合を再現できる
  • 修正の影響範囲を説明できる
  • 証跡を残せる

こうしたことができる人は、
現場では「安心して任せられる人」 と評価されます。

📘 今回のまとめ

  • 構造化すると単体テストが可能になる
  • 単体テストは品質確保の第一歩
  • テスト仕様・結果が納品物になる場合もある
  • 実務ではテスト工程が重要
  • 地味だが、職業としてのプログラミングでは非常に大切

ソースファイル一式は以下のgithubに置きました。
https://github.com/ISYNishida/python-cgi-sample

今回はここまでとします。

またいろいろと書きたいと思います。
ありがとうございます。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?