среда, февраля 24, 2010

Bug theory - Redundant expectations

Redundant expectations

Симптомы:

В определенных условиях система делает не то, что ожидается. Баг проявляется только в частных случаях, все остальное время система работает нормально. При воспроизведении бага могут возникнуть проблемы, но если воспроизводить тестовый сценарий в точности баг всегда проявляется.

Критические места: любые межмодульные взаимодействия, особенно слабо изученными сторонними модулями.

Это типичный баг "на границе". В определенных условиях сторонний модуль ведет себя не так, как ожидалось. Чаще всего это происходит когда документация на интерфейс была прочитана невнимательно или изначально была неполна. Хороший пример, это NullPointerException при нарушении принципа Деметры.

person.getLeftHand().getRingFinger();

Для большинства людей это сработает, но на первом же одноруком мы получим NullPointerException.

Профилактика:

Внимательно изучать документацию на межмодульный интерфейсы, писать интеграционный тесты захватывая крайние случаи, не верить документации и самостоятельно изучать код сторонних модулей, проектировать интерфейсы, которые ведут себя одинаково вне зависимости от условий, использовать контрактное программирование.

Комментариев нет: