4.5. Рефакторинг и блочные тесты
Основные идеи любого тестирования:
- когда выявлять ошибки – чем раньше, тем лучше;
- не оставлять ошибок у себя за спиной;
- задействовать компилятор;
Использовать лучше статические проверки, чем какие–либо другие, поскольку:
- они автоматические;
- они гарантированы (нет случая, когда программа не дойдет до выполнения строки с ошибкой);
- ошибки обнаруживаются очень рано.
Модификации исходного кода необходимо осуществлять под контролем компилятора, т.е компилятор — главный помощник при модификации кода. Хорошо спроектированный API перекладывает базовые проверки на компилятор. В [16] приводятся базовые рекомендации при реализации и модификации программных систем:
- полиморфизм лучше, чем instanceof;
- компилятор помогает узнать, что еще нужно изменить;
- очень часто компилятор покажет нам все участки программы, затронутые внесенными изменениями;
- добавили параметр — менять надо там, где возникли ошибки;
- как удалить (или просто найти) все подклассы? Объявить класс как final и посмотреть, где выдаст ошибки компилятор.
Дополнительные проблемы возникают при проектировании и поддержке интерфейса программных систем. Основные этапы жизненного цикла исходного кода, реализующего интерфейс:
- проектирование (придумывание);
- воплощение;
- исправление ошибок;
- добавление новой функциональности;
- исправление ошибок.
Процесс развития кода ведет к деградации интерфейса. Старый интерфейс не позволял сделать что-то красиво, поэтому реализовывалось некрасиво по различным причинам: не было времени делать красиво; кто-то не разобрался, как правильно; и сделал как попало.