Всякий раз, когда я делаю подобные изменения, я компилирую и запускаю тесты.
В этом случае пара тестов выдала ошибку. Пару минут поломав голову, я понял в
чем дело. По глупости, тип результата метода был объявлен как int вместо
double.
private double amountFor( Rental each) {
double thisAmount = 0;
switch() {
case Movie.REGULAR:
thisAmount += 2;
if( each.getDaysRented()>2)
thisAmount += ( each.getDaysRented()-2)*1.5;
break;
case Movie.NEW_RELEASE:
thisAmount += each.getDaysRented()*3;
break;
case Movie.CHILDRENS:
thisAmount += 1.5;
if( each.getDaysRented()>3)
thisAmount += ( each.getDaysRented()-3)*1.5;
break;
}
return thisAmount;
}
Это одна из распространенных ошибок, которые я часто делаю и которые сложно
потом найти. В данном случае Java конвертирует double в int без каких либо
ругательств, но радостно округляет их (см. Java Language Specification).
К счастью, эту ошибку было просто обнаружить потому, что изменение в программе
было довольно небольшое и у нас был заготовлен хороший набор тестов. Эта
случайная ошибка неплохо иллюстрирует сущность процесса рифэкторинга.
Поскольку изменения достаточно небольшие, любые ошибки сразу обнаруживаются.
Не приходится тратить долгое время на отладку, даже если вы так же неосторожны
как я.
Рифэкторинг изменяет программу небольшими шагами. Даже если вы допустите
ошибку, ее будет легко обнаружить.
Поскольку я работаю с Java, мне нужно проанализировать код, чтобы понять, что
делать с локальными переменными. Со специальным инструментом это было бы очень
просто. Подобный инструмент существует для Smalltalk и называется Refactoring
Browser. С его помощью делать рифэкторинг очень просто. Нужно только выделить
код, выбрать из меню "Extract Method", набрать имя нового метода, а все
остальное будет сделано автоматически. К тому же, этот инструмент не делает
глупых ошибок как я. Было бы неплохо иметь версию для Java.
В начало |
предыдущая |
следующая