Gleyzer両氏によって共同開発されました。2019で、同言語の発表を行いました。InfoQはPurdy氏に言語と、氏らが解決を目指した問題について聞きました。設計/アーキテクチャアジャイルマニュフェスト:ソフトウェアアーキテクトの視点ソフトウェアアーキテクトの役割と責任はアジャイルソフトウェア開発のためのマニフェストの価値と矛盾していると見えますが、優れたアーキテクトはアジャイル開発チームをサポートするテクニックを見つけています。Streamingは、ストリーミングデータのためのSQLライクなインターフェースを提供します。Streamsによって、Redisがストリーミングデータを複数のプロデューサとコンシューマの間で消費、保持、配信することができるようになります。ソフトウェア開発のマニフェストたゆまず息もつかずに市場に突進することで、会社を静かに消滅の崖っぷちへと追い込みます。それは設計してコードを書く方法を再考する時です。簡単さへの投資は、速さへの投資です。簡単さは知的財産の主鉱脈でもあります。競争上の優位性は、一度失ったら、もう一度手に入れることはほとんど不可能です。Buytaerts氏が過去10年間にわたって、企業がDevOps採用のハイプサイクルをくぐり抜け、変革に対する誤解を解消する過程を支援してきた経験について語ります。2010を利用した負荷テストの概要について解説を行った。2010を利用した負荷テストにおいて是非知っておいて頂きたいポイントについても解説を行う。Webパフォーマンステスト本項ではテストプロジェクトを構成する「Webパフォーマンステスト(~.webtest)」について解説を行いたい。WebパフォーマンステストはWebアプリケーションに対するアクセスシナリオを定義するが、その作業の大半は「Webテストレコーダー」を利用して行う。Explorerを起動し実際のサイト閲覧操作を行う事で発生するHTTPリクエストを自動的に記録するため、Webアプリケーションを利用するユーザーの視点からシナリオを定義する事が可能である。Webテストレコーダーの重要な機能として「動的パラメーターの自動検出」があり、本機能によってViewState等アプリケーションから動的に生成されるパラメーターが自動抽出され後続のHTTPリクエストにバインドが行われる。Webパフォーマンステストでは「検証規則」の定義が可能であり、アプリケーションの正常終了/異常終了を判定する機能として有用である。Webアプリケーションでエラーが発生した場合、通常は発生したエラーに関する説明やユーザーへの指示を示す画面のレンダリングが行われるが、この場合HTTPレスポンスコードとしては200が返されるため、正常終了/異常終了の判定においてはレスポンスコード以外でエラー有無を判別する仕組みが必要となる。負荷テストといった自動化されたテストシナリオでこのようなエラーを補足する為には、正常シナリオでのレンダリング内容を定義し、テスト実施時の個々のレスポンス内容(Body)がこの条件を満たすかどうかによって正常/異常を判定する方法が有効である。Webパフォーマンステストの「検証規則」ではレスポンスに含まれるべきタグや文字列を定義することによってレスポンスの正常性検証を行う事が可能である。関連スポンサーコンテンツ[図:Webパフォーマンステストで設定可能な検証規則]次にデータバインディングについて解説を行いたい。負荷テストにおいては固定パラメーターによるアクセスを多重化するだけでは不十分であり、テストシナリオの中でPOSTデータやQueryStringといったパラメーターを変化させたい場合がある。このような場合はデータバインディング機能を利用すると簡単に可変パラメーターの設定が可能である。データバインディングではデータベースやcsvファイル、XMLファイルをデータソースとしてSequential、Random、Uniqueといったデータ取得ルールの設定が可能である。[図:データバインディングの設定例]またデータバインディングの仕組みは多重化を伴う負荷テストといった用途だけではなく、アプリケーションに対する機能検証においても有効である。ログインやデータ参照といったある特定のIDを入力パラメーターとする機能において、すべてのID(ユーザーID(およびパスワード)や顧客ID)を入力として順次実行しアプリケーションが正常動作することを確認する、といった機能テストの自動化としても利用できる。データバインディングに関連してWebパフォーマンステストにおける資格情報の設定についても触れておきたい。WebパフォーマンステストではWindows統合認証や基本認証といったWeb認証の為の資格情報が設定可能であり、固定の資格情報(ユーザー、パスワード)の設定はもちろん、データバインディングによって可変な資格情報を設定する事も可能である。[図:Web認証の資格情報の設定]その他、Webパフォーマンステストではよりきめ細かい要件に応えられるよう各種の設定が可能である。リクエストが送られるまでの間隔を設定する。ページを閲覧する時間をシミュレートすることが可能。パフォーマンステストの「応答時間の目標」ではHTTPリクエストが送られてからそのレスポンスの最後のバイトを受信するまでの目標時間を設定する。本設定によって目標応答時間の達成について把握が可能。抽出規則Webパフォーマンステストに抽出規則を設定する事でHTTPレスポンス(フォームフィールド、テキスト、属性、ヘッダー、非表示フィールド)から文字列を抽出し、変数(コンテキストパラメーター)に値を格納する。コンテキストパラメーターは後続のHTTPリクエストにおけるパラメーター(POSTデータやQueryString)としての利用、ループや条件のパラメーターとしての利用が可能。ループ、条件Webパフォーマンステストのシナリオ(一連のHTTPリクエスト)に対してループや条件(実行条件)を設定する。ループや条件の判断に使用するパラメーターとしては、特定のCookie有無やCookieの値、HTTPレスポンスコード、コンテキストパラメーターが利用可能。Webパフォーマンステストでテストシナリオ(一連のHTTPリクエスト)の定義を行ったあとはこれを実行してみよう。Webパフォーマンステストを実行すると定義にしたがってHTTPリクエストの送信とレスポンスの記録が行われる。[図:Webパフォーマンステストの実行]ロードテスト次に「ロードテスト(~.loadtest)」について解説を行いたい。ロードテストはWebパフォーマンステストを包含し多重化を伴う負荷テストとして実行する事が可能である。ロードテストやその配下に定義するシナリオに対して設定する主な内容は以下のとおりである。ロードテストはウィザード形式によって作成されるため、主要な設定内容については概ね理解しやすい。ロードパターンどの程度の負荷をかけるのか、実行ユーザー数によってそのレベルを設定する。ロードパターンは「持続ロード」「ステップロード」「ゴール志向」のいずれかを指定する。「持続ロード」は負荷テストの間、指定されたユーザー数を持続するロードパターンであり、負荷テストにおける接続ユーザー数の目標がはっきりしている場合に適している。「ステップロード」は時間の経過と共に指定された値ずつユーザー数が増加するロードパターンであり、多重度の変化に伴うパフォーマンス分析やエラー分析を行う場合、システムの性能限界を分析する場合に適している。「ゴール志向」はクライアントやサーバーのパフォーマンスカウンタ値をもとにしてユーザー数の調整を行うロードパターンである。パフォーマンステストとそれぞれのテストの実行比率を設定する。ネットワークミックスネットワーク帯域の種類と比率を設定し、クライアントが利用するネットワーク環境をシミュレートする。ブラウザミックスブラウザの種類の組み合わせと比率を設定し、クライアントが利用するブラウザ環境をシミュレートする。カウンターセットロードテストの中でパフォーマンスカウンタの取得を行うコンピューター(サーバーやクライアント)を指定する。負荷テストを実行する期間を実行時間またはイテレーション(テストの反復回数)によって設定する。加えてパフォーマンスカウンタの取得間隔も設定する。Studio画面上にパフォーマンスカウンタや実行状況の概要などリアルタイムな情報が表示される。実行ユーザー数、ページの応答時間、発生エラーの有無、サーバーリソースの状況など着目したいカウンタを表示させながら負荷テストを進める事が可能である。[図:ロードテストの実行]テストが終了するとテスト結果の概要が表示される。通常はエラーの発生有無や各ページのレスポンス時間について確認を行うことになる。[図:ロードテストの実行結果]また、負荷テストで発生する個々のリクエストやレスポンスの詳細を確認したい場合がある。Tests」)の設定を行う事によって詳細なロギングが可能である。[図:ロードテストでの詳細なロギング設定]ロギングされたデータは仮想ユーザークティビティチャートからテストログをクリックする事で表示できる。本項ではテストエージェントの設定の中で知っておくと便利な機能である「IPスイッチング」について解説を行いたい。Serverのネットワーク負荷分散機能)といった負荷分散アーキテクチャが利用されている場合に有用な機能と言える。負荷分散のアフィニティ(トラフィックの分散ルール)がクライアントのソースIPアドレスをもとに行われる場合、負荷テストクライアントが同一のIPアドレスを使用している限りはサーバーサイドでのトラフィックの分散が行われず、特定のWebサーバーへのリクエストが集中するといった状況に陥ってしまう。このような場合はクライアントのIPアドレスを可変としてHTTPリクエストを発生させる仕組みが必要であり、テストエージェントのIPスイッチング機能が役に立つ。IPスイッチングを利用する場合、エージェントに対する設定(テストエージェントに対するIPアドレスプールの設定)に加えロードテストに対する設定(IPスイッチングの有効化)が必要である。Packについて触れておきたい。2010)の購入が必要であった。Packの提供が開始された。特典として無制限の仮想ユーザーの生成が可能になるライセンスキーが提供される、といったものである。MSDNであれば追加のライセンス購入が不要となり、追加投資無しでより大規模な負荷テストを実施する事が可能となった。Packについては以下の情報も参照頂きたい。2010を利用した負荷テストについて解説を行った。多くの機能を持って対応可能である事がご理解頂けたかと思う。機能が多く柔軟なカスタマイズが可能であるがゆえにどこから始めてよいか最初は戸惑ってしまう部分もあるかも知れないが、まずはシンプルにWebテストレコーダーを利用したWebパフォーマンステストの作成とその実行から始め、次にロードテストによる負荷テストを試してみる事をお勧めしたい。2010の持つ有効性と応用力の高さが理解できるはずだ。