Тесты сделают вас счастливее (перевод).

Теги: Java, Android, Testing, Тестирование, Философия

Перевод статьи Andrew Lord “Writing tests will make you happier”


Демистификация мифов о тестировании

Многие разработчики не пишут тестов, т.к. не уверены, что это даст им выгоду. В мире разработки для Android такое положение дел обычно, но к счастью реальность быстро меняется.

Разработчикам сложно не знать об автоматическом тестировании. Но также есть убеждение, что это требует много времени, дорого стоит и довольно трудно. А некоторым разработчикам прямо говорят, что тесты писать не стоит т.к. клиент не желает платить за это. Используя свой опыт, я попытаюсь показать почему такое отношение к тестированию неправильно.


Написание тестов слишком трудоемко, чтобы делать это

Это наиболее вероятная причина, которую вы услышите. Процесс мышлени примерно такой: “Написание тестов стоит много времени, следовательно проект удорожается”. Сперва легко подумать, что это действительно так и что не стоит увеличивать затраты на разработку.

Если вы считаете только то время, которое вы потратили на написание строк кода, то тогда это может казаться правдой. Но это только небольшая часть разработки. Без автоматического тестирования, в дальнейшем в этом коде возникнет множество непредвиденных ситуаций, которые потребуют времени для их разрешения.

Время, потраченное на ручное тестирование, работает так, как ожидается

Если вы решили не писать никаких тестов для ‘уменьшения времени разработки’, вам придется проверять функциональность вручную. Это означает проверку всех UI итераций, всю функциональность кода, различные пограничные случаи и множество ветвей кода. Автоматичесое тестирование сделало бы это без вашего участия с помощью набора тестов. Это поможет сделать вашу разработку быстрой и безопасной, и затем с уверенность отдать код в релиз.

Время на фиксирование ошибок, которые могли быть пойманы тестами

Когда вы пишите автоматические тесты, вы проверяете, что код функционирует так, как вы ожидали, и что функции работают так, как необходимо. Тесты, которые вы пишите, скорее всего поймают ошибки в вашей начальной реализации. Затем они будут продолжать проверять реализации, что в будущем позволит избежать изменений разрушающих функциональность кода. Делая реализации без тестов, вам придется проверять вручную всю функциональность, после каждого изменения в коде. Разумеется так быть не должно!

Время для понимания, что делает код

Тесты обеспечивают эффективную документацию правильной функциональности каждого куска кода. Это правда, что вы можете откомментить все в приложении, однако хорошо известно, что комментарии быстро устаревают и их сложно поддерживать эффективно. Тесты не только проверят, как работает код, но они так же расскажут другим разработчикам как он работает и что происходит в различных ситуациях.

Время для осторожного рефакторинга устаревшего кода

Каждый проект достигает точки, когда часть кода устаревает и нуждается в рефакторинге. И это может быть довольно опасный рефакторинг без каких-либо автоматических тестов. Как и с добавлением новой функциональности, вам придется повторить ручные тесты для обеспечения неизменности поведения кода. Вместо этого, вы могли бы просто кликнуть на кнопку и повторить ваш набор тестов.


Писать тесты очень сложно

Это может быть сложно вначале, однако, как и с любым другим типом кодирования, с практикой станет легче. В конечном итоге написание тестов станет для вас естественным и вы найдете, что это не сложный процесс.

На данный момент код в вашем проекте может быть неудобным для покрытия автоматическими тестами, однако со временем вы обнаружите, что пишите более тестируемый код. Это сделает код более простым для понимания и поддержки, и на вершине выгод - то что он тестируемый. А та часть проекта, которая плохо ложится на тесты - это кандидат для рефакторинга.

Есть много разных методологий тестирования, но мой совет начинать с простого и затем усложнять со временем. Сделайте для начала хороший набор unit-тестов, и затем перейдите к интеграционному тестированию и тестированию UI.


Мой код уже работает. Что мне тестировать?

Вы удивитесь, как часто вы это услышите. Разработчики будут часами кодировать и день за днем работать над одним проектом. Когда кто-то становится таким образом уверенным в себе программистом, он может начать верить, что его код правильный и что он достаточно хорош, чтобы не совершать ошибок.

К сожалению никто не идеален и ошибки уже есть или будут допущены в будущем. Это не означает, что кто-то плохой разработчик, просто так случается. И если кто-то настаивает, что его код не нуждается в тестировании, я хотел бы знать откуда он знает как его код работает и откуда у него уверенность, что он будет работать и в будущем.


Написание тестов помогает нам избегать ошибок, помогает безопасно вносить изменения в код в будущем. Вы сможете запустить свой набор тестов и проверить все ли работает, что позволит вам со спокойной душой отправить проект на релиз. Представте, насколько вы будете счастливы, когда будете уверены, что ваш релиз проходит все тесты.

Если вы знаете кого-то, кто отказывается писать тесты, найдите время чтобы убедить их в обратном, возможно, используя вышеизложенные мысли. И это сделает их лучшим и более счастливым разработчиком!

Спасибо за чтение и приятного кодинга! 👏

12 11 2017

Теги заметки: