GH GambleHub

カーネルテスト戦略

1)原則

ピラミッドトロフィーバランス。基盤-急速なモジュラーおよび契約テスト;上記-コンポーネントと統合;頂点では最小限ですが貴重なe2e層です。
シフト左。以前は欠陥(linter、 static analysis、 property-based)をキャッチするほど安価です。
設計によって決定論的。時間、ネットワーク、ランダムおよび外部依存関係を管理します。
質の高い経済学。すべてのテストは「保険」です。目標はトータルコスト(欠陥+テストメンテナンス)を最小限に抑えることです。
リスク指向。カバレッジはビジネス不変とプロトコル(契約、idempotency、 consistency)に集中します。

2)テストのレベルと責任領域

2.1単位(モジュラー)

I/Oなしで純粋なロジックをチェックします。
境界(ポート/アダプタ)のみを濡らし、データには工場を使用します。
速い(≤ 50-100 ms/test)、平行。

2.2契約(サプライヤー↔消費者)

サービス間のAPI契約(HTTP/gRPC/event)を修正しました。
私たちは消費者主導のアプローチを使用しています。契約はVCSに保存され、サプライヤのCIにチェックされます。
統合e2eの脆弱性を低減します。

2.3部品(実質の貯蔵とモジュールの上で、)

コンテナ内の実際のデータベース/キャッシュ(Testcontainers)でサービスの一部を起動します。
スキーママイグレーション、インデックス、トランザクション、ロックを検証します。

2.4統合/システム(サービス間のエンドツーエンドのパス)

私たちは、孤立した環境で一連のサービスを調達します。
エンドツーエンドの不変量をチェックします:トランザクション性、レトライ、idempotency、エラー処理。

2.5 E2E(最低「貴重な」層)

実際のプロトコルと環境「販売中のように」、しかし、限られたシナリオセット:支払い→確認→投稿;登録→確認→エントリー。
私たちは、リリースと回帰のために高リスク機能を使用しています。

3)テスト可能なアーキテクチャ

ポート/アダプタ(六角形)。ビジネスカーネルはHTTP/SQLについて知らない。依存関係はインターフェイスを介して実装されます。
時間/ランダムの注入。'Clock'、 'Random'-依存関係;テストでは修正します。
設定可能なI/O抽象化。キュー、DB、 KMS-テスト実装のインターフェイスを介して。
機能不変量。私達は明示的にpostconditionsとpredicatesを策定します-それらはテストし、監視することは容易です。

4)テストのためのデータ

静的なJSON治具の代わりに工場/ビルダー:脆弱性が少ない。
テスト前のIdempotent SeedsとリセットフックDB (migrations→truncate→seed)。
ケースカタログ:"norms"、 "edges"、 "errors'、" chaos"。
本物のPDの代わりに合成:発電機、マスキング、プライバシープロファイル。

5)競争とアイデンポテンス

レーステスト:競争力のあるエントリー/リザーブ/ロック。
idempotentキーのチェック(例えば、'(operation、 external_id)'):繰り返し呼び出しは状態を変更しません。
レトライとタイムアウト:一時的なエラーが発生した場合の正確性を保証します。

疑似コード(idempotency):

dedupe_key = hash(op + external_id)
if exists(executions, dedupe_key): return previous_result else:
reserve(dedupe_key)
result = do_operation()
store(executions, dedupe_key, result)
return result

6)時間、タイムアウト、タイムゾーン

保存された時間はすべてUTCです。テストでは'FixedClock'を使用します。
DSTケース(重複/時計ミス)、「ローカルデイ」ウィンドウをテストします。
私たちは単調な時計でタイムアウトをチェックします。NTPジッタをシミュレートします。

7)回復力と混沌

障害注入:ネットワークエラー、5xx、遅延、部分的な劣化(キャッシュが利用できません)。
前処理環境でのカオステスト:ノードの切断、キューのオーバーロード、BGP/Anycastの破損(エミュレーション)。
フォールバックポリシーとUXの劣化:テストは正しい「優美な劣化」を確認する必要があります。

8)パフォーマンス

重要なアルゴリズムのマイクロベンチマーク(CPU/alloc固定付き)。
ロードプロファイル:ベースライン(p50/p95)、ストレス(ピーク)、メモリリークの拡張(浸漬)。
リグレスゲート:p95レイテンシーがベースライン>X%よりも悪い場合、ビルドは失敗します。

9)安全性とコンプライアンス

