Тестирование граничных условий, или почему зависли все Zune плееры

zune Начиная с 31-го декабря 2008 года в интернете гуляет множество историй про зависания плеера Zune 30.

Оговорка: я не утверждаю, что ниже следующая информация на 100% правильная. Все сказанное я нашел в публичном доступе в интернете.

 

Судя по всему, проблема была (или все еще есть?) в драйвере внутренних часов. Вот пример кода, который вызвал эти зависания (взято отсюда):

zune_code

Код довольно простой и ничего сложного на первый взгляд в нем нет. Zune 30 показывает дату и время как количество дней и секунд, начиная с полуночи 1-го января 1980 года.
Но в этом коде существует возможность бесконечного цикла, что и произошло 31-го декабря 2008 года. Проблема возникает в высокосный год, когда количество дней в году равно 366. Этого достаточно, чтобы попасть в цикл while, но недостаточно, чтобы выполнить вычитание дней в высокосный год и выйти из цикла while.

Результат довольно неприятный: 31-го декабря плеер крутится в цикле, и так до наступления 1-го января, когда количество дней увеличится до 367 и все снова заработает как надо 🙂

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

Пишите юнит тесты!

Читайте также:

Реклама
Запись опубликована в рубрике Computer and Internet. Добавьте в закладки постоянную ссылку.