Андрей Ершов, Виталий Брагилевский, Дарья Манухина, Иван Пономарёв
«Техника анализа классов эквивалентности»
Дано: чистая функция с тремя булевскими параметрами.
Вопрос: Сколько тест-кейсов надо написать, чтобы полностью протестировать эту функцию?
Дано: чистая функция с параметром в виде строки в алфавите \(a\) длиной не больше \(m\)?
Вопрос: Сколько тест-кейсов надо написать, чтобы полностью протестировать эту функцию?
Дано: три браузера, три ОС, три сценария.
Вопрос: так сколько нам нужно тестов? и каким количеством тестов мы готовы обойтись?
Lee Copeland. A Practitioner’s Guide to Software Test Design
Мария Палагина. Жизнь МИКРОбов: Heisenbug-Piter 2020
Всё о pairwise testing: http://pairwise.org
Дано: Из мониторинга мы взяли ~1 млн замеров latency за период \(А\) и ещё ~1 млн замеров latency за период \(B\).
Вопрос: Как понять, стала ли система работать лучше/хуже/ничего не изменилось?
Узнаем больше про статистику с Анатолием Карповым:
https://stepik.org/course/76/promo
Андрей Акиньшин. Heisenbug-Piter 2020. Анализируем перформанс с пользой для себя и окружающих
Андрей Акиньшин, Андрей Паньгин, Алексей Шипилёв Techtrain: Вторая волна. О перформансе серьезно.
Jack Vanlightly. System testing of RabbitMQ
Что это такое?
Является ли \(n\) номером високосного года в Григорианском календаре
Kevlin Henney. Heisenbug-Moscow 2020. What we talk about when we talk about unit testing
Jessica Ingrassellino. Heisenbug-SPb 2019. Property testing: Strategic automation for devs and SDETs
dining_philosophers
algorithm dining_philosophers
variables chopsticks = [chopstick \in 1..NP |-> NULL]
define
LeftChopstick(p) == p
RightChopstick(p) == IF p = NP THEN 1 ELSE p + 1
HeldChopsticks(p) == { x \in {LeftChopstick(p), RightChopstick(p)}: chopsticks[x] = p}
AvailableChopsticks(p) == { x \in {LeftChopstick(p), RightChopstick(p)}: chopsticks[x] = NULL}
end define;
process philosopher \in 1..NP
variables hungry = TRUE;
begin P:
while hungry do
with chopstick \in AvailableChopsticks(self) do
chopsticks[chopstick] := self;
end with;
Eat:
if Cardinality(HeldChopsticks(self)) = 2 then
hungry := FALSE;
chopsticks[LeftChopstick(self)] := NULL ||
chopsticks[RightChopstick(self)] := NULL;
end if;
end while;
end process;
end algorithm;
model checking vs. формальное доказательство (Isabelle и Coq).
synthesis vs. refinement
D. Knuth, letter to Dr. P. van Emde Boas, April 1977:
Leslie Lamport. Specifying Systems: The TLA+ Language
Hillel Wayne. Practical TLA+
Jack Vanlightly. Heisenbug-Piter 2019. A systematic approach to building reliable distributed systems