タグ付けされた質問 「testing」

そのシステムの予想される動作に対するソフトウェアシステムの動作の確認。

4
内部コンポーネントの単体テスト
クラス/モジュール/パッケージ/などの内部/プライベートコンポーネントをどの程度単体テストしますか?それらをすべてテストしますか、それとも外部とのインターフェースをテストするだけですか?これらの内部の例は、プライベートメソッドです。 例として、1つの中央プロシージャから呼び出されるいくつかの内部プロシージャ(関数/メソッド)を持つ再帰降下パーサーを想像してください。外の世界への唯一のインターフェイスは中央の手順であり、文字列を受け取り、解析された情報を返します。他のプロシージャは文字列のさまざまな部分を解析し、中央プロシージャまたは他のプロシージャから呼び出されます。 当然、外部文字列をサンプル文字列で呼び出し、手で解析した出力と比較して、外部インターフェイスをテストする必要があります。しかし、他の手順はどうですか?それらを個別にテストして、サブストリングが正しく解析されることを確認しますか? 私はいくつかの議論を考えることができます: 長所: より多くのテストが常に優れており、これはコードカバレッジの向上に役立ちます 一部の内部コンポーネントは、外部インターフェイスに入力を与えることにより、特定の入力(エッジケースなど)を与えるのが難しい場合があります。 より明確なテスト。内部コンポーネントに(修正された)バグがある場合、そのコンポーネントのテストケースは、バグがその特定のコンポーネントにあったことを明確にします 短所: リファクタリングは非常に苦痛で時間がかかります。何かを変更するには、外部インターフェースのユーザーが影響を受けていない場合でも、ユニットテストを書き直す必要があります 一部の言語およびテストフレームワークでは許可されていません あなたの意見は?

3
バッチ処理のTDD:実行方法
RoRなどの「赤/緑/リファクタリング」などは問題ありません。 私の仕事は、Pythonや他のカスタムツールでサードパーティからの非常に大きなファイルをバッチ処理することです。 これらのファイルの属性に対するチャーンは高いため、かなり頻繁に適用される多くの修正/拡張機能があります。 期待される結果を備えた既知のテストデータによる回帰テストは存在しません。最新のテストケースが手作業でコーディングされた最後のバッチに対して最も近いものが実行され、爆発しないことを確認してから、スポットチェックと統計テストを適用して、データがまだ正常に見えるかどうかを確認します。 Q >> TDDの原則をこのような環境に取り入れるにはどうすればよいですか?
14 testing  tdd 

3
try / catchブロックをテストする例外を引き起こすイベントをシミュレートする方法は?
例外がどのように動作し、C#で例外をキャッチして処理する方法を理解していますが、例外が正しくキャッチされることを保証するために例外を引き起こす可能性のあるイベントをシミュレートするにはどうすればよいですか?たとえば、ネットワークの問題、データベースの問題などをシミュレートできるようなテストベッドのようなアプリケーションを実行できますか?例外はその性質上、再現するのが難しいように思われるため、コードで確実に対処できるようにすることは困難です。 私は主にC#/。NET / Visual Studioを使用して開発していますが、他の言語に関連する回答やリソースが役立つ場合があります。
14 c#  testing  exceptions 

1
画像処理コードを単体テストする方法は?
私は画像処理(主にOCR)に取り組んでおり、開発に単体テストをどのように統合すべきか疑問に思っています。 私はすでに、より一般的なタイプのコードに対して単体テストを使用していますが、画像処理コードを処理するとき、その処理方法がわかりません。この種のコードには常に画像データの入出力が必要であり、これを模倣することは明らかではありません。今のところ、主に統合テストを行っていますが、実行には時間がかかります。この種のコードをユニットテストに分割して、より迅速に実行できるようにするためのアイデアが欲しいです。 編集:キャラクターの分析は、複数の回転、スケーリング、および形態学的操作を含む多くのステップを経ることができます。これらの手順は、アルゴリズムの開発中に頻繁に変更されます。したがって、テスト中に入力と期待される出力は大きく変化する可能性があります。各文字は100x100ピクセルにすることができるため、コード内でハードコーディングしたり、生成されたデータを操作したりするのは問題ありません。

