День 10 — глубже
Всё здесь необязательно. Материалы на английском помечены.
Как выбирать вводы
- Анализ граничных значений (англ.) — https://en.wikipedia.org/wiki/Boundary-value_analysis Приём из тестирования, которым пользуется первая страница: ошибки собираются на краях диапазонов, поэтому проверяют саму границу и числа рядом с ней с обеих сторон.
- Классы эквивалентности (англ.) — https://en.wikipedia.org/wiki/Equivalence_partitioning Вторая половина того же приёма: вводы, на которые программа должна вести себя одинаково, объединяют в группу и берут по одному представителю. Отсюда «обычный случай», «пустой», «мусор».
Инструменты страницы 1
- Циклы в bash (англ.) — https://www.gnu.org/software/bash/manual/bash.html#Looping-Constructs Кроме
for … in, у оболочки естьwhileиuntil— какforс условием в Go. - diff (англ.) — https://www.gnu.org/software/diffutils/manual/ Раздел «Comparing Two Files». Ключ
-uпечатает различия с соседними строками — так их показывают в запросах на слияние, с этим вы встретитесь в блоке 8. - Команды dlv (англ.) — https://github.com/go-delve/delve/tree/master/Documentation/cli Полный список: кроме
break,condition,printестьdisplay— печатает выражение после каждой остановки — иon— действия на точке останова.
Мини-опыты
- Сравните без промежуточного файла:
./selftest < cases/normal.txt | diff - cases/normal.want. Знак - вместо имени файла значит «сравнить с тем, что пришло по конвейеру».
- Добавьте в прогон
forстроку, которая печатает только имена файлов, на которых вывод не совпал с.want. Понадобитсяifоболочки:if ! diff -q … > /dev/null; then echo "расхождение: $f"; fi.