Пошлите электронное письмо на SMTP Gmail под средним доверием

thetalkingwalnut спрашивает:

, Каковы некоторые хорошие способы убедить скептических разработчиков в команде значения Поблочного тестирования?

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

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

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

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

    • , Если разработчик утверждает, что метод кажется слишком простым для сбоя, не он стоящий взятия эти 60 секунд, необходимых для описывания простого модульного теста с 5 строками на него? Эти 5 строк кода будут работать каждую ночь (Вы делаете ночные сборки, правильно?) в течение следующего года или больше и будет стоить усилия, если даже просто, как только это, оказывается, ловит проблему, которая, возможно, заняла 15 минут или дольше определить и отладить. Кроме того, запись легких модульных тестов подвозит количество модульных тестов, которое заставляет разработчика выглядеть хорошим.

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

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

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

Однако мы должны понять влияние "большего количества модульных тестов". Разработчик может только записать ~N строки кода неделя, и необходимо выяснить, какой процент того кода должен быть кодом модульного теста по сравнению с производственным кодом. Слабое рабочее место могло бы иметь 10% кода как модульные тесты и 90% кода как производственный код, приводящий к продукту с большим количеством из (хотя очень ошибочный) функции (думайте MS Word). С другой стороны, строгий магазин с 90% модульных тестов и 10%-го производственного кода будет иметь горный продукт тела с очень немногими функциями (думайте "vi"). Вы никогда не можете слышать отчеты о последнем катастрофическом отказе продукта, но который, вероятно, как очень имеет отношение к продукту, не продавая очень хорошо так, как это имеет отношение к качеству кода.

Хуже все же, возможно, единственная уверенность в разработке программного обеспечения состоит в том, что "изменение неизбежно". Примите строгий магазин (90%-я единица тестирует/10 производственный код %), создает продукт, который имеет точно 2 функции (принимающий 5% производственного кода == 1 функция). Если клиент приезжает и изменяет 1 из функций, то то изменение мусор 50% кода (45% модульных тестов и 5% производственного кода). Слабый магазин (10%-я единица тестирует/90 производственный код %) имеет продукт с 18 функциями, ни одна из которых не работает очень хорошо. Их клиент полностью обновляет требования для 4 из их функций. Даже при том, что изменение является в 4 раза более большим, только вдвое меньше из кодовой базы повреждается (~25% = модульные тесты на ~4.4% + 20% производственного кода).

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

10
задан Esteban Küber 30 July 2009 в 18:43
поделиться

1 ответ

Gmail также принимает порт 25; вы просто даете порт 25; его работа для меня.,

4
ответ дан 4 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: