Как сократить время, затрачиваемое на тестирование? - PullRequest
5 голосов
/ 30 мая 2009

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

Есть ли у вас какие-либо идеи или опыт, чтобы поделиться тем, как сократить время, затрачиваемое на тестирование, чтобы сделать разработку намного более плавной?

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

Спасибо

Re: все

Спасибо за ответы, приведенные выше, изначально мой вопрос был о том, как сократить время на общее тестирование, но теперь проблема заключается в том, как написать эффективный тестовый код автоматизации.

Я постараюсь улучшить свои навыки написания тестового костюма, чтобы сократить эту часть времени.

Тем не менее, я все еще действительно борюсь с тем, как сократить время, которое я потратил на воспроизведение ошибок, например, стандартный проект блога будет легко воспроизвести ситуации, может вызвать ошибки, но сложная сделанная на заказ внутренняя система может «никогда» может быть легко протестировано, стоит ли? Есть ли у вас какие-либо идеи о том, как построить план тестирования для такого проекта?

Спасибо за дальнейшие ответы еще.

Ответы [ 9 ]

6 голосов
/ 30 мая 2009

Тестируемый дизайн - это не тестирование (обеспечение качества). С самого начала он был плохо назван.

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

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

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

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

3 голосов
/ 09 июня 2009

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

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

Теперь - если это не должно было случиться - если у вас было очень мало ошибок - вы могли бы прыгнуть прямо через тестирование, верно?

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

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

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

После того, как они будут классифицированы и подсчитаны, поместите их в электронную таблицу и выполните сортировку. Какая бы ни была первопричина чаще всего, это первопричина, которую вы должны предотвратить в первую очередь. Если вы действительно хотите стать фантазером, умножьте основную причину на какое-то число, которое является причиной боли, которую она вызывает. (Пример: если из этих 100 ошибок у вас есть 30 опечаток в меню, которые легко исправить, и 10 трудно воспроизводимых ошибок javascript, вы можете сначала решить проблему с javascript.)

Это предполагает, что вы можете применить какое-то волшебное «исправление» к каждой из этих основных причин, но это стоит того. Например: прозрачные значки в IE6 могут быть связаны с тем, что IE6 не может легко обрабатывать файлы .png. Так что имейте триггер управления версиями, который отклоняет .gif при регистрации, и проблема исправлена.

Надеюсь, это поможет.

2 голосов
/ 18 сентября 2009

Вы писали:

"Спасибо за ответы выше, изначально мой вопрос был как сократить время на общее тестирование, но теперь проблема заключается в том, как написать эффективный автоматизированный тест код. "

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

В Августе 2009 года, в статье IEEE Computer, которую я написал в соавторстве с доктором Риком Куном, доктором Рагху Кекером и доктором Джеффом Лей , например, мы выделяем исследование из 10 проектов, которое я провел, где одна группа тестировщиков использовала свои стандартные методы разработки тестов, а вторая группа тестировщиков, тестировавших одно и то же приложение, использовала комбинаторный генератор тестовых наборов для идентификации тестовых наборов для них. Команды, использующие комбинаторный генератор тестовых примеров, обнаружили в среднем более чем в два раза больше дефектов за час тестирования. Это убедительное доказательство эффективности. Кроме того, комбинаторные тестеры обнаружили на 13% больше дефектов в целом. Это убедительное доказательство качества / тщательности.

Эти результаты не являются необычными. Дополнительная информация об этом подходе может быть найдена в http://www.combinatorialtesting.com/clear-introductions-1 и нашем обзоре инструмента здесь . Он содержит снимки экрана и пояснения о том, как наш инструмент делает тестирование более эффективным за счет определения подмножества тестов, обеспечивающих максимальный охват.

Также бесплатную версию нашего генератора тестовых примеров Hexawise можно найти по адресу www.hexawise.com / users / new

2 голосов
/ 30 мая 2009

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

2 голосов
/ 30 мая 2009

Команда Subversion разработала несколько довольно хороших процедур тестирования , автоматизируя весь процесс.

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

SQLite также имеет приличную тестовую систему с некоторыми очень хорошими документами о том, как это делается.

1 голос
/ 30 мая 2009

Во-первых, это хорошо, что вы понимаете, что вам нужна помощь - теперь иди и найди немного:)

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

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

1 голос
/ 30 мая 2009

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

1 голос
/ 30 мая 2009

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

0 голосов
/ 30 мая 2009

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

При этом, похоже, на горизонте появилось несколько интересных автоматических тестовых сборщиков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...