Kiểm thử phần mềm

Kiểm thử pairwise khi cấu hình có ràng buộc

Tạo bộ ca bao phủ các cặp khả thi, chứng minh cận dưới và tìm một tương tác ba chiều bị bỏ sót.

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

Thích và đánh giá Bình luận và hỏi đáp
Năm ca đủ bao phủ các cặp của 12 cấu hình hợp lệ. Tương tác desktop, mật khẩu và online vẫn vắng mặt.
Năm ca đủ bao phủ các cặp của 12 cấu hình hợp lệ. Tương tác desktop, mật khẩu và online vẫn vắng mặt. Mở hình lớn ↗

1. Một cặp giá trị có thực hiện được trong hệ thống?

Một ứng dụng có bốn tham số nhị phân gồm chế độ web/desktop, xác thực mật khẩu/OAuth, mạng online/offline và giao diện sáng/tối. Khi offline, OAuth không khả thi trong mô hình thử nghiệm này. Không gian tích Descartes có 16 cấu hình, nhưng bốn cấu hình OAuth offline không chạy được. Câu hỏi là chọn bao nhiêu ca để quan sát mọi cặp giá trị có thể thực thi ít nhất một lần.

Định nghĩa một cặp khả thi bằng sự tồn tại của ít nhất một cấu hình đầy đủ thỏa mọi ràng buộc và chứa cặp đó. Cách định nghĩa này vẫn dùng được khi quy tắc cấm liên quan đến ba tham số trở lên. Lọc các cặp chỉ dựa trên từng quy tắc nhị phân có thể giữ lại những nghĩa vụ kiểm thử vốn không có bất kỳ ca đầy đủ nào để thực hiện.

2. Bao phủ tham lam và kiểm chứng kết quả

Mỗi cấu hình đầy đủ phủ sáu cặp tham số, vì chọn hai trong bốn vị trí. Ta sinh 12 cấu hình hợp lệ, lấy hợp các cặp của chúng làm tập nghĩa vụ, rồi liên tiếp chọn ca che được nhiều nghĩa vụ còn thiếu nhất. Cách duyệt ổn định khiến ví dụ có thể chạy lại. Mã cuối cùng dựng lại hợp cặp từ các ca đã chọn và so sánh với tập nghĩa vụ ban đầu.

Bộ tham lam tìm được năm ca. Số này còn là cận dưới trong ví dụ. Mọi tổ hợp của hai tham số chế độ và giao diện đều cần xuất hiện. Bốn ca sẽ dùng đúng một lần từng cặp của hai tham số đó. Mỗi loại xác thực phải xuất hiện với cả hai chế độ, nên cần ít nhất hai ca OAuth và hai ca mật khẩu. Nếu chỉ có bốn ca thì có đúng hai ca cho mỗi loại. Hai ca mật khẩu phải đều offline để bao phủ ghép offline với cả hai chế độ. Khi đó thiếu ghép mật khẩu với online, nên bốn ca là bất khả thi.

3. Tìm tương tác mà pairwise bỏ sót

Chạy bằng Python 3 để xem năm ca được chọn và một bộ ba hợp lệ vắng mặt. Cấu hình desktop + password + online có thể chạy, nhưng mỗi cặp trong bộ ba có thể được phủ ở một ca khác nhau. Nếu lỗi chỉ xuất hiện khi đồng thời thỏa cả ba điều kiện, bộ năm ca này có thể bỏ sót nó. Đây là giới hạn của yêu cầu bao phủ hai chiều, ngay cả khi số ca đã tối ưu theo yêu cầu đó.

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 · pairwise_co_rang_buoc.pyTải mã nguồn
"""Sinh bộ ca pairwise cho một mô hình cấu hình nhỏ."""
from itertools import combinations, product

DOMAINS = [
    ("web", "desktop"),
    ("password", "oauth"),
    ("online", "offline"),
    ("light", "dark"),
]


def valid(row):
    return not (row[1] == "oauth" and row[2] == "offline")


def pairs(row):
    return {(i, row[i], j, row[j]) for i, j in combinations(range(len(row)), 2)}


def greedy(rows):
    remaining = set().union(*(pairs(row) for row in rows))
    selected = []
    while remaining:
        row = max(rows, key=lambda r: len(pairs(r) & remaining))
        selected.append(row)
        remaining -= pairs(row)
    return selected


if __name__ == "__main__":
    full = [row for row in product(*DOMAINS) if valid(row)]
    selected = greedy(full)
    assert set().union(*(pairs(r) for r in full)) == set().union(*(pairs(r) for r in selected))
    assert all(valid(row) for row in selected)
    first_three = {row[:3] for row in full}
    missed = sorted(first_three - {row[:3] for row in selected})
    assert missed
    print("Tổ hợp khả thi:", len(full), "| Bộ ca pairwise:", len(selected))
    print("Bộ ba hợp lệ chưa xuất hiện:", missed[0])
    for row in selected:
        print(row)

4. Bổ sung kiểm thử theo rủi ro

Đánh dấu nhóm tham số liên quan đến đồng bộ dữ liệu, đăng nhập và chuyển mạng là nhóm có tương tác rủi ro cao. Giữ bao phủ hai chiều cho toàn cấu hình, rồi bổ sung ba chiều trong nhóm ưu tiên. Trên hệ thống nhiều tham số, tránh duyệt toàn bộ không gian bằng cách kiểm tra khả năng mở rộng của các bộ giá trị bằng một bộ giải ràng buộc.

Để so sánh, cố định đặc tả và oracle đầu ra, sau đó đo số ca, thời gian chạy, lỗi được phát hiện và các nghĩa vụ còn thiếu trên cùng tập lỗi hoặc đột biến. Khi cấu hình môi trường thay đổi, xác nhận lại tính khả thi của từng cặp bị loại trước khi dùng lại bộ ca. Đọc thêm hướng dẫn kiểm thử tổ hợp của NIST.