2009-05-30 1 views
5

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

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

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

Благодаря

Re: все

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

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

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

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

ответ

6

Испытательный дизайн не касается тестирования (обеспечения качества). С самого начала он плохо назван.

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

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

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

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

+0

Очень честный ответ и ответил на мой вопрос. –

1

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

2

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

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

У SQLite также есть достойная тестовая система с некоторыми very good documentation о том, как это делается.

1

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

2

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

+0

спасибо за ваш ответ и да, я не писал тестовые костюмы, чтобы покрыть 100% кодов. Таким образом, тест с помощью мыши и просмотра в браузере по-прежнему является первым выбором для проверки кода, который я написал в последних проектах. –

0

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

Это говорит о том, что на горизонте, по-видимому, есть интересные automatic испытатели.

1

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

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

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

+0

Спасибо за нежный ответ. –

3

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

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

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

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

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

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

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

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

Я надеюсь, что это поможет.

2

Вы писали:

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

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

В примере August, 2009 IEEE Computer article I co-wrote with Dr. Rick Kuhn, Dr. Raghu Kacker, and Dr. Jeff Lei мы выделяем 10 проектов исследование, которое я провел там, где одна группа тестировщиков использовала свои стандартные методы проектирования тестов, а вторая группа тестировщиков, тестируя одно и то же приложение, использовала комбинаторный генератор тестовых случаев для идентификации тестовых примеров для них. Команды, использующие комбинаторный генератор тестовых случаев, обнаружили, в среднем, более чем в два раза больше дефектов в час тестера. Это убедительные доказательства эффективности. Кроме того, комбинаторные тестеры обнаружили на 13% больше дефектов в целом. Это убедительные доказательства качества/тщательности.

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

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