Как сократить время, затрачиваемое на тестирование?
Я только что просмотрел проект, который недавно почти закончился, и обнаружил очень серьезную проблему. Я потратил большую часть времени банка на тестирование кода, воспроизводя различные ситуации, которые "могут" вызвать ошибки кода.
Есть ли у вас идеи или опыт, чтобы поделиться о том, как сократить время, затрачиваемое на тестирование, так что делает разработку гораздо более плавной?
Я пытался следовать концепции тест-драйва для всего моего кода , но мне было очень трудно достичь этого, действительно нужно немного помощи от старших ребят здесь.
Спасибо
Re: все
Спасибо за ответы выше, изначально мой вопрос был о том, как сократить время на общее тестирование, но теперь проблема сводится к тому, как написать эффективный автоматизированный тестовый код.
Я постараюсь улучшить свои навыки в написании тестового костюма, чтобы сократить эту часть времени.
Тем не менее, я все еще действительно борюсь с тем, как сократить время, которое я потратил на воспроизведение ошибок, например, A стандартный блог-проект будет легко воспроизводить ситуации, которые могут привести к ошибкам, но сложная внутренняя система может "никогда" не быть протестирована через легко, это достойно ? Есть ли у вас какие-либо идеи о том, как построить тестовый план для такого проекта ?
Спасибо за дальнейшие ответы.
9 ответов:
Дизайн, основанный на тестировании, не связан с тестированием (обеспечением качества). Она с самого начала была названа неудачно.
Речь идет о том, чтобы иметь управляемые машиной допущения и спецификации поведения программы, и это делается программистами во время программирования, чтобы гарантировать, что допущения являются явными.
Поскольку эти задачи должны быть выполнены в какой-то момент жизненного цикла продукта, это просто сдвиг работы. Будет ли это более или менее эффективно это обсуждение на другое время.Что вы ссылаетесь на то, что я бы не назвал тестированием. Наличие сильного TDD означает, что на этапе тестирования не нужно полагаться так сильно на ошибки, которые будут пойманы задолго до того, как они достигнут тестовой сборки (как это происходит с опытными программистами с хорошей спецификацией и отзывчивыми заинтересованными сторонами в среде, не связанной с TDD).
Если вы считаете, что предварительные тесты (runnable spec) - это серьезная проблема, я думаю, что она сводится к тому, сколько работы ожидается, что относительные этапы разработки будут стоить во времени а деньги?
Я думаю, что понимаю. Выше уровня тестирования разработчика у вас есть уровень тестирования клиента, и похоже, что на этом уровне вы находите много ошибок.
Для каждой найденной ошибки вы должны остановиться, снять шляпу тестирования, надеть шляпу воспроизведения и определить точную стратегию воспроизведения. Затем вы должны задокументировать ошибку, возможно, поместить ее в систему отслеживания ошибок. Затем вы должны надеть шляпу для тестирования. В то же время, вы потеряли все настройки, которые вы были работая над и потерял след, где вы были на любом тестовом плане, которому вы следовали.
Теперь-если бы этого не случилось - если бы у вас было очень мало ошибок - вы могли бы быстро пройти тестирование, не так ли?
Сомнительно, что автоматизация GUI-driving test поможет решить эту проблему. Вы потратите много времени на запись и ведение тестов, и эти регрессионные тесты займут достаточно много времени, чтобы вернуть инвестиции. Вначале вы будете идти намного медленнее с Гуй-вождение клиентских тестов.
Итак (я утверждаю), что то, что действительно может помочь, - это более высокое /начальное/ качество кода, выходящее из деятельности по разработке. Микротесты-также называемые тестами разработчика или тест-ориентированной разработкой в первоначальном смысле-могут действительно помочь в этом. Еще одна вещь, которая может помочь, - это парное программирование.
Предполагая, что вы не можете захватить кого-то еще для пары, я бы потратил час, глядя на вашу систему отслеживания ошибок. Я бы посмотрел на последние 100 дефектов и попытался классифицируйте их по первопричинам. "Проблема с обучением "не является причиной, но" выключена одной ошибкой " может быть.
Как только вы их классифицируете и посчитаете, поместите их в электронную таблицу и отсортируйте. Какая бы первопричина ни возникала чаще всего, это первопричина, которую вы предотвращаете в первую очередь. Если вы действительно хотите получить фантазию, умножьте первопричину на некоторое число, которое является количеством боли, которую она вызывает. (Пример: если в этих 100 багах у вас есть 30 опечаток в меню, которые так же легко исправить, и 10 трудно воспроизводимых javascript ошибки, вы можете сначала решить проблему javascript.)
Это предполагает, что вы можете применить некоторые магические "исправления" к каждой из этих первопричин, но это стоит попробовать. Например: прозрачные иконки в IE6 могут быть потому, что IE6 не может легко обрабатывать .PNG-файл. Так что есть триггер управления версиями, который отклоняет .gif находится на контроле, и проблема устранена.Надеюсь, это поможет.
Команда Subversion разработала некоторыедовольно хорошие тестовые процедуры , автоматизировав весь процесс.
Я сам начал использовать этот процесс, например, написав тесты Перед реализацией новых функций. Он работает очень хорошо и обеспечивает последовательное тестирование на протяжении всего процесса программирования.
SQLite также имеет приличную тестовую систему с некоторой очень хорошей документацией о том, как это делается.
По моему опыту разработки на основе тестов экономия времени наступает значительно позже, чем вы напишете тесты, или, по крайней мере, после написания базовых тестовых случаев. Ключевая вещь здесь заключается в том, что вы на самом деле должны написать наши автоматизированные тесты. То, как вы сформулировали свой вопрос, наводит меня на мысль, что вы на самом деле не писали автоматические тесты. После того, как вы написали свои тесты, вы можете легко вернуться позже и обновить тесты, чтобы покрыть ошибки, которые они ранее не находили (для лучшее регрессионное тестирование), и вы можете легко и относительно быстро рефакторировать свой код с легкостью, что код все еще будет работать, как ожидалось, после того, как вы существенно изменили его.
Вы написали:
Один из методов, который, как было доказано в многочисленных эмпирических исследованиях, чрезвычайно хорошо работает для максимизации эффективности тестирования, - это комбинаторное тестирование. При таком подходе тестировщик определит, какие именно вещи следует протестировать (и введет их в программу тестирования). простой инструмент) и инструмент определит, как протестировать приложение. В частности, инструмент будет генерировать тестовые случаи, которые определяют, какие комбинации условий тестирования должны выполняться в каком тестовом сценарии и в каком порядке должен выполняться каждый тестовый сценарий." Спасибо за ответы выше здесь, изначально мой вопрос был в том, как это сделать. сокращение времени на общее тестирование, но теперь проблема сводится к тому, как это сделать. напишите эффективный автоматизированный тест код."
В статье IEEE Computer от августа 2009 года, написанной совместно с доктором Риком Куном, доктором Рагху Кекером и доктором Джеффом Леем , например, мы выделяем исследование 10 проектов, которое я провел, где одна группа тестировщиков использовала свой стандарт методы проектирования тестов и вторая группа тестировщиков, тестировавших одно и то же приложение, использовали комбинаторный генератор тестовых случаев для идентификации тестовых случаев для них. Команды, использующие комбинаторный генератор тестовых случаев, обнаружили в среднем более чем в два раза больше дефектов за час тестирования. Это убедительное доказательство эффективности. Кроме того, комбинаторные тестеры обнаружили на 13% больше дефектов в целом. Это убедительное доказательство качества / тщательности.
Эти результаты не являются чем-то необычным. Дополнительный информацию об этом подходе можно найти по адресу http://www.combinatorialtesting.com/clear-introductions-1 и наш обзор инструментов здесь. Он содержит снимки экрана и объяснение того, как наш инструмент делает тестирование более эффективным, определяя подмножество тестов, которые максимизируют охват.
Также бесплатную версию нашего генератора тестовых случаев Hexawise можно найти по адресу www.hexawise.com/users/new
Нет ничего плохого в том, чтобы тратить много времени на тестирование, если вы тестируете продуктивно. Имейте в виду, что разработка на основе тестов означает написание (в основном автоматизированных) тестов в первую очередь (это может занять много времени, если вы пишете полный набор тестов). Выполнение тестов не займет много времени.
Похоже, что ваша проблема заключается в том, что вы не выполняете автоматическое тестирование. Использование автоматизированных модульных и интеграционных тестов может значительно сократить время, затрачиваемое на тестирование.
Во-первых, хорошо, что вы осознаете, что вам нужна помощь - теперь идите и найдите ее:)
Идея состоит в том, чтобы использовать тесты, чтобы помочь вам думать о том, что код должен делать, они являются частью вашего времени разработки.Следует также подумать об общей стоимости владения кодом. Какова стоимость ошибки, которая проходит через производство вместо того, чтобы быть исправленной в первую очередь? Если вы находитесь в банке, есть ли серьезные последствия, связанные с неправильным получением цифр? Иногда, правильные вещи просто занимать время.
Одна из самых сложных вещей в любом проекте значительного размера-это проектирование базовой архитектуры и API. Все это выставляется на уровень юнит-тестов. Если вы сначала пишете свои тесты, то этот аспект дизайна происходит, когда вы кодируете свои тесты, а не логику программы. Это усугубляется дополнительными усилиями по тестированию кода. После того, как вы получили свои тесты, логика программы, как правило, совершенно очевидна.
Это, как говорится, есть некоторые интересные автоматические тестовые строители на горизонте.
Comments