skillup

技術ブログ

ドキュメント作成 プログラミング全般

テスト環境のデータ作りに関して

投稿日:2021年12月11日 更新日:

単体テスト以降の環境ですとテストのデータを作ることがなかなか大変だと思います。マスタなどはそのままもらうこともあると思いますので、主にトランザクションデータについて。

以前もこのネタに関しては色々書いてますね。

ダミーデータの作り方 まとめ

テストデータを作るのが大変・・・といっても色々あると思いますが、以下のような点ですかね。

問題点

  • 仕様的に整合性のある正しい(生きた)データを作るのがそもそも大変
  • 上記の条件を満たしており、テストを網羅できる大量のデータを作るのがそもそも大変

対策全般

共通で必要になる対策

仕様がわかる人材、お客さん、あるいは近いフェーズの人のアドバイスによるデータ作成

個別対策その1プログラムをそのまま使う

登録系の処理を利用して、登録部分のモジュールを走らせ、テストデータを大量に入れる手法です。(一番確実で綺麗なデータが作れます)

メリット

  • 仕様的にデータの整合が取れる
  • 乱数、日付の範囲選択などカスタマイズされたお手軽なデータも自在に作れる
  • 大量データも自在に作成可能

デメリット

  • この条件を揃えることが難しい
    (プログラムで回せるように登録処理が書かれていることが前提になる、そもそも登録処理自体が他のベンダー開発担当でさわれない・・・など制約がないか)
  • 仕様をある程度理解していないとNG

個別対策その2 シーディング(Seeding)

データ投入用のプログラムを用意しておき、そこから入れる方法です。

テスト Seederで検索するとほとんどLaravelがでてきますね・・・

個別対策その1と3の中間という感じでしょうか。

メリット

  • プログラムを簡単に書ける(繰り返しや条件分岐など)
  • プログラムを最大限、活用できる(継承や抽象化など)
  • DB制約に気づけ、テーブル間の整合性にある程度気付ける(外部キーで落ちるなど)
  • 仕様が完全にわかっていなくても使える
  • 大量のデータなども自由自在

デメリット

  • 名前空間が分かれている場合、本体側のプログラムを使うことに制限がでてくる
  • 仕様をそれほど理解していなくてできる反面、あり得ないデータができてしまう
  • Modelのディフォルト値や可変な値を自由に切り替えられる仕組み(Laravelでいうfactory()->create())がないと面倒

個別対策その3 Excel

一般的によく使われてる方法だと思いますが、Excelで機械的に作る方法です。

メリット

  • 単純な乱数やマスタ参照なども作成が用意
  • ExcelがあればOKなのでほぼ環境に依存しない
  • マクロ、標準対策の関数を組むことで、ちょっとしたカスタマイズが可能
  • 大量データを作るのがある程度可能(万をこえるものはやめた方がよいかも)
  • 簡単なGUIの画面などをつくることも不可能ではない

デメリット

  • 生きたデータを作るのが難しい
    (アドバイザーがいないと仕様的に正しくても実ケースに即したデータ作りにくい)
  • ものすごい大量のデータを作ろうとするとファイルが重くなる
    (1テーブル1万程度が目安)
  • 関連テーブルが多くなると整合を取るのが難しい
  • GUIなど凝ったものを作ることは難しい

個別対策その4 ノーコード &ローコードアプリ

やったことないんですけどモック &模擬テストデータとして、ノーコードやローコードなどで簡単な画面とデータの関連を作る方法です。(やや妄想です。)

ローコード自体はkintoneってアプリで過去やったことあるんですが、その時の記憶を頼りにメリデメを挙げております。

メリット

  • 低コスト(インフラ、プログラミング環境構築不要)で、画面+簡単なデータ環境を作ることが用意
  • 関連テーブル数が多くなっても仕様的に正しいデータを作ることができる
  • モックレベルのものが簡単にできる
  • 環境をweb上に公開するので共有が楽(お客さんに共有しやすい)
  • ちょっとしたプログラムを組めることもある(kintoneの場合はJavaScript)

デメリット

  • ある程度の学習コストが必要(学習コストはExcel以上、プログラミング言語での環境構築以下という感じ)
  • カスタマイズに限界がある(カスタマイズ性はExcel以上、プログラミング言語での環境構築以下という感じ)
  • 画面から入力することになるので、大量のデータを作ることがそんなに簡単ではない

現実のプロジェクトではその2をベースに部分的にその1、3を活用するのがいいのでは・・・・と思っております。モックまで作らせてくれるケースはあまりないですかね?

なお、以前あげたwebサービス(人名とか)活用とかは利用できる範囲が狭いのでちょっと難しいですね・・・

記事書いたらkintoneやりたくなってきました・・・(汗)

-ドキュメント作成, プログラミング全般
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

型の意識について(ValueObjectの活用など)

現在の現場でコードレビューをしてもらう機会が増え、自分が弱かった型の意識について。 現在ではPHPでも型を記述してコーディングすることが一般的なため、静的言語と同じように型を意識することが増えてきたか …

no image

浮動小数点に関して

金額計算なんかでfloatを使うと誤差が出るっていうのは基礎的な話ではありますが、背景知識を含めて理解しておこうと思ったのでメモります。 Contents1 float,doubleでの誤差2 金額の …

no image

Oauthについて

今更ながら認証システムの基本などを復習中です。 今回はOauth(オーオース)について。 一般的なWebサービスを使っていると Instagramでのアカウントがある場合、それのアカウントを利用して、 …

no image

Webの高速化に関して

Webの高速化に関してメモ。 高速化って言っても幅広いんですけどね。自分が行なっている対策に関して。 一応LAMP環境を前提にしてます。 Contents1 一番大事なのは測定2 DB対策3 フロント …

no image

例外・エラーに関する考察

えー今現在、設計の仕事をしていますが、今までいい加減だったエラーの処理を見直すいいきっかけになってます。 半年前にも同じような記事書いてますねー。苦手意識は変わらないようです・・(汗) 例外処理に関し …

アーカイブ