5
voidメソッドの単体テスト
アプリケーションのバグを修正するために、postLoginという名前の既存のメソッドに呼び出しを追加することにより、という名前のメソッドを変更しましたgetShoppingCart。 コード protected void postLogin() { getShoppingCart(); } ただし、単体テストを作成する最適な方法が何であるかはわかりませんpostLogin。 アプローチ1 Mockitoのverifyを使用して、メソッドが呼び出されたことを確認します。 verify(mock).getShoppingCart(); アプローチ2 ユーザーのショッピングカートの値を取得して、メソッド呼び出しの副作用をテストします。 AssertNotNull(user.getShoppingCart()); 1つのアプローチは他のアプローチよりも優れていますか?

3
自動化されたテストを人気にする方法は?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 2年前に閉店。 私たちのコードベースは現在20年間成長しています。私たちは500klocで作業する約10人の開発者+ sqaです。少し前に、私たちの小さなチーム(2人の開発者、1人はsqaから)が自動化されたテストプログラムに取り組み始めました。現在、1回の実行には11時間かかり、どういうわけか統合テストです。この問題を解決し、誤検知を減らすために取り組んでおり、その点で大きな進歩を遂げています。しかし、詳細は重要ではありません。 問題なく機能しており、改善を続けています。私たち(小さなチーム)はとても気に入っています。何かを壊すと、2か月後ではなく1日後にsqaが表示されます。また、私たちのマネージャー(dev + sqa)はこのアイデアを気に入っています。しかし、チームの他の人々はテスト結果を無視します。彼らの心では、チェックイン後にテストが失敗する場合、それはテストの問題であり、コードの変更の問題ではなく、単なるおもちゃのプロジェクトです。テストの失敗が本当のエラーである場合、私たちは何度か議論しました。ほとんどの場合です。 私たちは何かを強制することはできませんし、したくありません。自動テストが重要であることをどのように示すことができますか?

2
注入できないコードをテストする方法は?
そのため、システム全体で次のコードを使用しています。現在、ユニットテストを過去にさかのぼって記述しています(私の議論ではなかったよりも遅くなっています)が、これがどのようにテスト可能かはわかりませんか? public function validate($value, Constraint $constraint) { $searchEntity = EmailAlertToSearchAdapter::adapt($value); $queryBuilder = SearcherFactory::getSearchDirector($searchEntity->getKeywords()); $adapter = new SearchEntityToQueryAdapter($queryBuilder, $searchEntity); $query = $adapter->setupBuilder()->build(); $totalCount = $this->advertType->count($query); if ($totalCount >= self::MAXIMUM_MATCHING_ADS) { $this->context->addViolation( $constraint->message ); } } 概念的には、これはどの言語にも適用できるはずですが、私はPHPを使用しています。このコードは、オブジェクトに基づいてElasticSearchクエリオブジェクトを構築するだけで、Searchオブジェクトはオブジェクトから構築されEmailAlertます。これらSearchとEmailAlert'sは単なるPOPOです。 私の問題は、SearcherFactory(静的メソッドを使用する)をモックアウトする方法や、インスタンスSearchEntityToQueryAdapterからの結果を必要とするをモックアウトできないことです。メソッド内の結果から構築されたものを注入するにはどうすればよいですか?たぶん私が知らないいくつかのデザインパターンがありますか?SearcherFactory::getSearchDirector Search 助けてくれてありがとう!

4
複雑なAPI(たとえばAmazon S3)に依存するコードをテストする方法は?
Amazon S3にドキュメントをアップロードするメソッドのテストに苦労していますが、この質問は重要なAPI /外部の依存関係に当てはまると思います。考えられる解決策は3つしかありませんが、満足できるものはありません。 コードを実行し、実際にドキュメントをアップロードし、AWSのAPIでアップロードされたことを確認し、テストの終了時に削除します。これにより、テストが非常に遅くなり、テストを実行するたびに費用がかかり、常に同じ結果が返されません。 モックS3。私はそのオブジェクトの内部についてはまったくわからないので、これは非常に毛深いです。 MyObject.upload()が正しい引数で呼び出されることを確認し、S3オブジェクトを正しく使用していることを信頼してください。テストだけではS3 APIを正しく使用したかどうかを確実に知る方法がないため、これは気になります。 Amazonが独自のSDKをテストし、彼らがすべてを模擬する方法を確認しました。彼らは、モックを行う200行のヘルパーを持っています。私が同じことをするのが実際的だとは思わない。 これをどうやって解決しますか?
13 testing  mocking 

