Bỏ qua để đến nội dung

Giải thích các quality metric

Orbit hiển thị nhiều quality metric: pass rate, flaky share, completion, health, readiness. Mỗi metric trả lời một câu hỏi, trên một tập kết quả. Trang này giải thích mỗi metric đếm gì và trong khoảng thời gian nào, để bạn hiểu vì sao Station có thể báo “all tests passed” trong khi Console báo Watch hoặc Blocked. Cuối trang có một ví dụ cụ thể và danh sách việc cần làm cho các trường hợp thường gặp.

Mỗi metric dựa trên một trong hai cơ sở. Phần lớn bất ngờ đến từ việc so một metric của cơ sở này với một metric của cơ sở kia.

Cơ sở Câu hỏi nó trả lời Ví dụ
Kết quả mới nhất (latest result) “Mỗi test hiện đang ở đâu?” Orbit lấy kết quả mới nhất của mỗi test và bỏ qua kết quả cũ hơn. Một test fail hôm thứ Hai và pass hôm thứ Ba được tính là pass. Station Coverage, cycle completion, Failing now, catalog coverage, các test P1 đang fail
Một khoảng thời gian (a period) “Các test đã chạy thế nào trong những ngày qua?” Orbit xem mọi kết quả trong khoảng thời gian đó. Một test fail hôm thứ Hai và pass hôm thứ Ba được tính là flaky, dù hiện tại nó pass. Console Quality › Health, pass rate 7 ngày, flaky share, failure mới, thay đổi duration, risk được phát hiện

Vài quy tắc đúng cho cả hai:

  • Ngày là ngày của project. Một ngày tính từ nửa đêm đến nửa đêm theo múi giờ của project. “7 ngày qua” là hôm nay và sáu ngày trước đó.
  • Chỉ kết quả mang tính quyết định mới tính là một run. Passed, flaky, failed, timed out và interrupted là kết quả mang tính quyết định. Skipped và not run không phải là run.
  • Flaky được tính là pass trong pass rate. Một kết quả flaky là một test đã fail rồi pass ở lần retry trong cùng một run.
  • Run bị override không được tính. Một run mà ai đó đã đổi số worker, số retry, time limit hoặc variable chỉ cho run đó sẽ không được tính vào quality metric (xem Các tính năng run trên Station).
  • Run và kết quả đã bị invalidate không được tính.
  • Test bị quarantine không được tính và được đếm riêng (xem Quarantine ảnh hưởng đến metric ra sao).

Một release có một scope: các workload, suite, tag và requirement mà release bao gồm. Mỗi cycle copy scope đó lúc được tạo và giữ lại. Mọi metric của một cycle, trên mọi trang, được tính trên một tập test: các test có trong catalog mới nhất, thuộc một workload của environment của cycle, nằm trong scope của cycle và nằm trong scope của release.

Nghĩa là:

  • “Ran”, “expected”, completion, pass rate, failing now và gate của một cycle đều mô tả cùng các test. “Ran” không bao giờ lớn hơn “expected”.
  • Một run thuộc cycle theo thời gian nhưng test những thứ nằm ngoài scope của cycle sẽ không được cộng vào metric của cycle. Trang nói rõ điều này thay vì giấu đi: “N tests ran in this cycle but are not in its scope, so they are not counted.” (hoặc “…are outside the release scope…”), kèm link để sửa scope.
  • Khi ai đó sửa scope của release về sau, các cycle đang mở và đã lên kế hoạch không tự đi theo. Trang Release hiển thị “The release scope changed. N cycles do not follow it yet.” cùng nút Apply to cycles (QA Lead trở lên).
  • Trong Matrix của release, một test của release nằm ngoài scope của cycle hiển thị “Not in this cycle”, không phải “Not run”.
  • Một cycle đã đóng giữ các con số của nó dưới dạng snapshot. Nếu sau đó kết quả, scope, catalog hoặc danh sách quarantine thay đổi, trang cycle cho biết các con số được tính lại trực tiếp và vì sao.

