Kiểm thử phần mềm

Đo bao phủ trạng thái và chuyển tiếp trong quy trình duyệt

Phân biệt đi qua mọi trạng thái với thực thi đủ mọi chuyển tiếp hợp lệ.

Vấn đề nghiên cứuNâng cao6 phút đọcPython

Thích và đánh giá Bình luận và hỏi đáp
Gửi → Duyệt phủ 3/3 trạng thái, nhưng chỉ 2/4 chuyển tiếp.
Gửi → Duyệt phủ 3/3 trạng thái, nhưng chỉ 2/4 chuyển tiếp. Mở hình lớn ↗

1. Lập bảng từ đặc tả

Hồ sơ bắt đầu ở Nháp. Gửi tạo Chờ duyệt. Tại Chờ duyệt, Duyệt tạo Đã duyệt và Trả lại đưa hồ sơ về Nháp. Nếu hồ sơ đã duyệt còn cho phép mở lại, đây là cạnh thứ tư. Giữ bảng chuyển tiếp độc lập với trình điều khiển để dùng làm danh sách nghĩa vụ kiểm thử.

2. Phân biệt hai mẫu số

Chuỗi Gửi rồi Duyệt đi qua cả ba trạng thái, nhưng chỉ chạy hai trong bốn chuyển tiếp hợp lệ. Để phủ đủ cạnh, cần ít nhất thêm thao tác Trả lại và Mở lại ở đúng trạng thái. Có thể gộp nhiều cạnh trong một ca, miễn là lỗi ở bước trước không che mất đánh giá bước sau.

3. Kiểm tra ca không hợp lệ riêng

Mã chạy một chuỗi hoàn chỉnh và ghi cặp trạng thái nguồn–sự kiện vào tập cạnh đã đi qua. Bảng chuyển tiếp xác định duy nhất trạng thái đích của mỗi cặp trong mô hình tất định này. Sau đó thử Duyệt ở Nháp và xác nhận bị từ chối. Mẫu số chính ở đây là chuyển tiếp hợp lệ. Nếu báo bao phủ mọi chuyển tiếp theo bảng, cần tính thêm các ô không hợp lệ được xác định trong đặc tả.

Chạy ví dụ bằng python test_bao_phu_chuyen_trang_thai.py.

Môi trường thực hành. Python 3.10 trở lên. Ví dụ dùng thư viện chuẩn Python.

Python · test_bao_phu_chuyen_trang_thai.pyTải mã nguồn
bang = {
    ("nhap", "gui"): "cho",
    ("cho", "duyet"): "da_duyet",
    ("cho", "tra_lai"): "nhap",
    ("da_duyet", "mo_lai"): "cho",
}

def kiem_tra(chuoi):
    hien_tai = "nhap"
    trang_thai = {hien_tai}
    canh = set()
    for su_kien in chuoi:
        khoa = hien_tai, su_kien
        if khoa not in bang:
            raise ValueError(khoa)
        canh.add(khoa)
        hien_tai = bang[khoa]
        trang_thai.add(hien_tai)
    return len(trang_thai), len(canh)

assert kiem_tra(["gui", "duyet"]) == (3, 2)
assert kiem_tra(["gui", "tra_lai", "gui", "duyet", "mo_lai"]) == (3, 4)
try:
    kiem_tra(["duyet"])
except ValueError:
    print("Bao phủ đủ 4 chuyển tiếp, phát hiện thao tác không hợp lệ.")
else:
    raise AssertionError("Không thể duyệt từ Nháp")

4. Thiết kế bộ ca gọn và dễ chẩn đoán

Lập một chuỗi phủ nhiều cạnh cho kiểm thử tích hợp, nhưng dùng ca riêng đối với thao tác không hợp lệ quan trọng. Sau lần từ chối, đọc lại dữ liệu để bảo đảm trạng thái và nhật ký nghiệp vụ đúng như hợp đồng. Khi có quyền người dùng và điều kiện bảo vệ, cùng một cạnh trên hình có thể tạo nhiều nghĩa vụ dữ liệu.

Đọc thêm Giáo trình ISTQB CTFL về kiểm thử chuyển trạng thái.