Я буду честен. Я только недавно начал писать модульные тесты, и когда я возвращаюсь для изменения старого DLL, это с моих плохих былых времен, я буду сидеть на корточках и писать модульные тесты для получения его около 100%-го покрытия кода. Я говорю "рядом", потому что последний несколько процентов может быть трудно получить до должного к способу, которым код структурирован, что это не имело насмешки или поблочного тестирования в виду (это происходит много с абстрактными классами или классами что P/Invoke в собственный код). И в то время как я понимаю, что 100%-е покрытие кода не является тем же самым, поскольку 100% всего выполнения кода соединяют каналом, я нашел, что наличие тестов существует хороший способ сказать, когда я делаю что-то, что это собирается повредить много вещей.
Честно говоря, это - вероятно, одна причина, почему потребовались многие разработчики (включая меня) так долго для возвращения для принятия поблочного тестирования (просто еще давайте не входить в TDD).
я не говорю, что любой из них является законными причинами, но они действительно более или менее проносились в моей голове, и я держал пари, что они прошли некоторых ваших также:
Первый, существует мысль вроде, "О, я записал горы кода с нулевыми тестами, и видящий, поскольку я уже сокрушен той горой, у меня возможно нет времени для добавления еще нескольких гор тестового кода сверху его".
В-третьих, модульные тесты легче ценить при поддержании существующего кода, и если Вы всегда пишете новый код, ну, в общем, преимущества не сразу очевидны. То, когда Ваше задание должно произвести в большом количестве утилиту и никогда не касаться ее снова, разработчик видит мало значения в модульном тесте, потому что они, вероятно, не будут работать над той утилитой или в компании к этому времени программист обслуживания (кому жаль, что не было модульного теста), приходит.
Четвертое, поблочное тестирование является довольно недавними инновациями. (О, тишина... Я знаю, что идея была вокруг навсегда, особенно в для решения ответственных задач и приложениях DoD, но для "Joe Водопроводчик Разработчик" типы как я? Поблочное тестирование не было упомянуто вообще во время моей всей карьеры студента CS в начале этого десятилетия; в 2008 я слышу, что это - требование для всех проектов от уровня 101. Visual Studio даже не получала встроенную среду тестирования до этого года, и даже тогда только в профессиональном выпуске.) Был он блаженное неведение с моей стороны? Несомненно, и я думаю много людей, которые кодируют, потому что это - их дневное задание (который прекрасен), просто не знают. Если они, то они знают, что должны остаться текущими, но когда дело доходит до изучения новой методологии (особенно та, которая включает запись большего количества кода и взятие более первичного времени, когда Вам была нужна та новая возможность, сделанная вчера ) означает, что это будет пододвинуто обратно. Это - длинный хвост, и приблизительно через одно десятилетие наши переговоры о поблочном тестировании будут казаться столь же странными как наше бормотание об объектно-ориентированном программировании, разрешающем новую эру разработки в течение 1990-х. Heck, если я имею , запустил поблочное тестирование, конец должен быть рядом, потому что я обычно - идиот.
Пятое, поблочное тестирование некоторые области кода являются действительно трудными, и это отпугнуло меня некоторое время. Многопоточные очереди событий, графический рендеринг и графический интерфейсы пользователя приходят на ум. Многие разработчики понимают это и думают "хорошо heck, поблочное тестирование было бы большим для кода библиотеки, но когда был прошлый раз, когда я записал просто библиотеку классов". Это требует времени, чтобы прийти. С этой целью, никакие модульные тесты не обязательно означает, что плохой код предстоит в будущем.
Наконец, уровень евангелизма, который иногда прибывает от защитников поблочного тестирования, может быть пугающим и нерасполагающим. Серьезно, я думал, что был идиотом, потому что я просто не мог схватить, как дразнить определенный интерфейс и почему я захочу. Эгоистично, я хотел ненавидеть поблочное тестирование, если только для того, что все не замолчат об этом . Никакая серебряная пуля.
Так, извинения за хаотичное сообщение. Таким образом:
я не делал модульного теста в течение долгого времени. Теперь я делаю. Модульные тесты являются большим инструментом, особенно во время обслуживания.
Для существующих проектов, можно, по крайней мере, войти и записать тест, который документирует текущий вход и его вывод. При изменении той большой путаницы темного кода в будущем Вы будете в состоянии видеть, изменили ли Вы тот небольшой снимок. Это - также отличный способ изменить культуру разработки в Вашей компании.
Позволяют провокационным сообщениям начаться! =)
Выполняйте удаление фрагментами, но вместо того, чтобы пытаться сжимать журнал между временами, делайте резервные копии журнала между фрагментами (то есть, если вы полностью восстанавливаетесь. )
Проблема в том, что журнал заполнен и, следовательно, должен увеличиваться. Если он заполнен, попытки сжать его бесполезны, в журнале нет свободного места для передачи в ОС. Вместо этого вам нужно сделать пространство внутри файла доступным для повторного использования.
Поскольку БД находится в режиме простого восстановления, запускайте удаление по частям с командой CHECKPOINT между каждым фрагментом. Вы не можете делать резервные копии журналов в Простом восстановлении
Вот пример кода, который выполняет удаление без заполнения журнала (в простом восстановлении). НЕ оборачивайте это в пользовательскую транзакцию. Это полностью исключает возможность пакетного удаления, поскольку журнал нельзя очистить до тех пор, пока транзакция не будет завершена полностью.
(SQL 2005 и выше. Для SQL 2000 удалите TOP и используйте SET ROWCOUNT)
DECLARE @Done BIT
SET @Done = 0
WHILE @Done = 0
BEGIN
DELETE TOP (20000) -- reduce if log still growing
FROM SomeTable WHERE SomeColumn = SomeValue
IF @@ROWCOUNT = 0
SET @Done = 1
CHECKPOINT -- marks log space reusable in simple recovery
END
Чтобы понять управление журналами , взгляните на эту статью - http://www.sqlservercentral.com/articles/64582/
Один трюк, который я использовал в зависимости от размера данных, которые я храню, и количества, которое я удаляю, заключается в следующем:
выбрать все "данные для хранения" в другом таблица (только для временного хранилище)
обрезать исходную таблицу
вставить все данные из таблицы временного хранения обратно в исходную
Это хорошо работает, если объем, который вы храните, меньше, чем тот, который вы удаляете.
Аналогичное вариант, если все файлы базы данных находятся на одном диске (данные и журналы), а данные, подлежащие удалению, составляют примерно половину данных, можно было бы экспортировать «данные для хранения» в файл на отдельном диске с помощью команды bcp line, затем усеките и снова вставьте файл данных с помощью bcp.
Я видел, как администраторы баз данных отключили базу данных, сделали резервную копию журналов, отключили ведение журнала и сделали это таким образом, но это кажется большим хлопотом. : -)
Если для параметра восстановления установлено значение «Полное», вы можете попробовать сделать резервную копию журнала транзакций, чтобы очистить журнал непосредственно перед удалением.