Ответы пользователя по тегу Тестирование ПО
  • Должен ли разработчик заниматься ручным тестированием?

    Tyranron
    @Tyranron
    Поставьте себя на место заказчика и смените область, к примеру, на создание автомобиля. Вы заказываете у мастера автомобиль ручной сборки. Он его собирает, проверяет заводится он или нет, и отдаём Вам в пользование. Вы садитесь в автомобиль, выезжаете на любимый автобан и даёте жару в 100 км/час. На 101 км/час у Вас отваливаются передние колёса. Приятная ситуация? А ведь мастер "просто собрал машину".

    Если смотреть на бизнес по-взрослому, то всё просто:
    • Есть Заказчик. У него стоит задача создать Продукт, с помощью которого он бы зарабатывал деньги (ну или другая цель, не суть).
    • Есть Исполнитель (разработчик или команда разработчиков). Исполнитель обязуется за обусловленный Гонорар создать и поддерживать Продукт, который бы отвечал критериям качества Заказчика.
    • Если Исполнитель делает Продукт не соответствующий критериям качества Заказчика, значит он не выполняет условия Договора.
    • Если Заказчик не выплачивает Гонорар в должном объеме и вовремя, или требует чего-то не обусловленного в рамках Договора, значит он не выполняет условия Договора, а то и нарушает.
    • И Исполнитель и Заказчик должны понимать, что они создают Продукт, и должным образом очертить в рамках Договора критерии к созданию/поддержке этого Продукта. Дабы однозначность этого вопроса была явная и юридическая.


    Всё остальное - лирика.

    Если Ваша команда (как Исполнитель) не обладает штатом тестировщиков, то соответствующие обязанности по обеспечению качества Продукта Вы должны осознанно брать на себя. Нет никаких "разработчик просто пишет код". Есть "разработчик создаёт Продукт". Команда разработки обязуется согласно Договору создать Продукт ожидаемого качества и всё. Как это качество обеспечивается - вопрос уже второстепенный и зависит от состава команды, существующих технических средств, да и самого Продукта как такового (много каверзных кейсов не поддаются вменяемой автоматизации). Соответственно, бюджет на обеспечение качество Продукта должен закладывать в любом случае, независимо от того есть ли тестировщик или нет.
    Ответ написан
    5 комментариев
  • Какой правильный подход к написанию тестов под задачу?

    Tyranron
    @Tyranron
    Тесты тестам рознь. Они бывают очень разные.
    Все зависит от того, что именно Вы хотите протестировать.
    Могут быть тесты производительности. Они проверяют что скорость выполнения кода/приложения/запроса удовлетворяет определенному значению.
    Могут быть нагрузочные тесты. Они проверяют что приложение/система держит определенные нагрузки.
    Могут быть тесты, которые проверяют систему на предмет соответствия определенным стандартам безопасности (PCI compliance check, к примеру).
    В принципе, тесты могут тестировать любой интересующий Вас аспект/метрику кода/приложения/чего-угодно.
    Чаще всего тесты пишут, чтобы проверить правильность работы заложенной в приложение бизнес-логики.

    Все выше упомянутые случаи имею общую черту - какие-либо ожидания, которые подтверждаются, или не подтверждаются тестами.
    Соответственно тесты, как таковые, непосредственно связаны с понятием спецификации кода/приложения/модуля/чего-угодно. Собственно, в BDD (behavior-driven development) тесты часто так и называют - spec (спеки).

    Идея проста и никаких тайн не содержит:
    Вы пишете спецификацию, а тесты доказывают что приложение соответствует спецификации.
    Эта идея применяется на любом уровне от самых низкоуровневых модулей, до высокоуровневых частей системы, и самой системы в целом.

    Ваша задача не "повалить систему REST api", а удостовериться, что она работает ожидаемым и требуемым образом (что делать должна, и чего не должна). Именно подобные требования и нужно вносить в спецификацию.

    Вот очень упрощенная спецификация для Вашего примера:
    Допустим если rest_api на вход примет json файл

    1. Если на вход ничего не подано, rest_api должен вернуть ошибку 1 (отсутствует тело запроса).
    2. Если на вход подан не JSON, rest_api должен вернуть ошибку 2 (некорректный запрос).
    3. Если структура JSON не содержит всех необходимых параметров, rest_api должен вернуть ошибку 3 (некорректные параметры).
    4. Если передан валидный запрос, rest_api должен вернуть результат в нужном формате.
    5. Если передан валидный запрос повторно, rest_api должен вернуть ошибку 4 (файл уже обработан).
    Соотвественно, тесты проверяют выполняется ли каждый пункт спецификации.

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

    P.S. Разработка программного обеспечения - самая открытая и прозрачная современная профессия. Ни в какой другой области я не встречал аналогов дотягивающих до open source движения, и такого громадного кол-ва докладов/статей в свободном доступе, где люди охотно делятся опытом и понимаем, такого кол-ва обучающих площадок, такого рвения помогать друг другу становиться лучше в профессиональном плане.
    Потому, в следующий раз, прежде чем говорить о "средствах манипуляции" и "пруф-линщиках", откройте глаза, зайдите на тот же Github, где можно вот-так просто взять и посмотреть "как оно делается", не поленитесь почитать "пруф-линки", где тема фундаментально разжевана по полочкам, послушать доклады с конференций. Вам все сообщество ставит большую такую миску с кашей под нос - бери и ешь. Если Вы хотите, чтобы Вам рот открыли, ложку в рот положили, и ещё и челюстью подвигали, - так это делают в детском саду воспитатели.
    Ответ написан
    3 комментария