Как спланировать тестирование whitebox
Я относительно новичок в мире тестирования WhiteBox и мне нужна помощь в разработке плана тестирования для одного из проектов, над которыми я сейчас работаю. В данный момент я просто слежу за поиском тестируемых фрагментов кода, а затем пишу для этого некоторые модульные тесты. Я как-то чувствую, что это далеко не так, как должно быть. Не могли бы вы дать мне совет, как лучше подготовиться к тестированию этого проекта? Какие-нибудь инструменты или шаблоны плана тестирования, которые я мог бы использовать? Используемый язык - C++, если это будет иметь значение.
3 ответа
Одна из целей тестирования белого ящика - охватить 100% (или как можно ближе) операторов кода. Я предлагаю найти инструмент покрытия кода C++, чтобы вы могли видеть, какой код выполняются вашими тестами и какой код вы пропустили. Затем разработайте тесты, чтобы тестировать как можно больше кода.
Другое предложение состоит в том, чтобы взглянуть на граничные условия в том случае, если показатели, циклы, циклы и т. Д. Проверены на наличие "серых" областей, ложных срабатываний и ложных отрицаний.
Вы также можете разработать тесты, чтобы посмотреть на жизненный цикл важных переменных. Проверьте их определение, их использование и их уничтожение, чтобы убедиться, что они используются правильно:)
Есть три идеи, чтобы вы начали. Удачи
Попробуйте "Эффективно работать с устаревшим кодом": http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052
Это актуально, поскольку под "наследием" он подразумевает код, который не имеет тестов. Это также довольно хорошая книга.
Соответствующими инструментами являются: http://code.google.com/p/googletest/ и http://code.google.com/p/gmock/ Могут быть и другие модульные тесты и макеты, но я знаком с ними и Я очень рекомендую их.
В данный момент я просто слежу за поиском тестируемых фрагментов кода, а затем пишу для этого некоторые модульные тесты. Я как-то чувствую, что это далеко не так, как должно быть.
Люди говорят, что одно из основных преимуществ " разработки, управляемой тестами", заключается в том, что она побуждает вас проектировать ваши компоненты с учетом тестируемости: это делает ваши компоненты более тестируемыми.
Мой личный (не TDD) подход заключается в следующем:
- Понимать функциональность, требуемую и реализованную: как "априори" (т. Е. Читая / зная функциональную спецификацию программного обеспечения), так и читая исходный код для обратного инжиниринга функциональности
- Реализуйте тесты черного ящика для всех реализованных / требуемых функций (см., Например, " Следует ли тестировать внутреннюю реализацию или только тестировать публичное поведение?").
Поэтому мое тестирование не совсем "белая коробка", за исключением того, что я реинжиниринг тестируемой функциональности. Затем я тестирую эту функциональность с обратной инженерией и избегаю использования какого-либо бесполезного (и, следовательно, непроверенного) кода. Я мог (но не часто) использовать инструмент покрытия кода, чтобы увидеть, какая часть исходного кода выполняется тестами черного ящика.