Магические числа.

При прогоне приемочных тестов была обнаружена ошибка. Приложение падало при попытке сохранения новой формы.
Рассмотрим форму, о которой идет речь [1].
form_1.PNG
Форма, как форма. «Название организации» обязательно к заполнению, «Комментарий» необязателен, «Форму собственности» нельзя не выбрать (комбобокс без неопределенного значения).
Приемочный тест: Заполнить обязательные поля и сохранить.
Это было странно. Данный участок кода ранее был хорошо оттестирован и не нуждался в доработке. Беседа с программистами еще более увеличила удивление. Очень давно в код не вносилось изменений. Структура БД так же не менялась. Но приложение падает. Стектрейс говорит о нарушении ссылочной целостности. При этом в БД такая форма есть.
В ходе дальнейшего тестирования выясняется, что приложение не падает, если войти в комбобокс и выбрать форму собственности. Можно даже ту же самую.
Дальнейшее исследование показывает:
• Если форму собственности не выбирать, то значение не устанавливается и передается NULL
• В БД данных запрещен ввод неопределенного значения в данное поле и проставлено значение по умолчанию «2»
• Ранее такой идентификатор имела запись в справочнике форм собственности, но в связи с изменением политики идентификаторов, ей был присвоен другой номер.

Ошибки программирования. Несмотря на отображаемое значение по умолчанию, форма передает неустановленное значение. Это плохая практика. Если отображаешь значение по умолчанию, то устанавливай его принудительно в форме, на уровне пользовательского интерфейса. Все остальные уровни: бизнес логика, ядро, БД – должны получать правильные данные. Но самое отвратительное, это способ постановки заплатки. Программист перенес часть логики программы на уровень хранимых данных, использовав магическое число “2″. Это примерно то же самое, как если бы правила умножение в Excel, зависели от введенных данных [2].

И самый главный вывод для тестера:
Даже если оттестированный код и структура БД не менялись, и вы проверили это лично, не надеясь на заверения программиста, приемочные тесты прогнать все-таки стоит.
——————————————————————————
Примечания.
[1] Форма упрощена.
[2] Иногда, без магических чисел не обойтись.

Один комментарий

  1. Alex_Gurevich написал:

    Сергей, спасибо! Очень интересный текст. Жаль, рисунок в начале данной заметки не отражается. Может исправишь?

Оставьте комментарий

Вы должны войти, чтобы оставить свой комментарий.