Тестирование граничных условий, или почему зависли все Zune плееры
Начиная с 31-го декабря 2008 года в интернете гуляет множество историй про зависания плеера Zune 30.
Оговорка: я не утверждаю, что ниже следующая информация на 100% правильная. Все сказанное я нашел в публичном доступе в интернете.
Судя по всему, проблема была (или все еще есть?) в драйвере внутренних часов. Вот пример кода, который вызвал эти зависания (взято отсюда):
Код довольно простой и ничего сложного на первый взгляд в нем нет. Zune 30 показывает дату и время как количество дней и секунд, начиная с полуночи 1-го января 1980 года.
Но в этом коде существует возможность бесконечного цикла, что и произошло 31-го декабря 2008 года. Проблема возникает в высокосный год, когда количество дней в году равно 366. Этого достаточно, чтобы попасть в цикл while, но недостаточно, чтобы выполнить вычитание дней в высокосный год и выйти из цикла while.
Результат довольно неприятный: 31-го декабря плеер крутится в цикле, и так до наступления 1-го января, когда количество дней увеличится до 367 и все снова заработает как надо :)
Вот к чему приводит пренебрежение тестированием граничных условий и недооценка сложности кода.
Пишите юнит тесты!
Читайте также:
- Телефон под рукой
- Проблемы с кодировкой, или моя твоя не понимать
- Ошибка “Invalid Update Control CTF File” при обновлении AVG Anti-Virus 8.0
- Проблема с установкой Microsoft Live Mesh
Комментарии
Отправить комментарий