
シェア:
YuvalはVonageのVP Quality Assurance Engineeringとして、複数のVonageプラットフォームにおけるソフトウェアのテスト、自動化、デプロイメントをリードしています。ユヴァルは常に高品質な製品を生み出すことに情熱を注いでおり、すべての違いを生み出すのは人であると信じています。仕事の後は、水泳、テニス、家族や友人と過ごす時間を楽しんでいる。
品質とスピード:可用性99.999%への7年間の旅
所要時間:1 分
非常にダイナミックなソフトウェア・エコシステムを前に、ソフトウェア・テストの世界は停滞したままだ。製品が複雑化するにつれて、開発チームはジレンマに直面することになる。迅速な納品に対する要求と、製品の品質を保証する必要性がせめぎ合っているのだ。
スピードと製品の成長を犠牲にすることなく、ソフトウェア・テストにより強力なアプローチを取るにはどうすればいいのだろうか?
Vonage R&D の SDET チーム(Software Developer in Test)は、ソリューションを定義しました。私たちはそれを クオロシティ品質とベロシティの両方に対応するレイヤード・テスト・アプローチです。
では、どこから始まったのか?
アプリケーションの基本的な使用をエミュレートする機能テストと、非機能的なシステム負荷です。テストグループは、一般的に、要件カバレッジと、発見され、回避され、再開されたバグの数によって、製品の品質を測定する。
しかし、世界は変わった。オペレーティングシステム、デバイス、ネットワークの遅延といった面で、私たちは断片化の増大に直面している。ダイナミックで競争の激しいアプリの時代に突入したのだ。APIや共通ライブラリによって、より迅速な開発が可能になり、さまざまなクラウドサービスによって、OSやセキュリティ、冗長性、さらにはスケーリングに依存しない環境が開発者に提供されている。これらのことから言えるのは、ウォーターフォールのリリース・サイクルが1ヶ月に及ぶような企業は、もはや機能やイノベーションに対する需要に太刀打ちできないということだ。
迅速に提供できない企業は、市場投入に遅れをとるだろう。
レイヤー
しかし、スピードが求められているにもかかわらず、時代遅れの品質テストを数回実施しただけで本番を急ぐことにはリスクがある。なぜなら、これまでと同じやり方を何年も続ければ、品質問題やエスカレーションの輪の中で尻尾を追いかけることになり、誰にとっても楽しくないからだ。その結果、次の2つの重要な要素が残ることになる:品質は向上させなければならないが、一貫して意識的に変更を生産に反映させる能力が必要なのだ。
7年前、私たちは機能テストと負荷テストという当初の2つのレイヤーに加え、さらなる手法を研究し始めました。この間、私たちは品質とベロシティのアプローチを着実に築き上げ、俗に "ファイブナイン "と呼ばれる99.999%のシステム可用性を達成しました。
研究と実験を経て、私たちは3つの多次元レイヤーからなる、ここに紹介するプロセスを作り上げた:

コーディング分野
適切なコード規律がソフトウェア品質の核心であることは、明白に思えるかもしれない。テストは、一貫して標準と手順に従うことから始まる。
コードレビュー自動化されたコードも同じように扱われるべきである。
ユニットテストカバレッジの広いユニットテストは、コードベースを壊していないという確信を持って簡単にテストできる。
静的解析ツール静的なバグやセキュリティの脆弱性を発見する。市場には、さまざまなニーズに合わせてさまざまな仕様を提供するものがたくさんある。
機能テストはモックに集中すべきだ。APIレベルでテストし、あなたが求めたものを正確にテストするモックで自動化を囲む。エンド・ツー・エンドの自動テストは避けよう。エンド・ツー・エンドの製品ではなく、自分のコードをテストすることになるからだ。その結果、カバレッジが上がり、テストがより安定する。
機能テストが どこでも開発環境やQA環境だけでなく、本番環境でも。正しく構築されていれば、機能テストは優れたモニタリング・ツールとして機能し、頻繁に失敗することはない。私たちは皆、午前2時にアラームの誤作動で警告を受けることがどれほどイライラさせるか知っている。

非機能テスト
そのためには、自分のコンフォートゾーンの外に出て、より大きく考える必要がある。製品の平均的な使い方を知り、それを限界まで高める必要がある。
あるAPIが平均して毎秒1000のコールを受け、午前10時と午後3時に1200のピークがあり、午後10時に800のピークがあるとする。
負荷テスト 負荷テスト毎秒1000コールを数時間かけることになる。
ストレステスト ストレステストでは、障害が発生するまでコールを追加し続ける。それがストレスポイントだ。どうするかを決めて、再試行してください。
安定性試験長期にわたる平均的な使用量を考慮してください。長期間、ピーク時には毎秒1200コール、低い時間には800コール、それ以外の時間には1000コールを行います。これにより、平均的な負荷で安定した状態を維持できることが確認できます。
ソフトウェアにオートスケーリング機能がある場合 オートスケーリングの機能がある場合は、上限に達したら追加のインスタンスでテストするようにしてください。テスト 冗長性リージョンとゾーンの冗長性をテストしてください。 なぜなら冗長性をテストしてください。 セキュリティここでいうセキュリティとは、アプリケーションの侵入テスト、OSSテスト(外部ライブラリやAPI)、静的解析ツールを指す。コードレビューはこの段階で非常に重要であり、ソフトウェア開発ライフサイクルの一部であるべきだ。
DevOpsの規律
浸す 浸す.上記のすべてがうまく機能すれば、すべてのエッジケースから身を守ったと自分をごまかさないでほしい。それは無理です。もっと多くのデバイスがあり、もっと多くのアカウント機能があり、もっと多くのコンフィギュレーションを考慮しなければなりません。テストが実際に正確であることを確認するために時間をかけてください。
徐々にリリースすることを忘れない
奨励 バグつぶしステージングに移行する前に、開発チームによるバグ潰し
次に アルファ(内部)ユーザーで試してみてから ベータ(外部)ユーザーと共有する前に、アルファ(内部)ユーザーで試します。これらの選択されたベータ・グループは、インスタンスとデバイスに関して、プロダクション・ベースの大部分を代表しているはずです。
バージョンが広く利用できるようになったら ブルーグリーン本番サーバーとステージングサーバーを交互に配置し、必要に応じてすぐに以前のバージョンにフォールバックできるようにします。
システムの健全性を監視し、アラートを設定し、テストデータを分析する。
カスタマーサクセスチームに相談し、アプリストア、ソーシャルメディア、コミュニティプラットフォームなど、他のフィードバックソースを探そう。
これらのステップをすべて踏んだのであれば、GAへの準備が整ったことは間違いない。
結論として
上で紹介したのは、私たちが完璧に近いと感じながらも、まだ達成可能な品質戦略のアプローチである。私たちはすべてのサービス、特にレガシーコードと継承されたソフトウェアに対して完全に実装したわけではないが、各レイヤーが大きな違いをもたらすことが証明されていると自信を持って言うことができる。Vonage の SDET と DevOps エンジニアのチームがそれを保証してくれるだろう。それは大きな仕事ですが、私たちはあなたに適したカバレッジに達するまで、一度に1つのレイヤーを徐々に追加することを勧めます。
また、この調査によって、あなたが希望する稼働率にさらに近づけることを願っています。