タグ付けされた質問 「test-automation」

16
会社で自動テストが失敗し続けるのはなぜですか?
私たちは、私の会社で開発者自動化テストを何度か紹介しようとしました。QAチームはSeleniumを使用してUIテストを自動化しましたが、私は常に単体テストと統合テストを導入したいと考えていました。過去に、私たちがそれを試みるたびに、皆は最初の1、2ヶ月の間興奮しました。その後、数ヶ月で、人々はそれをやめます。 いくつかの観察と質問: 自動テストは実際に機能しますか?他社で働いていた同僚のほとんどは、自動化されたテスト戦略を実装しようとして失敗しました。私はまだ実際にそれを使用し、それについて話すだけではない現実のソフトウェア会社を見ていません。多くの開発者は、自動化されたテストを理論的には素晴らしいが実際には機能しないものと見なしています。私たちのビジネスチームは、開発者が30%の余分な時間をかけてでもそれを行うことを望んでいます(少なくとも彼らはそう言っています)。しかし、開発者は懐疑的です。 自動化されたテストを適切に行う方法を実際に知っている人はいません。はい、インターネットで単体テストの例をすべて読みましたが、大きなプロジェクトにそれらを使用することはまったく別のことです。主な原因は、データベースまたはその他の重要なものをモック/スタブすることです。実際には、実際のテストを書くよりもモックに多くの時間を費やすことになります。それから、コードを書くよりもテストを書くのに時間がかかり始めたら、それはあきらめます。 複雑なデータ中心のWebアプリケーションで使用される単体テスト/システム統合テストの良い例はありますか?オープンソースプロジェクトはありますか?このアプリケーションはデータ中心ですが、ドメインロジックもたくさんあります。ある時点でリポジトリのアプローチを試してみましたが、ユニットテストにはかなり適していることがわかりましたが、データアクセスを簡単に最適化できるという代償を払って、さらに複雑な層が追加されました。 20人の経験豊富な開発者が行う大きなプロジェクトがあります。これは、単体テスト/統合テストを導入するための理想的な環境のようです。 なぜ機能しないのですか?会社でどのように機能させましたか?

11
自動テストの欠点は何ですか?
このサイトには、自動テストから得られる利点に関する多くの情報を提供する多くの質問があります。しかし、私はコインの反対側を表すものを見ませんでした:欠点は何ですか?人生のすべてはトレードオフであり、特効薬はありませんので、自動テストを行わない正当な理由が必ずあるはずです。彼らは何ですか? ここに私が思いついたいくつかがあります: 特定の機能に対して初期開発者の時間がさらに必要です チームメンバーの高いスキルレベルが必要 ツールのニーズを増やす(テストランナー、フレームワークなど) 失敗したテストが発生した場合に必要な複雑な分析-このテストは私の変更により廃止されたのですか、それとも間違いを犯したと言っているのですか? 編集 私は自動化されたテストの巨大な支持者であると言っておくべきであり、私はそれをすることを納得させるつもりはありません。欠点が何なのかを理解したいと思っているので、会社に行って主張するとき、次の想像上の銀の弾丸を投げているようには見えません。 また、上記の私の例に異議を唱える人を探していないことを明確にしています。私は、いくつかの不利な点(すべてにトレードオフがある)がなければならないことを真実と考えており、それらが何であるかを理解したいと思います。

2
グアバ単体テストはどのように自動的に生成されましたか?
グアバには、自動生成されるユニットテストケースがあります。 グアバには膨大な数の単体テストがあります。2012年7月現在、guava-testsパッケージには286,000を超える個別のテストケースが含まれています。これらのほとんどは、手書きではなく自動的に生成されますが、特にcom.google.common.collectの場合、グアバのテスト範囲は非常に徹底しています。 それらはどのように生成されましたか?それらを設計および生成するためにどのような技術と技術が使用されましたか?

