「フルスタックパフォーマンステスト練習帳JMeter実際の戦闘」第1章研究ノート-パフォーマンスの方向での専門能力開発
現在、市場にはさまざまなITトレーニングがありますが、しきい値が低く使いやすいのはソフトウェアテストです。学生は通常、機能的な手動テストを開始点として取り、いくつかの基本的なテスト理論を習得し、テストケースの設計を学び、欠陥管理ツールを操作できるようにし、テストを開始する前にいくつかのビジネスに精通します。ここで止まるだけで、技術内容が非常に少なく、技術内容が少ないので、交換や削除が簡単です。最初に、私がこの業界をテストすることを選んだ理由についてお話ししましょう。
1.1ソフトウェアテストを選択する理由
- まず第一に、給料は良いです
- テストは開発よりも簡単です
- テストする部分的な開発
- 仕事のニーズ
1.2ソフトウェアテストの問題点
- 開発に比べて給与水準が低い
- テストは開発後の追加作業であり、目に見える出力を定量化することは便利ではありません。マイルストーンの貢献がなければ、目立つことは困難です。
- 仕事からのストレス
- 需要を管理するのは難しい(需要は頻繁に変わる可能性がある)
- ポジションはワークフローの最後にあります(ソフトウェアプロジェクト開発プロセス:需要調査と分析-概要設計-詳細設計-コーディング-テスト-ソフトウェア配信準備-受け入れ)
1.3ソフトウェアテストの開発ルート
テストの難しさのいくつかは上で述べましたが、テストの可塑性が非常に高く、開発の方向性が他にもたくさんあるので、悲観的である必要はありません。ソフトウェアテストの開発ルートについて話しましょう。職業。当面、ソフトウェアテストのキャリアパスは次のように分けられます
。3つの方向:
- ビジネスルート
QAマネージャー、ビジネスエキスパート、製品マネージャー、製品ディレクター、業界情報コンサルタントなど。 - テクニカルルート
マスタープログラミングテクノロジー、ビジネス経験、自動化テストエンジニア、パフォーマンステストエンジニア、ソフトウェア開発エンジニア、セキュリティテストエンジニア、システムアナリスト、テストディレクター、R&Dディレクターなど。 - 管理ルート
ビジネス知識を蓄積するか、技術的準備を改善し、仕事をうまく完了し、チームを率いる責任があります。役職には通常、テストリーダー、テストスーパーバイザー、テストマネージャー、テストディレクターが含まれます。
4象限:
- エグゼクティブレベル:
- ソフトウェアテスト機能(プライマリ-フルタイム移行段階)
- ソフトウェアテスト-パフォーマンス(フルタイム)
- ソフトウェアテスト-自動化(フルタイム)
- ソフトウェアテスト-セキュリティ(フルタイム)
- ソフトウェアテスト-ホワイトボックス(フルタイム)
- ソフトウェアテスト-ビジネス(フルタイム)
- ソフトウェアテスト-チームリーダー、スーパーバイザー(管理ルート)
- ソフトウェア開発(フルタイム)
- 品質保証エンジニアSQA(フルタイムビジネスライン)
- ミドルレベル、ミドルレベルの経営幹部リーダー:
- テストアナリスト(フルタイム-移行フェーズをリード)
- ジュニアテストアーキテクト(フルタイム-移行フェーズをリード)
- テストマネージャー(エグゼクティブリーダーシップ-管理ルート)
- QAマネージャー(エグゼクティブリーダーシップ-ビジネスルート)
- プロダクトマネージャー(エグゼクティブリーダーシップ-ビジネスルート)
- プロジェクトマネージャー(エグゼクティブリーダーシップ-テクニカルルート)
- システムアナリスト
- テストトレーナー
- 中レベルから高レベルへの移行
- テストディレクター(エグゼクティブリーダー-シニアリーダー)
- プロダクトディレクター(ビジネスルート)
- 業界コンサルタント(事業ルート)
- R&Dディレクター(テクニカルルート)
- プロジェクトディレクター(テクニカルルート)
- 高いレベル
- CQO-チーフクオリティオフィサー
- CTO-最高技術責任者
- CIO-最高情報責任者
- CEO——CEO
1.4単なるパフォーマンステスト以上のもの
企業は現在、ソフトウェアテストの品質が機能プロセスのスムーズさを満たすだけでなく、テスト効率の向上、人件費の削減、ソフトウェアの安定性と使いやすさのための製品の粘着性の向上であることを徐々に認識しています。成熟した大規模製品は、パフォーマンステストチェックに合格する必要があると言えます。これは簡単なことではなく、要件、アーキテクチャ、ハードウェア、データベース、およびコードの観点から慎重に設計およびテストする必要があります。
フルスタックは、強力な学習能力、強力な要約能力、継続的な要約、実際の戦闘能力を向上させるための統合、および原因と結果の分析、原因と解決策の発見に優れた複合タレントです。
この本の著者は、フルスタックテストには純粋なテストよりも未来があると信じています。テストに加えて、フルスタックの才能が習得する必要のある基本的なスキルを見てみましょう。
- 要件
実際のパフォーマンス要件分析プロセスでは、システムアナリストは、顧客がビジネス要件とユーザー要件の違いを区別することは困難であることを明確に認識し、顧客の背後にある実際のビジネス要件を理解する必要があります。ソフトウェア工学における「ニーズ分析」とは、コンピュータが何をしたいのか、どのような効果を出したいのかを判断することであると言えます。パフォーマンス要件分析は、システムパフォーマンステストの前に実行する必要があるものと言えます。 - コード
は、プログラム、マスターデータベースの知識、ミドルウェアの知識、オペレーティングシステム、およびハードウェアの知識を理解できます。 - 操作と保守
テストの自動化は、機能テストの自動化だけでなく、パフォーマンステストの自動化とテスト環境の自動化(継続的インテグレーション)も含む傾向であり、操作と保守の方法を習得する必要があります。
人気のある文を与える:テスターは開発を最もよく理解し、開発者はテストを最もよく理解します。つまり、テクノロジーは優れており、境界を越えることができます。
1.5採用要件から仕事の価値を見る
この部分にはコードワードはありません。これは主に、一部の都市や企業のテストポスト要件です。
1.6パフォーマンステストスキルツリー
1.6.1テストツール
テストツールを使用すると、ソフトウェア開発のテスト速度が向上し、問題分析に集中できる時間を確保できます。主流のツールはLoadRunnerとJMeterであり、現在のツールではすべての問題を解決できるわけではありません。テストスクリプトを実装するために、独自のプログラムを作成する必要がある場合もあります。これらの2つのツールは、パフォーマンステスト専用ではありません。実際、パフォーマンステスト用のツールは、関数自動化回帰を実行でき、APIおよびUIテストを実装できます。自動テストには、Selinum、WebDriverなどは必要ありません。
一般的な問題:
- ユーザーとビジネスモデルの分析と構築。
- 適切なスクリプト開発(ほとんどの初心者は、ユーザーやビジネスモデルに基づいてスクリプトを開発せず、成功に戻る必要があると考えています)。
- 適切な需要分析はシーンデザインに変換されます(ほとんどの初心者は、ニーズに応じてシーンをデザインする方法を知りません)。
- 大容量システムのデータ生成と使用。
- パフォーマンス圧力負荷と大規模システムの実装。
- クラウドコンピューティングの負荷の生成と実装。
1.6.2テストベース
パフォーマンステストは、やりがいのある、詳細で包括的な分野です。
多くのパフォーマンステストの初心者は、パフォーマンステストはスクリプトを作成し、数台のマシンを入手してそれを押すことであると常に考えています。そうすれば、レポートで十分です。通常、「同時実行の量」、「応答時間の長さ」、「実行できるか」の質問に注意を払います。同時実行性が高く、応答時間が速いほど、パフォーマンスが向上すると考えられています。
パフォーマンステストは、スクリプトの記録やプログラムの作成だけでなく、基本的なパフォーマンス理論とパフォーマンス実行の原則に関するものでもあります。同じスクリプトを異なる担当者が実行し、異なるターゲットを使用すると、テスト結果は大きく異なります。
実際、パフォーマンステストの実行を開始する前に、システムで一連の複雑な要件分析を実行し、一連のパフォーマンステスト計画と設計作業を実行する必要があります。N回の回帰の後、ボトルネックの特定の原因が発見され、最適化されました。パフォーマンスの理論的基礎を習得することによってのみ、これらのパフォーマンステストツールなどを制御できます。パフォーマンスの理論的基礎を習得せずに直接操作することは、運転してターゲットを見つけられない、盲目的に向きを変える、またはターゲットから遠ざかるようなものです。
自動テストの目的は作業効率を向上させることです。現在、機能テストとパフォーマンステストの両方がこの方向で開発されています。これらはすべて継続的インテグレーションの一部です。
業界の現在の短期プロジェクトを考慮すると、パフォーマンステストアーキテクトは、パフォーマンステストや自動テストなど、社内で複数の役割を果たします。そのため、残業を減らし、高効率と高い成果を追求することが、フルスタックパフォーマンスの追求です。テストワーカー。
テストツールでテストスクリプトの問題を解決できない場合があります。たとえば、SOAアーキテクチャによってカプセル化された一般的なRPCプロトコルでは、スクリプトの問題を解決するためのコードを記述する必要があります。DubboやDubboxなどの業界でよく知られている著者も、このタイプのテストに遭遇しました。作業の反復性を考慮して、時間を節約し、効率を向上させるために、ROADTESTINGチームは2回目のテストを行いました。 JMeterは、企業のパフォーマンステストの内部トレーニング中に開発およびテストコンポーネント)、特にDubboおよびDubboxプロトコルのインターフェイスをテストするために使用されます。これにより、機能テスターは、パフォーマンスのスクリプトプログラミングを行わなくても、テストするアイテムとインターフェイスを直接選択できます。テストの実行。これにより、スクリプト開発の効率が大幅に向上します。
一般的な問題
- ニーズを評価します。
- 負荷モデリング(ユーザーおよびビジネスモデル);
- パフォーマンス圧力の生成の原則と並行性の関係。
- パフォーマンステストケース;
- 新しいシステム要件分析。
- キャパシティプランニング
- パフォーマンステスト戦略。
1.6.3コード
IT部門の一員として、開発コードを扱うことは避けられません。プログラミングの知識を理解することは、テストの意味合いを改善するだけでなく、コミュニケーションの効果も改善することができます。さらに重要なことに、自動テスト、単体テスト、パフォーマンステスト、およびセキュリティテストはすべてコードから切り離せません。そのため、高い普及率でいくつかのプログラミング言語とスクリプト言語を習得する必要があります。ここでは、Java、Pythonなどをお勧めします。
Javaは、C ++言語のさまざまな利点を吸収するだけでなく、C ++では理解しにくい多重継承やポインターの概念を放棄するオブジェクト指向プログラミング言語です。また、国内企業で使用されている比較的人気のある言語でもあります。
Pythonには豊富で強力なライブラリがあります。グルー言語と呼ばれることも多く、他の言語(特にC / C ++)で作成されたさまざまなモジュールを簡単に接続できます。Pythonは現在、国内のテスト業界で人気のある言語です。習得は簡単です。公共図書館でコードを検索して、自分でコードを書く作業負荷と時間を削減することもできます。
1.6.4サーバーパフォーマンス診断の知識
プログラムの高さに関係なく、プログラムの実装に使用する言語に関係なく、最終的にはサーバーハードウェア、デジタル信号、およびアナログ回路に依存する必要があります。サーバーハードウェアはパフォーマンスの基盤であり、すべてのパフォーマンスはハードウェアインジケーターに反映されます。パフォーマンスを分析したいので、サーバーの知識が不可欠です。CPU、ストレージ、メモリ、ネットワークパフォーマンスインジケータ、監視方法など、サーバーのいくつかの主要部分を習得する必要があります。これらのハードウェアを管理するオペレーティングシステムの原則とパフォーマンス構成パラメーターも習得する必要があります。この部分を習得するには、運用、保守、開発に関する多くの知識を学ぶ必要があります。
オペレーティングシステムとそのカーネルを理解することは、システム分析に不可欠です。パフォーマンステストエンジニアとして、システムコールの実行方法、CPUがスレッドをスケジュールする方法、制限されたメモリがパフォーマンスに与える影響、ファイルシステムがI / Oを処理する方法など、システムの動作を分析する必要があります。これらが基礎と手がかりです。システムのボトルネックを判断するために。
- Linux
Linuxは、自由に使用でき、自由に普及しているUNIXライクなオペレーティングシステムのセットです。POSIXとUNIXをベースにした、マルチユーザー、マルチタスク、マルチスレッド、マルチCPUのオペレーティングシステムです。主要なUNIXツール、アプリケーション、およびネットワークプロトコルを実行できます。32ビットおよび64ビットのハードウェアをサポートします。Linuxは、ネットワークをコアとしたUNIXの設計哲学を継承し、安定したパフォーマンスを発揮するマルチユーザーネットワークオペレーティングシステムです。このシステムをサーバーのオペレーティングシステムとして使用する企業が増えているため、パフォーマンステストの実践者として、習得する必要のあるシステムの1つであり、環境の構築やパフォーマンス診断と切り離せません。
現在、Linux / UNIXには多くのブランチがあり、人気のあるものはCENTOS Ubuntu、RedHAT、Red Hat HP-UX、AIX、Solarisなどです。 - Windows Server
Windows Serverは、Microsoft Windows Server System(WSS)のコアであり、サーバーオペレーティングシステムです。現在、最も使用されているのは中小企業であり、2008年と2012年には比較的多くのバージョンがあります。
データベースは、システム内のストレージと処理の最も重要な手段であり、パフォーマンスの問題の大部分はデータベースに関連しています。そのため、データベース言語のSQLと、従来のパフォーマンス診断およびチューニング手法を深く理解する必要があります。
現在、DB2、Oracle、SOLServer、MySQLなどのリレーショナルデータベース、より非リレーショナルな一時的なKey-Valueストレージ(memcached、Redis)、永続的なKey-Valueストレージ(ROMA、Redis)、ドキュメント指向のデータベースが多数あります。データベース(MongoDB、CouchDB)、列指向データベース(Cassandra、HBase)、Hadoopなど。 - Oracle
と呼ばれるOracleOracle Databaseは、Oracleのリレーショナルデータベース管理システムです。データベース分野で常に主導的な地位を占めてきた製品です。Oracleデータベースシステムは、世界で人気のあるリレーショナルデータベース管理システムと言えます。携帯性、使いやすさ、機能性に優れ、大・中・小・マイクロコンピュータのあらゆる環境に対応しています。これは、高効率、信頼性、高スループットのデータベースソリューションです。 - MySQL
MySQLは、オラクルが買収した軽量のオープンソースデータベースです。データベースの規模の拡大に対応して、分散データベースを元々再開発する企業が増えています。また、中国でも人気のあるデータベースです。多くの大企業もMySQLに基づいて分散開発を実施しており、MySQLの機能は大幅に強化されています。 - NoSQLデータベース
NoSQLは、通常、非リレーショナルデータベースを指します。インターネットWeb2.0 Webサイトの台頭により、超大規模で同時実行性の高いWebサイトを処理する機能が不十分であるように見え、多くの克服できない問題が明らかになりました。一方、非リレーショナルデータベースは、独自の特性により非常に急速に開発されました。 。NoSQLデータベースは、大規模なデータ収集における複数のデータ型によってもたらされる課題、特にビッグデータアプリケーションの問題を解決するために作成されました。NoSQLには多くの種類がありますので、一緒に理解しましょう。
(1)Key-Valueデータベース-Redis
は、ネットワーク、メモリベースまたは永続的なログタイプのKey-Valueデータベースをサポートし、複数の言語でAPIを提供します。その特徴は、データが保存されるたびに、キーに従ってインデックスが作成され、保存されることです。Redisは、在庫、データ分析、リアルタイムのデータ収集、通信など、データの変更が速く、データベースのサイズが予測可能なアプリケーションに適しています。7月、Alibaba Cloudは、ゲーム、eコマース、ソーシャルネットワーキング、その他の業界で使用される、Redis向けの独自のRedisクラウドデータベースKVStoreの立ち上げを発表しました。
(2)列ストレージデータベース-Cassandra
はもともとFacebookによって開発され、2008年にオープンソースプロジェクトになりました。これは、ネットワークソーシャルクラウドコンピューティングアプリケーションに最適なハイブリッド非リレーショナルデータベースです。読み取り操作は書き込み操作よりもはるかに高速です。銀行、金融、データ分析などの分野に適しています。
(3)ドキュメントデータベース-MongoDB、CouchDB
ドキュメントデータベースはLotus Notesオフィスソフトウェアに触発されており、最初のタイプのKey-Valueストレージに似ています。このタイプのデータモデルはバージョン管理されたドキュメントであり、半構造化ドキュメントはJSONなどの特定の形式で保存されます。ドキュメントデータベースは、キー値データベースのアップグレードバージョンと見なすことができ、キー値をネストできます。 。さらに、ドキュメントデータベースのクエリ効率は、Key-Valueデータベースのクエリ効率よりも高くなっています。
グラフ構造データベースは、他のランクやリジッド構造のSQLデータベースとは異なり、柔軟なグラフモデルを使用しており、複数のサーバーに拡張できます。多くのNoSQLデータベースには、Neo4J、InfoGrid、InfiniteGraphなどのRESTスタイルのデータインターフェイスまたはクエリAPIがあります。
一般的な問題
- プロセスとスレッドタスクの違いは何ですか?
- 割り込みの優先順位とスレッドの原則?
- プロセスのライフサイクル?
- コンテキストスイッチ?
- I / O集約型ワークロードとCPU集約型ワークロードの違いは何ですか?
- 本番環境とテスト環境の間の変換?
- リレーショナルデータベースアーキテクチャとロジックの最適化、および非リレーショナルデータベースアーキテクチャとロジックの最適化?
- トランザクションデータベースと分析データベースの使用?
- データ関係のモデリングと設計?
- TOP N SQLの診断と最適化(実行パス、インデックスとテーブルリンクの最適化など)?
- 閉塞とデッドロックを阻止して根絶しますか?
- ホットスポットの防止とポジショニングの最適化?
- ビジネスデータのバッチキャッシュ/非同期?
- データベース構成の最適化?
1.6.5パフォーマンスチューニングスキル
パフォーマンスが低く複雑なシステムに直面した場合、私たちが行うことは、パフォーマンスデータ分析モデルを構築し、関連するリソースと指標情報を収集し、これらのデータの背後にある考えられる理由を分析することです。多くの人が、パフォーマンステストの最も難しい部分はパフォーマンスのボトルネックを見つけることだと言いますが、著者はこの見解に同意します。これには、堅実なフルスタックITテクノロジーの基盤、ビジネスの感度、およびソリューションの経験が必要です。
さらに、パフォーマンスの最適化は、システムのすべての側面を含むシステムプロジェクトであり、上から下まで、ソフトウェア製品(プロジェクト)、ミドルウェア、仮想マシン、オペレーティングシステム、およびハードウェアがあります。ソフトウェア製品には、システムアーキテクチャ、ビジネスデザイン、コード実装、データベースの物理設計、およびさまざまなデータベース構成が含まれます。したがって、パフォーマンスチューニングをうまくやりたいのであれば、それは1人の人間だけでなく、プロジェクトチーム全体の問題です。
テストでは、スクリプトの実装であろうとテスト中のネットワークモニタリングであろうと、通信プロトコルを対象にする必要があります。一般的なHTTP / HTTPS、Socket / WebSocket、WebService(Soap)などのプロトコルが広く使用されているため、当然、それに精通している必要があります。 。
一般的な問題
- システムハードウェアリソース(CPU、ネットワーク、メモリ、10)の関係と原則。
- 信頼性性能指標と、指標間の相関および判断方法を選択します。
- 実現の原則と、ダウンタイムが発生しないというよくある間違い。
- キューイングシステム、遅延、およびバッファ間の最適化関係。
- 最適化されたコストと価格性能比。
- ビジネス最適化の運用上の実装。
- マルチシステム直列接続の原理とテスト分離。
1.6.6自動化/継続的インテグレーション
現在人気のある継続的インテグレーションツールには、Jenkins、Git / SVN、Maven、Antなどがあります。
JenkinsやHudsonなどの継続的インテグレーションツールを使用すると、パフォーマンステスト環境と実行にかかる時間が大幅に短縮され、非効率的な作業の繰り返し回数も大幅に削減されます。継続的インテグレーションは、コード統合、環境統合、自動テスト実行の自動化、およびテストレポートの保存と整理に役立ちます。
1.6.7クラウドコンピューティングと仮想化
通常、仮想化テクノロジーに基づいており、1人のユーザーまたは複数のユーザーが物理サーバーを共有できます。それは中小企業に多くの利便性をもたらしますが、それはリソースの競争とパフォーマンステストの困難を引き起こします。アーキテクチャの不確実性、他のネットワークなどのハードウェアリソースのコスト制約、クラウド上のパフォーマンスロードマシンの追加のオーバーヘッドなど。一部のクラウドサービスプロバイダーは、新しいクラウドサービス課金パフォーマンステストツールを提供しています。このツールは、ローカルの開発とテストが完了した後にクラウドにデプロイできます。
章のまとめ
この章では、主にテスト専門家のジレンマとテスト専門家の開発の方向性について説明します。