среда, 24 мая 2017 г.

Дураки не пишут юнит-тесты

«У нас нет времени писать модульные тесты» или «У нас нет бюджета для модульного тестирования». Иногда это может звучать так: «Мы не используем TDD, поэтому у нас нет модульных тестов», или даже «TDD для нас слишком дорого». Я уверен, вы слышали это или даже сказали это сами. Я не понимаю логики. По моему мнению, модульное тестирование не является продуктом; Это инструмент. Вы используете тесты для разработки продукта быстрее и лучше. Как вы можете сказать, что у вас нет времени использовать инструмент, который ускоряет вашу работу? Позвольте мне показать вам, как это сделать.


TDD или нет, модульный тест - это модульный тест. Либо вы создаете его до основной части кода или после него.

Модульный тест - это инструмент, который помогает вам, разработчику программного обеспечения, «запускать» ваши вещи и видеть, как они работают. Как еще вы можете проверить, работает ли это? Когда я слышу: «У меня нет времени на модульные тесты», мой следующий вопрос: «Как вы тестировали свой код?»

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

Итак, как вы это делаете?

Если это одностраничный PHP-сайт, вы можете запустить его на Apache, изменить его на диске, а затем Cmd + R много раз. Это будет работать для примитивной части кода и только для вас, одного разработчика. Но я слышу это «у меня нет времени» от программистов, работающих на корпоративных системах. Как вы, ребята, проверяете свой код?

Не потому, что у вас не было времени, вы просто не знали, как

Я сравнивал бы модульные тесты с классами ООП. Вы можете спроектировать все приложение в одном классе. Вы сэкономите время на создание других классов, их структурирование, размышление о связях между ними и т.д. Это будет один файл .java длиной 20 000 строк. И вы скажете, что «у вас не было времени на создание классов», так? Что бы мы сказали о таком продукте и его авторе? Правильно, мы бы сказали, что он просто глупый. И это не имеет никакого отношения к времени или бюджету. Такой программист просто не знает, как использовать инструменты объектно-ориентированного программирования, такие как инкапсуляция, наследование, полиморфизм, интерфейсы, перегрузка метода и т.д. Речь не о времени или бюджете; Речь идет о навыках и дисциплине.

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

Поэтому каждый раз, когда я слышу: «У меня не было времени для юнит-тестов», я понял, что ты просто не знаешь, как и пытаешься скрыть этот факт за ложными оправданиями. По меньшей мере, это не профессионал.

1 комментарий:

  1. Привет!
    Написал статью по мотивам Вашей статьи
    https://inexsu.wordpress.com/2018/10/20/%D1%84%D0%B8%D0%B7%D0%B8%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F-%D1%8E%D0%BD%D0%B8%D1%82-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE-%D0%BF%D1%80/

    ОтветитьУдалить