4.5. Рефакторинг и блочные тесты

Основные идеи любого тестирования:

  • когда выявлять ошибки – чем раньше, тем лучше;
  • не оставлять ошибок у себя за спиной;
  • задействовать компилятор;

Использовать лучше статические проверки, чем какие–либо другие, поскольку:

  • они автоматические;
  • они гарантированы (нет случая, когда программа не дойдет до выполнения строки с ошибкой);
  • ошибки обнаруживаются очень рано.

Модификации исходного кода необходимо осуществлять под контролем компилятора, т.е компилятор — главный помощник при модификации кода. Хорошо спроектированный API перекладывает базовые проверки на компилятор. В [16] приводятся базовые рекомендации при реализации и модификации программных систем:

  • полиморфизм лучше, чем instanceof;
  • компилятор помогает узнать, что еще нужно изменить;
  • очень часто компилятор покажет нам все участки программы, затронутые внесенными изменениями;
  • добавили параметр — менять надо там, где возникли ошибки;
  • как удалить (или просто найти) все подклассы? Объявить класс как final и посмотреть, где выдаст ошибки компилятор.

Дополнительные проблемы возникают при проектировании и поддержке интерфейса программных систем. Основные этапы жизненного цикла исходного кода, реализующего интерфейс:

  • проектирование (придумывание);
  • воплощение;
  • исправление ошибок;
  • добавление новой функциональности;
  • исправление ошибок.

Процесс развития кода ведет к деградации интерфейса. Старый интерфейс не позволял сделать что-то красиво, поэтому реализовывалось некрасиво по различным причинам: не было времени делать красиво; кто-то не разобрался, как правильно; и сделал как попало.