понедельник, марта 01, 2010

Bug theory - Initialization flow bug

С простыми багами вроде покончено. Перейдем к более сложным.

Initialization flow bug

Симптомы:

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

Критические места:

Инициализация модулей, добавление новых зависимостей, изменения порядка инициализации.

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

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

Локализовать инициализацию в одно месте, практиковать Dependency injection, писать интеграционные тесты, при добавлении зависимости анализировать порядок инициализации для разных случаев.

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