2010-03-17 1 views
7

Я работаю над проектом, где у нас есть только 13% покрытия кода с помощью наших модульных тестов. Я хотел бы придумать план по улучшению этого, но сосредоточив внимание сначала на тех областях, где увеличение охвата принесет наибольшую пользу. Этот проект находится на C#, мы используем VS 2008 и TFS 2008, а модульные тесты написаны с использованием MSTest.Определение того, какие классы больше всего выиграют от модульного тестирования?

Какую методологию следует использовать для определения того, какие классы мы должны решать в первую очередь? Какие показатели (код или использование) следует искать (и как я могу получить эти показатели, если это не очевидно)?

+0

+1 Я борюсь с точно таким же qeustion. – bitbonk

+0

Трудно точно ответить, но основная область приложения должна иметь модульные тесты. –

ответ

2

Для некоторой хорошей статистики и детерминированных запросов определенных методов, которые вы могли бы определенно смотреть на NDepend: http://www.ndepend.com/

NDepend выставляет язык запросов называемый CQL (Code Query Language), который позволяет вам писать запросы против вашего кода, относящиеся к определенной статистике и статическому анализу.

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

+0

+1, NDepend выглядит довольно круто! –

4

Я бы рекомендовал добавить модульные тесты ко всем классам, которые вы касаетесь, а не дооснащать существующие классы.

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

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

Вы абсолютно должны добавлять тесты к новой функциональности, которую вы добавляете, но вы, вероятно, также должны добавить тесты на существующие функции, которые вы можете сломать.

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

2

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

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

Следующим по важности являются классы/методы с логикой менее очевидной. Тесты блока сделают их менее хрупкими, служа в качестве дополнительной «документации» за контракт API

+0

Знаете ли вы, как определить, какие классы наиболее часто меняются? Не уверен, могу ли я получить эту информационную форму TFS –

+0

Это больше знаний в области бизнеса, чем технических знаний, но хорошее приближение можно найти в журналах системы управления версиями. – DVK

0

Упорядочить все компоненты на уровнях. Каждый класс на данном уровне должен зависеть только от компонентов на более низком уровне. («Компонент» - это любая логическая группа одного или нескольких классов.)

Сначала необходимо выполнить единичные тесты для всех ваших компонентов уровня 1. Обычно вам не нужны фальшивые фреймворки или еще одна такая глупость, потому что эти компоненты полагаются только на .NET Framework.

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

Продолжайте действовать так же, как и ваш стек вверх.

Совет. Разделите все компоненты на определенные уровни DLL.Таким образом, вы можете обеспечить, чтобы компоненты низкого уровня не случайно зависели от компонента более высокого уровня.

1

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

+0

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

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