Давайте сначала определимся с приоритетами ...
В вашей роли клиента ваша главная задача - не юнит-тестирование
Если вы используете поставщиков, которые производят программное обеспечение для вас, то вам не стоит беспокоиться, используют ли они ту или иную методологию. Ваша задача - найти какое-то решение, которое поможет достичь ваших целей. Единственное, о чем вы должны заботиться, является ли решение приемлемым.Вот почему мы проводим приемочные испытания, так как именно вы несете ответственность за то, чтобы получить то, что вы хотите. Именно в решающий момент принятия клиента деньги будут переведены из карманов вашей компании в карман поставщика.
Вы могли бы требовать юнит-тестов в качестве поставляемого требования, но с ними связано несколько наследственных проблем, наиболее серьезным из которых является то, что заранее не существует надежного способа определения метрик:
- Каково допустимое количество юнит-тестов?
Должно ли быть 10 тестов? Как насчет 100 тестов? Как насчет 1000 тестов? На самом деле, в начале довольно сложно определить, сколько тестов вам понадобится. Фактическое число на самом деле не определимо ... как проблема остановки ... но мы не решаем эту проблему.
Вам просто нужно программное обеспечение с юнит-тестами, чтобы вы могли продолжить разработку. Модульные тесты пока не говорят о том, что вы сломали, но они отлично подходят для того, чтобы сообщать вам, когда в коде есть ошибка регрессии.
- Каков приемлемый уровень покрытия кода?
"100%, конечно!" вы бы подумали. К сожалению, эта метрика вводит в заблуждение; даже если у вас есть 100% покрытие кода, вы действительно уверены, что все работает так, как ожидалось? Возможно иметь 100% покрытие, но этого не сделать.
То, что вам действительно нужно сделать, это предварительное тестирование, то есть найти кого-то, кто действительно хорош в взломе вещей, и позволить им сделать тестирование. Чтобы найти ошибки, о которых не задумывался ни один разработчик.
Кроме того, 100% иногда недостижимо при использовании чистых модульных тестов, если у вас есть необходимые взломы производительности и вы используете шаблоны проектирования, которые сложно протестировать (ищите «singleton» и «tdd» в вашей любимой поисковой системе, и вы найдете несколько примеров).
Вы хотите, чтобы поставляемое программное обеспечение работало, и документ спецификации является вашей единственной гарантией.
Вам потребуется более высокий уровень тестирования
Ваш документ спецификации должен быть как-то проверен. Каждый пункт должен быть пройден, чтобы у ваших поставщиков были четкие цели и критерии приемлемости. Хорошо функционирующая организация обеспечения качества (или отличный тестировщик, если у вас ограниченный бюджет и ограниченные возможности) предоставит контрольные примеры для проверки этих критериев приемлемости. Вам также нужен кто-то, чтобы проверить эти критерии приемлемости.
Есть несколько способов проверить ваши цели, и если кто-то скажет мне, что вы не можете установить какие-либо вменяемые цели в отношении качества, производительности и эффективности, я попадаю им в голову большими и тяжелыми книгами о предварительном тестировании, тестировании производительности и удобстве использования, соответственно. Это может быть легко перебор с целями, но знания и общение помогут вам установить реалистичные цели.
Я не юрист, но большинство проектных контрактов (в основном это мать всех спецификаций для проекта), которые я читал, обычно имеют критерии соотношения дефектов, которые определяют количество ошибок, которые считаются приемлемыми. Ошибки, как правило, определяются по серьезности, ошибки, которые обнаруживаются при помощи QA, имеют низкую толерантность, в то время как незначительные недостатки имеют высокую толерантность. В реальных проектах сложно требовать, чтобы в программном обеспечении было 0 дефектов. Сроки обычно ставят точку в этой практике. Именно в таких ситуациях вы должны начать торговать сферой.
Большинство поставляемого мной программного обеспечения обычно не поставляется с модульными тестами. Вы можете утверждать, что поставщики должны быть достаточно профессиональны, чтобы выполнить это, однако главная причина, по которой вы хотите, чтобы вам проводили модульные тесты, заключалась в том, чтобы вы не получали ошибок регрессии, а также включали рефакторинг. В реальной жизни, когда проекты выполняются в сжатые сроки, поставщик и заказчик будут сокращать объем работ, а юнит-тесты обычно выходят за рамки и удаляются из списка требуемых результатов.
Немного грустно, что высококлассное программное обеспечение с открытым исходным кодом поставляется с юнит-тестами, но профессиональный разработчик программного обеспечения не может, верно?
Итак, когда я, как клиент, смогу заняться модульным тестированием?
Я бы сказал, что единственное время, которое вы действительно позаботитесь о модульном тестировании, это если поставляемое программное обеспечение является самодостаточным компонентом, который не выполняется как отдельная программа, для которого самое грубое тестирование, которое вы можете сделать, это модульное тестирование. , Библиотеки классов - это один из видов продукта, который может поставляться вместе с юнит-тестами.