SAST/Lint:脆弱性/antipatternsを検索します。
DAST/IAST:スタンドの基本的なシナリオ(XSS/SQLi/SSRFサンプル)。
Secrets-scan:コードとアーティファクトにキー/パスワードはありません。
プライバシーテスト:ログ/トレースのPDの欠如、「同意管理」の遵守、アップロードのための匿名化プロファイル。

10)品質とSLOの指標

テストパスレートとフラッキーインデックス。

カバレッジ対象:
  • 重要なカーネルモジュールの90〜100%
  • 周辺(不変量に焦点を当てて)の70-80%。
  • リリースリスクスコア:全体:クリティカルファイルの変更×ベンチマークの低下×新しいフラッキー。
  • 誤った予算:prod-SLO (uptime/errors)と実験とリリース周波数の組み合わせ。

11) CI/CDおよびゲート

ステージマトリックス:

1.Lint/Format/TypeCheck

2.ユニット+プロパティベース

3.契約プロバイダー/消費者

4.コンポーネント(テストコンテナ)

5.統合+Perfの煙

6.セキュリティ(SAST/Secrets)

7.ビルド/パッケージ+SBOM

8.プリプロッド+e2e+カオススモークに展開

ゲート:契約の停止、レイテンシーの増加、新しい重大な脆弱性。

キャッシュとシャーディング:並列処理と増分実行によりパイプラインを加速します。

12)薄片状テスト: 検出および処置

Autorun+Quorum(実行の2/3)。
Flakiパターン検出器:時間/ランダム/暗黙的な期待への依存。
SLAによる検疫:テストはリリースをブロックしませんが、N日間で修正/書き換えが必要です。
重要な経路の「コア」のフラックへのゼロ許容。

13)特性ベース、突然変異および段階テスト

プロパティベース:プロパティ(可換性、idempotency、 monotony)、境界データジェネレータを定式化します。
突然変異テスト:テストの「強さ」を測定します(導入された突然変異を殺すかどうか)。
Fuzzing:プロトコル/パーサ/フォーマット(JSON、 Protobuf、 CSV)、特にセキュリティ境界で。

Exampleプロパティ(擬似コード):

prop "serialize/deserialize roundtrip":
forAll(randomModel()):
decode(encode(model)) == model

14)観測可能性とテストとの関連

テストトレース(ログのトレースID):プリプロッドで複製するのに便利です。
パフォーマンス実行中のメトリクスのスナップショットは、アーティファクトとして保存されます。
ログコントロール:機密フィールドなし、SLO内のログサイズ。

15)ドキュメントと手順

テストハンドブック:どのテストを実行するか、どのように工場を書くか、どのように契約を更新するか。
Runbooks:リプレイインシデント、迅速な診断、リリースのロールバック。
不変カタログ:システム保証のリストと関連するテスト/アラートへの参照。

16)建築家チェックリスト

1.カーネル不変量とクリティカルパスについて説明しましたか?
2.テストレベルとそのSLO(時間、安定性)のマトリックスはありますか?
3.契約は、サプライヤーと消費者のCIでバージョン化され、検証されますか?
4.テストで制御される時間/ランダム/ネットワーク(FixedClock、 Fault-injector)?
5.構成されたTestcontainers/isolated database、移行がチェックされていますか?
6.パフォーマンスベースラインと回帰ゲートはありますか?
7.SAST/Secrets-scanとプライバシーログチェックは有効ですか?
8.Flakyは記録されており、修正用のSLAはありますか?
9.テストとprod-SLOと誤った予算の間の接続は透明ですか?
10.runbookとinvariantカタログは文書化されていますか?

お知らせいたします

カーネルテスト戦略は、ツールのリストではなく、テスト可能な設計、厳格なレベル階層、マネージドデータ、フォールトトレランス、およびCI/CDに組み込まれたメトリクスのアーキテクチャ能力です。説明された慣行に従って、チームは迅速かつ信頼性の高いフィードバックを受け取り、リリースは予測可能で安全になります。

Contact

お問い合わせ

ご質問やサポートが必要な場合はお気軽にご連絡ください。いつでもお手伝いします!

Telegram
@Gamble_GC
統合を開始

Email は 必須。Telegram または WhatsApp は 任意

お名前 任意
Email 任意
件名 任意
メッセージ 任意
Telegram 任意
@
Telegram を入力いただいた場合、Email に加えてそちらにもご連絡します。
WhatsApp 任意
形式:+国番号と電話番号(例:+81XXXXXXXXX)。

ボタンを押すことで、データ処理に同意したものとみなされます。