GitHub выпустил инструмент для рефакторинга критически важных участков кода

Команда GitHub сообщила в своём блоге о выпуске Scientist 1.0 — библиотеки Ruby для осторожного рефакторинга критических частей кода, позволяющую быть уверенным в том, что ничего не сломается.

Проекты и их кодовая база обычно находятся в постоянном развитии. Ситуации, когда вам необходимо переписать или заменить какую-то часть системы — неизбежны. Конечно, тут могут помочь тесты, однако если вы хотите сравнить поведение до и после рефакторинга под нагрузкой, то с помощью Scientist можете сделать вот так:

Оборачиваете код с исходным работающим поведением в блок use, а новый, проверяемый, в try. Команда experiment.run всегда вернёт именно то, что получилось бы при выполнении use, но при этом проделает много незаметной и важной работы:

  • Решит, запускать или нет код в блоке try;
  • Рандомизирует порядок, в котором выполняются блоки use и try;
  • Замеряет время выполнения обоих случаев;
  • Сравнивает результаты выполнения try с теми, что были получены, используя use;
  • Проглатывает (но записывает) все исключения, случившиеся в try;
  • Публикует всю эту информацию.

scientist-flow-diagram

Чтобы не создавать каждый раз experiment можно использовать такой синтаксис:

Если вы не объявите блок try, то Scientist не будет делать ничего и дополнительных накладных расходов не будет.

Подробнее о Scientist можно почитать на GitHub.

Типичный программист