Политика покрытия модульного тестирования, проблемы качества тестирования - PullRequest
1 голос
/ 21 августа 2010

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

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

Подводные камни покрытия кода

Каков разумный процент покрытия кода для модульных тестов (и почему)?

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

1) Нулевое тестирование

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

2) Интеграционные тесты

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

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

TIA, лутку

Ответы [ 4 ]

8 голосов
/ 21 августа 2010

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

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

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

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

Вам необходимо понять, почему модульное тестирование может помочь, чтохороший / правильный / понятный / обслуживаемый / и т. д.юнит тест выглядит так.Вы можете сделать это через образование, презентации, парное программирование, обзоры кода и так далее.Если вы просто установите жесткий лимит и скажете людям, что ожидаете, что они его встретят, они, вероятно, возмущаются им, а затем начинают игру с системой.Примечание: это не легко сделать!Требуется много времени, чтобы подозрительные разработчики увидели ценность и начали писать не сумасшедшие тесты.Там нет ни единого «ага» момент, на который вы можете рассчитывать.Были проведены исследования, доказывающие, что автоматизированное тестирование может быть ценным инструментом разработки, но многие разработчики являются догматичными.Некоторые просто никогда не придут к этой идее.

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

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

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

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

Удачи.

2 голосов
/ 21 августа 2010

Лучший способ получить хорошие тесты - попрактиковаться в разработке тестов, что означает ПЕРВЫЙ тест.Он разбивается на несколько этапов:

  1. Запишите достаточно тестов, чтобы потерпеть неудачу
  2. Напишите достаточно производственного кода, чтобы тест прошел
  3. 3 повторенияи рефрактор на ходу

Конечно, это огромное упрощение, и TDD - большой большой предмет, но я не видел хороших быстрых и простых в проведении тестов без него.Другой ключ заключается в том, что разработчики должны ХОТЯТ сделать это, они должны понять, как это облегчает их жизнь, как это освобождает их от изменения кода позже.Если разработчики не боятся начинать тестирование или не знают, как писать тесты (управляя зависимостями в соответствии с принципами SOLID и FIRST), тогда может не иметь значения, какие правила вы навязываете.

1 голос
/ 21 августа 2010

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

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

1 голос
/ 21 августа 2010

Существует метрика, называемая CRAP, которая объединяет анализ сложности с охватом

http://blog.businessofsoftware.org/2007/09/alberto-savoia-.html

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

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

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

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