The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:
Вот что говорит Википедия на момент написания:
Я думаю, что это неполно. Определение полностью исключает “нефункциональные” дефекты, связанные, например, с поддерживаемостью и повторным использованием.
Как вы знаете, у каждого программного обеспечения есть функциональные и нефункциональные требования. Функциональные требования говорят нам, что должно делать программное обеспечение, а нефункциональные требования описывают, как оно должно это делать. Например, вот функциональное требование:
Если наша программа не создает отчет в формате PDF, а вместо этого выдает ошибку, это является функциональным багом. Если вместо отчета в формате PDF программа создает пустую страницу или документ с обычным текстом, это также является функциональным багом. Если вообще нет кнопки “создать отчет в формате PDF” и пользователь просто не может начать процесс генерации PDF, это тоже функциональный баг.
Вот пример нефункционального требования:
Если наше программное обеспечение генерирует абсолютно правильный отчет в формате PDF, но это занимает минуту, это является нефункциональной ошибкой.
Пока все хорошо, так как определение ошибки, данное Википедией, идеально подходит для обоих случаев - если они происходят, они вызывают у нашего программного обеспечения “производство неправильного или неожиданного результата или непреднамеренное поведение”. Здесь акцент делается на словах “производить” и “поведение”. Они предполагают, что программное обеспечение что-то делает, и мы наблюдаем его поведение.
Однако, это еще не все.
А что насчет поддерживаемости? У меня может быть такое требование к нефункциональности:
Это довольно неопределенное требование, но вы получаете идею.
Поддерживаемость и повторное использование являются очень важными нефункциональными компонентами любой современной программы, особенно принимая во внимание очень высокую стоимость труда на рынке. Очень часто важнее убедиться, что программное обеспечение поддерживаемо, чем быстро. Если оно поддерживаемо, но медленное, мы можем найти новых программистов, чтобы улучшить код. Если оно быстрое, но не поддерживаемое, мы не сможем сделать с ним ничего позже и придется переписывать его с нуля, если потребуется новая функция. Подробнее об этом можно прочитать в статье “Вы хакер или дизайнер?”.
Определение программной ошибки, приведенное в Википедии, вообще не учитывает проблемы поддерживаемости и повторного использования. Это является общим источником путаницы - несогласованный стиль кода не является ошибкой (см. обсуждение под этим постом).
Непоследовательный стиль кода является программной ошибкой, также как и неполная документация, отсутствие документации, слишком сложный код, отсутствие руководства по стилю кодирования и т. д.
Я бы переписал параграф с определением программной ошибки в Википедии следующим образом:
Это определение кажется мне более точным.
Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-27 at 13:52