Kiểm thử phần mềm
Đo suy giảm hiệu năng bằng p95 và các phiên ghép cặp
Thiết kế phép đo hồi quy độ trễ, lấy mẫu theo phiên và diễn giải độ bất định trên dữ liệu mô phỏng.
Thích và đánh giá Bình luận và hỏi đáp1. Dùng p95 để phát hiện suy giảm ở phần đuôi
Sau khi thay đổi truy vấn lấy thời khóa biểu, một nhóm muốn biết người dùng ở vùng chậm có phải đợi lâu hơn không. Độ trễ trung bình có thể ổn định trong khi phần đuôi tăng. Với mỗi lượt chạy, ví dụ dùng p95 theo hạng gần nhất: sắp xếp độ trễ rồi lấy phần tử ở hạng ceil(0.95 × n) tính từ 1. Cách tính cần được ghi lại để hai phiên bản báo cáo cùng một đại lượng.
Đơn vị so sánh là phiên đo. Trong cùng phiên, bản gốc và bản mới dùng cùng nhóm dữ liệu và mức tải, sau đó tính chênh lệch p95 của hai lượt. Các yêu cầu trong một lượt có thể cùng chịu tác động của cache, hàng đợi và thu gom bộ nhớ. Xem tất cả yêu cầu như quan sát độc lập có thể đánh giá thấp độ dao động giữa các phiên.
2. Ghép cặp và đặt trước tiêu chí đánh giá
Mỗi phiên nên công bố cấu hình tải, dữ liệu, số lượt làm ấm, thời điểm và thứ tự hai bản. Có thể luân phiên thứ tự A → B và B → A để giảm nguy cơ nhầm hiệu ứng của bản mới với việc bản đó luôn chạy sau. Xử lý yêu cầu lỗi và hết thời gian bằng một quy ước đã đăng ký trước. Chỉ giữ yêu cầu thành công có thể che một hồi quy làm tăng lỗi ở phần đuôi.
Trong dữ liệu mô phỏng, sáu chênh lệch là 8, 14, 8, 12, −4 và 11 ms. Trung vị theo phiên là +9,5 ms. Một mức tăng 9,5 ms có ý nghĩa vận hành hay không còn phụ thuộc mục tiêu độ trễ, mức tải và chi phí. Nên đặt ngưỡng có ý nghĩa trước khi xem số liệu và báo cả trường hợp chưa đủ bằng chứng.
3. Dùng bootstrap trên chênh lệch theo phiên
Chạy bằng Python 3. Mã lấy mẫu lại từ sáu chênh lệch theo phiên, dùng seed cố định rồi tính trung vị ở mỗi mẫu. Khoảng bách phân vị thu được trong ví dụ là 2 đến 13 ms. Phép tính minh họa đơn vị lấy mẫu phù hợp với thiết kế ghép cặp. Sáu phiên tổng hợp quá ít để suy rộng kết quả hoặc mặc nhiên coi khoảng có độ bao phủ danh nghĩa khi dữ liệu thực tương quan giữa các phiên.
Môi trường thực hành. Python 3.10 trở lên. Ví dụ dùng thư viện chuẩn Python.
"""Phân tích số đo minh họa theo phiên ghép cặp."""
from math import ceil
from random import Random
from statistics import median
# Sáu cặp p95, mỗi cặp đo trên cùng một kịch bản giả lập.
PAIRED = [(108, 116), (114, 128), (105, 113), (120, 132), (110, 106), (118, 129)]
def nearest_rank(values, quantile):
if not values or not 0 < quantile <= 1:
raise ValueError("Cần mẫu không rỗng và 0 < q <= 1")
return sorted(values)[ceil(quantile * len(values)) - 1]
def paired_bootstrap(deltas, repeats=2000, seed=2026):
random = Random(seed)
sampled = [median(random.choices(deltas, k=len(deltas))) for _ in range(repeats)]
return nearest_rank(sampled, 0.025), nearest_rank(sampled, 0.975)
if __name__ == "__main__":
assert nearest_rank(range(1, 21), 0.95) == 19
deltas = [new - baseline for baseline, new in PAIRED]
print("Chênh lệch theo phiên (ms):", deltas)
print("Trung vị chênh lệch:", median(deltas), "ms")
print("Khoảng bootstrap minh họa:", paired_bootstrap(deltas), "ms")
assert median(deltas) == 9.54. Thiết kế phép đo có khả năng lặp lại
Chạy thử nhiều phiên trên các ngày khác nhau để ước lượng dao động giữa phiên và chọn ngân sách đo. Lưu dữ liệu thô, chỉ số lỗi, cấu hình tải, mã phiên bản và thứ tự để nhóm khác tính lại cùng chỉ số. Nếu phiên chia sẻ hạ tầng hoặc được gom theo ngày, kiểm tra cấu trúc phụ thuộc này trước khi chọn cách ước lượng bất định.
Có thể thử giả thuyết rằng suy giảm chỉ xuất hiện ở tải gần bão hòa. Chọn trước một dải tải, giữ cố định kích thước dữ liệu và báo p50, p95, thông lượng cùng tỷ lệ lỗi ở từng mức. Một báo cáo dùng cả chỉ số người dùng và thông tin bộ nhớ/CPU sẽ giúp định hướng bước truy nguyên sau khi đã xác nhận suy giảm. Đọc thêm nghiên cứu về thiết kế benchmark của Kalibera và Jones.