2011-05-18 4 views
3

У меня есть класс, который мне нужен для модульного тестирования.Есть ли достаточная мера полноты модульных тестов

Для фона я разрабатываю в C# и используя NUnit, но мой вопрос скорее теоретический:

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

Что-то вроде

  • "проверить каждый метод в классе ... бла-бла"
  • "проверить все вставки в БД ... бла-бла"

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

+1

Вы имеете в виду, когда знаете, что делаете достаточно тестов? – Amedio

ответ

5

Есть несколько доступных метрик для модульного тестирования. Посмотрите как на покрытие кода, так и на ортогональное тестирование.

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

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

+0

Я просто мотался на это: D Напиши тесты перед написанием функций, мой друг сказал, что здравый смысл может быть хорошей мерой, с TDD, чтобы узнать, где прекратить делать тесты. – Amedio

0

Возможно, вам захочется посмотреть ваше тестовое покрытие. NCover - это решение покрытия кода от разработчиков NUnit.

0

Вы можете посмотреть в NCover или визуальный охват студии кода tool, которые поддерживают Nunit

0

Единица измерения для измерения зоны покрытия в кодах называется «Обложка кода».

По Wikipedia:

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

измерения

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

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

Для .NET один из популярных инструментов для покрытия кода - NCover.

+2

Охват кода может только рассказать вам о незавершенности ваших тестов, но ничего о том, насколько они полны. –

0

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

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

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

Смежные вопросы