A Disabled Test In Lieu of a Bug Report

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

Когда вы находите ошибку в используемой вами библиотеке с открытым исходным кодом, что делаете вы? Вы отправляете проблему в GitHub (или в любую систему отслеживания задач, которую они используют). В этой проблеме вы описываете проблему наилучшим образом, предпочтительно предоставляя пример рабочего кода, который автор библиотеки может запустить локально, чтобы воспроизвести ошибку. Если вы не предоставите им исполняемый фрагмент кода, они, скорее всего, попросят вас сделать это, если только ошибка не тривиальна. Я предлагаю упростить рабочий процесс и предложить им то, что они хотят прямо в запросе на внесение изменений: отправьте им ошибку в форме отключенного модульного теста.

Скажем, есть библиотека Rust, которая предоставляет функцию fibo(), которая вычисляет число Фибоначчи, которую можно использовать следующим образом:

let n = 23;
let x = fibo(n);
println!("The {n}th Fibonacci is {x}");

Вы запускаете его и он выводит 17711, что ошибочно является 22-ым числом Фибоначчи, а не 23-м. Это определенно ошибка. Вы отправляете заявку, где говорите примерно следующее:

I'm trying to use your library to calculate 
a Fibonacci  number, but for some reason, I'm 
getting a wrong result:  the 23rd number your 
library returns is 17711, while I'm expecting 
the number 28657. Please check and fix.

Они ответят: “Можете это доказать, пожалуйста? Покажите нам код!” и, вероятно, вы добавите этот код в тикет.

let x = fibo(23);
assert_eq!(28657, x);

Затем, если они дисциплинированные программисты, будет создан новый модульный тест, и функция fibo() будет исправлена. Более того, если они очень дисциплинированные программисты, они представят тест в отдельном запросе на слияние, отключив его. Затем, во втором запросе на слияние, они внесут исправление.

Почему нельзя помочь им и пропустить этап подачи проблемы? Просто сделайте первый запрос на привлечение внимания сами, с отключенным тестом внутри и добавленной “головоломкой”.

```rust // @todo #42 This test is disabled because the // fibo() function doesn’t work correctly // with this particular number, it returns // 17711 instead of 28657. Let’s fix it.

[test]

[ignore]

fn calculates23rdfibonaccinumber() { let x = fibo(23); asserteq!(28657, x); } ```

Такой запрос на слияние (PR) служит как отчет об ошибке (сюда будет преобразован текст головоломки после слияния PR) и тест, позволяющий воспроизвести проблему. Команда по поддержке репозитория будет очень благодарна за такой PR. Этот тип PR экономит время, которое они потратили бы на создание модульного теста. Кроме того, он экономит ваше время при создании отчета об ошибке, так как он будет создан автоматически средством поиска головоломок.

Кстати, данный блог-пост был вдохновлен этим запросом на внесение изменений в библиотеку jcabi/jcabi-xml, где в кодовую базу был добавлен отключенный модульный тест специально для воспроизведения ошибки. В дополнение к тесту была добавлена головоломка, которая привела к новому запросу, новому запросу на внесение изменений и, наконец, новому выпуску библиотеки.

Translated by ChatGPT gpt-3.5-turbo/35 on 2023-09-08 at 16:13

sixnines availability badge   GitHub stars