Esse problema surgiu no teste de software. O problema é um pouco difícil de explicar. Primeiro darei um exemplo, depois tentarei generalizar o problema.
Existem 10 itens a serem testados, digamos A a J, e uma ferramenta de teste que pode testar 3 itens ao mesmo tempo. A ordem dos itens na ferramenta de teste não importa. Obviamente, para testes exaustivos, precisamos de combinações de itens.
O problema é mais complexo. Há uma condição adicional de que, uma vez que um par de itens tenha sido testado juntos, o mesmo par não precise ser testado novamente.
Por exemplo, uma vez que executamos os três testes a seguir:
abc
ADE
BDF
não precisamos executar:
ABD
porque o par A, B foi coberto pelo primeiro caso de teste, A, D foi coberto pelo segundo e B, D foi coberto pelo terceiro.
Portanto, o problema é: qual é o número mínimo de casos de teste que precisamos para garantir que todos os pares sejam testados?
Para generalizar, se tivermos n itens, s podem ser testados ao mesmo tempo e precisamos garantir que todas as t tuplas possíveis sejam testadas (como s> t), qual é o número mínimo de casos de teste que precisamos em termos de n, s e t?
E, finalmente, qual seria um bom algoritmo para gerar os casos de teste necessários?