4
バグを再現するためのハードウェアのセットアップが入手困難または不可能な場合に、新しいコードを効率的にトラブルシューティングまたはテストする方法は?
私は中規模の会社(従業員150人、エンジニアリングチーム10人まで)で働いており、私のプロジェクトのほとんどは、半自動化されたテストアプリケーションを目的として、実験装置(オシロスコープ、光スペクトラムアナライザーなど)とのインターフェイスを含んでいます。ハードウェアのセットアップが利用できなくなった、または利用できなかったために、新しいコードを効率的にトラブルシューティングまたはテストできないいくつかの異なるシナリオに遭遇しました。 例1:ベンチトップタイプのセンサーを使用して10〜20の「バーンイン」プロセスを個別に実行するセットアップ-テスト用にこのようなセンサーを1つ取得でき、ときどきインターフェイスのすべての面をシミュレートするために1つを盗むことができました複数のデバイス(検索、接続、ストリーミングなど)。 最終的にはバグが発生し(最終的にはデバイスファームウェアとドライバーに存在する)、1つのユニットだけで正確に再現するのは非常に困難でしたが、これらのデバイスを10〜20個同時に使用すると「ショーストッパー」レベルに近づきました。これはまだ解決されておらず、継続中です。 例2:コアコンポーネントとして高価な光スペクトルアナライザーを必要とするテスト。このデバイスはかなり古いものであり、大企業に買収されて基本的に解体されたメーカーによると、その唯一のドキュメントは翻訳が不十分であると思われる長巻の(そして情報価値のない)ドキュメントでした。最初の開発中、私はデバイスを自分の机に置いておくことができましたが、物理的にもスケジュールどおりにも、24時間年中無休の複数週間のテスト中に縛られました。 デバイスに関連する、または関連しないバグが表示される場合、アプリケーションの外部でコードをテストして適合させるか、コードを盲目的に書いて実行と実行の間にあるテスト時間で絞り込もうとする問題をしばしば経験する必要があります。プログラムロジックでは、OSAと残りのテストハードウェアが適切に配置されている必要があります。 私の質問は、これにどのようにアプローチする必要があるのでしょうか?デバイスシミュレーターの開発に時間を費やす可能性がありますが、それを開発の見積もりに組み込むと、ほとんどの人が期待する以上に膨れ上がります。すべての問題を正確に再現できるとは限りません。また、ここで同じ機器を2回使用することはほとんどありません。ユニットテストなどで上達することができます...私はまた、問題について大声で話し、一時的な遅延が必要であることを他の人に理解させることができます。これは、研究開発の頭痛だけでなく、通常は冗談として認識されます製造業に売り込まれたとき。

14
自動化されたユーザーインターフェイステストはどのような問題を解決しますか?
現在、自動化されたユーザーインターフェイステストを調査中です(現在、自動化された単体テストと統合テストを行っています)。 SeleniumとTelerikを見てきましたが、後者の方がはるかに柔軟なレコーダであるため、後者を選択のツールとして採用しました。テスターがあまり多くのコードを書くことは望ましくありません。 ただし、全体的なメリットを理解しようとしています。人々の意見はどのようなもので、どのようなものがうまく機能し、何がうまくいかないのでしょうか? 私たちのシステムは絶えず開発されており、(ウェブベースの)プラットフォームの新しいバージョンを定期的にリリースしています。 これまでのところ、主な利点は、特にプラットフォームの複数のクライアント展開での回帰テストにあります。 他の人の意見を本当に探しています。私たちはそれが正しいことだと「考える」が、すでに忙しいスケジュールの中で、さらなる洞察を探している。

3
Dockerイメージにテストを含める必要がありますか?
テストに関しては、2つのオプションが考えられます。 テストとアプリケーションの両方を1つのイメージに入れます。 イメージにはアプリケーションコードのみを含めます。メインイメージの後にビルドし、いくつかのレイヤーを追加するテスト固有のコンテナーを作成します(テストコード、依存関係など)。 最初のオプションでは、コンテナをテストし、テストしたとおりに出荷できます。明らかな欠点は、不要なコード(および潜在的にテストデータ)がイメージに含まれることです。 2番目のオプションでは、出荷されるイメージはテストされるイメージとまったく同じではありません。 どちらも悪い戦略のように見えます。3番目のより良い戦略はありますか?

3
OpenGLのグラフィックコードで最も効果的な自動テストをどのように単体テストまたは実行しますか?
C ++でOpenGLの上にゲームとそれに付随するグラフィックエンジンを書いています。また、優れたコーディングプロセスと自動テストのファンでもあります。出力は多くの場合視覚のみであるか、非常に視覚指向であるため、グラフィックスコード+テストは非常に混同しにくいようです。 たとえば、画面にバイト単位でレンダリングされる生の画像ストリームを分析することを想像してください-比較するテストデータが必要で、作成/取得が難しく、レンダリングされた画像はしばしば同じではありません異なる時間に実行する場合のバイトレベル-アルゴリズムの小さな変更は、このアプローチを完全に破壊します。 視覚的な単体テストスイートを作成することを考えています。基本的に、さまざまなテストシーンをレンダリングし、シャドウマッピング、アニメーションなどのようなものを表示できます。CIの一部として、これらのシーンはビデオにレンダリングされます異なるメトリックのファイル(または実行可能ファイルとして残すこともできます)。ビデオファイルの手動検査が必要になりますが、少なくともある程度自動化および標準化されます。 どう思いますか?もっと良い方法がありますか?

4
SQLおよびデータ操作機能を備えたTDD
私はプロのプログラマーですが、ソフトウェアエンジニアリングの正式なトレーニングを受けたことはありません。私は頻繁にここを訪れているので、可能な限りユニットテストを書く傾向に気づきました。私のソフトウェアがより複雑で洗練されているので、デバッグを支援するための自動化されたテストをお勧めします。 ただし、私の仕事のほとんどは、複雑なSQLを作成してから、何らかの方法で出力を処理することです。たとえば、SQLが正しいデータを返していることを確認するテストをどのように作成しますか?次に、データが制御されていなかった場合(たとえば、サードパーティシステムのデータ)、ダミーデータの連を手書きせずに処理ルーチンを効率的にテストするにはどうすればよいでしょうか。 私が考えることができる最良の解決策は、一緒にほとんどの場合をカバーするデータのビューを作成することです。次に、これらのビューをSQLに結合して、正しいレコードを返しているかどうかを確認し、ビューを手動で処理して、関数などが意図したとおりに動作しているかどうかを確認します。それでも、それは過度で薄汚いようです。特にテストするデータを見つける...

