質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

5回答

9709閲覧

複雑なselect文からテストデータを生成する方法

退会済みユーザー

退会済みユーザー

総合スコア0

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

1クリップ

投稿2017/07/07 12:36

SQLのselect文が副問い合わせやテーブル結合などの処理をしており、単体テストのテストデータを作ることに多くの時間を要します。
そのため、select文から自動でデータをテーブルに挿入してくれるよう自動化を行いたいのですが、可能でしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

SELECT文の側から入っているべきデータの中身を判断することは不可能です。

使えるものがあるとしたら、SQLではなくスキーマの情報を取り込んでデータを自動生成するようなツールではないでしょうか。情報スキーマを参照して自分でそのようなツールを作ることも可能です。

テストエース
EasyDataMaker
Open Source Test Data Generators

それでも、テストに必要なデータを作るには自身がテストケースを理解したうえで、データの生成条件等を指定する必要があるかと思います。

投稿2017/07/08 06:39

編集2017/07/08 06:56
SVC34

総合スコア1149

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

INSERT ... SELECT 文 を作れるなら可能ですが、まっとうなテストデータを作るのは相当な経験と技術を必要とします。
日本は伝統的にテストエンジニアの地位が低いですから、有能な人材をテスト工程に投入するユーザーは少ないです。

掲示板では個々の状況を提示された上で、more better な方法を探す方法を手助けしてもらうのがせいぜいかな?って思います。深く突っ込んだ内容が必要ならきちんとお金を払ってそれなりの人材を雇った方が時間も費用も節約できるでしょう。

投稿2017/07/07 13:21

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

select文から自動でデータをテーブルに挿入してくれるよう自動化

まったく意図がわかりません
select文は挿入するための構文ではないので難しいと思います
テストデータを簡単に作りたいというだけであれば
それぞれのSQLに用意されているプロシージャなどで対応すればよいのでは?

投稿2017/07/07 13:08

yambejp

総合スコア114572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

やりたいことは分かります。で、可能かどうかということですが汎用的な処理としては不可能です。
ただこの話を可能か不可能かという話でやっちゃうなら抽象的であまり生産的なアイデアって期待できないと思います。
そこで作業をもう一つ"落として"考えてみてはどうでしょうか?単純にデータを作るといってもいくつかのプロセスがあるはず。たとえばマスタの定義域から全パターンのデータをつくる、表示件数の境界値99件、100件、101件を作る等々。そのうち手間のかかるキモの部分が意外と自動化できる可能性があります。これでも十分作業は効率化するはず。完全自動化か完全手動でやるかの2択って意外と不毛な話になっちゃいます。
自分で考えるにしても、誰かに質問するにしても"手間のかかるキモの部分"に問題を落としてみると実用的で生産的なテクニックを引き出せるかもしれません。

投稿2017/07/10 12:23

kurokoba

総合スコア276

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/07/10 12:24

なるほどです!
guest

0

考え方だけ。

  • 質問内容の確認

質問の意図としては、
『複雑なSQL文の単体テストデータを作るのが面倒なので、
インプットを 製造済のSQL文のみ で、
アウトプットを、単体テストデータを作成(あわよくばテストも)するような
プログラムを作ること(自動化)は可能かどうか。』
ということですかね。

  • 回答

結論から言うと、可能でしょうね。

  • 回答の根拠

実際に製造済のSQL文のみ渡されて、テストデータを作成・テストしろ。という依頼があればできますし。
”依頼をこなす上で考慮する事項を全てプログラム化”できれば、テストの自動化も含めてできるでしょう。

  • 回答の注意事項・補足

ただ、インプットとなる情報が製造済のSQL文のみであることが大問題です。
バグっているSQL文をテストするためのテストデータ作成は、
バグっているSQL文が正しく動く(バグってないという判断をする)ためのデータしか作れないでしょうね。
であれば、インプットを設計書に・・・と思うかもしれませんが、
(設計書がバグっていれば)結局同じことです。

上記のような問題を解決するために、
インプットとなる情報(たとえば、正しいSQLや設計書やテーブル構成等)を増やせば、
解決できるかもしれません。

と、ちょっと考えただけでも
「考慮する事項を全てプログラム化」と言う部分には、
実際に単体テストデータを作る以上に労力がかかると思います。

あと、自動化のプログラム自体も品質を担保するために、
色々なテストしてやらねばならないので、
単体テストデータを作成するより、作業時間がかかるでしょうね。

なので、複雑なSQLがある現場ほど、
そのような自動化ツールは存在しない傾向があるような気がします。

  • おまけ

費用対効果が悪くても、自動化による単体テストにこだわるような現場でしたら、
作る価値はあるかもしれません・・・

その場合、まずは単体テストデータを作るためのインプット情報
(質問者さんの現場に特化したようなインタフェース)を決めて、
しばらくは、そのインプット情報は手動で作成し、
そのインプット情報を基に自動でテストデータ作成するようなプログラムを作り、
後々、テストを自動で行うようなプログラムを作る。
という流れが良いかもしれませんね。

投稿2017/07/09 15:36

編集2017/07/09 15:39
tomari_perform

総合スコア760

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問