
テストとは何ですか? 簡単に言うと、これはプログラムがすべての要件を満たしていることを確認するプロセスです。 さらに簡素化-テストはエラーの検索です。 この場合、プログラムは通常「ブラックボックス」と見なされ、チェックは異なる初期データと異なる条件での複数の起動によって実行されます。
私たちは、企業内のソフトウェア製品(実際にはテスト部門)の本格的なテストを実行できるのは、別の下位部門だけであると確信しています。 テスターの機能を開発者、ビジネスアナリスト、またはマネージャーに移行することは、非効率的な方法です。 この記事では、テスト部門の構築方法を説明します。
用語集
テストケース-期待される結果を達成するための手順。
テスト計画-計画および割り当てられたテストケース。
実行-テスト計画の実行。
回帰テスト-プログラムの古い機能のテスト。新しい機能の導入後にパフォーマンスが低下する可能性があります。
人
最も重要なことは、適切な人を見つけることです。 最初に遭遇するのは、テスターに教えられていないことです。また、人を見つけるのはそれほど簡単ではありません。 2つの方法があります。従業員の1人を「テスターにする」か、仕事の経験がある人を雇うかです。
間違いなく、会社の人はあなたの製品の機能、顧客とチームの要件をすでに知っています(これも重要です)。 (すでに開発している場合)プログラマの一部はまだコードをテストしており、他のプログラマよりも優れた徹底的なテストを誰かが行っている可能性があります。
ただし、プログラマーからテスターへの移行は可能ですが、仕事を好む従業員がテストに専念することに同意するかどうかを確認する方法はありません。 私は彼らがそのような申し出にまったく喜んでいないことを提案します-これらはあまりにも異なる職業です。 したがって、外部からの雇用も考慮します。
優れたテスターは単なる「テストランナー」ではなく、毎日あなたの製品を使用し、最も熱心なユーザーになります。 そして、そのような人をチームに入れることは非常に価値があります。
時間計画
テストは時間がかかり、時間がかかるプロセスです。 回帰テストを1回実行するだけの価値があります! したがって、テストするときは、時間を計画することが非常に重要です。 たとえば、多くのプロジェクトがあり、テスト部門は1つだけです。 同時リリースには多くの問題があります。
ソリューションにGoogleカレンダーを使用すると非常に便利です(Googleサービスの使用については既に説明しました)。つまり、予定されたリリースを作成できるカレンダーを作成し、それをマネージャーやテスターと共有します。 Redmineなどのプロジェクト管理システムでリリース日を表示できますが、最も明確に計画するには単一のカレンダーを使用します。
テストは会計と管理です
非常に「怒っている」テストケースを持つよりも、定期的に「実行」して結果を記録することがはるかに重要です。 もちろん、すべてを念頭に置いたり、ノートブックにテストの結果を入力したりできますが、これは効果的ではありません。 TMS(テスト管理システム)を使用します。 それらはテストに体系的なアプローチを使用することを可能にします-私たちが最初に座ってテスト計画を説明するとき、それがこのようにならないようにします:私たちはそれをここでテストし、その結果、プロジェクト/製品の状態がわからない
TMSを使用する際の最も重要なことは、得られた結果の分析とプロジェクト開発のダイナミクスの識別です。 たとえば、リリースごとに次のことを確認し始めています。
- バグの数は増加しているため、問題を理解する必要があります。
- テスターの1人が、他のテスターよりも多くのバグを見つけました。 テスターのスキルを上げるには?
- プロジェクトの開発に伴い、回帰テストの実行時間は着実に増加していますが、これを明確に確認し、計画することができます。
- ... ...一般に、分析のための情報で十分です。
TMS Testlinkを使用します。 他のシステムを選択できます。 私の同僚の一人は、彼の経験とアドバイスを記事で説明しました 。 注意してください-それは難しい瞬間に役立ちます。 TMSでは、すべてのテストを送信し、レポートを確認します。
手動テスト
手動テストはすべての始まりです。 テストは、特別な自動化ツールを使用せずに手動で実行されます(TMSを除く)。 テスターは通常、事前に作成されたアクションプランに従い、結果を記録します-動作が予期されているかどうか(この場合、問題が記録されます)。
ほとんどの場合、手動テストは機能テストであり、ソフトウェアおよびハードウェアの互換性テストでもあります。 手動テストは、ユーザーインターフェイスのテストで最も一般的です-ここでは、自動化は経済的に非効率的であるか、まったく不可能な場合があります。
手動テストの従業員は、サイト、モバイルデバイス、SmartTVなどのテストオブジェクトを使用して、「あなた」の上にいる骨の折れる、好奇心and盛で忍耐強い人を探す必要があります。
自動テスト
自動テストの必要性は、プロジェクトが既に大規模であり、その積極的な開発が進行中であるときに発生します。 非常に頻繁に実行する必要があるテストを手動で実行する時間を無駄にしないために、自動テストを使用できます。
多くの場合、自動テストは単体テストを意味しますが、ほとんどすべてのタイプのテストを自動化できます。 「ホワイト」または「グレーボックス」の原則に従ったコードのテストは、テスターではなく開発者のタスクであると考えているため、ここでは単体テストの構成については考慮しません。
手動機能テストを自動化するためのツールは非常に幅広いです。 私たち自身はSeleniumを使用してWebをテストしています。
多くの場合、自動テストを維持するコストが手動テストのコストをはるかに超えることがあります。 したがって、人は狂信なしに行動しなければなりません。
従業員の要件は、管理者プログラマの要件とほぼ同じです。 なぜ管理者に? 自動テストはリリースエンジニアリングと密接に関連しているためです。
つまり、原則として、テスト用のパッケージを収集するか、リリースをテスト環境(ステージング環境または用語でいう「検疫」)に展開します。 ある時点で、リリース前のテスト時間を最小限に抑える必要があるという結論に達しました。
負荷試験
ユーザーの最初のピーク後の負荷テストについて説明します。 すべてがスローダウンして落ちた場合、火花が目から注がれ、プロジェクトを上げるのをやめるとすぐに、開発者自身がこのマントラを発音し始めます。プロジェクトのTORで、プロジェクト/製品が耐えなければならない負荷値を見つけたら幸運です。 奇妙なことに、顧客自身がユーザーに何を期待するかわからないことがよくあります。 通常、これらの数字は開発者によってマネージャーから、マネージャーは別世界のマネージャーによって、つまり顧客によってノックアウトされます。
テストするツールは何ですか? yandex-tankを使用します。
テストを実施する従業員の要件:
- プロジェクトの技術構造に関する知識、
- Linuxでの適切なレベルの管理(大規模なプロジェクトについて話している)、
- プログラミングスキル。
耐障害性テスト
フォールトトレラントシステムの構築を開始するとすぐに、このタイプのテストが必要になります(たとえば、冗長な要素を使用したり、適切に機能を低下させたりします)。 悲しい経験は、そのようなシステムの1つの要素に障害が発生した場合
耐障害性テストはどのように実施しますか? プロジェクトの技術構造を分析し、アクションを慎重に計画し、負荷が最小の時間帯にシステムの一部の要素を停止し、結果を調査し、改善と調整を行います。 それから繰り返します。
おわりに
要約すると、テスト部門を作成するために必要なこと:
- 会社または外部から適切な人を選択します。
- リリースをテストするための時間計画ツールを入手してください。
- TMSと連携してテストケースを作成し、テスト結果を記録します。
- 実際には、定期的にテストを実施し、結果を分析します。
- 手動テストから開始し、必要に応じて自動化を実装します。 プロジェクトが発展するにつれて、負荷テストとフォールトトレランステストを追加します。