💡 Инструкция: Выберите один ответ из пяти. На работу отведено 70 минут. После завершения откроются правильные ответы, объяснения и результаты по темам.
Вопрос 2 из 25
Какую проверку стоит добавить для участка с `@testset "normalize rows" begin`?
Julia Julia · Наборы тестов Копировать
using Test
function normalize_rows(A)
sums = sum(A; dims=2)
any(iszero, sums) && throw(ArgumentError("zero row"))
return A ./ sums
end
@testset "normalize rows" begin
@test sum(normalize_rows([1.0 1; 2 2]); dims=2) ≈ ones(2,1)
@test_throws ArgumentError normalize_rows([0.0 0; 1 2])
end
Проверить на отдельном примере, что `@testset` группирует проверки и контекст, но тест должен падать по наблюдаемому контракту, а не по частной последовательности внутренних вызовов.
Проверить на отдельном примере, что тест устойчивее, если проверяет последовательность внутренних вызовов, а не наблюдаемый результат функции.
Проверить на отдельном примере, что единого `rtol` обычно хватает для всех величин: относительная проверка сама корректно обрабатывает ноль и значения около машинной точности.
Проверить на отдельном примере, что регрессионный тест фиксирует научно значимую характеристику, допуск и набор данных, а не огромный двоичный снимок, меняющийся при каждом обновлении библиотеки.
Проверить на отдельном примере, что числа с плавающей точкой сравнивают через `isapprox` с обоснованными `rtol` и `atol`; один произвольный допуск для величин разных масштабов скрывает ошибки.
Вопрос 4 из 25
При переносе кода с `@testset "normalize rows" begin` в библиотеку какой критерий нельзя заменять впечатлением «пример работает»?
\bigwedge_i test_i
Приёмка должна подтвердить, что `@testset` группирует проверки и контекст, но тест должен падать по наблюдаемому контракту, а не по частной последовательности внутренних вызовов.
Приёмка должна подтвердить, что числа с плавающей точкой сравнивают через `isapprox` с обоснованными `rtol` и `atol`; один произвольный допуск для величин разных масштабов скрывает ошибки.
Приёмка должна подтвердить, что единого `rtol` обычно хватает для всех величин: относительная проверка сама корректно обрабатывает ноль и значения около машинной точности.
Приёмка должна подтвердить, что тест устойчивее, если проверяет последовательность внутренних вызовов, а не наблюдаемый результат функции.
Приёмка должна подтвердить, что регрессионный тест фиксирует научно значимую характеристику, допуск и набор данных, а не огромный двоичный снимок, меняющийся при каждом обновлении библиотеки.
Вопрос 6 из 25
Какой механизм Julia определяет поведение строки `@test isapprox(x, y; rtol=2e-9, atol=0.0)`?
|x-y|\le atol+rtol\,|y|
Julia Julia · Приближённое равенство Копировать
using Test
x = 1e8 + 0.1
y = 1e8
@test isapprox(x, y; rtol=2e-9, atol=0.0)
@test !isapprox(1e-10, 0.0; rtol=1e-6, atol=0.0)
`@testset` группирует проверки и контекст, но тест должен падать по наблюдаемому контракту, а не по частной последовательности внутренних вызовов.
Единого `rtol` обычно хватает для всех величин: относительная проверка сама корректно обрабатывает ноль и значения около машинной точности.
Регрессионный тест фиксирует научно значимую характеристику, допуск и набор данных, а не огромный двоичный снимок, меняющийся при каждом обновлении библиотеки.
Числа с плавающей точкой сравнивают через `isapprox` с обоснованными `rtol` и `atol`; один произвольный допуск для величин разных масштабов скрывает ошибки.
Набор тестов сочетает точные маленькие случаи, свойства, интеграцию и проверку производительности; попытка измерить всё одним видом теста делает ошибки невидимыми.
Вопрос 7 из 25
Что нужно подтвердить отдельным примером для `@test isapprox(x, y; rtol=2e-9, atol=0.0)`?
Julia Julia · Приближённое равенство Копировать
using Test
x = 1e8 + 0.1
y = 1e8
@test isapprox(x, y; rtol=2e-9, atol=0.0)
@test !isapprox(1e-10, 0.0; rtol=1e-6, atol=0.0)
Проверить на отдельном примере, что набор тестов сочетает точные маленькие случаи, свойства, интеграцию и проверку производительности; попытка измерить всё одним видом теста делает ошибки невидимыми.
Проверить на отдельном примере, что числа с плавающей точкой сравнивают через `isapprox` с обоснованными `rtol` и `atol`; один произвольный допуск для величин разных масштабов скрывает ошибки.
Проверить на отдельном примере, что регрессионный тест фиксирует научно значимую характеристику, допуск и набор данных, а не огромный двоичный снимок, меняющийся при каждом обновлении библиотеки.
Проверить на отдельном примере, что `@testset` группирует проверки и контекст, но тест должен падать по наблюдаемому контракту, а не по частной последовательности внутренних вызовов.
Проверить на отдельном примере, что единого `rtol` обычно хватает для всех величин: относительная проверка сама корректно обрабатывает ноль и значения около машинной точности.
Вопрос 8 из 25
Какую гарантию должна сохранить правка участка с `@test isapprox(x, y; rtol=2e-9, atol=0.0)`?
Julia Julia · Приближённое равенство Копировать
using Test
x = 1e8 + 0.1
y = 1e8
@test isapprox(x, y; rtol=2e-9, atol=0.0)
@test !isapprox(1e-10, 0.0; rtol=1e-6, atol=0.0)
Сохранить в реализации правило: `@testset` группирует проверки и контекст, но тест должен падать по наблюдаемому контракту, а не по частной последовательности внутренних вызовов.
Сохранить в реализации правило: Числа с плавающей точкой сравнивают через `isapprox` с обоснованными `rtol` и `atol`; один произвольный допуск для величин разных масштабов скрывает ошибки.
Сохранить в реализации правило: Единого `rtol` обычно хватает для всех величин: относительная проверка сама корректно обрабатывает ноль и значения около машинной точности.
Сохранить в реализации правило: Регрессионный тест фиксирует научно значимую характеристику, допуск и набор данных, а не огромный двоичный снимок, меняющийся при каждом обновлении библиотеки.
Сохранить в реализации правило: Набор тестов сочетает точные маленькие случаи, свойства, интеграцию и проверку производительности; попытка измерить всё одним видом теста делает ошибки невидимыми.
Вопрос 9 из 25
Две реализации участка с `@test isapprox(x, y; rtol=2e-9, atol=0.0)` совпадают на обычных данных. Что необходимо проверить перед выпуском?
|x-y|\le atol+rtol\,|y|
Приёмка должна подтвердить, что набор тестов сочетает точные маленькие случаи, свойства, интеграцию и проверку производительности; попытка измерить всё одним видом теста делает ошибки невидимыми.
Приёмка должна подтвердить, что единого `rtol` обычно хватает для всех величин: относительная проверка сама корректно обрабатывает ноль и значения около машинной точности.
Приёмка должна подтвердить, что `@testset` группирует проверки и контекст, но тест должен падать по наблюдаемому контракту, а не по частной последовательности внутренних вызовов.
Приёмка должна подтвердить, что числа с плавающей точкой сравнивают через `isapprox` с обоснованными `rtol` и `atol`; один произвольный допуск для величин разных масштабов скрывает ошибки.
Приёмка должна подтвердить, что регрессионный тест фиксирует научно значимую характеристику, допуск и набор данных, а не огромный двоичный снимок, меняющийся при каждом обновлении библиотеки.
Вопрос 11 из 25
Что именно следует из фрагмента с `@testset "sorted invariant" begin`?
x_i\sim RNG(s)
Julia Julia · Случайные данные Копировать
using Test, Random
rng = Xoshiro(42)
@testset "sorted invariant" begin
for n in (0, 1, 2, 10, 100)
x = rand(rng, -20:20, n)
y = sort(x)
@test issorted(y)
@test sort(y) == y
end
end
Случайные тесты используют явный seed или генератор и сохраняют контрпример; иначе редкий сбой невозможно воспроизвести.
Тест устойчивее, если проверяет последовательность внутренних вызовов, а не наблюдаемый результат функции.
Единого `rtol` обычно хватает для всех величин: относительная проверка сама корректно обрабатывает ноль и значения около машинной точности.
Случайный тест ценнее без seed: каждый запуск исследует новые данные, а воспроизведение конкретного сбоя не требуется.
Золотой файл следует обновлять при любом отличии результата, чтобы тесты не мешали развитию алгоритма.
Вопрос 12 из 25
Что нужно подтвердить отдельным примером для `@testset "sorted invariant" begin`?
Julia Julia · Случайные данные Копировать
using Test, Random
rng = Xoshiro(42)
@testset "sorted invariant" begin
for n in (0, 1, 2, 10, 100)
x = rand(rng, -20:20, n)
y = sort(x)
@test issorted(y)
@test sort(y) == y
end
end
Проверить на отдельном примере, что случайный тест ценнее без seed: каждый запуск исследует новые данные, а воспроизведение конкретного сбоя не требуется.
Проверить на отдельном примере, что тест устойчивее, если проверяет последовательность внутренних вызовов, а не наблюдаемый результат функции.
Проверить на отдельном примере, что золотой файл следует обновлять при любом отличии результата, чтобы тесты не мешали развитию алгоритма.
Проверить на отдельном примере, что случайные тесты используют явный seed или генератор и сохраняют контрпример; иначе редкий сбой невозможно воспроизвести.
Проверить на отдельном примере, что единого `rtol` обычно хватает для всех величин: относительная проверка сама корректно обрабатывает ноль и значения около машинной точности.
Вопрос 13 из 25
Какое решение устраняет риск вокруг `@testset "sorted invariant" begin`, не меняя поведение на допустимых данных?
Julia Julia · Случайные данные Копировать
using Test, Random
rng = Xoshiro(42)
@testset "sorted invariant" begin
for n in (0, 1, 2, 10, 100)
x = rand(rng, -20:20, n)
y = sort(x)
@test issorted(y)
@test sort(y) == y
end
end
Сохранить в реализации правило: Единого `rtol` обычно хватает для всех величин: относительная проверка сама корректно обрабатывает ноль и значения около машинной точности.
Сохранить в реализации правило: Случайные тесты используют явный seed или генератор и сохраняют контрпример; иначе редкий сбой невозможно воспроизвести.
Сохранить в реализации правило: Золотой файл следует обновлять при любом отличии результата, чтобы тесты не мешали развитию алгоритма.
Сохранить в реализации правило: Тест устойчивее, если проверяет последовательность внутренних вызовов, а не наблюдаемый результат функции.
Сохранить в реализации правило: Случайный тест ценнее без seed: каждый запуск исследует новые данные, а воспроизведение конкретного сбоя не требуется.
Вопрос 16 из 25
Что именно следует из фрагмента с `@test result ≈ reference rtol=1e-12 atol=0`?
\lVert y-y_{ref}\rVert\le\tau
Julia Julia · Регрессия результата Копировать
using Test, SHA
reference = [0.0, 0.5, 0.75, 0.875]
result = 1 .- 0.5 .^ (0:3)
@test result ≈ reference rtol=1e-12 atol=0
@test bytes2hex(sha256(reinterpret(UInt8, result))) != ""
Золотой файл следует обновлять при любом отличии результата, чтобы тесты не мешали развитию алгоритма.
`@testset` группирует проверки и контекст, но тест должен падать по наблюдаемому контракту, а не по частной последовательности внутренних вызовов.
Набор тестов сочетает точные маленькие случаи, свойства, интеграцию и проверку производительности; попытка измерить всё одним видом теста делает ошибки невидимыми.
Регрессионный тест фиксирует научно значимую характеристику, допуск и набор данных, а не огромный двоичный снимок, меняющийся при каждом обновлении библиотеки.
Числа с плавающей точкой сравнивают через `isapprox` с обоснованными `rtol` и `atol`; один произвольный допуск для величин разных масштабов скрывает ошибки.
Вопрос 17 из 25
Какой тест точнее всего зафиксирует границу поведения `@test result ≈ reference rtol=1e-12 atol=0`?
Julia Julia · Регрессия результата Копировать
using Test, SHA
reference = [0.0, 0.5, 0.75, 0.875]
result = 1 .- 0.5 .^ (0:3)
@test result ≈ reference rtol=1e-12 atol=0
@test bytes2hex(sha256(reinterpret(UInt8, result))) != ""
Проверить на отдельном примере, что набор тестов сочетает точные маленькие случаи, свойства, интеграцию и проверку производительности; попытка измерить всё одним видом теста делает ошибки невидимыми.
Проверить на отдельном примере, что `@testset` группирует проверки и контекст, но тест должен падать по наблюдаемому контракту, а не по частной последовательности внутренних вызовов.
Проверить на отдельном примере, что числа с плавающей точкой сравнивают через `isapprox` с обоснованными `rtol` и `atol`; один произвольный допуск для величин разных масштабов скрывает ошибки.
Проверить на отдельном примере, что регрессионный тест фиксирует научно значимую характеристику, допуск и набор данных, а не огромный двоичный снимок, меняющийся при каждом обновлении библиотеки.
Проверить на отдельном примере, что золотой файл следует обновлять при любом отличии результата, чтобы тесты не мешали развитию алгоритма.
Вопрос 18 из 25
Какое решение устраняет риск вокруг `@test result ≈ reference rtol=1e-12 atol=0`, не меняя поведение на допустимых данных?
Julia Julia · Регрессия результата Копировать
using Test, SHA
reference = [0.0, 0.5, 0.75, 0.875]
result = 1 .- 0.5 .^ (0:3)
@test result ≈ reference rtol=1e-12 atol=0
@test bytes2hex(sha256(reinterpret(UInt8, result))) != ""
Сохранить в реализации правило: Золотой файл следует обновлять при любом отличии результата, чтобы тесты не мешали развитию алгоритма.
Сохранить в реализации правило: Регрессионный тест фиксирует научно значимую характеристику, допуск и набор данных, а не огромный двоичный снимок, меняющийся при каждом обновлении библиотеки.
Сохранить в реализации правило: `@testset` группирует проверки и контекст, но тест должен падать по наблюдаемому контракту, а не по частной последовательности внутренних вызовов.
Сохранить в реализации правило: Числа с плавающей точкой сравнивают через `isapprox` с обоснованными `rtol` и `atol`; один произвольный допуск для величин разных масштабов скрывает ошибки.
Сохранить в реализации правило: Набор тестов сочетает точные маленькие случаи, свойства, интеграцию и проверку производительности; попытка измерить всё одним видом теста делает ошибки невидимыми.
Вопрос 19 из 25
Как проверить, что новая реализация `@test result ≈ reference rtol=1e-12 atol=0` не изменила обещанное пользователю поведение?
\lVert y-y_{ref}\rVert\le\tau
Приёмка должна подтвердить, что набор тестов сочетает точные маленькие случаи, свойства, интеграцию и проверку производительности; попытка измерить всё одним видом теста делает ошибки невидимыми.
Приёмка должна подтвердить, что регрессионный тест фиксирует научно значимую характеристику, допуск и набор данных, а не огромный двоичный снимок, меняющийся при каждом обновлении библиотеки.
Приёмка должна подтвердить, что числа с плавающей точкой сравнивают через `isapprox` с обоснованными `rtol` и `atol`; один произвольный допуск для величин разных масштабов скрывает ошибки.
Приёмка должна подтвердить, что `@testset` группирует проверки и контекст, но тест должен падать по наблюдаемому контракту, а не по частной последовательности внутренних вызовов.
Приёмка должна подтвердить, что золотой файл следует обновлять при любом отличии результата, чтобы тесты не мешали развитию алгоритма.
Вопрос 21 из 25
Как нужно интерпретировать `@test f(x) >= 0`, не добавляя к коду лишних гарантий?
Q=Q_{unit}\cup Q_{property}\cup Q_{integration}
Julia Julia · Выбор компромисса Копировать
using Test, BenchmarkTools
f(x) = sum(abs2, x)
x = rand(10_000)
@test f(x) >= 0
trial = @benchmark f($x) samples=20 evals=1
@test median(trial).time < 2_000_000
@show median(trial).memory
Набор тестов сочетает точные маленькие случаи, свойства, интеграцию и проверку производительности; попытка измерить всё одним видом теста делает ошибки невидимыми.
Числа с плавающей точкой сравнивают через `isapprox` с обоснованными `rtol` и `atol`; один произвольный допуск для величин разных масштабов скрывает ошибки.
`@testset` группирует проверки и контекст, но тест должен падать по наблюдаемому контракту, а не по частной последовательности внутренних вызовов.
Регрессионный тест фиксирует научно значимую характеристику, допуск и набор данных, а не огромный двоичный снимок, меняющийся при каждом обновлении библиотеки.
Один интеграционный эталонный файл может заменить точные малые тесты, проверки свойств и контроль производительности, если итоговые числа совпадают.
Вопрос 22 из 25
Какой тест точнее всего зафиксирует границу поведения `@test f(x) >= 0`?
Julia Julia · Выбор компромисса Копировать
using Test, BenchmarkTools
f(x) = sum(abs2, x)
x = rand(10_000)
@test f(x) >= 0
trial = @benchmark f($x) samples=20 evals=1
@test median(trial).time < 2_000_000
@show median(trial).memory
Проверить на отдельном примере, что числа с плавающей точкой сравнивают через `isapprox` с обоснованными `rtol` и `atol`; один произвольный допуск для величин разных масштабов скрывает ошибки.
Проверить на отдельном примере, что набор тестов сочетает точные маленькие случаи, свойства, интеграцию и проверку производительности; попытка измерить всё одним видом теста делает ошибки невидимыми.
Проверить на отдельном примере, что регрессионный тест фиксирует научно значимую характеристику, допуск и набор данных, а не огромный двоичный снимок, меняющийся при каждом обновлении библиотеки.
Проверить на отдельном примере, что `@testset` группирует проверки и контекст, но тест должен падать по наблюдаемому контракту, а не по частной последовательности внутренних вызовов.
Проверить на отдельном примере, что один интеграционный эталонный файл может заменить точные малые тесты, проверки свойств и контроль производительности, если итоговые числа совпадают.
Вопрос 23 из 25
Что должно остаться истинным после рефакторинга участка с `@test f(x) >= 0`?
Julia Julia · Выбор компромисса Копировать
using Test, BenchmarkTools
f(x) = sum(abs2, x)
x = rand(10_000)
@test f(x) >= 0
trial = @benchmark f($x) samples=20 evals=1
@test median(trial).time < 2_000_000
@show median(trial).memory
Сохранить в реализации правило: Числа с плавающей точкой сравнивают через `isapprox` с обоснованными `rtol` и `atol`; один произвольный допуск для величин разных масштабов скрывает ошибки.
Сохранить в реализации правило: Регрессионный тест фиксирует научно значимую характеристику, допуск и набор данных, а не огромный двоичный снимок, меняющийся при каждом обновлении библиотеки.
Сохранить в реализации правило: Один интеграционный эталонный файл может заменить точные малые тесты, проверки свойств и контроль производительности, если итоговые числа совпадают.
Сохранить в реализации правило: Набор тестов сочетает точные маленькие случаи, свойства, интеграцию и проверку производительности; попытка измерить всё одним видом теста делает ошибки невидимыми.
Сохранить в реализации правило: `@testset` группирует проверки и контекст, но тест должен падать по наблюдаемому контракту, а не по частной последовательности внутренних вызовов.
Вопрос 24 из 25
Какой результат приёмочного теста подтвердит корректность участка с `@test f(x) >= 0`?
Q=Q_{unit}\cup Q_{property}\cup Q_{integration}
Приёмка должна подтвердить, что числа с плавающей точкой сравнивают через `isapprox` с обоснованными `rtol` и `atol`; один произвольный допуск для величин разных масштабов скрывает ошибки.
Приёмка должна подтвердить, что набор тестов сочетает точные маленькие случаи, свойства, интеграцию и проверку производительности; попытка измерить всё одним видом теста делает ошибки невидимыми.
Приёмка должна подтвердить, что регрессионный тест фиксирует научно значимую характеристику, допуск и набор данных, а не огромный двоичный снимок, меняющийся при каждом обновлении библиотеки.
Приёмка должна подтвердить, что один интеграционный эталонный файл может заменить точные малые тесты, проверки свойств и контроль производительности, если итоговые числа совпадают.
Приёмка должна подтвердить, что `@testset` группирует проверки и контекст, но тест должен падать по наблюдаемому контракту, а не по частной последовательности внутренних вызовов.