3

私は現在、Pythonでライブラリとこのライブラリを使用する一連のプログラムを開発しています。単体テストでは、ライブラリから各モジュールをインポートし、その中のクラスとルーチンをテストする必要があります。それで問題ありません。すべてのテストを含み、開発中に実行するライブラリ モジュールをインポートする別のテスト ディレクトリがあります。

ただし、プログラムのテストに関しては、状況が変わります。テストするには、プログラム全体を実行する必要があります。プログラムは、ライブラリがインストールされていることを前提としています (以前のバージョンのライブラリを自分のマシンにインストールした場合、実際にはそうなる可能性がありますが、これはさらに問題を引き起こします)。現時点では、私のプログラムは、展開前に手動で実行する PYTHONPATH 定義を含むテストスイートによって実行されます (IOW、インストールは実行しません) が、正しく実行しているとは思いません。一般に、プログラムは完全に展開されたときに機能をテストする必要があると思いますが、これは、機能テストを実行するたびにプログラムをインストールする必要があることを意味します.

プログラム全体の機能テストに関するあなたの経験と提案は何ですか? 導入前または導入後にどのように行いますか?

ありがとう

意図的に python タグを含めていないことに注意してください。私の問題は python 固有のものであり、python 関連の回答を希望しますが、他の言語の専門家からも貢献できると思います。


編集:コメントで報告されているように、実際には、私のプログラムは、インストール時に、展開時にのみパスが見つかるモジュールをインポートする必要があります(依存関係をその場でダウンロードしてインストールしますが、マシンにはインストールされません)。テストから sys.path を操作することはできません。これは、プログラム (実行可能ファイル) の sys.path を別のプログラム (system() 呼び出しを実行して生成するテストスイート) から変更することを意味するためです。

言い換えれば、デプロイせずにプログラムをテストする唯一の方法は、PYTHONPATH を、make スクリプトによってインストールされた deps とプログラムが使用するライブラリを含むディレクトリに設定して実行することです (前述のように、ダウンロード、コンパイルします)。一時ディレクトリにすべてを「インストール」します)。

展開時に、dep と実行可能ファイルは、完全に実行可能で再配置可能な「OSX バンドル」のような構造にパッケージ化されます。

編集

もう少しフィードバックが得られるかどうかを確認するために、150 のバウンティを追加しました。

編集

私はすべての回答に感謝し、それらすべてに投票しました。この選択は私にとって難しい選択でしたが、LudoMC によって、私がずっと前に研究したテストへの V モデル アプローチが思い起こされました。非常に良い答えをありがとう。

4

6 に答える 6

4

合理的な範囲内で可能な限りテストします。何かをテストするのは素晴らしいことですが、それが大変な作業である場合は、テストしないでください...まだ。その場所で何度も問題に遭遇した場合にのみ、その努力を費やしてください。問題がどこにあるかを事前に想定しないでください(事前に知っている場合を除いて...しかし、知っていることは想定していません!)。

したがって、プログラムをインストールしても問題がほとんど発生しない場合は、テストしないでください。展開が脆弱な場合は、インストールを試みるのではなく、インストールアーカイブが完了していることを確認するテストを作成します。システムのインストーラーをテストしているのではなく、パッケージをテストしているのです。

于 2009-04-27T12:12:48.433 に答える
4

私たちの会社では、開発プロセスとして非常に一般的に使用されているV-Modelを使用しています。このプロセスでは、単体テストは実装フェーズ内で実行され、統合テストはアーキテクチャ/設計フェーズに対して実行され、システムテストは要件フェーズに対して実行されます。

したがって、あなたの場合、私が理解していることから、アプリケーション全体を機能レベルでテストする必要があります。したがって、要件に反して実行する必要があります。

したがって、フルテキストシナリオであろうと、(より良い)アプリケーションのユースケース(通常は達成される最初のフェーズの1つ)を(理想的には広範囲に)カバーするUMLユースケース図であろうと、要件ドキュメントが必要です。次に、すべてのユースケースをカバーするテストケースを作成し、これらのテストケースに合格する必要があります。これは、よく知られている(そしてかなり高価な)ツールを使用した手動または自動テストで実行できます。

場合によっては通常、展開後にこれらのシステムテストを実行します(テストチームは開発チームから提供されたインストーラーを使用します)。これは、インストーラー自体もテストするためです。統合テストは、場合によっては展開前または展開後に行われます。

あなたの場合、インストーラーにエラーがなく、PYTHONPATH変数を使用してデプロイ前にテストしてもバグが発生しないことが100%確実である場合は、デプロイ前にテストすることを選択できます。これは純粋なリスク管理であり、あなたの要求です。なぜなら、あなたはあなたのアプリケーションにとってこれの長所と短所を最もよく知っている人だからです。(個人的に、なぜバグがそこに存在できないのかわかりません、それらはどこにでもあります:-))

それがお役に立てば幸いです。私は話題から外れていません。

于 2009-05-02T16:02:40.023 に答える
4

まあ、(自動化された)テストは常にトレードオフであるため、それを行うための唯一の正しい方法はありません.

しかし、はい、理想的には、テストを実行する前に、プログラムの完全なインストール/展開を自動的に行う必要があります。そうすれば、インストーラーもテストできます。

おそらく、これを自動化するインストーラーラッパーを作成できます。手間がかかりすぎる場合は、手動で作成したデプロイメント内で機能テストを実行することもできます。

妥協案として、テスト実行の開始時にインストールを 1 回だけ実行してから、再インストールなしですべての機能テストを実行して、テストをより高速に実行することができます。

于 2009-04-27T11:10:40.487 に答える
3

デプロイメントについても同様の問題に直面しており、virtualenvを使用してデプロイメントをテストしています。特に--no-site-packagesオプションを使用すると、手付かずのインストールを行うようなものであり、十分にテストされたサードパーティのソリューションを超えてPYTHONPATHをいじくり回すことはありません。念のために言っておきますが、virtualenvとすべてを新しい仮想マシンで実行します。

ところで、virtualenvsで役立つトリックはです./setup.py develop

(ある旅人から別の旅人へ...)

于 2009-05-03T03:38:24.627 に答える
2

確かに、完全に正確な展開後のシナリオでプログラムをテストする必要があります。

セルフテスト機能を本番コードに直接統合し、オンデマンドで実行するメカニズムを提供することを検討してください。自分のシステム テスト中にのみセルフテストを実行することは理にかなっているかもしれませんが、インストーラーが最終ステップとして実行したり、ユーザーがメニュー項目から実行したり、「パワーオン セルフ テスト」を実行したりすることもできます。 "起動時に。

これを行うためのテクニックはたくさんあります。Web サービスをデプロイする場合、管理 URI を介してセルフテストを呼び出すことができます。管理 URI は、HTTP 要求を作成して、それらが機能することを確認します。おそらく必要なのは静的セルフテストだけですが、テストスクリプトを動的に読み込んで実行することもできます。後者の場合、言語のインタープリター機能を使用できます。ない場合は、インタープリターをソフトウェアに埋め込むか (C/C++ 用の TCL や Java 用の Rhino など)、独自のミニ インタープリターを作成できます。

于 2009-05-05T23:16:26.307 に答える