2-SATisfiabilty проблемных тестовых случаев
Я написал SAT решатель для задачи 2-удовлетворяемости, кто-то, пожалуйста, предоставьте мне контрольный пример, скажем, 10000 литералов, который имеет только одно выполнимое назначение, т.е. только одно решение
The format can be:(for 3 literals)
2 // No of clauses and then each clause
2 3
1 -2
corresponding to
(b+c).(a+!b)
2 ответа
Тестирование покрытия обычно затруднено, в большинстве случаев вы просто забываете о том или ином факторе.
Я обычно поступаю в несколько шагов:
- Убедитесь, что это решает тривиальную проблему (или некоторые)
- Тестовые граничные случаи / граничные условия: предложение 0, например
- Случаи тестовых ошибок: плохо отформатированный ввод, проблемы без решения
- Тест производительности / массового впрыска (посмотрите, не падает ли программа под нагрузкой, не протекает,...)
2) и 3) в значительной степени взаимозаменяемы, 4) должны поступать только в том случае, если у вас есть способы исследования такого рода информации (бенчмаркинг, обнаружение утечек памяти...).
Важным моментом является то, что вы не должны перепроектировать свой код для написания тестов, потому что в итоге вы будете тестировать свой код, а не тестировать, что он соответствует спецификациям.
Если это домашний проект, спецификации, как правило, неформальные, но они все еще существуют (в вашей голове), и именно после них вы должны подготовить контрольные примеры.
Работает ли этот подход?
(a + b ).(a + !b)
Это может быть удовлетворено, только если верно.
(a + !b).(!a + !b)
Может быть выполнено, только если b ложно. следовательно
(a + b ).(a + !b).(a + !b).(!a + !b)
Полностью указывает значения для a и b. Теперь мы можем расширить это для любого числа литералов.
Чтобы протестировать ваше приложение, вы также можете указать противоречивые требования, а значит, что-то без решения.