ホームページ  >  記事  >  テクノロジー周辺機器  >  機械学習は高品質のソフトウェア エンジニアリングを強化します

機械学習は高品質のソフトウェア エンジニアリングを強化します

PHPz
PHPz転載
2023-04-14 16:31:12830ブラウズ

翻訳者 | Zhu Xianzhong

##改訂 | Sun Shujuan

はじめに

一般的に、ソフトウェア テストは次のような傾向があります。比較的単純です: すべての入力 => 既知の出力。しかし、ソフトウェア テストの歴史を振り返ると、多くのテストが推測のレベルに留まっていることがよくあります。つまり、テスト中に開発者はユーザーの操作プロセスを想像し、予想される負荷を見積もり、それにかかる時間を分析してからテストを実行し、現在の結果をベースラインの回答と比較します。回帰がないことが判明した場合は、現在のビルド計画が正しいと見なされ、後続のテストを続行します。回帰があった場合は、それを返します。ほとんどの場合、出力はすでにわかっていますが、出力をより明確に定義する必要があります。回帰の境界は明確であり、それほど曖昧ではありません。実際、ここで機械学習 (ML) システムと予測分析が登場し、曖昧さを解消します。

テストが完了したら、パフォーマンス エンジニアは結果の算術平均と幾何平均だけでなく、関連するパーセンテージ データも確認します。たとえば、システムの実行中、最も遅いリクエストの 10% はシステム エラーが原因であることがよくあります。このエラーは、常にプログラムの速度に影響を与える状態を引き起こします。

データ内で利用可能な属性を手動で関連付けることもできますが、ML の方がデータ属性をより速くリンクできる可能性があります。不正なリクエストの 10% を引き起こす条件を特定した後、パフォーマンス エンジニアは、動作を再現するテスト シナリオを構築できます。修正の前後にテストを実行すると、修正が修正されたことを確認できます。

機械学習は高品質のソフトウェア エンジニアリングを強化します

#図 1: パフォーマンス指標における全体的な信頼度

#機械学習とデータ サイエンスのパフォーマンス

機械学習はソフトウェア開発の促進に役立ち、開発テクノロジーをより堅牢にし、さまざまな分野や業界のユーザーのニーズに応えやすくします。パイプラインや環境からディープラーニング アルゴリズムにデータをフィードすることで、因果関係のパターンを明らかにできます。予測分析アルゴリズムとパフォーマンス エンジニアリング手法を組み合わせることで、より効率的かつ高速なスループットが可能になり、エンド ユーザーが自然なシナリオでソフトウェアをどのように使用するかについての洞察が得られ、開発者が運用環境で欠陥製品が使用される可能性を減らすことができます。問題とその原因を早い段階で特定することで、開発ライフサイクルの早い段階で問題を修正し、実稼働への影響を防ぐことができます。全体として、予測分析を活用してアプリケーションのパフォーマンスを向上させる方法をいくつか紹介します。

  • 根本原因を特定します。 機械学習技術を使用して可用性やパフォーマンスの問題の根本原因を特定し、注意が必要な他の領域に焦点を当てることができます。その後、予測分析により各クラスターのさまざまな特性を分析し、理想的なパフォーマンスを達成し、ボトルネックを回避するために必要な変更についての洞察を提供します。
  • アプリケーションの健全性を監視します。 機械学習テクノロジーを使用してリアルタイムのアプリケーション監視を実行すると、企業はシステム パフォーマンスの低下を適時に検出し、迅速に対応できます。ほとんどのアプリケーションは、アプリケーション全体のステータスを取得するために複数のサービスに依存しています。予測分析モデルは、アプリケーションが正常に実行されているときにデータを関連付けて分析し、受信データが外れ値であるかどうかを識別できます。
  • ユーザー負荷を予測します。 当社では、将来アプリケーションにアクセスするユーザー数に対応できるよう、インフラストラクチャのサイズをピーク ユーザー トラフィックに依存しています。このアプローチには変化やその他の未知の要因が考慮されていないため、限界があります。予測分析により、ユーザー負荷を視覚化し、対応に向けてより適切に準備できるようになり、チームがインフラストラクチャのニーズと容量使用率を計画するのに役立ちます。
  • 手遅れになる前にダウンタイムを予測します。 アプリケーションのダウンタイムや機能停止を事前に予測することは、予防策を講じるのに役立ちます。予測分析モデルは、以前の停止シナリオに従い、同様の状況を監視し続けて、将来の停止を予測します。
  • しきい値の表示をやめて、データの分析を始めてください。 可観測性と監視によって生成される大量のデータは、1 週間に最大数百メガバイトを必要とします。最新の分析ツールを使用する場合でも、何を探しているのかを事前に知っておく必要があります。その結果、チームはデータを直接見るのではなく、アクションのトリガーとしてしきい値を設定することになります。成熟したチームでも、データを詳しく調べるのではなく、例外を探します。これを軽減するために、モデルを利用可能なデータ ソースと統合します。次に、モデルはデータをフィルター処理し、時間の経過とともにしきい値を計算します。この手法を使用すると、モデルに履歴データが入力されて集約され、人間が設定するのではなく季節性に基づいたしきい値が提供されます。アルゴリズムに基づいてしきい値を設定すると、トリガーされるアラートの数が減りますが、その一方で、これはより優れた実用性とより高い価値にもつながります。
  • データセット全体を分析し、関連付けます。 データはほとんどが時系列であるため、時間の経過とともに変化する個々の変数を確認するのが簡単になります。多くの傾向は、複数の指標の相互作用から生じます。たとえば、応答時間は、同じターゲット上でさまざまなトランザクションが同時に発生している場合にのみ低下します。人間にとって、これはほぼ不可能ですが、適切にトレーニングされたアルゴリズムは、これらの相関関係を発見するのに役立ちます。

