Тестирование вашего кода программно: программистом или кем-то еще? - PullRequest
1 голос
/ 01 октября 2010

Итак, вот такая ситуация - цитата из моего босса: «[...] мы должны сосредоточиться на программировании. [...] В конце дня я хочу написать хорошее программное обеспечение, а не увязнутьдолой тестирование. "Об этом говорится после того, как у нас было 3 месяца огромного списка ошибок и недавно было назначено непрограммисту писать веб-тесты с фреймворком Selenium.

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

Ответы [ 8 ]

8 голосов
/ 01 октября 2010

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

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

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

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

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

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

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

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

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

4 голосов
/ 01 октября 2010

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

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

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


Остальное - просто пустые разговоры об этике, но это важно учитывать.

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

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

То, что было проблемой с процессом и оценкой легитимной работы, теперь стало проблемой с этикой.1014 *

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

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

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

1 голос
/ 02 октября 2010

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

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

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

0 голосов
/ 06 октября 2010

Можно отметить, что модульное тестирование было встроено в .Net framework с VS2005.

0 голосов
/ 02 октября 2010

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

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

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

0 голосов
/ 02 октября 2010

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

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

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

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

0 голосов
/ 01 октября 2010

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

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

0 голосов
/ 01 октября 2010

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

...