Тестирование ... как это делают профессионалы, и какие методы могут быть использованы для развития одного человека? - PullRequest
3 голосов
/ 26 сентября 2010

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

У меня двоякий вопрос:

  • Как в средних домах профессионального развития проходят тестирование?
  • Какие общие методы или процедуры (за пределами модульного тестирования) могут применяться к группе разработчиков из одного. Я ищу практичность.

Спасибо за ваше время и вклад.

Ответы [ 6 ]

7 голосов
/ 26 сентября 2010

Шаг 1: Модульное тестирование

Разделите ваше программное обеспечение на компоненты (которые могут быть чем угодно, от отдельных функций до целых программ) и тщательно протестируйте эти компоненты, особенно в том, что касается API и поведения, котороеОстальную часть приложения можно увидеть.(Не забывайте также проверять режимы сбоев, но остерегайтесь слишком осторожного связывания с точным характером сбоя; часто достаточно просто проверить наличие правильного класса исключения, а не его точного сообщения.) Создатьуверен, что эти тесты пройдены;вы оттачиваете их в спецификации того, что должен делать компонент .(Здесь помогает автоматизированный запуск теста, как и система CI.) Это важно из-за…

Шаг 2: Интеграционное тестирование

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

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

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

Шаг 3: Приемочное тестирование

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

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

Последнее замечание: То, что я здесь написал, звучит так, будто тестирование подразумевает трудоемкий процесс, который занимает много временив конце проекта. Это не так! Часто вы можете выполнить части приложения раньше других, выполнить интеграцию этих частей (с имитациями для других битов) и протестировать, насколько приемлемо это субприложение на самом деле.является.Конечно, при этом старайтесь не дать пользователям поверить, что все сделано;Одним из способов является появление всплывающих диалоговых окон, в которых говорится что-то вроде «волшебства здесь происходит»Глупо, но эффективно.: -)

3 голосов
/ 27 сентября 2010

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

АВТОМАТИЗИРОВАННОЕ ИСПЫТАНИЕ

  • Модульное тестирование
    Используйте NUnit для проверки ваших классов, функций и взаимодействия между ними.
    http://www.nunit.org/index.php

  • Автоматическое функциональное тестирование
    Если это возможно, вы должны автоматизировать большую часть функционального тестирования. Некоторые каркасные работы имеют встроенное функциональное тестирование. В противном случае вы должны использовать инструмент для этого. Если вы разрабатываете веб-сайты / приложения, возможно, вы захотите взглянуть на Selenium.
    http://www.peterkrantz.com/2005/selenium-for-aspnet/

  • Непрерывная интеграция
    Используйте CI, чтобы убедиться, что все ваши автоматические тесты запускаются каждый раз, когда кто-то из вашей команды делает коммит в проект.
    http://martinfowler.com/articles/continuousIntegration.html

РУЧНОЕ ИСПЫТАНИЕ
Как бы я ни любил автоматизированное тестирование, оно, IMHO, не заменит ручное тестирование. Основная причина в том, что автоматизированный пользователь может делать только то, что ему говорят, и проверять только то, что ему сообщили, для того, чтобы он воспринимался как пройденный / неудачный. Человек может использовать свой интеллект, чтобы находить ошибки и задавать вопросы, возникающие при тестировании чего-то другого.

  • Поисковые испытания
    ET - это очень дешевый и эффективный способ поиска дефектов в проекте. Он использует интеллект человека и учит тестеров / разработчиков больше о проекте, чем любой другой метод тестирования, который я знаю. Проведение сеанса ET для каждой функции, развернутой в тестовой среде, - это не только эффективный способ быстрого поиска проблем, но и хороший способ учиться и получать удовольствие!
    http://www.satisfice.com/articles/et-article.pdf
3 голосов
/ 26 сентября 2010

Для небольшой команды модульные тесты или автоматические интеграционные тесты имеют решающее значение. Потому что у вас нет рук и времени на ручное тестирование - чем больше вы автоматизируете, тем лучше. Это включает в себя непрерывную интеграцию.

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

2 голосов
/ 26 сентября 2010

Мои примеры инструментов тестирования основаны на Java, но я постараюсь предложить инструменты, которые портированы на несколько языков или не зависят от языка.

Используйте инструменты модульного тестирования, такие как junit (перенесены на различные языки). Это позволит вам безопасно выполнить рефакторинг вашего кода. Большинство ошибок кода должны приводить к добавлению или исправлению хотя бы одного теста.

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

Используйте инструменты тестирования интеграции, такие как HTTPunit или Synergy, для тестирования веб-приложений. Инструменты этого типа в основном не зависят от языка, но вы можете выбрать инструмент, который может быть расширен на языке (ах), который вы используете. Для не-веб-приложений не может быть равноценного инструмента для вашей платформы. Вы также можете использовать инструмент повышения производительности, такой как JMeter.

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

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

1 голос
/ 27 сентября 2010

Как это делают профессионалы? Все зависит от того, кто такой «Pro» ... Существуют десятки различных подходов к тестированию, и множество экспертов скажут вам, что их путь - это единственный верный путь. Ловкие гуру расскажут вам совершенно другую историю, нежели гуру водопада. Ребята из ISTBQ скажут вам, что они сильно отличаются от контекстно-ориентированных ребят.

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

Лично после нескольких лет тестирования программного обеспечения я решил присоединиться к контекстно-ориентированной школе тестирования программного обеспечения. См .: http://www.context -driven-testing.com

Во-вторых, из вашего описания вашего нынешнего подхода, для меня это звучит очень похоже на предварительное тестирование. Вы можете найти этот материал интересным: satice.com/sbtm/

0 голосов
/ 01 октября 2010

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

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