Программное тестирование вашего кода:программистом или кем-то еще?

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

Вопрос

Итак, вот ситуация — цитата моего начальника:«[...] нам нужно сосредоточиться на программировании.[...] В конце концов, я хочу писать хорошее программное обеспечение и не увязнуть в тестировании». Это сказано после того, как у нас было 3 месяца устрашающего списка ошибок и недавно мы назначили непрограммиста для написания веб-тесты с использованием Selenium framework.

Мой босс очень стесняется модульных тестов (он не видит экономической выгоды, когда это замедляет работу разработчиков).Что вы думаете о веб-тестах и ​​программных тестах в целом?Должны ли они быть написаны программистом (или программистом) или это имеет значение?Я думал, что часть написания хорошего программного обеспечения — это написание тестов?Он типичный парень Microsoft из башни из слоновой кости, поэтому любые ресурсы, опубликованные Microsoft (или хорошие статьи в целом) в пользу тестирования по дизайну, были бы полезны.

Это было полезно?

Решение

Вот что я сделал.

  1. Я все равно написал тесты.

  2. Я написал код после написания тестов.

  3. Код был надежным и (в основном) без ошибок (в пределах моих возможностей).

Я никогда никому не говорил, что занимаюсь TDD.Если только они не спросят.

Оказывается, TDD на самом деле быстрее, чем возиться, пытаясь что-то спроектировать, закодировать и надеяться, что это сработает.

Некоторые вещи включают дополнительный шаг 0:«технологический скачок», чтобы увидеть, как все работает.За этим следует некоторая тестовая разработка для проверки еще не написанного реального программного обеспечения.

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

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

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

Code Complete — это книга, входящая в коллекцию Microsoft.Он содержит советы, пропагандирующие экспертную оценку и развитие модульного тестирования как концепции.Он не вдается слишком далеко в детали модульных тестов, но может заинтересовать его этой идеей, и вы сможете дальше изучить тему.

В конечном итоге вам нужен кто-то программист, непосредственно занимающийся автоматизацией тестирования...Я имею в виду, это по определению.

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


Остальное на самом деле просто пустая дискуссия об этике, но об этом важно помнить.

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

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

То, что было проблемой с процессом и оценкой законной работы, теперь стало щекотливой этической проблемой.

Я настоятельно рекомендую придерживаться запланированного подхода и убедить вашего менеджера рассматривать вашу точку зрения через разум, логику и апеллировать к его любви к Microsoft.;)

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

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

Я придерживаюсь мнения, что для того, чтобы что-то было «сделано», оно должно быть проверено как минимум двумя людьми.Вам не всегда нужен в команде тестировщик программного обеспечения, если все в команде считают, что качество программного обеспечения — это работа каждого.

Если вы хотите, чтобы он был высокоэффективным, тогда разработчик, пишущий код, должен писать тесты, а кто-то проверит их вместе с производственным кодом.Если вы хотите добиться высокой эффективности, объединитесь с кем-нибудь, и он напишет тесты, пока вы пишете код в «парном tdd».

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

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

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

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

Не все тесты одинаковы, давайте рассмотрим некоторые из них:

  • Модульные тесты/TDD.С этим трудно спорить, особенно потому, что это противоположно фразе «он не видит экономической выгоды, когда это замедляет разработчиков», это быстрее.С.Лотт обсуждает детали.
  • Целенаправленные интеграционные тесты.То же, что и выше, это быстрее.Нет необходимости выполнять ряд шагов через полностью интегрированное приложение, чтобы выяснить, работает ли тот очень тонкий слой интеграционного кода, который вы только что написали.Хуже всего, если учесть, что это повторяется столько раз, сколько вам нужно туда зайти, и даже больше, когда это ошибочно оказывается тесно связанным с различными процессами.
  • Полное тестирование системы.Имея вышеизложенное, вы просто хотите знать, все ли части подключены правильно и работает ли пользовательский интерфейс должным образом.Для первого вам понадобится небольшое количество тестов, которые пишутся очень быстро;сравните это с тем, сколько раз люди проделывают это вручную (включая вас), и вы станете победителем :).Что касается последнего, есть некоторые вещи, которые трудно обнаружить с помощью автоматических тестов, поэтому вы не сосредотачиваете на них автоматизацию.
  • Исследовательские тесты.Это все равно необходимо сделать, и мы надеемся, что перед созданием этой функции будет достаточно продумано, чтобы избежать необходимости вносить дополнительные изменения на этом этапе.

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

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

Чтобы создать хороший набор тестов, требуется немало усилий;это займет больше времени, чем ожидалось.

В этом отношении ваш начальник прав.

Однако, если вы планируете расширить свой продукт (добавить функции) или веб-сайт (добавить страницы и код JavaScript), вам все равно придется создать пакет позже.

Вы могли бы указать на это модульное тестирование встроен в инфраструктуру .Net начиная с VS2005.

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