Bảng liệt kê từng metric theo tên bạn thấy trên màn hình.

Metric Đếm gì Cơ sở và khoảng thời gian Thấy ở đâu
Pass rate Số kết quả pass và flaky chia cho mọi kết quả mang tính quyết định, gộp chung trên cả khoảng thời gian (không phải trung bình của các tỉ lệ theo ngày). Khoảng thời gian: 7 ngày project gần nhất. Một cycle dùng các run của riêng nó; gate của một release trên một environment dùng mọi cycle của release trên environment đó. Console Quality › Health, Home, sidebar, gate, trang cycle. Nhãn nêu rõ cơ sở: “Pass rate, 7 days (project days)”, “Pass rate, this cycle”, “Pass rate, all cycles of this release on {environment}”.
Pass rate per day Như trên, mỗi ngày một giá trị. Khoảng thời gian: 30 ngày gần nhất, đọc từ bảng rollup theo ngày (“Rollup, includes quarantined tests”). Quality › Health, biểu đồ trend.
Flaky share Số test có độ ổn định là flaky, chia cho số test đã chạy. Khoảng thời gian: 7 ngày project gần nhất. Quality › Health, Flaky › Trends, gate.
Flaky tests Các test flaky trong khoảng thời gian: Playwright báo flaky ít nhất một lần, hoặc test chạy ít nhất hai lần và có cả pass lẫn fail. Khoảng thời gian: 7 ngày gần nhất, hoặc cycle. Trang Flaky, trang cycle.
Flaky results Các kết quả đã fail rồi pass ở lần retry. Đếm kết quả, không đếm test. Khoảng thời gian: 7 ngày gần nhất. Flaky › Trends.
New failures, 7 days (project days) Các test fail trong khoảng thời gian và không fail trong 30 ngày trước đó, trên bất kỳ environment nào của project. Khoảng thời gian: 7 ngày project gần nhất, cộng 30 ngày trước đó. Quality › Health, Home, Station Insights, gate của environment.
New in this cycle Các test đang fail trong cycle mà chưa fail vào cuối cycle trước của cùng release và environment. Nếu không có cycle trước, mọi test đang fail đều được tính và metric ghi “no previous cycle”. Cycle, so với cuối cycle trước. Trang cycle, tab Cycles của release, gate của release, thẻ Release trên Station.
Persistent failures (Tests failing 3+ runs in a row) Các test trong catalog có từ 3 kết quả mới nhất liên tiếp trở lên đều fail, và đã chạy trong khoảng thời gian. Chuỗi fail trong 30 ngày gần nhất; test phải chạy trong 7 ngày gần nhất. Quality › Health, gate.
Failing now Các test có kết quả mới nhất trong cycle là failed, timed out hoặc interrupted. Kết quả mới nhất trong cycle. Trang cycle, Home.
Failing P1 tests Các test P1 có kết quả mang tính quyết định mới nhất là fail. Kết quả mới nhất trong 30 ngày gần nhất (hoặc “Failing P1, this release”). Quality › Health (mục check P1 tests), gate, thẻ Release.
P1 tests not run Các test P1 trong catalog không có kết quả nào. 30 ngày gần nhất. Quality › Health (mục check P1 tests), Station Coverage.
Duration change Trung vị của duration trung bình theo ngày trong khoảng thời gian, so với 30 ngày gần nhất, tính theo phần trăm. Khoảng thời gian: 7 ngày gần nhất so với 30 ngày. Quality › Health, Quality › Performance.
Cycle completion Số test trong tập của cycle có ít nhất một kết quả mang tính quyết định trong cycle, chia cho mọi test của tập. Kết quả mới nhất trong cycle. Station Coverage (Cycle completion), trang cycle, gate của release.
Results in this cycle Kết quả mới nhất của mỗi test dự kiến: pass, flaky, fail hoặc chưa chạy. Kết quả mới nhất trong cycle. Khi environment không có cycle: 30 ngày gần nhất (“Results in 30 days”). Station Coverage.
Catalog coverage Số test trong catalog có kết quả mang tính quyết định mới nhất là pass, chia cho mọi test trong catalog. Kết quả mới nhất trong 30 ngày gần nhất. Console Quality › Coverage, gate.
Requirement coverage Số requirement đang active mà mọi test liên kết đều pass ở kết quả mới nhất, chia cho mọi requirement đang active. Kết quả mới nhất trong 30 ngày gần nhất (project), hoặc trong các cycle của release (release). Requirements, gate của release.