1
ゲームのテスト戦略
Webベースの教育用ゲームを継承しました。過去1年間、コードの安定化と新しい機能の追加に取り組んできました。ほとんどのロジックはフロントエンドにあるため、バックエンドの単体テストは有用ですが、コードのごく一部をカバーします。 ゲームは複雑になり始めています。各ゲームには2つの異なるモードがあり、モードによってゲームの動作は異なります。ゲームのプレイに影響するさまざまなフラグもあります。 私はもう10年以上アプリケーション開発者であり、これは私を困惑させます。企業の世界では、アルゴリズムは常に同じように機能します。アルゴリズムの単体テストを作成します。値42を期待し、その値を取得しないとエラーになります。 ゲームに関しては、私は迷っています。それらをテストするにはどうすればよいですか?テスターを利用できます。単体テストの作成に時間を費やすことができます。 テスターは...信頼できません。それらは問題を根絶するのに最適ではなく、私はそれらに最善の方向性を与えていません。リリースサイクルごとに膨大な時間を費やしてゲームのあらゆる組み合わせや組み合わせをテストするのではなく、それらをリソースとしてどのように使用すればよいですか? 単体テストは制限されているようです。ほとんどのロジックはjavascript(およびスパゲッティコードを継承)であるため、CucumberやSeleniumなどのフロントエンドスイートを使用して、特定の機能が動作することを確認できます。 それが最善の戦略ですか?ゲーム会社はどのようにゲームをテストしますか? 「複雑なゲームのテスト駆動開発」という質問(サイト上の他の記事も参照)を読みましたが、探しているものには対応していません。テスト方法の具体的な例ではなく、戦略を求めています。

6
契約ベースのプログラミングと単体テスト
私はやや防御的なプログラマーであり、Microsoft Code Contractsの大ファンです。 現在、私は常にC#を使用できるわけではなく、ほとんどの言語で私が持っている唯一のツールはアサーションです。だから私は通常、このようなコードになります: class { function() { checkInvariants(); assert(/* requirement */); try { /* implementation */ } catch(...) { assert(/* exceptional ensures */); } finally { assert(/* ensures */); checkInvariants(); } } void checkInvariants() { assert(/* invariant */); } } ただし、このパラダイム(または、あなたがそれを呼ぶものは何でも)は、多くのコードを乱雑にします。 私はそれが本当に努力の価値があるかどうか、そして適切な単体テストがすでにこれをカバーするかどうか疑問に思い始めました?