予測分析におけるデータの重要性

「ビッグ データ」は通常、データ セットを指します。はい、それは大規模なデータセットであり、速度は急速に向上し、内容は大きく変化します。このようなデータの分析には、そこからパターンや情報を抽出できるようにするための特殊な方法が必要です。近年、ストレージ、プロセッサ、プロセスの並列処理、およびアルゴリズム設計の改善により、システムは大量のデータを適切な時間内に処理できるようになり、これらの方法がより幅広く使用できるようになりました。有意義な結果を得るには、データの一貫性を確保する必要があります。

たとえば、各プロジェクトは同じランキング システムを使用する必要があるため、あるプロジェクトがキー値として 1 を使用し、別のプロジェクトが 5 を使用する場合、たとえば「DEFCON 5」を使用する人は「DEFCON 1」を意味します。 ”; その場合、処理前に値を正規化する必要があります。予測アルゴリズムは、アルゴリズムと、アルゴリズムが入力するデータで構成されます。ソフトウェア開発では、最近まで削除されるのを待ってアイドル状態にあった大量のデータが生成されます。ただし、予測分析アルゴリズムはこれらのファイルを処理して、検出できないパターンについてこのデータに基づいて質問し、回答することができます。たとえば、「未知のものをテストするのは時間を無駄にしていますか? 使用シナリオは?」などです。

  • パフォーマンスの向上はユーザーの幸福度とどのように関係するのでしょうか?
  • 特定の欠陥を修正するにはどれくらい時間がかかりますか?
  • #これらの質問とその回答は、何が起こる可能性があるかをより深く理解するために、予測分析が目的としています。
  • アルゴリズム

    予測分析のもう 1 つの主要なコンポーネントはアルゴリズムであり、慎重に選択または実装する必要があります。モデルはますます複雑になり、入力データの変化にますます敏感になり、予測を歪める可能性があるため、シンプルに始めることが重要です。分類と回帰という 2 種類の問題を解決できます (図 2 を参照)。

    • 分類: 分類は、セットの結果を予測するために使用されます。入力データ まず、コレクションをさまざまなカテゴリに分割します。
    • 回帰: 回帰は、出力変数が実数値のセットである場合に、セットの結果を予測するために使用されます。入力データを処理して予測を行います。たとえば、使用されているメモリの量、開発者が作成したコード行などです。最も一般的に使用される予測モデルは、ニューラル ネットワーク、デシジョン ツリー、線形回帰およびロジスティック回帰です。

    機械学習は高品質のソフトウェア エンジニアリングを強化します

    ##図 2: 分類と回帰

    ニューラル ネットワーク

    ニューラルネットワークは例から学習し、過去のデータと現在のデータを使用して将来の価値を予測します。そのアーキテクチャにより、データに隠された複雑な関係を特定することができ、私たちの脳がパターンを検出する方法が再現されます。これらは、データを受け入れ、予測を計算し、単一の予測として出力を提供する多くのレイヤーで構成されています。

    デシジョン ツリー

    デシジョン ツリーは、特定のオプションの潜在的なリスクを予測するために、一連の「if/then」オプションで結果を提示する分析手法です。収入。すべての分類問題を解決し、複雑な質問に答えることができます。

    図 3 に示すように、デシジョン ツリーは、将来の意思決定を説明するためにデータを枝状のパーティションに分割するさまざまな方法を認識するアルゴリズムによって生成されるトップダウン ツリーに似ています。意思決定パスを特定するのに役立ちます。

    読み込みに 3 秒以上かかる場合は、ツリー内の 1 つのブランチがカートを放棄したユーザーである可能性があります。この下の別の分岐は、それらが女性であるかどうかを示す場合があります。分析によると、女性は衝動買いをする可能性が高く、この遅れが反芻につながる可能性があるため、「はい」の答えはリスクを高めます。

    機械学習は高品質のソフトウェア エンジニアリングを強化します#図 3: デシジョン ツリーの例

    線形回帰およびロジスティック回帰

    回帰最も一般的な統計手法の 1 つです。これは、ブラック フライデー セール中に各サービスに追加するリソースの数など、数字を見積もるときに重要です。多くの回帰アルゴリズムは、変数間の関係を推定し、大規模な混合データ セット内の重要なパターンと変数間の関係を見つけるように設計されています。これは、単純な線形回帰モデル (データに適合する直線関数の計算) からロジスティック回帰 (曲線の計算) まで多岐にわたります (図 4)。

    #線形回帰およびロジスティック回帰#リニアリターン

    機械学習は高品質のソフトウェア エンジニアリングを強化します

    図 4: 線形回帰とロジスティック回帰

    アルゴリズムは特定の属性を解決するため、これらは教師あり学習方法です。教師なし学習は、特定の結果を念頭に置いていないが、考えられるパターンや傾向を特定したい場合に使用されます。この場合、モデルは可能な限り多くの特徴の組み合わせを分析して、人間が対処できる相関関係を見つけます。

    機械学習は高品質のソフトウェア エンジニアリングを強化します

    #図 5: 教師あり学習と教師なし学習

    パフォーマンス エンジニアリングにおける「左へのシフト」

    以前のアルゴリズムを使用して製品とアプリケーションに対する消費者の認識を測定し、パフォーマンス エンジニアリングをより消費者中心のものにします。すべての情報が収集されたら、適切なツールとアルゴリズムを使用して保存し、分析する必要があります。このデータには、エラー ログ、テスト ケース、テスト結果、運用イベント、アプリケーション ログ ファイル、プロジェクト ドキュメント、イベント ログ、トレースなどが含まれます。これをデータに適用して、さまざまな洞察を得ることができます:

    • 分析環境の欠陥
    • カスタマー エクスペリエンスに対する評価の影響
    • 問題のパターンを特定する
    • より正確なテスト シナリオなどを作成する

    このテクノロジーは、品質に対するシフトレフト アプローチをサポートしており、パフォーマンス テストの実行にかかる時間、特定される可能性のある欠陥の数、および生産につながる可能性のある欠陥の数を予測できるため、パフォーマンス テストが可能になります。カバレッジが向上し、本物のユーザー エクスペリエンスが作成されます。ユーザーに影響を与えることなく、使いやすさ、互換性、パフォーマンス、セキュリティの問題を防止および修正できます。

    品質の向上に役立つ情報の種類の例をいくつか示します:

    • 欠陥の種類
    • 欠陥が発見された段階
    • 欠陥の根本原因は何ですか
    • 欠陥は再現可能ですか

    これを理解したら、同様の問題をより早く防ぐために変更を加えてテストを作成できます。

    結論

    ソフトウェア エンジニアは、プログラミングの黎明期以来、何百もの仮定を立ててきました。しかし、今日のデジタル ユーザーはこのことをより認識しており、間違いや失敗に対する許容度が低くなります。その一方で、企業は、カスタマイズされたサービスや、テストがますます困難になっている複雑なソフトウェアを通じて、より魅力的で洗練されたユーザー エクスペリエンスを提供しようと競い合っています。

    今日では、すべてがシームレスに動作し、一般的なブラウザ、モバイル デバイス、アプリをすべてサポートする必要があります。ほんの数分の衝突でも、数千ドルまたは数百万ドルの損害を引き起こす可能性があります。問題の発生を防ぐために、チームはソフトウェアのライフサイクル全体を通じて可観測性ソリューションとユーザー エクスペリエンスを統合する必要があります。複雑なシステムの品質とパフォーマンスを管理するには、テスト ケースを実行して負荷テストを実行するだけでは不十分です。傾向は、状況が制御下にあるのか、改善しているのか、悪化しているのか、またその速度はどれくらいかを判断するのに役立ちます。機械学習テクノロジーはパフォーマンスの問題を予測するのに役立ち、チームは修正調整を行うことができます。最後に、ベンジャミン フランクリンの言葉で締めくくりましょう:「1 オンスの予防は 1 ポンドの治療に匹敵する。」

    翻訳者の紹介

    #Zhu Xianzhong、51CTO コミュニティ編集者、51CTO 専門ブロガー、講師、濰坊の大学のコンピューター教師、そしてフリーランス プログラミング業界のベテラン。

    原題:

    機械学習によるパフォーマンス エンジニアリング 、著者:

    全体的な比較

    ロジスティック回帰

    ## は、今後数か月でユーザー トラフィックが急増するリスクなど、連続的な範囲の値を定義するために使用されます。

    #これは、古いセットに基づいてパラメータを予測する統計的手法です。これはバイナリ分類、つまり y=0 または 1 のデータセットに最適に機能します。1 はデフォルトのクラス を表します。その名前は、変換関数 ( は論理関数 ) に由来しています。

    y=a bx として表されます。ここで、x は出力 y を決定するために使用される入力セットです。係数 a と b は、x と y の関係を定量化するために使用されます。ここで、a は切片、b は直線の傾きです。

    論理関数で表されます:


    whereβ0 は切片、β1 はレートです。トレーニング データを使用して、予測結果と実際の結果の間の誤差を最小限に抑える係数を計算します。

    目標は、ほとんどの点に最も近い直線を当てはめて、y と直線の間の距離または誤差を減らすことです。

    # S 字曲線を形成し、しきい値を適用して確率を二項分類に変換します。

以上が機械学習は高品質のソフトウェア エンジニアリングを強化しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。