Quality › Health đưa ra một kết luận cho 7 ngày project gần nhất. Kết luận đó là mức xấu nhất trong năm mục check. Chỉ cần một mục ở mức Watch là cả project ở mức Watch, kể cả khi bốn mục còn lại đều Healthy.

Mục check Watch khi Critical khi
Pass rate dưới 95% dưới 85%
New and persistent failures từ 3 failure mới trở lên, hoặc từ 1 persistent failure trở lên từ 10 failure mới trở lên, hoặc từ 5 persistent failure trở lên
Flaky share từ 3% trở lên trên 8%
Duration change trên +15% trên +40%
P1 tests 1 hoặc 2 test P1 đang fail, bất kỳ test P1 nào chưa chạy trong 30 ngày, hoặc bất kỳ test nào fail từ 3 run liên tiếp trở lên từ 3 test P1 đang fail trở lên, hoặc một test P1 fail từ 3 run liên tiếp trở lên

Một mục check không có giá trị (không test nào chạy, không có lịch sử duration) hiển thị No data và không được tính. Khi hoàn toàn không có pass rate, cả kết luận là No data.

Các mục check dùng cả project, hoặc workload và environment bạn chọn ở đầu trang. Trang Coverage của Station luôn hiển thị một environment.

Quality, tab Health: verdict, năm check Pass rate, New and persistent failures, Flaky share, Duration change và P1 tests, cùng biểu đồ Pass rate per day

Mọi environment được tự động check risk trong 7 ngày gần nhất. Mỗi phát hiện thành một risk Proposed. Risk proposed không bao giờ được tính cho đến khi một QA Lead chọn Accept; risk đó cũng có thể bị bác bỏ.

Phát hiện Mức
“N P1 tests failing persistently” (fail từ 3 lần liên tiếp trở lên) Critical
“N P1 tests flaky” High
“Suite …: N tests failing persistently” (từ 3 test trở lên trong một suite) High
“N tests failing with the same error” (có test P1 hoặc P2 trong đó, vẫn đang fail) High từ 3 test, ít hơn thì Medium
“Flaky tests at N%” (flaky share trên 8%) Medium
“Tests running N% slower” (duration change trên +40%) Medium

Khi điều kiện không còn, risk proposed tự được rút lại. Risk đã accept thì không tự đóng: nó hiển thị Condition no longer seen, và một người đặt trạng thái của nó thành Mitigated hoặc Closed.

Tab Readiness của một release hiển thị một kết luận ở đầu trang:

Kết luận Ý nghĩa
Blocked Có ít nhất một mục được liệt kê dưới “N things block this release”.
In progress Không có gì chặn, nhưng release chưa sẵn sàng để phát hành.
Ready Không có gì chặn và release đã sẵn sàng.
Ready with risks Sẵn sàng, nhưng lần đánh giá readiness gần nhất tìm thấy risk đang mở hoặc warning của gate.

Các mục chặn một release gồm:

  • Cycles: “N of M cycles are not closed”. Một cycle được đóng khi ai đó chọn Close cycle now, hoặc khi đến ngày kết thúc của nó.
  • Decision: “No decision since the last cycle closed”, hoặc “The latest decision is hold”.
  • Approvals và các mục Checklist bắt buộc chưa hoàn thành.
  • Gate: “The gate fails on {environment}”.
  • Failures: các nhóm failure P1 đang mở liên quan đến test trong scope.
  • Risks: “N open high or critical risk(s)”. Chỉ risk đã accept có trạng thái Open hoặc Acknowledged mới được tính. Risk mức Medium không chặn; chúng biến một release sẵn sàng thành Ready with risks.
  • Environment: một environment dùng để sign-off đang inactive.
  • Requirements: các requirement trong scope đang fail hoặc chưa có test.

