Разработка системы обеспечения качества, уровень детализации? - PullRequest
1 голос
/ 21 марта 2011

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

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

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

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

Кроме того, любые общие отзывы о реализации философии TDD в огромном существующем программном проекте также приветствуются. Спасибо!

Ответы [ 2 ]

2 голосов
/ 21 марта 2011

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

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

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

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

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


Редактировать: это должно быть ", эффективно работающее с устаревшим кодом "

1 голос
/ 21 марта 2011

Мой опыт показал, что самый простой способ начать - это самый толстый уровень детализации.Попробуйте сначала автоматизировать свои функциональные тесты - взгляните на BDD.Функциональность (по крайней мере, в теории) должна быть понятна каждому, чтобы было легче определить критерии приемлемости.Это также тесты, которые имеют наиболее ощутимую ценность.Он относится к качеству, воспринимаемому клиентом (или конечным пользователем) системы.

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

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

...