3
自動UIテストを介してどの機能をテストする必要がありますか?
最近、コンサルタントに、機能が自動化されたUIテスト(Selenium、コード化されたUIなど)でしかテストできない場合、根本的なアーキテクチャの問題があると言われました。このステートメントは少し極端かもしれませんが、UIテストが自動化されたテストスイート全体のごく一部を構成するという点で、テストピラミッドと同じラインに沿っています。 それでは、どのような機能に自動UIテストが必要ですか?優れたアーキテクチャを備えたシステムには、UIテストでしか検証できない機能が残っていますか、それともこれらのテストは単体テストとサービステストの「バックアップ」としてのみ機能しますか?

9
コピーアンドペーストされたテストコード:これはどれほど悪いですか?
私の現在の仕事は、主に私たちが取り組んでいるさまざまなアプリケーションのGUIテストコードを書くことです。ただし、テスト内で多くのコードをコピーして貼り付ける傾向があることがわかりました。この理由は、テストしている領域は、繰り返しが必要なほど似ている傾向があるが、コードをメソッドまたはオブジェクトにカプセル化するほど似ていない傾向があるためです。クラスやメソッドをより広範囲に使用しようとすると、テストの保守が面倒になり、最初から書くのが完全に難しくなることがあります。 代わりに、通常、あるセクションからテストコードの大きな部分をコピーして別のセクションに貼り付け、必要な小さな変更を加えます。オブジェクト指向の原則や関数を使用するなど、構造化されたコーディング方法は使用しません。 テストコードを書くとき、他のコーダーはこのように感じますか?DRYとYAGNIの原則に従うことは明らかですが、テストコード(とにかくGUIテスト用の自動化されたテストコード)を使用すると、これらの原則に従うことが難しくなることがわかります。または、より多くのコーディングの練習とより良い全体的なシステムが必要ですか? 編集:私が使用しているツールはSilkTestで、4Testと呼ばれる独自の言語です。同様に、これらのテストは主にWindowsデスクトップアプリケーション用ですが、このセットアップを使用してWebアプリもテストしました。

3
Rubyを使用してすべてを自動化できますか?
私は、さまざまなプラットフォーム(Windows、Linuxなど)で毎日動作するさまざまな種類のアプリケーション(Webベース、GUIベース、コマンドラインなど)に直面しています。スクリプトを使用してタスクを自動化する素晴らしい機会があります。しかし、ほとんどすべてのタイプのアプリケーションとプラットフォームには、ネイティブのスクリプト言語またはツール(Windows用のVBScriptとPowerShell、Linux用のBashスクリプト、Webアプリケーション用のSelenium、GUIアプリケーション用のAutoItなど)があります。非常に多くのスクリプト言語を学び、維持することは私を殺します。 Rubyはさまざまなプラットフォームと簡単に相互運用できると感じており、非常に表現力があります。だから私の質問は: Rubyを使用してすべてをスクリプト化することは可能ですか? その場合、各プラットフォームのネイティブスクリプト言語と比較して、主な欠点は何ですか?

6
自動テストの作成を開始する必要があるのは、アジャイルのどの段階(SCRUM)ですか?
私のちょっとした背景-私はSCRUM(1〜2週間のスプリント)を使用したアジャイル環境内で約2年間、手動テスターです。そこで、Selenium WebDriver(Javaを使用)を使用した作業に自動化テストを導入したいと思います。 私の質問は、いつ機能を手動でテストする必要があるか、いつ自動化テスト用に変換する必要があるかです。 私は次のようなさまざまなアプローチを読んでいます。 新しいスプリントの開始時に、ユーザーストーリーを以前のスプリントの自動スクリプトに変換するか、または 同じスプリント内でユーザーストーリーを変換します。 アドバイスは非常にいただければ幸いです。前もって感謝します。

2
統合テストですが、どれくらいですか?
私のチーム内での最近の議論は私を不思議に思いました。基本的なトピックは、機能/統合テストでいくら、何をカバーするかということです(確かに、それらは同じではありませんが、例は重要ではないのでダミーです)。 次のような「コントローラ」クラスがあるとします。 public class SomeController { @Autowired Validator val; @Autowired DataAccess da; @Autowired SomeTransformer tr; @Autowired Calculator calc; public boolean doCheck(Input input) { if (val.validate(input)) { return false; } List<Stuff> stuffs = da.loadStuffs(input); if (stuffs.isEmpty()) { return false; } BusinessStuff businessStuff = tr.transform(stuffs); if (null == businessStuff) { return false; …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.