Lần đánh giá readiness liệt kê lý do bằng lời, ví dụ “open high risk: 1 P1 test flaky”.

Một test bị quarantine vẫn chạy (shadow mode) nhưng không được tính. Orbit đọc danh sách quarantine hiện tại mỗi lần tính một metric.

  • Test bị quarantine bị loại khỏi cả tử số lẫn mẫu số của mọi quality metric: pass rate, failing now, failing P1, failure mới, persistent failure, flaky share, flaky test, completion và test dự kiến của cycle.
  • Nó được đếm riêng, cạnh metric: “N quarantined, not counted”.
  • Nó không bao giờ chứng minh một requirement.
  • Việc phát hiện risk bỏ qua nó, nên một đề xuất “P1 test flaky” cho nó sẽ bị rút lại. Risk đã accept chỉ hiển thị Condition no longer seen.
  • Khi test được đưa ra khỏi quarantine, mọi kết quả của nó trong khoảng thời gian được tính lại, kể cả kết quả từ lúc nó đang bị quarantine. Metric có thể thay đổi vào ngày đó.
  • Các biểu đồ từ 30 ngày trở lên lấy từ bảng rollup theo ngày và vẫn bao gồm test bị quarantine. Chúng ghi “Rollup, includes quarantined tests”.
  • Test debt vẫn đếm test bị quarantine: chúng chính là khoản debt.

Quarantine cần role QA Lead. Chọn các test trên trang Flaky rồi chọn Quarantine, nhập lý do và ngày kết thúc. Station nhận thay đổi trong vòng 5 phút. Test tự ra khỏi quarantine khi nó pass đủ số run liên tiếp (một setting của project).

Known flaky (QA Engineer) thì khác: nó chỉ đưa test ra khỏi queue Flaky. Test vẫn được tính trong flaky share và trong việc phát hiện risk.

Project demo “Toolshop Retail” có release 4.2 với hai cycle trên environment staging. Mỗi người trong team thấy một bức tranh khác nhau:

  • Station Coverage, Cycle 2: Cycle completion 100%, Results in this cycle: cả 29 test đều pass.
  • Console Quality › Health: Watch.
  • Console release 4.2, Readiness: Blocked, “2 things block this release”.
  • Lần đánh giá readiness gần nhất liệt kê “open high risk: 1 P1 test flaky”.

Cả bốn đều đúng. Chúng trả lời những câu hỏi khác nhau.

  1. Coverage xem kết quả mới nhất. Trong Cycle 2, kết quả mới nhất của cả 29 test đều pass. Các lần fail trước đó trong cycle không thay đổi điều này.
  2. Health xem 7 ngày gần nhất. Một test P1, “Checkout with gift card”, fail hôm thứ Ba và pass ở lần retry. Kết quả đó là flaky. Trong 7 ngày, 1 trên 31 test đã chạy là flaky: Flaky share là 3.2%. Mục check chuyển sang Watch từ 3% (và chỉ Critical khi trên 8%). Bốn mục còn lại đều Healthy, nhưng kết luận là mục xấu nhất, nên project ở mức Watch.
  3. Việc phát hiện risk thấy cùng test P1 flaky đó và đề xuất “1 P1 test flaky”, mức High. Một QA Lead đã accept nó, nên đây là một risk mức High đang mở.
  4. Readiness liệt kê những gì chặn release: “Cycles: 2 of 2 cycles are not closed” và “Risks: 1 open high or critical risk”. Chỉ một trong hai cũng đủ để ra Blocked.

