Модульные тесты QA Engineer

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

На моем предыдущем рабочем месте мы пытались передать эту задачу QA-инженеру, но это не сработало. Может быть, потому, что это была уже середина проекта, и у него не было возможности выполнить значительное покрытие кода, или может быть по другой причине.

Считаете ли вы, что освободить разработчика от написания модульных тестов таким способом - плохая идея?

Только разработчик может писать хорошие «пробные тесты». Фактически, модульные тесты должны помочь разработчику улучшить код. Как QA-инженер вы тестируете все остальное, кроме макетов.

djangofan 16.01.2013 02:11
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
11
1
8 955
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

Да.

Разработчик пишет unittest, чтобы убедиться, что «модуль» выполняет то, что он должен делать. Специалист по контролю качества тестирует все приложение.

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

Ответ принят как подходящий

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

Согласен, определенно плохая идея. Даже для тестирования старых систем, что обычно требует огромного рефакторинга.

Rob Stevenson-Leggett 14.01.2009 15:06

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

Может, слышали про TDD? «Разработка через тестирование» - действительно хорошая практика для разработки. Его основная цель - разработать модульные тесты перед написанием кода (что странно, когда мы начинаем использовать TDD, я признаю) ...

Это зависит от того, как вы планируете реализовать рабочий процесс тестирования.

Плохо:

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

Хорошо:

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

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

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

Big GH 14.01.2009 15:26

Есть тонкое, но важное различие между целью модульных тестов и тестов QA: QA-тестирование подтверждает функциональность; модульное тестирование подтверждает дизайн. То есть внешний вид противопоставлен внутреннему виду продукта.

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

Следовательно, совершенно естественно, что разработчики, а не специалисты по контролю качества, пишут модульные тесты.

«Есть тонкое, но важное различие между предназначением модульных тестов и тестов QA: тестирование QA проверяет функциональность; модульное тестирование подтверждает дизайн». Я бы добавил, что модульные тесты должны тестировать оба этих вещей

tddmonkey 14.01.2009 14:50

Когда я сказал «функциональность», я имел в виду с точки зрения конечного пользователя.

Frederick The Fool 14.01.2009 14:53

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

Однако для модульного тестирования код должен быть тестируемым; что он может сделать, если полученный код не поддается проверке? Переписать? Рефакторинг? Без модульных тестов?

Короче думаю это не было бы такой хорошей идеей.

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

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

В своем вопросе вы сказали, что один человек проводил модульное тестирование. Хорошее модульное тестирование требует больших усилий в зависимости от требуемого тестового покрытия. Это от 50% до 100% усилий команды разработчиков. Один человек, тестирующий много кода разработчиков, будет полностью ошеломлен.

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

legesh 14.01.2009 19:24

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

Проводит ли QA-специалист рефакторинг кода, чтобы сделать его тестируемым?

Если так, то это нормально, и меня не волнует их титул. Если нет, то я сомневаюсь, что они добьются успеха.

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

С другой стороны, я считаю, что QA должно быть как можно ближе к модульному тестированию. QA нужны хорошие отношения с разработчиком и попытка понять дизайн кода. Почему? Когда разработчик пишет модульные тесты, основное внимание по-прежнему уделяется разработке, а не тестированию. Вы не можете доверять (не в плохом смысле) разработчику, что он предложит лучшие тестовые примеры и что у него хорошее покрытие. Поскольку QA специализируется на тестировании, было бы неплохо держать QA и разработчика как можно ближе во время модульного тестирования.

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

Принципиальное отличие здесь в том, что UT охватывает логику, внутренний поток, производительность и оптимизацию, тогда как QA охватывает функциональный поток для имитации взаимодействия с пользователем.

Другие вопросы по теме