Посылка электронной почты иногда может быть как черная магия. Обратный DNS действительно важен.
Я нашел, что очень полезно тщательно отслеживать отчеты о недоставке. Я направляю все свои отчеты о недоставке на один адрес, и у меня есть служба Windows, разбирающая их (Google ListNanny). Я помещаю столько информации из NDR, сколько могу, в базу данных, а затем я запускаю отчеты об этом, чтобы узнать, вдруг ли я начал блокироваться определенным доменом. Кроме того, вам следует избегать отправки писем по адресам, которые ранее были отмечены как NDR, потому что это, как правило, хороший признак спама.
Если вам нужно отправить сразу несколько электронных писем с клиентами, задержка между ними, потому что, если вы отправляете слишком много одинаковых писем в один домен за раз, вы обязательно закроете свой черный список.
Некоторые домены просто невозможно доставить иногда , Comcast.net - худшее.
Убедитесь, что ваши IP-адреса не указаны на сайтах, таких как http://www.mxtoolbox.com/blacklists.aspx .
С Разработкой через тестирование you’ll пишут тест перед записью кода, который она тестирует. Однажды you’re записанный код и тестовые передачи, тогда it’s время для записи другого теста. Если Вы следуете за TDD правильно, you’ve, достаточно записанные тесты однажды you’re код делают все, что требуется.
Что касается пограничных случаев, давайте возьмем пример, такой как проверка параметра в методе. Прежде чем Вы добавите параметр к Вам код, Вы создаете тесты, которые проверяют, что код обработает каждый случай правильно. Тогда можно добавить параметр и связанную логику, и гарантировать тестовую передачу. Если Вы продумываете больше пограничных случаев, то больше тестов может быть добавлено.
Путем взятия его один шаг за один раз, Вы не должны будете волноваться о пограничных случаях, когда Вы закончили писать свой код, потому что Вы уже запишете тесты для них всех. Конечно, всегда существует человеческая ошибка, и можно пропустить что-то... Когда та ситуация происходит, пора добавить другой тест и затем зафиксировать код.
Ну, когда Вы не можете больше думать о случаях возникновения отказов, который не работает, как предназначено.
Часть TDD должна сохранить список вещей, которые Вы хотите реализовать, и проблемы с Вашей текущей реализацией... поэтому, когда тот список заканчивается, Вы по существу сделаны....
И помнят, можно всегда возвращаться и добавлять тесты при обнаружении ошибок или новых проблем с реализацией.
тот здравый смысл, там никакой идеальный ответ. Цель TDD состоит в том, чтобы удалить страх, если Вы чувствуете себя уверенно, что Вы протестировали его, достаточно хорошо продолжаются...
Просто не забывают, что при нахождении ошибки позже запишите тест сначала для репродуцирования ошибки, затем исправьте ее, таким образом, Вы предотвратите будущее изменение для повреждения ее снова!
Некоторые люди жалуются, когда у них нет X процентов покрытия...., некоторый тест бесполезен, и 100%-е покрытие не означает тестирование всего, что может заставить код повредиться, только факт это повреждение привычки для способа, которым Вы использовали его!
возможно, я пропустил что-то где-нибудь в Гибком мировом / мировом XP, но мое понимание процесса было то, что разработчик и клиент определяют тесты как часть Функции . Это позволяет тестовым сценариям заменять документацию более формальных требований, помогает определить примеры использования для функции, и т.д. Таким образом, Вы сделаны, тестируя и кодируя, когда все эти тесты передают... плюс больше пограничные случаи, о которых Вы думаете по пути
Теоретически необходимо покрыть все возможные входные комбинации и тест, что вывод корректен, но иногда это просто не стоит того.
Просто попытайтесь придумать каждый путь в причине, что Вы могли заставить что-то перестать работать. Нулевые значения, значения из диапазона, и т.д. Как только Вы ничего не можете легко придумать, просто продвинуться к чему-то еще.
, Если в будущем Вы когда-нибудь находите новую ошибку или придумываете путь, добавьте тест.
Это не о покрытии кода. Это - опасная метрика, потому что код "покрыт" задолго до того, как он "тестируется хорошо".
Alberto Savoia говорит , что" , если все Ваши тесты передают, возможности состоят в том, что Ваш тест не достаточно хорош ". Я думаю, что это - хороший способ думать о тестах: спросите, делаете ли Вы пограничные случаи, передаете некоторый неожиданный параметр и так далее. Хорошим способом улучшить качество Ваших тестов является работа с парой - особенно тестером - и получите справку о большем количестве тестовых сценариев. Пара с тестерами хороша, потому что у них есть различная точка зрения.
, Конечно, Вы могли использовать некоторый инструмент, чтобы сделать тесты мутации и получить больше уверенности от Ваших тестов. Я использовал Шут , и это улучшает и мои тесты и способ, которым я записал им. Рассмотрите для использования чего-то как он.
Наилучшие пожелания
Вы могли всегда использовать инструмент тестового покрытия как EMMA ( http://emma.sourceforge.net/ ) или его плагин Eclipse EclEmma ( http://www.eclemma.org/ ) и т.п. Некоторые разработчики полагают, что 100%-е тестовое покрытие является достойной целью; другие не соглашаются.
На некотором уровне это - инстинктивное чувство
, "Действительно ли я уверен, что тесты поймают все проблемы, о которых я могу думать теперь?"
На другом уровне, Вы уже получили ряд требований пользователя или системных требований, которые должны быть встречены, таким образом, Вы могли остановиться там.
, В то время как я действительно использую покрытие кода, чтобы сказать мне, если я не следовал за своим процессом TDD и найти код, который может быть удален, я не считал бы покрытие кода как полезный способ знать, когда остановиться. Ваше покрытие кода могло составить 100%, но если Вы забыли включать требование, ну, в общем, тогда, Вы действительно не сделаны, Вы.
, Возможно, неправильное представление о TDD состоит в том, что необходимо знать все впереди тестировать. Это дезинформировано, потому что тесты, которые следуют из процесса TDD, похожи на пройденный путь. Вы знаете то, что было протестировано в прошлом и может вести Вас до степени, но она не скажет Вам, что сделать затем.
я думаю, что TDD мог считаться эволюционным процессом. Таким образом, Вы запускаете со своего начального дизайна, и это - набор тестов. Поскольку Ваш код разбит в производстве, Вы добавляете больше тестов и кода, который делает те тесты передачей. Каждый раз, когда Вы добавляете тест здесь и тест там, Вы также делаете TDD, и он не стоит всего так очень. Вы не знали, что те случаи существовали, когда Вы записали свой первый набор тестов, но Вы получили знание теперь и можете проверить на те проблемы при нажатии кнопки. Это - великая держава TDD и одна причина, почему я защищаю для него так.
Тесты в TDD о покрытии спецификация , на самом деле они могут быть замена для спецификации. В TDD тесты не о покрытии кода. Они удостоверяются, что код покрывает спецификацию, потому что код провалит тест, если это не покроет спецификацию. Любой дополнительный код, который Вы имеете, не имеет значения.
, Таким образом, у Вас есть достаточно тестов, когда тесты похожи, они описывают все ожидания, что Вы или заинтересованные стороны имеете.
Тест является способом точного описания чего-то, что Вы хотите. Добавление теста расширяется объем из того, что Вы хотите, или добавляет детали из того, что Вы хотите.
, Если Вы не можете думать ни о чем больше, что Вы хотите, или любые улучшения к тому, что Вы хотите, затем идите дальше к чему-то еще. Можно всегда возвратиться позже.
Многие из других комментариев попали в точку. Вы чувствуете себя уверенно в коде, который Вы записали, учитывая свое тестовое покрытие? Поскольку Ваш код развивается, Ваши тесты все еще соответственно покрывают его? Ваши тесты получают намеченное поведение и функциональность для компонента под тестом?
должна быть золотая середина. Поскольку Вы добавляете все больше тестовых сценариев, Ваши тесты могут стать хрупкими как, что рассматривают, пограничный случай непрерывно изменяется. После многих более ранних предложений может быть очень полезно получить все, о чем можно думать впереди и затем добавление новых тестов, когда программное обеспечение растет. Это довольно органическое растет, может помочь Вашим тестам вырасти без всего усилия впереди.
я не собираюсь лежать, но я часто становлюсь ленивым при возвращении для записи дополнительных тестов. Я мог бы пропустить то свойство, которое содержит 0 кодов или конструктора по умолчанию, о котором я не забочусь. Иногда быть абсолютно анальным о процессе может сэкономить Вам время n области, которые меньше тогда очень важны (100%-й миф о покрытии кода).
необходимо помнить, что конечная цель должна получить продукт высшего качества снаружи и не уничтожить себя тестирование. Если у Вас есть то инстинктивное чувство как Вы, пропускают что-то тогда, что возможности - Вы, имеют и что необходимо добавить больше тестов.
Удача и счастливое кодирование.
Совет Kent Beck к тестам записи, пока страх не превращается в скуку. Таким образом, пока Вы больше не боитесь, что что-либо повредится, предполагая, что Вы запускаете с соответствующего уровня страха.