Team làm như sau:

  1. Mở Flaky trên Console. Queue liệt kê “Checkout with gift card” đầu tiên (test P1 được xếp trước). Dùng Investigate để xem các run của nó.
  2. Sau đó chọn một cách:
    • Sửa test (hoặc sản phẩm) và chạy lại. Kết quả flaky vẫn nằm trong cửa sổ 7 ngày cho đến khi nó cũ hơn 7 ngày; Watch tự hết khi các run sạch đẩy nó ra ngoài.
    • Quarantine test (QA Lead) nếu việc sửa sẽ mất thời gian. Test rời khỏi flaky share ngay, và việc phát hiện risk không còn thấy nó.
  3. Mở Risks and gate và quyết định về risk: đặt nó thành Mitigated hoặc Closed kèm ghi chú khi test đã được sửa hoặc đã bị quarantine. Risk đã accept không tự đóng.
  4. Khi test xong, mở từng cycle và chọn Close cycle now (QA Lead), hoặc để cycle đến ngày kết thúc.
  5. Ghi một decision Proceed cho release. Kết luận chuyển sang Ready (hoặc Ready with risks nếu vẫn còn risk mức Medium đang mở).
Bạn thấy Lý do Cần làm gì
Station Coverage là 100% nhưng Health báo Watch Coverage dùng kết quả mới nhất; Health dùng mọi kết quả trong 7 ngày. Một test đã fail rồi pass vẫn được tính trong 7 ngày đó. Mở mục check của Health không ở mức Healthy. Giá trị và quy tắc của mục đó cho biết điều gì đã kích hoạt nó.
Flaky share ở mức Watch Từ 3% trở lên số test đã chạy trong 7 ngày là flaky. Xử lý queue Flaky: sửa, quarantine hoặc đánh dấu Known flaky (cách cuối không thay đổi tỉ lệ).
Pass rate giảm sau khi một test ra khỏi quarantine Test ra khỏi quarantine được tính lại cùng mọi kết quả của nó trong khoảng thời gian. Bình thường. Kiểm tra rằng test hiện đã pass.
Pass rate tăng sau khi quarantine Test bị quarantine rời khỏi metric. Bình thường. Ghi chú “N quarantined, not counted” cho biết có bao nhiêu test.
Release ở mức Blocked vì “cycles are not closed” Release chờ đến khi mọi cycle đã đóng. Đóng từng cycle bằng Close cycle now khi đã test xong cycle đó.
Release ở mức Blocked vì một risk Một risk đã accept ở mức High hoặc Critical đang Open hoặc Acknowledged. Xử lý nguyên nhân, rồi đặt risk thành Mitigated hoặc Closed.
Một risk hiển thị Condition no longer seen Việc check tự động không còn thấy vấn đề. Đóng risk nếu bạn đồng ý. Nó vẫn được tính cho đến khi bạn đóng.
Một cycle hiển thị “N tests ran in this cycle but are not in its scope” Các run trong cycle đã test những suite nằm ngoài scope của cycle. Nếu chúng thuộc về cycle, sửa scope của cycle; nếu không, bỏ qua ghi chú này.
“The release scope changed. N cycles do not follow it yet.” Scope của release đã được sửa sau khi các cycle được tạo. Chọn Apply to cycles (QA Lead) để áp dụng scope mới cho các cycle đang mở và đã lên kế hoạch.
New failures khác với New in this cycle Chúng trả lời những câu hỏi khác nhau: mới trong 7 ngày gần nhất so với 30 ngày trước đó, hoặc mới so với cycle trước. Đọc nhãn: nhãn luôn nêu rõ cơ sở.
Một metric hiển thị No data Không có kết quả mang tính quyết định nào trong khoảng thời gian hoặc cycle của nó. Chạy test, hoặc chọn khoảng thời gian dài hơn hay environment khác.

Mọi metric có thể hiểu theo hai cách đều ghi cơ sở của nó trong nhãn hoặc tooltip, cùng một cách viết trên Console và Station: “7 days (project days)”, “this cycle”, “all cycles of this release on {environment}”, “last 30 days”. Chọn icon thông tin cạnh một metric để xem “How is this computed?”. Khi hai con số có vẻ mâu thuẫn, hãy so nhãn của chúng trước.