3
ユニットテストを使用してストーリーを伝えるのは良い考えですか?
だから、私は少し前に書いた認証モジュールを持っています。今、私は自分のやり方のエラーを見、それのための単体テストを書いています。単体テストを書いている間、私は良い名前とテストする良い領域を思いつくのに苦労しています。例えば、私は次のようなものを持っています RequiresLogin_should_redirect_when_not_logged_in RequiresLogin_should_pass_through_when_logged_in Login_should_work_when_given_proper_credentials 個人的には、「適切」に見えても、少しthoughいと思います。また、テストをスキャンするだけでテストを区別するのに苦労しています(失敗したものを知るには、メソッド名を少なくとも2回読む必要があります) だから、機能を純粋にテストするテストを書く代わりに、シナリオをカバーするテストのセットを書くかもしれないと思った。 たとえば、これは私が思いついたテストスタブです: public class Authentication_Bill { public void Bill_has_no_account() { //assert username "bill" not in UserStore } public void Bill_attempts_to_post_comment_but_is_redirected_to_login() { //Calls RequiredLogin and should redirect to login page } public void Bill_creates_account() { //pretend the login page doubled as registration and he made an …

4
修正したと思うバグを処理する方法
いくつかの種類のバグがあり、それらは再現するのが非常に難しく、ごくまれに、ランダムに発生します。考えられる原因を見つけて修正し、プログラムをテストしても、バグを再現できないことがあります。ただし、バグを確実に再現することは不可能であり、まれにしか発生しなかったため、バグトラッカーでこれをどのように示すことができますか?それを行う一般的な方法は何ですか? statusを固定に設定すると、solution完全に固定されたものになりますか? 「固定」と「開く」を設定しstatusてsolution、テスターに​​「おそらく修正されているが、確認するにはもっと注意が必要」であることを示すのは一般的な習慣ですか? 編集:ほとんどの(すべてではないにしても)バグトラッカーには、バグのステータスに関する2つのプロパティがあります。名前は同じではない可能性があります。ことでstatus私が意味する、固定、割り当てられ、新しいなど、閉じられ、そしてによってsolution私が意味する、(新)オープン固定、バグ、複製、再現性のない、解けないなど、

5
エラーのチェックと処理を改善するにはどうすればよいですか?
最近、私は適切なチェック量と適切な方法とは何かを理解するのに苦労しています。 これに関していくつか質問があります。 エラー(不正な入力、不正な状態など)をチェックする適切な方法は何ですか?エラーを明示的にチェックするか、最終コードから最適化できるアサートなどの関数を使用する方が良いでしょうか?とにかくほとんどの状況で実行されるべきではない多くの余分なコードでプログラムを乱雑に明示的にチェックしたい気がします-そして、ほとんどのエラーは言うまでもなく打ち切り/終了の失敗に終わります。中止するために、明示的なチェックで関数を混乱させるのはなぜですか?私はアサートとエラーの明示的なチェックを探しましたが、どちらを行うべきかを本当に説明するものはほとんど見つかりませんでした。 ほとんどの人は、「アサートを使用して論理エラーをチェックし、明示的なチェックを使用して他の障害をチェックします」と言います。しかし、これは私たちをそれほど遠くに連れて行っていないようです。これが実現可能であると言えますか: Malloc returning null, check explictly API user inserting odd input for functions, use asserts これにより、エラーチェックが改善されますか?他に何ができますか?私は本当に、より良い「プロフェッショナルな」コードを改善し、書きたいと思っています。
13 c  testing  assertions 

6
BDDプロジェクトでのQAの役割は何ですか?
自動受け入れテストでユーザーストーリーを100%網羅したBDDを使用してプロジェクトを実行する場合、テスター/品質保証担当者の役割は何ですか? 開発者が受け入れテストを製品所有者と一緒に書くことを想像していると思いますが、それが馬鹿げた仮定のように思えたら教えてください。

4
「通知センター」パターンは、プログラム設計の良し悪しを促進しますか?
Cocoa NSNotificationCenterなど、これらのメッセージハブスタイルのAPIに出くわすことがあります。http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/Reference/Reference.html 通常、これらのAPIは、メッセージ/イベントをサブスクライブまたはブロードキャストするグローバルアクセスポイントを提供します。これは、依存関係がAPIで明示されていないがソースコードに隠されているフラットで非構造化のプログラムアーキテクチャを促進するため、これが問題だと考えています。オブジェクトの所有権と階層について考える必要はありませんが、プログラム内の任意のオブジェクトを呼び出すことで、任意のコードを呼び出すことができます。しかし、これは良いことでしょうか? このパターンは一般に、プログラム設計の良し悪しを助長しますか?コードをテストするのが難しくなりますか、それとも簡単になりますか? この質問が曖昧すぎるか広すぎる場合はご容赦ください。私は、このようなAPIの広範な使用の潜在的な結果と、それを使用できるさまざまな方法について頭をかき回しています。 編集:このパターンの最大の問題は、APIが依存関係とオブジェクトカップリングについて「嘘をつく」ことであり、この例で説明できることです。 myObj = new Foo(); myOtherObj = new Bar(); print myOtherObj.someValue; // prints 0 myObj.doSomething(); print myOtherObj.someValue; // prints 1, unexpectedly, because I never indicated that these objects had anything to do with each other

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.