Каков наиболее убедительный способ потребовать формализованного модульного тестирования?

StackOverflow https://stackoverflow.com/questions/120460

  •  02-07-2019
  •  | 
  •  

Вопрос

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

Какие наиболее убедительные способы вы использовали или использовали вместе с вами, чтобы убедить всех, что формализованное модульное тестирование — это хорошо и что его необходимость действительно отвечает интересам «крупных» проектов, над которыми мы работаем.Я не разработчик, но занимаюсь контролем качества и хотел бы улучшить качество выполняемой работы, чтобы обеспечить ее готовность к тестированию.

Под формализованными модульными тестами я просто говорю о

  • Определение модульных тестов, которые необходимо написать
  • Идентификация тестовых данных (или их описание)
  • Написание этих тестов
  • Отслеживание этих тестов (и повторное использование при необходимости)
  • Делаем результаты доступными
Это было полезно?

Решение 13

Итак, через два года после того, как я задал этот вопрос, я обнаружил неожиданный ответ: переход на новый SDLC — это то, что нужно.Пять лет назад мы создали наш первый официальный SDLC.Это улучшило нашу ситуацию, но упустило из виду некоторые важные вещи, такие как автоматизация.Сейчас мы находимся в процессе создания нового SDLC (под новым руководством), где одним из арендаторов является автоматизация.Не только автоматизированные модульные тесты, но и автоматизированные функциональные тесты.

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

Другие советы

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

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

После того как вы убедили своих коллег-разработчиков, убедите руководство вместе.

я использую Мавен с Верный огонь и Кобертура плагины для всех моих сборок.Фактические тестовые примеры создаются с помощью Юнит, ДбЮнит и ИзиМок.

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

Идентификация тестовых данныхDbUnit отлично подходит для загрузки тестовых данных для ваших модульных тестов.

Написание тестовых случаевЯ использую JUnit для создания тестовых примеров.Я пытаюсь писать самодокументируемые тестовые примеры, но буду использовать Javadocs, чтобы комментировать что-то неочевидное.

Отслеживание и предоставление результатовЯ интегрирую модульное тестирование в свой цикл сборки Maven с помощью плагина Surefire и использую плагин Corbertura для измерения покрытия, достигнутого этими тестами.Я всегда создаю и публикую веб-сайт, включающий отчеты Surefire и Cobertura, как часть моей ежедневной сборки, чтобы я мог видеть, какие тесты не прошли/пройдены.

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

В те дни, когда я занимался разработкой Cobol на мэйнфреймах, мы делали это неукоснительно в нескольких компаниях, в которых я работал, и это было принято как способ работы, потому что этого требовала окружающая среда.Я думаю, что это была очень типичная схема для той эпохи, и, возможно, некоторые причины могут быть применимы и к вам:

Как и в большинстве сред мэйнфреймов, у нас было три области: разработка, обеспечение качества и производство.Программисты занимались разработкой и модульным тестированием там, и как только они подписывали контракт и были довольны, модуль был перенесен в среду контроля качества (с документами по тестам и результатам), где он подвергался системному тестированию специальным персоналом по обеспечению качества.Переход к миграции QA был формальным шагом, который произошел в одночасье.После проверки качества код был перенесен в производство, и ошибок было очень мало.

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

Извлечение соответствующих моментов -

  1. Репутация программиста связана с предоставлением протестированного кода без ошибок
  2. Значительные накладные расходы, связанные с перемещением кода модульного тестирования на следующий уровень, поэтому мотивируют не повторять это и сделать все правильно с первого раза.
  3. Тестирование системы выполняют разные люди, а модульное тестирование — в идеале другая команда.

Я уверен, что ваша среда будет отличаться, но принципы могут быть переведены.

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

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

Многие разработчики не осознают, насколько сильно они проводят рефакторинг, не гарантируя сохранения поведения всей системы.На мой взгляд, это самое большое преимущество модульного тестирования и TDD.

  1. Требования к программному обеспечению меняются
  2. Изменения программного обеспечения в соответствии с требованиями

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

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

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

Надеюсь это поможет.

Образование и/или сертификация.

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

Существует большая разница между убедительный и требующий.

Если вы найдете способ убедить коллег написать их — отлично.Однако если вы создадите формализованные правила и потребуете от них написания модульных тестов, они найдут способ преодолеть эту проблему.В результате вы получите кучу юнит-тестов, которые ничего не стоят:Для каждого доступного класса будет проведен модульный тест, а также будут протестированы сеттеры и геттеры.

Подумайте дважды, прежде чем создавать и обеспечивать соблюдение правил.Разработчики умеют их преодолевать.

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

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

Напомните своей команде или другим разработчикам, что они профессионалы, а не любители.Работало для меня!

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

Как руководитель группы я обязан следить за тем, чтобы мои программисты проводили модульное тестирование всех модулей, над которыми они работают.Полагаю, на данный момент даже не стоит вопрос, как их убедить, это необходимо.Не иногда, не в крупных проектах, а постоянно.Модульное тестирование — это первая линия защиты от запуска в производство чего-то, что вам придется поддерживать.Если в производство будет запущено что-то, что не было полностью протестировано как модульное, так и системное, то это аукнется вам.Я предполагаю, что одна из политик, которые мы здесь используем для поддержки этого, заключается в том, что если он выходит из строя или вызывает проблемы, то программист, ответственный за кодирование и тестирование этого модуля, будет тем, кто должен позаботиться о проблемах, выполнить очистку. , и т. д.Уже одно это является довольно хорошим мотиватором.
Другое дело, что речь идет о гордости.Я работаю в цехе, в котором работают около 75 программистов, хотя по некоторым стандартам это много, на самом деле он достаточно мал, чтобы мы все могли знать друг друга.Он также достаточно мал, чтобы мы знали, над чем работают друг друга, и когда дело переходит в производство, мы знаем о любых отклонениях, сбоях и т. д.Если вы будете внимательны, проведете модульное и системное тестирование, шансы перенести что-то в производство, не вызвав сбоев, значительно возрастают.Может потребоваться время или два, чтобы запустить что-то в производство и не реализовать это, но есть большие преимущества в том, чтобы не напортачить.Очень приятно слышать поздравления в коридоре, когда заносишь проект и он не облажался.

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

Вы можете почерпнуть вдохновение из инициативы Google.Их команда тестировщиков начала размещать примеры, советы и преимущества в туалетных кабинках, чтобы привлечь внимание к преимуществам автоматизации тестирования.

https://testing.googleblog.com/2007/01/introducing-testing-on-toilet.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top