Junior QA [147] Flashcards

1
Q

Что такое тестирование?

Теория тестирования

A

Проверка продукта на соответствие требованиям.

Тестирование - процесс в рамках жизненного цикла разработки программного обеспечения, который оценивает качество компонента или системы, а также связанных с ними рабочих продуктов. [ISTQB Glossary]

Тестирование программного обеспечения — процесс анализа программного средства и сопутствующей документации с целью выявления дефектов и повышения качества продукта. [Святослав Куликов]

Тестирование ПО — проверка соответствия между реальным и ожидаемым поведением программы [Что-то из интернета]

Контроль качества (QC) - набор действий, предназначенных для оценивания качества компонента или системы. [ISTQB Glossary]

Обеспечение качества (QA) - активности, направленные на обеспечение уверенности в том, что требования к качеству будут выполнены [ISTQB Glossary]

Давайте разберемся на примере создания мобильного приложения, потому что определения не всегда отражают суть:

  1. В рамках тестирования мы выполним проверки и задокументируем дефекты, убедимся, что продукт соответствует требованиям.
  2. В рамках контроля качества мы проанализируем полученные данные и убедимся, что соблюдены все требования, предъявляемые к качеству как продукта, так и самого процесса. Мы должны убедиться, что уровень качества нашего продукта высокий и он готов к релизу.
  3. В рамках обеспечения качества мы формируем процесс QA для соответствия стандартам качества на всех этапах SDLC, еще до этапа создания нашего продукта, который будет минимизировать количество дефектов и предупреждать их.

Основные отличия процессов:

  1. Контроль качества и тестирование (как его часть) направлены на продукт, а обеспечение качества на процесс.
  2. Тестирование и контроль качества являются контролирующими мерами, а обеспечение качества - превентивными, или предупреждающими.

https://stepik.org/lesson/1036731/step/3?auth=login&unit=1045216
https://easyoffer.ru/question/7800

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Зачем тестировать ПО?

Теория тестирования

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Какие этапы тестирования?

Теория тестирования

A

1) Инициация

2) Выявление требований прямых и косвенных

3) Создание тест-кейсов

4) Отбор тест-кейсов

5) Проведение проверок

6) Фиксация результатов

7) Анализ результатов

8) Передача результатов о соответствии продукта требованиям

https://easyoffer.ru/question/8134

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Какие типы тестирования вы можете назвать?

Теория тестирования

A
  • По доступности кода:
    • Black box
    • Grey box
    • White box
  • По исполнению кода
    • Статическое
    • Динамическое
  • По степени формализации
    • На основе тест-кейсов
    • Исследовательское тестирование
    • Свободное тестирование (ad hoc)
  • По уровням тестирования
    • Компонентное
    • Интеграционное
    • Системное
  • По позитивности
    • Позитивные
    • Негативные
  • По степени автоматизации
    • Ручное
    • Автоматизированное
    • Полуавтоматизированное
  • Связанное с изменениями:
    • Регрессионное (Regression testing)
    • Тест работоспособности (Sanity testing)
    • Дымовое (Smoke testing)
  • По исполнителям
    • Альфа-тестирование
    • Бета-тестирование
  • По целям и задачам
    • Инсталляционное
    • Usability (удобства использования)
    • Доступности (accessibility testing, A11Y)
    • Безопасности
    • Интернационализации (internationalization testing, i18n testing, globalization testing, localizability testing)
    • Локализации (localization testing, l10n)
    • Совместимости (compatibility testing, interoperability testing)
    • Надёжности (reliability testing)
    • Восстанавливаемости (recoverability testing)
    • Отказоустойчивости (failover testing)
    • Производительности (performance testing)
      • Нагрузочное тестирование (load testing, capacity testing)
      • Тестирование масштабируемости (scalability testing)
      • Объёмное тестирование (volume testing)
      • Стрессовое тестирование (stress testing)
      • Конкурентное тестирование (concurrency testing)

https://vladislaveremeev.gitbook.io/qa_bible/vidy-metody-urovni-testirovaniya/osnovnye-vidy-testirovaniya-po

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Какие уровни тестирования знаете?

Теория тестирования

A
  • Модульное
  • Интеграционное
  • Системное
  • Приёмочное

Модульное тестирование (Unit Testing)

Это процесс проверки отдельных компонентов программного обеспечения, таких как функции, методы или классы. Цель этого уровня тестирования — убедиться, что каждый отдельный компонент работает корректно в изоляции от остальной части системы.

Пример: Проверка функции сложения в программе калькулятора.

Интеграционное тестирование (Integration Testing)

На нем проверяется взаимодействие между различными модулями или компонентами системы. Цель интеграционного тестирования — обнаружить дефекты в взаимодействии и передаче данных между различными частями программы.

Пример: Проверка того, как модуль калькулятора обрабатывает данные, полученные от пользовательского интерфейса.

Системное тестирование (System Testing)

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

Пример: Тестирование веб-приложения в различных браузерах и на разных устройствах.

Приемочное тестирование (Acceptance Testing)

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

Пример: Бета-тестирование программы с участием реальных пользователей.

https://easyoffer.ru/question/7802

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Какие техники тест-дизайна знаете?

Теория тестирования

A

Чёрный ящик (Black-box techniques):

  • Эквивалентное разбиение (Equivalence Partitioning): Разделение входных данных на группы (классы эквивалентности), которые можно обрабатывать одинаково. Достаточно тестировать по одному представителю от каждой группы.
  • Граничные значения (Boundary Value Analysis): Тестирование на значениях на границах или около границ классов эквивалентности.
  • Комбинаторные
    • Попарное тестирование (Pairwise testing) - тестирование всех комбинаций пар параметр-значение
    • Таблицы решений (Decision Table Testing): тестировщик определяет условия (входы) и результирующие действия системы (выходы). Пары условий и действий образуют строки таблицы, при этом условия указываются сверху, а действия – снизу.
  • Тестирование переходов состояний (State Transition Testing): Проверка переходов между различными состояниями системы на основе событий или условий.
  • Use Case Testing (Случаи использования): Создание тестов на основе сценариев использования программы пользователями.

Техники основанные на опыте (Experience-based techniques):

  • Предугадывание ошибки (Error Guessing): Основано на опыте и интуиции тестировщика, который предполагает, где могут возникнуть ошибки.
  • Тестирование на основе чек-листов (Checklist-based Testing): Использование чек-листов, основанных на предыдущем опыте, для проверки определённых аспектов программы.
  • Исследовательское тестирование (Exploratory testing)
  • Произвольное тестирование (Ad-hoc testing)
  • Attack Testing: Software attacks (sometimes called fault attacks) are focused on trying to induce a specific type of failure. When performing attack testing, you should consider all areas of the software and its interaction with its environment as opportunities for failures. Attacks target the user interface, the operating system, interfacing systems, database interfaces, APIs, and any file system interaction. Anytime data is being exchanged, it is potentially vulnerable to a failure and consequently is an excellent target for an attack.

Белый ящик (White-box techniques):

  • Тестирование путей (Path Testing): Анализ выполнимых путей через код для проверки всех возможных путей выполнения.
  • Тестирование на основе управляющих структур (Control Structure Testing): Фокусируется на логических операциях и условиях в коде, проверяя все условные операторы.

https://vladislaveremeev.gitbook.io/qa_bible/test-dizain
https://easyoffer.ru/question/7819

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Что такое техника анализа классов эквивалентности?

Теория тестирования

A

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

Принципы:

  • Определение эквивалентных классов: Входные данные или условия тестирования разделяют на классы, внутри которых система должна вести себя одинаково. Эти классы могут быть как допустимыми (валидными), так и недопустимыми (невалидными).
  • Выбор представителей: Для каждого эквивалентного класса выбирается хотя бы один представитель (тестовый случай), который будет использован в тестировании.
  • Тестирование: Проводится тестирование на основе выбранных представителей каждого класса. Результаты тестирования для представителя класса экстраполируются на весь класс.

https://easyoffer.ru/question/7825

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Что такое техника анализа граничных значений?
В чем ценность этой техники?

Теория тестирования

A

Суть: Проверяются все значения на границах эквивалентных классов

Метод анализа граничных значений является продолжением метода эквивалентного разбиения, но может быть применим, только если классы состоят из упорядоченных числовых значений. Максимальное и минимальное значение класса являются его границами [Beizer 1990]. Некорректное поведение более вероятно на границах класса, чем внутри класса. [ISTQB CTFL Syllabus 2018]

Почему она важна:

  • Высокая эффективность: большое количество ошибок с минимальным количеством тестов.
  • Экономия времени и ресурсов: Сосредоточение усилий на наиболее вероятных местах возникновения ошибок - сокращает время на тестирование и оптимизирует использование ресурсов.
  • Улучшение качества продукта: Гарантия корректной обратоки данных на границах значений

https://easyoffer.ru/question/7835
https://stepik.org/lesson/1036738/step/6?auth=login&unit=1045223

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Что такое Regression и Confirmation тестирования, какая между ними разница?

Теория тестирования

A

Краткая суть: проверка уже протестированного функционала для того, чтобы убедиться, что при внесении изменений ничего не поломалось

Регрессионное тестирование (regression testing): Тестирование уже протестированной программы, проводящееся после модификации для уверенности в том, что процесс модификации не внес или не активизировал ошибки в областях, не подвергавшихся изменениям. Проводится после изменений в коде программного продукта или его окружении. (ISTQB)

Confirmation тестирование (retest) - ретест не пройденных ранее сценариев

https://vladislaveremeev.gitbook.io/qa_bible/vidy-metody-urovni-testirovaniya/regressionnye-vidy-testirovaniya-regression-testing
https://easyoffer.ru/question/7801

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Как часто следует проводить регрессионное тестирование продукта?

Теория тестирования

A

При каждом изменении в системе.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Какие виды интеграционного тестирования?

Теория тестирования

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

https://easyoffer.ru/question/8982

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Что такое Configuration Testing?

Теория тестирования

A

Краткая суть:
Тестирование различных конфигураций системы - железа, драйверов, операционных систем

Конфигурационное тестирование (Configuration testing) - специальный вид тестирования, направленный на проверку работы ПО при различных аппаратных и программных конфигурациях системы (заявленных платформах, поддерживаемых драйверах, при различных конфигурациях компьютеров и т. д.).

Configuration = performance + compatibility:

  • performance аспект: определить оптимальную конфигурацию оборудования, обеспечивающую требуемые характеристики производительности и времени реакции тестируемой системы;
  • compatibility аспект: проверить объект тестирования на совместимость с объявленным в спецификации оборудованием, операционными системами и программными продуктами третьих фирм;

Существует два главных уровня конфигурационного тестирования: серверный и клиентский.

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

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

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

https://software-testing.org/testing/chto-takoe-konfiguracionnoe-testirovanie-configuration-testing.html

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Что такое Exploratory Testing?

Теория тестирования

A

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

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

Основные принципы исследовательского тестирования:

  • Самоуправляемость: Тестировщики самостоятельно определяют, какие аспекты ПО тестировать, в какой последовательности и как глубоко.
  • Личный опыт и интуиция: Важным инструментом являются знания и предчувствия тестировщика, позволяющие ему эффективно навигировать по процессу тестирования.
  • Обучение в процессе тестирования: Тестировщик постоянно учится в процессе работы ПО, а затем применяет новые знания для расширения и углубления тестирования.
  • Адаптивность: Методика предполагает гибкость и способность быстро адаптироваться к новой информации о программном продукте и изменениям в тестовой среде.

Преимущества исследовательского тестирования:

  • Гибкость: Возможность быстро адаптироваться к изменениям в программном обеспечении и требованиях.
  • Выявление сложных дефектов: Благодаря творческому подходу и опыту тестировщиков могут быть обнаружены ошибки, которые сложно выявить с помощью традиционных методов тестирования.
  • Эффективность: Может быть очень эффективным в условиях ограниченного времени, так как позволяет сосредоточиться на наиболее важных аспектах программного продукта.
  • Повышение качества: Способствует более глубокому пониманию продукта и, как следствие, к повышению его качества.

Когда применять исследовательское тестирование:

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

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

https://easyoffer.ru/question/7823
https://vladislaveremeev.gitbook.io/qa_bible/vidy-metody-urovni-testirovaniya/issledovatelskoe-testirovanie-exploratory-testing

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Какие существуют стандарты UI?

Теория тестирования

A
  • Material Design
  • Apple Human Interface Guidelines
  • Microsoft Design Language
  • Bootstrap
  • Materialize

Существует множество UI-стандартов, некоторые из которых являются общепризнанными и широко используются в индустрии разработки ПО. Ниже перечислены некоторые из них:

1) Material Design - стандарт дизайна, разработанный компанией Google. Включает в себя рекомендации по использованию цветовой палитры, шрифтов, иконок и анимаций.

2) Apple Human Interface Guidelines - руководство от Apple, в котором описываются стандарты дизайна для приложений под iOS, macOS и watchOS.

3) Microsoft Design Language - стандарт дизайна, используемый в операционных системах и приложениях от Microsoft. Он включает в себя рекомендации по использованию типографики, цвета, анимации и иконок.

4) Bootstrap - фреймворк, который содержит рекомендации по использованию готовых компонентов интерфейса, таких как кнопки, формы, таблицы и другие элементы.

5 ) Materialize - фреймворк, основанный на Material Design, который содержит готовые компоненты интерфейса, такие как кнопки, навигационные панели, формы и др.

Кроме этого, многие компании имеют свои собственные UI-стандарты и руководства для разработки интерфейсов своих продуктов.

https://easyoffer.ru/question/8980

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Что такое Black/Grey/White Box Testing?

Теория тестирования

A

Краткая суть:
* Черный ящик: Нет доступа ко внутренней структуре приложения и коду. Тестирование проводится с точки зрения конечного пользователя.
* Белый ящик: Основывается на внутренней структуре системы или ее реализации (код, архитектура, принципы работы и\или потоки данных внутри системы)
* Серый ящик: доступ к базам данных, архитектурным схемам и документации API.

Белый ящик (White Box Testing)
Также известен как структурное тестирование. В этом подходе тестировщики имеют полное представление о внутренней структуре и коде программы. Тесты разрабатываются с учётом алгоритмов, ветвлений кода, путей выполнения и внутренних интерфейсов. Цель — проверить внутренние операции продукта и убедиться, что все внутренние компоненты функционируют правильно.

Чёрный ящик (Black Box Testing)
В этом методе тестировщики не знают о внутреннем устройстве тестируемой системы. Тесты разрабатываются на основе требований и спецификаций функциональности, без знания о том, как система реализует эти функции. Цель — проверить, соответствует ли система внешним требованиям и ожиданиям пользователя. Тестируется функциональность и поведение системы.

Серый ящик (Grey Box Testing)
Этот метод является комбинацией подходов белого и чёрного ящиков. Тестировщики имеют частичное знание о внутреннем устройстве системы, что позволяет им создавать более целенаправленные тестовые сценарии, основываясь как на внутренней структуре, так и на функциональных требованиях. Это может включать доступ к базам данных, архитектурным схемам и документации API.

https://easyoffer.ru/question/7858

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Что такое Performance Testing?

Теория тестирования

A

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

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

Основная цель тестирования производительности - выявить и устранить узкие места производительности в программном приложении. Это подмножество performance engineering, также известное как «Perf Testing». Само по себе оно не призвано находить дефекты, но оно помогает в обнаружении узких мест в системе.

Обычно продолжительность теста производительности составляет 1 час (устойчивое состояние) на средней / ожидаемой нагрузке; это может варьироваться в зависимости от вашего SLA / требований.

Примечание 1: все подвиды тестирования производительности отличаются, грубо говоря, только параметрами (тип возрастания нагрузки, ее количество, длительность и т.п.) и собираемыми метриками (без которых это тестирование бессмысленно). Точкой отсчета для всех подвидов принято брать результаты Capacity testing.

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Что такое Smoke и Sanity тестирование и какая между ними разница?

Теория тестирования

A

Smoke - проверка стабильности билда, что он вообще работает

Sanity - более глубокая проверка важного функционала

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Что такое Traceability Matrix?

Теория тестирования

A

Краткая суть:
Таблица для отслеживания взаимосвязей между требованиями проекта и выполненной по ним работе. (Учёт реализации требований)

Матрица трассируемости (Traceability Matrix) — это документ или таблица, используемая в управлении проектами и разработке программного обеспечения для отслеживания и демонстрации взаимосвязей между требованиями проекта и работой, выполненной для их удовлетворения. Этот инструмент позволяет убедиться, что все требования к проекту или системе были учтены и реализованы на различных этапах разработки, включая дизайн, разработку и тестирование.

Основные цели:

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

Типы:

  • Вертикальная трассируемость: Отслеживает взаимосвязь между требованиями на разных уровнях (например, от бизнес-требований к пользовательским историям и далее к функциональным и нефункциональным требованиям).
  • Горизонтальная трассируемость: Связывает требования с соответствующими артефактами разработки, такими как техническая документация, исходный код, тестовые сценарии и результаты тестирования.

Структура:

Матрица может быть структурирована различными способами в зависимости от потребностей проекта, но обычно она содержит:

  • ID требований: Уникальные идентификаторы для каждого требования.
  • Описание требований: Краткое описание требований для удобства отслеживания.
  • Ссылки на артефакты: Ссылки на дизайн, исходный код, тестовые случаи и другие документы, связанные с каждым требованием.

Статус: Текущее состояние реализации требования (например, “Не начато”, “В процессе”, “Завершено”).
Матрица трассируемости является мощным инструментом управления качеством и рисками в проектах разработки, позволяя эффективно контролировать выполнение требований и обеспечивать высокое качество конечного продукта.

https://easyoffer.ru/question/7931

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Что такое Sanity Testing?

Теория тестирования

A

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

Тест работоспособности (sanity test): См. тест “на дым”. (ISTQB)

Другие источники:

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

Примечание. Санитарным это тестирование в русскоязычной среде назвалось по совершенно непонятным причинам, но гуглится только так. На самом же деле дословно переводится как тестирование на вменяемость / разумность / работоспособность / согласованность или по версии ISTQB “Тест работоспособности”.

Sanity тестирование (от англ. “sanity” — “здравомыслие”) — это вид тестирования, который проводится для подтверждения того, что после внесения небольших изменений или исправлений в программный продукт основные функции по-прежнему работают корректно. Этот тип тестирования обычно выполняется в конце тестового цикла и перед выпуском продукта для убеждения в том, что внесенные изменения не привели к возникновению новых критических ошибок в уже проверенных и работающих частях программы.

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

Пример:
Допустим, команда разработки вносит изменения в модуль регистрации пользователей в веб-приложении. После внесения изменений QA инженер проводит Sanity тестирование этого модуля, чтобы убедиться, что регистрация по-прежнему работает корректно: пользователь может зарегистрироваться, получить подтверждение регистрации и войти в систему используя новые учетные данные.

Цели:

  • Быстрая проверка: Убедиться, что после небольших изменений или исправлений в программном продукте не возникло критических проблем.
  • Сосредоточение на изменениях: Проверка только тех аспектов программного продукта, которые подверглись изменениям, без проведения глубокого и всеобъемлющего тестирования.
  • Экономия времени и ресурсов: Позволяет быстро оценить влияние внесенных изменений, не тратя время на полный цикл тестирования.
  • Такое тестирование является важной частью процесса обеспечения качества программного продукта, так как оно позволяет быстро и эффективно подтвердить, что внесенные изменения не повлияли негативно на уже проверенную и работающую функциональность. Этот тип тестирования особенно полезен в условиях ограниченного времени и ресурсов, когда необходимо сделать быструю проверку перед выпуском продукта или передачей его на дальнейшие этапы тестирования.

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

https://easyoffer.ru/question/7810
https://vladislaveremeev.gitbook.io/qa_bible/vidy-metody-urovni-testirovaniya/regressionnye-vidy-testirovaniya-regression-testing

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Что такое End-to-End тест?

Теория тестирования

A

Сквозное тестирование - Сквозное тестирование (End-to-end, E2E, Chain testing) — используется для проверки ПО от начала до конца, а также его интеграцию с внешними интерфейсами.

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

Пример: На примере интернет магазина, это одна объемная проверка, которая включает в себя все шаги пользователя, начиная от регистрации в системе и заканчивая покупкой товара в магазине.

https://habr.com/ru/companies/otus/articles/681066/

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Что такое тестирование безопасности?

Теория тестирования

A

Суть: выявляет уязвимости, угрозы и риски.

Целью тестов безопасности является выявление всех возможных лазеек и слабых мест в ПО, которые могут привести к потере информации, доходов, репутации компании, сотрудников или клиентов. Общая стратегия безопасности основывается на трех основных принципах:
* Конфиденциальность - сокрытие определенных ресурсов или информации;
* Целостность - ресурс может быть изменен только в соответствии с полномочиями пользователя;
* Доступность - ресурсы должны быть доступны только авторизованному пользователю, внутреннему объекту или устройству;

Тестирование безопасности обычно выполняет отдельный специалист по безопасности. В ходе тестирования безопасности испытатель играет роль взломщика. Ему разрешено все:

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

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

https://vladislaveremeev.gitbook.io/qa_bible/vidy-metody-urovni-testirovaniya/testirovanie-bezopasnosti-security-and-access-control-testing

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Что такое тестирование на основе рисков?

Теория тестирования

A

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

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

Тестирование рисков (Risk-Based Testing) — это подход к тестированию ПО, при котором приоритеты в тестировании устанавливаются на основе оценки рисков. Это означает, что внимание и ресурсы сосредотачиваются прежде всего на тех частях системы, которые несут наибольший риск возникновения серьёзных проблем или ошибок, влияющих на работоспособность продукта и удовлетворённость пользователя. Подход позволяет оптимизировать процесс тестирования, обеспечивая наибольшую эффективность при ограниченных ресурсах.

Основные этапы:

  1. Идентификация рисков: Определение потенциальных угроз для проекта, которые могут включать технические аспекты (например, сложность реализации определённой функции), а также факторы, связанные с бизнес-целями (например, важность функции для клиента).
  2. Анализ и оценка рисков: Оценка вероятности возникновения каждого риска и степени его воздействия на проект. Это помогает определить приоритеты для тестирования.
  3. Планирование тестирования: Разработка стратегии и плана тестирования, в котором тест-кейсы распределяются с учётом установленных приоритетов риска.
  4. Выполнение тестирования: Тестирование программного обеспечения с акцентом на области, представляющие наибольший риск.
  5. Мониторинг и контроль: Отслеживание процесса тестирования и внесение корректировок в план в соответствии с изменениями в проекте и повторной оценкой рисков.
  6. Анализ результатов: Оценка результатов тестирования и определение, как риски были снижены до приемлемого уровня.

Преимущества:

  • Фокус на критически важных аспектах: Тестирование сосредотачивается на наиболее важных с точки зрения бизнеса и технической сложности функциях.
  • Эффективное использование ресурсов: Ресурсы для тестирования распределяются таким образом, чтобы максимизировать покрытие наиболее рискованных областей при ограниченных времени и бюджете.
  • Улучшение качества продукта: Снижение рисков, связанных с программным обеспечением, ведёт к повышению общего качества продукта.
  • Повышение удовлетворённости клиентов: Защита от потенциальных проблем, которые могли бы наиболее негативно сказаться на пользовательском опыте.

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

https://easyoffer.ru/question/7932

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Что такое динамическое тестирование?

Теория тестирования

A

Краткая суть: через выполнение кода (через запуск программы.

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

Основные аспекты динамического тестирования:

  • Виды тестирования: Включают функциональное (проверка соответствия функциональным требованиям), нефункциональное (проверка производительности, безопасности, удобства использования и т. д.), а также регрессионное (проверка, что новые изменения не привели к появлению ошибок в уже протестированных частях программы).
  • Уровни: Различают несколько уровней, включая модульное (тестирование отдельных компонентов или модулей), интеграционное (проверка взаимодействия между модулями или системами) и системное (проверка всей системы в целом).
  • Автоматизация: Динамическое тестирование может быть как ручным, так и автоматизированным. Автоматизация включает использование специального ПО для создания и выполнения тестов, что позволяет повысить эффективность тестирования и ускорить процесс разработки.
  • Тестовые сценарии и данные: Разработка тестовых сценариев и подготовка тестовых данных являются ключевыми аспектами динамического тестирования. Они описывают условия и шаги для проверки конкретных функций или сценариев использования, а тестовые данные предоставляют необходимую информацию для выполнения этих тестов.

Преимущества:

  • Практическая проверка: Динамическое тестирование демонстрирует реальное поведение программы, позволяя обнаружить ошибки, которые могут не быть очевидны при статическом анализе.
  • Валидация функциональности: Помогает убедиться, что программное обеспечение выполняет все требуемые функции и соответствует спецификациям.
  • Повышение качества продукта: Помогает улучшить надёжность, производительность и безопасность программного продукта, повышая тем самым удовлетворённость пользователя.

Динамическое тестирование — это проверка программного обеспечения путём его выполнения для обнаружения ошибок. Этот процесс позволяет оценить реальное поведение программы, её функциональность и производительность в различных условиях, что является ключом к обеспечению высокого качества и надёжности разрабатываемого продукта.

https://easyoffer.ru/question/7826

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Что такое «парадокс пестицида»?

Теория тестирования

A

Суть: Повторное использование одних и тех же тестовых сценариев со временем становится всё менее эффективным в обнаружении новых дефектов.

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

Причины:

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

Как преодолеть эффект

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

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

https://easyoffer.ru/question/7872

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

Опишите основные фазы STLC?Дайте определение Entry и Exit Criteria.

Теория тестирования

A

Software Testing Life Cycle:
1. Анализ требований
2. Планирование тестирования
3. Разработка тест-кейсов
4. Настройка тестовой среды
5. Выполнение тестов
6. Завершение цикла испытаний

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

Критерии выхода: определяют элементы, которые должны быть выполнены до завершения тестирования.

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

STLC имеет несколько взаимосвязанных фаз и в целом очень похож на SDLC. Эти фазы являются последовательными и называются:

  • Анализ требований (Requirement Analysis): один из важнейших этапов, потому что именно на нем можно почти бесплатно исправить недостатки проекта. Этап анализа требований также определяет потенциальную потребность в автоматизированном тестировании и позволяет производить экономические расчеты затрат на рабочую силу на основе оценки проекта. На этом же этапе обсуждаются и документируются критерии начала и окончания тестирования
  • Планирование тестирования (Test Planning): на этом этапе формируется план тестирования, т.е. мы определяем действия и ресурсы, которые помогут достичь целей тестирования (участники и их роли, инструменты, окружение). Во время планирования мы также пытаемся определить метрики, метод сбора и отслеживания этих метрик. План составляют исходя из требований, тестовой стратегии и анализа рисков
  • Разработка тест-кейсов (Test Case Development): подразумевает использование ручного и автоматизированного тестирования для достижения полного охвата функциональности программного обеспечения, при этом процесс основан на заранее установленных требованиях. Чаще всего тест-кейсы для автоматического тестирования пишутся отдельно, так как кейсы для ручного тестирования описаны в виде шпаргалок (cheat sheets)
  • Настройка тестовой среды (Test Environment Setup): в плане тестирования четко указано, какую тестовую среду следует использовать. На этом этапе STLC настраиваются операционные системы и виртуальные машины, развертываются инструменты тестирования, такие как Selenium, Katalon Studio, а также тестовая среда и базы данных проекта. Мы также обращаемся с запросами к DevOps и администраторам, если требуется поддержка
  • Выполнение тестов (Test Execution): тесты выполняются на основе готовой тестовой документации и правильно настроенной тестовой среды. Все результаты тестирования регистрируются в Системе управления тестированием. Отрицательно пройденные тесты, в которых фактический результат отличается от ожидаемого, регистрируются как ошибки и передаются команде разработчиков на доработку с последующей перепроверкой после исправления
  • Завершение цикла испытаний (Test Cycle Closure): окончательная генерация отчетов о тестировании для клиента. Они должны включать затраченное время, процент обнаруженных ошибок и положительных результатов тестирования, общее количество обнаруженных и исправленных ошибок. Что касается отдела тестирования, то это момент для анализа его работы, подведения итогов, анализа его продуктивности и возможности внести предложения по улучшению качества тестирования.

Критерии входа: Критерии входа содержат обязательные элементы, которые должны быть выполнены перед началом тестирования.
1. Выход билда для тестирования
2. 100% требований и мокапов утверждены и проверены

Критерии выхода: Критерии выхода определяют элементы, которые должны быть выполнены до завершения тестирования.
1. Выполнение более 80 % запланированных на итерацию тест-кейсов
2. Исправлено 100% критических багов
3. Автоматизированно 80% регрессионных тест-кейсов

https://stepik.org/lesson/1036729/step/4?auth=login&unit=1045214
https://vladislaveremeev.gitbook.io/qa_bible/sdlc-i-stlc/zhiznennyi-cikl-testirovaniya-po-stlc-software-testing-lifecycle

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

Что такое Bug, Error, Failure, Fault?

Теория тестирования

A

Суть: Некорректная работа программы, вызванная ошибкой в программном коде или дизайне продукта.

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

Причины возникновения могут включать:

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

Обработка и исправление включает в себя несколько этапов:

  1. Идентификация и регистрация: Сначала он должен быть обнаружен, что может произойти в процессе разработки, тестирования или уже после релиза продукта пользователями. Затем ошибка регистрируется в системе учёта задач или баг-трекере с подробным описанием проблемы, условий, при которых она возникает, и, по возможности, шагов для её воспроизведения.
  2. Анализ и приоритизация: Команда разработки анализирует зарегистрированные баги, определяет их причины и приоритеты для исправления на основе важности функционала и влияния ошибки на пользователей.
  3. Исправление: Разработчики вносят необходимые изменения в код для устранения ошибки.
  4. Тестирование: После исправления бага проводится повторное тестирование соответствующего функционала, а также регрессионное тестирование для убедительности в том, что исправления не привели к новым проблемам в программе.
  5. Деплоймент: Исправленный код включается в следующую версию программного продукта, которая после прохождения всех тестов и проверок выкладывается для пользователей.

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q

Какие атрибуты у баг-репорта?Какие основные поля для заполнения?

Теория тестирования

A

-

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q

Какая разница между приоритетом и серьезностью?

Теория тестирования

A

Приоритет - как быстро нужно исправить ошибку
Серьезность - насколько серьезно ошибка затрагивает функциональность

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q

Приведите примеры серьезного, но не приоритетного бага

Теория тестирования

A

У компании Google на главной странице ошибка в слове “Gogle”.

Высокий приоритет, но низкая серьёзность

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

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

Низкий приоритет, но высокая серьёзность

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

Примеры могут включать:

  • Критические ошибки в редко используемых функциях: Например, сбой системы при выполнении специфической операции, которую используют единицы пользователей.
  • Серьёзные ошибки в функционале, планируемом к скорому удалению или переработке: Если известно, что данный функционал будет скоро заменён, может быть принято решение не тратить ресурсы на исправление серьёзной ошибки.

https://easyoffer.ru/question/7895

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
30
Q

В чем разница между валидацией и верификацией?

Теория тестирования

A

Верификация отвечает на вопрос “Строим ли мы продукт правильно?”, проверяя соответствие продукта требованиям и спецификациям на каждом этапе разработки.

Валидация отвечает на вопрос “Строим ли мы правильный продукт?”, подтверждая, что конечный продукт удовлетворяет потребностям и ожиданиям конечного пользователя.

https://easyoffer.ru/question/7811

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
31
Q

Зачем требуется тестовая документация?Какие ее виды?

Теория тестирования

A

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

  1. Тестовая стратегия (Test Strategy)
  2. План тестирования (Test Plan)
  3. Тестовый сценарий (Test Case)
  4. Тестовый набор (Test Suite)
  5. Тестовые данные (Test Data)
  6. Баг (Bug report)
  7. Отчёт о тестировании (Test Report)

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

Вот основные ее виды:

  1. Тестовая политика (Test Policy):
    Описывает общие принципы и подходы к тестированию на уровне организации. Это стратегический документ, который не вдается в детали исполнения.
  2. Тестовая стратегия (Test Strategy):
    Определяет основные стратегические направления тестирования для конкретного проекта или серии проектов. Включает в себя выбор методологий, описание процессов управления рисками, ресурсов, инструментов и прочее.
  3. План тестирования (Test Plan):
    Описывает общий план тестирования для конкретного проекта или фазы, включая цели тестирования, объекты тестирования, ресурсы, ответственных и график работ. Он также определяет критерии начала и завершения тестирования, а также методы отслеживания и управления.
  4. Тестовый сценарий (Test Case):
    Подробное описание условий и шагов для проверки конкретного аспекта системы или приложения. Тестовый сценарий включает в себя входные данные, условия выполнения, шаги для выполнения и ожидаемый результат.
  5. Тестовый набор (Test Suite):
    Коллекция тестовых сценариев, объединённых по определённому признаку, например, функциональности, которую они тестируют, или типу тестирования (регрессионное, приёмочное и т.д.).
  6. Тестовые данные (Test Data):
    Данные, используемые для выполнения теста. Могут включать в себя входные файлы, данные для заполнения форм, конфигурационные файлы и так далее.
  7. Протокол тестирования (Test Log):
    Журнал, в котором фиксируется информация о процессе выполнения тестов, включая время начала и окончания тестирования, исполнителя, результаты и возникшие проблемы.
  8. Отчёт о дефектах (Defect Report):
    Описывает найденные в процессе тестирования ошибки. Включает информацию о способе воспроизведения ошибки, её серьёзности, состоянии и любые дополнительные сведения, которые могут помочь в её исправлении.
  9. Отчёт о тестировании (Test Report):
    Итоговый документ, который подводит итоги проведённого тестирования, включая общее качество продукта, обнаруженные дефекты, оценку выполнения тестового плана и рекомендации.
    Каждый из этих документов играет важную роль в обеспечении качества и эффективности процесса тестирования, помогая улучшить коммуникацию в команде, обеспечивать прозрачность и отслеживаемость процессов, а также способствуя более глубокому пониманию и анализу тестируемой системы.

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

https://easyoffer.ru/question/7821

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
32
Q

Что такое тест-план? Какие элементы у него есть?

Теория тестирования

A

Суть: документ для планирования тестирования

  1. Что надо протестировать
  2. Что будем действительно тестировать
  3. Как будем тестировать
  4. Когда будем тестировать
  5. Критерии сдачи
  6. Критерии приёмки

Тест-план — это документ, который описывает объем, подход, ресурсы и план тестирования ПО. Он служит руководством для тестирования продукта, определяя стратегию, задачи, приоритеты, ресурсы, графики и риски, связанные с процессом тестирования. Он помогает всей команде понимать задачи тестирования и ожидаемые результаты, а также обеспечивает структурированный подход к обеспечению качества.

Основные элементы:

  1. Введение: Краткое описание проекта и целей тестирования.
  2. Объекты тестирования: Список компонентов или функций программного обеспечения, которые будут тестироваться.
  3. Задачи тестирования: Четкое определение целей тестирования, включая что должно быть протестировано и что должно быть достигнуто в результате тестирования.
  4. Область тестирования и исключения: Описание того, что будет тестироваться, а также того, что будет исключено из тестирования.
  5. Подход к тестированию: Описание методологии и техник тестирования, которые будут использоваться, включая уровни тестирования (например, модульное, интеграционное, системное, приемочное).
  6. Критерии начала и завершения тестирования: Определение условий, при которых тестирование начнется и завершится.
  7. Ресурсы: Перечень всех необходимых ресурсов для тестирования, включая персонал, тестовое оборудование, и тестовые данные.
  8. Ответственные: Распределение ролей и обязанностей в команде тестирования.
  9. График тестирования: Временная шкала выполнения тестовых задач и этапов.
  10. Управление рисками: Оценка потенциальных рисков для плана тестирования и стратегии их минимизации.
  11. План выпуска тестов: Порядок выполнения тестов, включая зависимости между тестами.
  12. Требования к документированию: Описание того, как будут документироваться найденные дефекты, отчеты о тестировании и итоговые результаты.

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

https://easyoffer.ru/question/7846

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
33
Q

Какую обязательную информацию должен содержать тест-план?
Как правильно его использовать, поддерживать и вообще он нужен для большинства проектов?

Теория тестирования

A

Суть: планирование требуется всегда, тест план нужен не всегда

  1. Что надо протестировать
  2. Что будем действительно тестировать
  3. Как будем тестировать
  4. Когда будем тестировать
  5. Критерии сдачи
  6. Критерии приёмки

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

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

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

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
34
Q

Какая разница между чек-листом и тест-кейсом?

Теория тестирования

A

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

Тест-кейс

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

Особенности:

  • Подробное описание процедуры тестирования.
  • Четко определенные шаги.
  • Ожидаемые результаты для каждого шага.
  • Предназначен для повторного использования в разных циклах тестирования.

Чек-лист

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

Особенности:

  • Список проверок без подробных инструкций.
  • Гибкость в использовании.
  • Может не содержать ожидаемых результатов.
  • Подходит для общего обзора тестирования и помощи в организации тестов.

Различия

  • Детализация: Тест-кейс содержит подробные шаги и ожидаемые результаты, в то время как чек-лист представляет собой простой список элементов для проверки.
  • Цель использования: Тест-кейсы разработаны для детального тестирования функциональности и обеспечения полного покрытия тестами. Чек-листы же чаще используются для быстрой проверки или в качестве напоминания о том, что нужно протестировать.
  • Гибкость: Чек-листы более гибкие и могут быть легко адаптированы под разные задачи и условия тестирования. Тест-кейсы, с другой стороны, требуют точного следования предписанным шагам.

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
35
Q

Приведите пример хорошего тест-кейса.

Теория тестирования

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
36
Q

Что такое ООП?
Назовите его принципы с примерами?

Программирование

A

Суть парадигма программирования, в основе которой лежат объекты. Где объекты это конкретные сущности создаваемые из класса, где класс это шаблон для создания объектов.

Принципы
* Абстракция
* Наследование
* Инкапсуляция
* Полиморфизм

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

Инкапсуляция — мы можем ограничить доступ к методам и переменным, что предотвратит модификацию данных — это и есть инкапсуляция. Приватные атрибуты выделяются нижним подчеркиванием: одинарным _ или двойным __.

Полиморфизм — особенность ООП, позволяющая использовать одну функцию для разных форм (типов данных).

Абстракция — используется, чтобы скрыть внутренние характеристики функции от пользователей.

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

https://easyoffer.ru/question/335
https://easyoffer.ru/question/333

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
37
Q

Что такое SOLID? Приведите примеры.

Программирование

A

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

S - Single Responsibility Principle - принцип единственной ответственности. Каждый класс должен иметь только одну зону ответственности.

O - Open closed Principle - принцип открытости-закрытости.
Классы должны быть открыты для расширения, но закрыты для изменения.

L - Liskov substitution Principle - принцип подстановки Барбары Лисков.
Должна быть возможность вместо базового (родительского) типа (класса) подставить любой его подтип (класс-наследник), при этом работа программы не должна измениться.

I - Interface Segregation Principle - принцип разделения интерфейсов.
Данный принцип обозначает, что не нужно заставлять клиента (класс) реализовывать интерфейс, который не имеет к нему отношения.

D - Dependency Inversion Principle - принцип инверсии зависимостей.
Модули верхнего уровня не должны зависеть от модулей нижнего уровня. И те, и другие должны зависеть от абстракции. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

https://easyoffer.ru/question/332

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
38
Q

Что такое интерфейс?
Что такое абстрактный класс?
Чем они отличаются?

Программирование

A

Интерфейс: Позволяет определить некоторый функционал не имеющий конкретной реализации
Абстрактный класс: базовый класс, который не предполагает создания экземпляров и может содержать всебе нереализованные элементы

Простыми словами: интерфейс - это просто описание методов, без их реализации. У абстрактного класса может быть и реализация методов.
- Класс может реализовать несколько интерфейсов, но наследовать только один абстрактный класс.
- Абстрактный класс может содержать конструкторы, поля и другие методы, в то время как интерфейс предоставляет только сигнатуры методов.

Интерфейс — это контракт, который должен быть реализован конкретным классом. Позволяет определить некоторый функционал не имеющий конкретной реализации.

У интерфейса не может быть состояния, поэтому в нем нельзя использовать изменяемые поля экземпляра. В интерфейсе могут быть только неизменяемые final-поля.

Абстрактный класс — похож на обычный, но отличается тем, что может содержать абстрактные методы — методы без реализации, и нельзя создать экземпляр абстрактного класса.

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

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

https://easyoffer.ru/question/8139

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
39
Q

Что такое DRY, KISS, YAGNI?

Программирование

A

DRY (Don’t Repeat Yourself) - это принцип, который подразумевает, что каждая часть знаний или функциональности в программе должна иметь единственное, безошибочное и авторитетное представление в рамках системы. Он бращает внимание на избегание дублирования кода, данных и концепций в программном коде.

Основные идеи, связанные с этим принципом:

  1. Избегайте дублирования кода: Дублирование кода увеличивает сложность кодовой базы, делает ее труднее в поддержке и изменении. Поэтому следует стараться избегать повторения одинаковых или похожих кусков кода.
  2. Разделение кода на модули и функции: Часто используемый код должен быть вынесен в отдельные функции или модули, чтобы он мог быть повторно использован в различных частях программы.
  3. Использование абстракций и шаблонов проектирования: Использование абстракций и шаблонов проектирования позволяет создавать универсальные решения, которые можно использовать повторно в различных контекстах.
  4. Управление данными: Дублирование данных также может привести к проблемам согласованности и целостности. Поэтому следует стремиться к хранению данных в единственном источнике и использованию ссылок на него в других частях программы.

Преимущества применения этого принципа:

  • Уменьшение объема кода: Избегание дублирования кода приводит к уменьшению объема кода, что облегчает его понимание и поддержку.
  • Улучшение читаемости кода: Код становится более понятным и читаемым, так как повторяющиеся фрагменты убираются в отдельные функции или модули.
  • Облегчение обслуживания: Изменения в программе требуют меньше усилий, так как они вносятся в единственном месте, а не в нескольких копиях кода.

Принцип DRY является одним из основных принципов разработки ПО и помогает создавать более эффективный, гибкий и поддерживаемый код.

KISS (Keep It Simple, Stupid) - это принцип проектирования ПО, который призывает к тому, чтобы решения были максимально простыми и непритязательными.

  1. Простота и ясность: ПО должно быть простым и понятным для понимания, как для его создателей, так и для пользователей. Простота снижает сложность, упрощает разработку и обслуживание кода.
  2. Отказ от избыточности: Избегайте излишних деталей и сложных конструкций в коде. Пишите только тот код, который необходим для решения задачи.
  3. Работоспособность и надежность: Простота не должна жертвовать работоспособностью и надежностью программы. ПО должно продолжать работать правильно и стабильно при любых условиях.
  4. Легкость сопровождения и расширения: ПО должно быть легко поддерживаемым и расширяемым. Простой код легче изменить, доработать и адаптировать под новые требования.

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

YAGNI (You Ain’t Gonna Need It) - подход к реализации проектов строго по ТЗ верен с нескольких ракурсов. Заказчик не должен платить за то, что ему не надо, а продукт должен быть максимально сопровождаем и его качество не должно страдать от интеграции ненужных функций.

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

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

«Бесплатных» функций в программных продуктах просто не бывает. Если рассматривать материальную сторону, то любые ненужные, но фактически реализованные «фичи» оплачиваются либо заказчиком (в бюджет закладываются расходы на те функции, которые не нужны), либо исполнителем из прибыли по проекту. И тот, и другой варианты с точки зрения бизнеса неверны. Если же говорить о нематериальных затратах, то любые «бонусные» возможности усложняют сопровождение, увеличивают вероятность ошибок и усложняют взаимодействие с продуктом, — между объёмом кодовой базы и описанными характеристиками есть прямая зависимость. Больше написанного кода — труднее сопровождать и выше вероятность появления «багов», тут очень уместна поговорка: «лучший код — это ненаписанный код».

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
40
Q

Какие паттерны GOF вам известны?Приведите примеры их использования.

Программирование

A

Паттерны проектирования GoF (Gang of Four - от 4-х авторов) - это набор шаблонов проектирования, описанных в книге “Design Patterns: Elements of Reusable Object-Oriented Software” (“Паттерны проектирования. Переиспользуемые объектно-ориентированные программы”), написанной Эрихом Гаммой, Ричардом Хелмом, Ральфом Джонсоном и Джоном Влиссидесом. Эта книга является классическим источником знаний о паттернах проектирования.

  • Порождающие (Creational)
  • Структурные (Structural)
  • Поведенческие (behavioral)

Паттерн проектирования — это часто встречаемое решение определённой проблемы при проектировании архитектуры программ.

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

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

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

Порождающие (Creational)

Шаблоны проектирования, которые абстрагируют процесс инстанцирования. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов.

  • Factory(Фабрика) Сам по себе не является паттерном. Подход, при котором логика создания объектов выносится в отдельный класс.
  • Фабричный метод(Factory Method) — это порождающий паттерн проектирования, который определяет общий интерфейс для создания объектов в суперклассе, позволяя подклассам изменять тип создаваемых объектов.
  • Абстрактная фабрика (Abstract factory) — порождающий шаблон проектирования, предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов, не специфицируя их конкретных классов. Шаблон реализуется созданием абстрактного класса Factory, который представляет собой интерфейс для создания компонентов системы (например, для оконного интерфейса он может создавать окна и кнопки). Затем пишутся классы, реализующие этот интерфейс.
  • Прототип (Prototype) Задаёт виды создаваемых объектов с помощью экземпляра-прототипа и создаёт новые объекты путём копирования этого прототипа. Он позволяет уйти от реализации и позволяет следовать принципу «программирование через интерфейсы». В качестве возвращающего типа указывается интерфейс/абстрактный класс на вершине иерархии, а классы-наследники могут подставить туда наследника, реализующего этот тип. Проще говоря, это паттерн создания объекта через клонирование другого объекта вместо создания через конструктор.
  • Строитель(Builder) — порождающий шаблон проектирования предоставляет способ создания составного объекта. Отделяет конструирование сложного объекта от его представления, так что в результате одного и того же процесса конструирования могут получаться разные представления.
  • Одиночка (Singleton) — порождающий шаблон проектирования, гарантирующий, что в однопоточном приложении будет единственный экземпляр класса с глобальной точкой доступа.

Структурные (Structural)

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

  • Адаптер (Adapter) — структурный шаблон проектирования, предназначенный для организации использования функций объекта, недоступного для модификации, через специально созданный интерфейс.
  • Мост (Bridge) — структурный шаблон проектирования, используемый в проектировании программного обеспечения чтобы «разделять абстракцию и реализацию так, чтобы они могли изменяться независимо». Шаблон мост использует инкапсуляцию, агрегирование и может использовать наследование для того, чтобы разделить ответственность между классами.
  • Компоновщик (Composite pattern) — структурный шаблон проектирования, объединяющий объекты в древовидную структуру для представления иерархии от частного к целому. Компоновщик позволяет клиентам обращаться к отдельным объектам и к группам объектов одинаково
  • Декоратор (Decorator) — структурный шаблон проектирования, предназначенный для динамического подключения дополнительного поведения к объекту. Шаблон Декоратор предоставляет гибкую альтернативу практике создания подклассов с целью расширения функциональности.
  • Фасад (Facade) — структурный шаблон проектирования, позволяющий скрыть сложность системы путём сведения всех возможных внешних вызовов к одному объекту, делегирующему их соответствующим объектам системы.
  • Приспособленец (Flyweight, “легковесный (элемент)”) — структурный шаблон проектирования, при котором объект, представляющий себя как уникальный экземпляр в разных местах программы, по факту не является таковым.
  • Заместитель (Proxy) — структурный шаблон проектирования, который предоставляет объект, который контролирует доступ к другому объекту, перехватывая все вызовы (выполняет функцию контейнера).

Поведенческие (behavioral)

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

  • Цепочка обязанностей (Chain of responsibility) — поведенческий шаблон проектирования, предназначенный для организации в системе уровней ответственности.
  • Команда (Command) — поведенческий шаблон проектирования, используемый при объектно-ориентированном программировании, представляющий действие. Объект команды заключает в себе само действие и его параметры.
  • Интерпретатор (Interpreter) — поведенческий шаблон проектирования, решающий часто встречающуюся, но подверженную изменениям, задачу. Также известен как Little (Small) Language
  • Итератор (iterator) — интерфейс, предоставляющий доступ к элементам коллекции (массива или контейнера) и навигацию по ним. В различных системах итераторы могут иметь разные общепринятые названия. В терминах систем управления базами данных итераторы называются курсорами.
  • Посредник (Mediator) — поведенческий шаблон проектирования, обеспечивающий взаимодействие множества объектов, формируя при этом слабую связанность и избавляя объекты от необходимости явно ссылаться друг на друга
  • Хранитель (Memento) — поведенческий шаблон проектирования, позволяющий, не нарушая инкапсуляцию, зафиксировать и сохранить внутреннее состояние объекта так, чтобы позднее восстановить его в это состояние.
  • Наблюдатель (Observer) — поведенческий шаблон проектирования. Также известен как «подчинённые» (Dependents). Создает механизм у класса, который позволяет получать экземпляру объекта этого класса оповещения от других объектов об изменении их состояния, тем самым наблюдая за ними.
  • Состояние (State) — поведенческий шаблон проектирования. Используется в тех случаях, когда во время выполнения программы объект должен менять своё поведение в зависимости от своего состояния.
  • Стратегия (Strategy) — поведенческий шаблон проектирования, предназначенный для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости. Это позволяет выбирать алгоритм путём определения соответствующего класса. Шаблон Strategy позволяет менять выбранный алгоритм независимо от объектов-клиентов, которые его используют.
  • Шаблонный метод (Template method) — поведенческий шаблон проектирования, определяющий основу алгоритма и позволяющий наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом.
  • Посетитель (visitor) — поведенческий шаблон проектирования, описывающий операцию, которая выполняется над объектами других классов. При изменении visitor нет необходимости изменять обслуживаемые классы.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
41
Q

Что такое PageObject и PageFactory?

Программирование

A

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

Page Factory - это дополнительный паттерн, который позволяет удобно и эффективно инициализировать экземпляры Page Object. Page Factory автоматически находит элементы на веб-странице и инициализирует их, что позволяет избежать дублирования кода и упрощает разработку и поддержку автоматизированных тестов.

Если коротко:
- Page Object - класс с методами для работы с веб-страницей.
- Page Factory - помогает удобно инициализировать элементы в Page Object.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
42
Q

Что такое Selenium и зачем его используют?

Selenium

A

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

Selenium – это проект, в рамках которого разрабатывается серия программных продуктов с открытым исходным кодом (open source):

  • Selenium WebDriver,
  • Selenium RC,
  • Selenium Server,
  • Selenium Grid,
  • Selenium IDE.

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

Selenium WebDriver

Selenium WebDriver – это программная библиотека для управления браузерами. Часто употребляется также более короткое название WebDriver.

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

Это основной продукт, разрабатываемый в рамках проекта Selenium.

Selenium RC

Selenium RC – это предыдущая версия библиотеки для управления браузерами. Аббревиатура RC в названии этого продукта расшифровывается как Remote Control, то есть это средство для «удалённого» управления браузером.

Эта версия с функциональной точки зрения значительно уступает WebDriver. Сейчас она находится в законсервированном состоянии, не развивается и даже известные баги не исправляются. А всем, кто сталкивается с ограничениями Selenium RC, предлагается переходить на использование WebDriver.

Selenium Server

Selenium Server – это сервер, который позволяет управлять браузером с удалённой машины, по сети. Сначала на той машине, где должен работать браузер, устанавливается и запускается сервер. Затем на другой машине (технически можно и на той же самой, конечно) запускается программа, которая, используя специальный драйвер RemoteWebDriver, соединяется с сервером и отправляет ему команды. Он в свою очередь запускает браузер и выполняет в нём эти команды, используя драйвер, соответствующий этому браузеру.

Selenium Grid

Selenium Grid – это кластер, состоящий из нескольких Selenium-серверов. Он предназначен для организации распределённой сети, позволяющей параллельно запускать много браузеров на большом количестве машин.

Selenium IDE

Selenium IDE – плагин к браузеру Firefox, который может записывать действия пользователя, воспроизводить их, а также генерировать код для WebDriver или Selenium RC, в котором выполняются те же самые действия. В общем, это «Selenium-рекордер».

https://habr.com/ru/articles/152653/

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
42
Q

Что такое драйвер браузера?

Selenium

A

Суть: библиотека, позволяющая взаимодействовать с браузером.

По своей сущности Selenium WebDriver представляет собой:

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

Selenium WebDriver, или просто WebDriver – это драйвер браузера, то есть не имеющая пользовательского интерфейса программная библиотека, которая позволяет различным другим программам взаимодействовать с браузером, управлять его поведением, получать от браузера какие-то данные и заставлять браузер выполнять какие-то команды.

Исходя из этого определения, ясно, что WebDriver не имеет прямого отношения к тестированию. Он всего лишь предоставляет автотестам доступ к браузеру. На этом его функции заканчиваются.

https://habr.com/ru/articles/152971/

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
43
Q

Какие виды локаторов страницы есть?Каковы их преимущества и недостатки?

Selenium

A

CSS и XPath

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
44
Q

Что такое Selenium Waits?
Какие есть и чем отличаются?

Selenium

A

Суть: есть явные и неявные ожидания. Явные объявляются каждый раз, неявные объявляются один раз, но ждут только до появления элемента в DOM. Оптимально использовать явные ожидания в рамках фреймворка типа selenide\selene.

Explicit Wait - явное (непосредственное, прямое) ожидание используется “здесь и сейчас” на один конкретный поиск элемента. В частности, даже паттерн “sleep” (ждать и ничего не делать) является примером explicit wait, но его применение не поощряется.
На практике рекомендуется использование WebDriverWait в сочетании с методами класса ExpectedConditions, которые позволяют сократить ожидание. Если элемент появился раньше времени, заданного при инициализации WebDriverWait - Selenium не будет ждать, а продолжит исполнение теста.

Implicit Wait - неявное (косвенное, скрытое) ожидание устанавливается один раз в коде вне операции поиска и действительно до изменения. Значение по умолчанию - 0, т.е. никакого ожидания. Implicit Wait применяется ко всем последующим операциям поиска неявно (т.е. скрытно, без указания напрямую в методе поиска, как мы видели в примере выше).

Единственная разница между Explicit и Implicit Waits заключается в том, что первый действителен только в для того поиска, где он определен, а второй - для всех последующих поисков.
Документация Seleniuma не рекомендует мешать в коде Explicit и Implicit Waits потому что тогда, будет сложно рассчитать настоящее максимальное ожидание. Как отменить установленный Implicit Wait? Очень просто - поставьте его обратно на 0.

Яков:
Самой главный нюанс - неявный вейт ждет только до появления элемента в ДОМе.
Козырь явных вейтов состоит в том - что они могут ждать до любого состояния элемента (виден, невиден, энейблд, дисейблд), причем вы можете как угодно кастомизировать (если знаете как) это ожидание, то есть - указывать - чего именно ждать.

В наш мир динамических сингл пейдж приложений, от неявных вейтов - толку мало. Если вы будете следовать принципу - всегда имплисит вейты, то у вас время от времени тесты будут падать, потому что не будут учитывать то, что некоторые элементы появляются в ДОМе раньше чем они становятся “видимыми”. Плюс когда тесты начнут падать (а вы ведь уже используете неявные ожидания) - вам прийдется встравивать явные - и тогда типа как не будете следовать официальной рекомендации - “не мешать их вместе”.

Поэтому я предлагаю не запариваться, а всегда юзать явные ожидания ;). Но для того что бы не запариваться - нужно либо использовать selenide\selene либо уметь построить свой собственний аналог из чистого селениума ;)

http://qa-blog.alexei-vinogradov.de/2015/07/%D0%BF%D1%80%D0%B0%D0%B2%D0%B4%D0%B0-%D0%BE-%D1%8F%D0%B2%D0%BD%D1%8B%D1%85-%D0%B8-%D0%BD%D0%B5%D1%8F%D0%B2%D0%BD%D1%8B%D1%85-%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F%D1%85-%D0%B2-selenium/

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
45
Q

Какие exceptions может оставить Selenium?
Что они значат и как их обрабатывать?

Selenium

A

Most Common Selenium Exceptions

  • NoSuchWindowException
  • NoSuchFrameException
  • NoSuchElementException
  • NoAlertPresentException
  • InvalidSelectorException
  • TimeoutException
  • ElementNotVisibleException
  • ElementNotSelectableException
  • NoSuchSessionException
  • StaleElementReferenceException
  1. NoSuchWindowException
    One of the most frequent exceptions in Selenium Webdriver, NoSuchWindowException occurs if the current list of windows is not updated. The previous window does not exist, and you can’t switch to it.
    To handle this exception, use webdriver methods called “driver.getWindowHandles().”
  2. NoSuchFrameException
    Similar to NoSuchWindowException, the NoSuchFrameException occurs when switching between multiple frames is not possible.
    The solution used for handling NoSuchWindowException must ideally work for this exception too.
  3. NoSuchElementException
    Happens when the locators are unable to find or access elements on the web page or application. Ideally, the exception occurs due to the use of incorrect element locators in the findElement(By, by) method.
    To handle this exception, use the wait command. Use Try/Catch to ensure that the program flow is interrupted if the wait command doesn’t help.
  4. NoAlertPresentException
    Happens when the user is trying to you switch to an alert which is not present. In simple terms, it means that the test is too quick and is trying to find an alert that has not yet been opened by the browser.
    To handle or simply avoid this exception, use explicit or fluent wait in all events where an alert is expected.
  5. InvalidSelectorException
    This exception occurs due to an incorrect selector. More often than not, the selector syntax is wrong.
    To avoid this exception, first, check the locator syntax. If it is incorrect, make sure the locator is syntactically correct.
  6. TimeoutException
    This exception is thrown if the command did not execute or complete within wait time. As already mentioned, waits are used to avoid NoSuchElementException. However, TimeoutException will be thrown after the page components fail to load within wait time.
    Avoiding this exception is simple. All one needs to do is to calculate the average page load time and adjust the wait time accordingly.
  7. ElementNotVisibleException
    This exception occurs when the WebDriver tries to find an element that is hidden or invisible. To handle this exception, it is essential that the exact reason is identified, which can be due to nested web elements or overlapping web elements.
    In the first case, you have to locate and correct the specific element. In the second case, use explicit wait.
  8. ElementNotSelectableException
    This exception belongs to the same class as InvalidElementStateException. In such exceptions, the element is present on the web page, but the element cannot be selected.
    To handle this exception, the wait command must be used.
  9. NoSuchSessionException
    As the name suggests, the exception is thrown if a method is called post the browser is closed. Other reasons for this exception include a browser crash.
    To avoid this handle, ensure that your browser is updated and stable.
  10. StaleElementReferenceException
    This exception occurs when the web element is no longer part of the web page. The element may have been part of the source code, but it is no longer part of the window. There can be multiple reasons for this exception. It can occur either from a switch to a different page, the element is no longer part of DOM or due to frame/window switch
    To handle this exception, you can either use Dynamic Xpath for handling DOM operations or try to use the Page Factory Model or try to access the element in loops before throwing the exception.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
46
Q

Для чего используют JavaScriptExecutor?Приведите примеры.

Selenium

A

JavaScriptExecutor — это интерфейс, который помогает выполнять JavaScript посредством Selenium WebDriver.

Примеры:
1. Кликнуть через JS
2. Проскроллить страницу до элемента
3. Ввести текст полностью

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
47
Q

Что такое Selenium Grid?

Selenium

A

Selenium Grid

Selenium Grid – это кластер, состоящий из нескольких Selenium-серверов. Он предназначен для организации распределённой сети, позволяющей параллельно запускать много браузеров на большом количестве машин.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
48
Q

Какие способы click и send keys в Selenium?

Selenium

A

Метод sendKeys
username.sendKeys("TestSelenium ");

Метод sendKeys() используется для ввода указанного значения (в круглых скобках) в текстовом поле. Обратите внимание, что метод sendKeys() вызывается для объекта WebElement, который был создан с помощью переменной element, соответствующей элементу пользовательского интерфейса страницы.

Приведенный выше блок кода вводит строку “TestSelenium” в текстовое поле Email в приложении Gmail.

sendKeys – одна из наиболее часто используемых команд в сценариях WebDriver.

Метод click
SignInButton.click();

Как и sendKeys(), click() является еще одной часто используемой командой для взаимодействия с веб-элементами. Метод click() используется для нажатия на веб-элемент, присутствующий на веб-странице.

Приведенный выше блок кода нажимает на кнопку “Войти” на главной странице Gmail.

Примечания:

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
49
Q

Как вы запускаете параллельное выполнение тестов?

Selenium

A

pytest + pytest-xdist
pytest -n 2 (количество потоков)

pytest-xdist автоматически распределяет тестовые сценарии между потоками для параллельного выполнения.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
50
Q

Какая разница между Action и Actions?

Selenium

A

Action (интерфейс) - это отдельное действие (клик, движение курсора, ввод текста)
Actions (класс) - цепочка последовательных действий.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
51
Q

Как вычитать данные из динамической веб таблицы?

Selenium

A

Найти таблицу на странице
Найти строки и столбцы таблицы
Извлечь данные из ячеек

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
51
Q

Как написать способ isElementPresent?

Selenium

A

Изучить потом если понадобится

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
52
Q

Можете ли вы назвать 10 интерфейсов в Selenium?

Selenium

A
  1. WebDriver (ядро - интерфейс со всеми ключевыми методами)
  2. Window (операции с текущим окном)
  3. Options (доступ к меню браузера)
  4. Timeouts
  5. JavaScriptExecutor
  6. TakesScreenshot
  7. HasCapabilities
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
53
Q

Назовите два способа автоматизации капчи.

Selenium

A
  1. Использование сервисов распознавания текстовой капчи
  2. Моделирование пользовательского поведения
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
54
Q

Вспомните типы навигационных команд Selenium.

Selenium

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
55
Q

Как найти поврежденные ссылки в Selenium WebDriver?

Selenium

A
  1. Получить ссылки на странице
  2. Сделать запрос к ссылке и проверить статус код через response
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
56
Q

Какую технику следует применить, если «нет ни frame id, ни frame name»?

Selenium

A
  • Использование индекса
  • Метод find_element()
  • Метод find_elements()
  • CSS селектор
57
Q

Python - интерпретируемый язык или компилируемый?

Python

A

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

Процесс выполнения программы обычно выглядит следующим образом:

  1. Интерпретация и компиляция: Исходный код сначала проходит через процесс компиляции в промежуточный байт-код. Это выполняется интерпретатором при запуске программы. В результате компиляции создается файл .pyc, который содержит байт-код программы.
  2. Исполнение: Затем интерпретатор исполняет этот байт-код последовательно, инструкция за инструкцией. Во время выполнения интерпретатор обрабатывает и выполняет инструкции, предоставляя ожидаемый результат.

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

Однако стоит отметить, что существуют и другие реализации Python, такие как PyPy, которые используют JIT (Just-In-Time) компиляцию для более эффективного выполнения кода. Каждая реализация может иметь свои особенности и характеристики в этом отношении.

https://easyoffer.ru/question/795

58
Q

Какие есть меняющиеся и постоянные типы данных? (mutable & immutable)

Python

A

Изменяемые

  • list
  • set
  • dict

Неизменяемые

  • int
  • float
  • str
  • tuple
  • frozenset

Мутабельные (изменяемые) и иммутабельные (неизменяемые) типы данных определяются по их способности изменяться после создания.

1. Иммутабельные типы данных:

Не могут быть изменены после создания.

  • int
  • float
  • str
  • tuple
  • frozenset

2. Мутабельные типы данных:

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

  • list
  • set
  • dict

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

59
Q

Что такое область видимости переменных?

Python

A

Суть: Глобальная - доступна везде. Локальная - внутри функции.

Область видимости или scope определяет контекст переменной, в рамках которого ее можно использовать. В Python есть два типа контекста: глобальный и локальный.

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

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

Скрытие переменных
Есть еще один вариант определения переменной, когда локальная переменная скрывают глобальную с тем же именем

name = "Tom"
 
 
def say_hi():
    name = "Bob"        # скрываем значение глобальной переменной
    print("Hello", name)
 
 
def say_bye():
    print("Good bye", name)
 
 
say_hi()    # Hello Bob
say_bye()   # Good bye Tom

Здесь определена глобальная переменная name. Однако в функции say_hi определена локальная переменная с тем же именем name. И если функция say_bye использует глобальную переменную, то функция say_hi использует локальную переменную, которая скрывает глобальную.

Если же мы хотим изменить в локальной функции глобальную переменную, а не определить локальную, то необходимо использовать ключевое слово global:
~~~
name = “Tom”

def say_hi():
global name
name = “Bob” # изменяем значение глобальной переменной
print(“Hello”, name)

def say_bye():
print(“Good bye”, name)

say_hi() # Hello Bob
say_bye() # Good bye Bob
~~~

Нелокальная область видимости

Появилось это понятие в Python 3 вместе с ключевым словом nonlocal. Логика его написания примерно такая же, как и у global. Однако у nonlocal есть особенность. Nonlocal используется чаще всего во вложенных функциях, когда мы хотим дать интерпретатору понять, что для вложенной функции определенная переменная не является локальной, но она и не является глобальной в общем смысле.

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

def get_candy():
    candy = 5
    def increment_candy(): 
        nonlocal candy
        candy += 1
        return candy
    return increment_candy
    
result = get_candy()()
print('Всего {} конфет.'.format(result))
  1. Изнутри функции видны переменные, которые были определены и внутри нее и снаружи. Переменные, определенные внутри – локальные, снаружи – глобальные.
  2. Снаружи функций не видны никакие переменные, определенные внутри них.
  3. Изнутри функции можно изменять значение переменных, которые определены в глобальной области видимости с помощью спецификатора global.
  4. Изнутри вложенной функции с помощью спецификатора nonlocal можно изменять значения переменных, которые были определены во внешней функции, но не находятся в глобальной области видимости.

https://metanit.com/python/tutorial/2.9.php
https://habr.com/ru/companies/otus/articles/487952/

60
Q

В чем разница между процессами и потоками?

Python

A

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

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

1. Процесс:

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

2. Поток:

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

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

https://easyoffer.ru/question/821

61
Q

Какие есть виды импорта?

Python

A

Абсолютный и относительный импорт
* Абсолютный - полный путь (от начала корневой папки проекта) к желаемому модулю.
* Относительный - относительный путь (начиная с пути текущего модуля) к желаемому модулю.

Абсолютные импорты:
~~~
import other
import packA.a2
import packA.subA.sa1
~~~

Явные относительные импорты:
~~~
import other
from . import a2
from .subA import sa1
~~~

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

https://tproger.ru/translations/guide-into-python-imports#11

62
Q

Что такое класс, итератор, генератор?

Python

A

Класс — тип, описывающий устройство объектов. Другими словами, это описание сущности, у которой есть определенный набор свойств и методов.
Итераторы — используются для перебора группы элементов (например, в списке).
Генераторы — представляют собой способ реализации итераторов. В них применяется yield для возврата выражения из функции, но в остальном генератор ведет себя как обычная функция.

Классы

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

Основные компоненты:

  1. Атрибуты: Переменные, хранящие данные, связанные с классом. Атрибуты могут быть публичными (доступными извне класса), защищенными (доступными только внутри класса и его подклассов) или приватными (доступными только внутри класса).
  2. Методы: Функции, определенные внутри класса и используемые для работы с атрибутами объектов этого класса. Методы могут изменять состояние объекта или возвращать какие-то значения.
  3. Инициализатор: Специальный метод \_\_init\_\_(), который вызывается при создании нового объекта класса и используется для инициализации его атрибутов.
  4. Конструктор: Специальный метод \_\_new\_\_(), который вызывается перед \_\_init\_\_() и используется для создания нового экземпляра класса.
  5. Деструктор: Специальный метод \_\_del\_\_(), который вызывается при удалении объекта из памяти и используется для освобождения ресурсов или выполнения других операций при завершении работы объекта.

Итераторы и генераторы

Итераторы и генераторы в Python используются для итерации по последовательностям, но они работают по-разному.

Итератор в Python — это объект, который реализует методы __iter__() и __next__(). Метод __iter__() возвращает сам итератор, а метод __next__() возвращает следующий элемент последовательности. Когда элементы заканчиваются, __next__() должен вызвать исключение StopIteration. Итераторы позволяют перебирать элементы, например, в списке или любом другом итерируемом объекте, не требуя, чтобы все элементы были доступны в памяти одновременно.

Генератор — это функция, которая использует выражение yield для генерации серии значений для итерации. Это особый тип итератора, который автоматически реализует методы __iter__() и __next__(). Главное отличие генератора заключается в том, что значения генерируются по требованию (ленивые вычисления). Каждый раз, когда функция-генератор возобновляет выполнение, она продолжает выполнение с точки последнего вызова yield. Генераторы часто используются для создания итераторов более простым и компактным способом.

Основные различия:

Создание: Итераторы создаются путем определения класса с методами __iter__() и __next__(). Генераторы создаются путем написания обычной функции с использованием выражения yield.

Состояние: Итераторы сохраняют свое состояние с помощью переменных класса. Генераторы сохраняют свое состояние в контексте локальных переменных, которые восстанавливаются при каждом выходе и входе из функции-генератора.

Оперативная память: Генераторы обычно используют меньше памяти, поскольку они генерируют элементы один за другим, а не хранят весь итерируемый объект в памяти.

Удобство написания: Функции-генераторы часто легче написать и понять, чем полноценные итераторы, потому что не требуются дополнительные методы и классы.

Производительность: Генераторы могут повышать производительность, так как значения вычисляются только тогда, когда они необходимы.

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

https://easyoffer.ru/question/344
https://easyoffer.ru/question/781

63
Q

В чем разница между итераторами и генераторами?

Python

A

Суть: Итераторы для перебора группы элементов (например, в списке). Генераторы это способ реализации итераторов. Возврат выражения из функции происходит через yield.

Итераторы и генераторы в Python используются для итерации по последовательностям, но они работают по-разному.

Итератор в Python — это объект, который реализует методы __iter__() и __next__(). Метод __iter__() возвращает сам итератор, а метод __next__() возвращает следующий элемент последовательности. Когда элементы заканчиваются, __next__() должен вызвать исключение StopIteration. Итераторы позволяют перебирать элементы, например, в списке или любом другом итерируемом объекте, не требуя, чтобы все элементы были доступны в памяти одновременно.

Генератор — это функция, которая использует выражение yield для генерации серии значений для итерации. Это особый тип итератора, который автоматически реализует методы __iter__() и __next__(). Главное отличие генератора заключается в том, что значения генерируются по требованию (ленивые вычисления). Каждый раз, когда функция-генератор возобновляет выполнение, она продолжает выполнение с точки последнего вызова yield. Генераторы часто используются для создания итераторов более простым и компактным способом.

Основные различия:

Создание: Итераторы создаются путем определения класса с методами __iter__() и __next__(). Генераторы создаются путем написания обычной функции с использованием выражения yield.

Состояние: Итераторы сохраняют свое состояние с помощью переменных класса. Генераторы сохраняют свое состояние в контексте локальных переменных, которые восстанавливаются при каждом выходе и входе из функции-генератора.

Оперативная память: Генераторы обычно используют меньше памяти, поскольку они генерируют элементы один за другим, а не хранят весь итерируемый объект в памяти.

Удобство написания: Функции-генераторы часто легче написать и понять, чем полноценные итераторы, потому что не требуются дополнительные методы и классы.

Производительность: Генераторы могут повышать производительность, так как значения вычисляются только тогда, когда они необходимы.

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

https://easyoffer.ru/question/781

63
Q

Что такое метакласс?

Python

A

В python все состоит из объектов. И для создания классов используются другие классы - метаклассы. По умолчанию для всех классов метаклассом является type

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

  1. Классы как объекты: Классы являются объектами первого класса, что означает, что они могут быть созданы, изменены и переданы как аргументы функций.
  2. Типы и метаклассы: Каждый объект имеет тип, который определяется его классом. Этот класс, определяющий тип объекта, называется метаклассом. По умолчанию для всех классов метаклассом является type.
  3. Использование метаклассов: Метаклассы можно использовать для изменения поведения создания классов. Это может быть полезно для автоматического добавления методов, проверки атрибутов или изменения наследования классов.
  4. Ключевые методы метакласса: Для создания собственного метакласса обычно определяются методы \_\_new\_\_() и \_\_init\_\_(). Метод \_\_new\_\_() вызывается перед созданием экземпляра класса, а метод \_\_init\_\_() вызывается после создания экземпляра.

Пример создания метакласса:

class MyMeta(type):
    def \_\_new\_\_(cls, name, bases, dct):
        # Изменяем или расширяем класс
        dct['custom_attribute'] = 'This is a custom attribute'
        return super().\_\_new\_\_(cls, name, bases, dct)

class MyClass(metaclass=MyMeta):
    pass

obj = MyClass()
print(obj.custom_attribute)  # Вывод: This is a custom attribute

В этом примере MyMeta - это метакласс, который изменяет класс MyClass, добавляя к нему новый атрибут custom_attribute.

64
Q

В чем разница между classmethod и staticmethod?

Python

A

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

  1. classmethod:
    Декоратор преобразует обычный метод класса в тот, который принимает первым аргументом ссылку на класс (обычно называемый cls).
    Это означает, что метод classmethod может обращаться к атрибутам и вызывать другие методы класса через ссылку на сам класс, а не через экземпляр класса.
    Может использоваться, например, для создания альтернативных конструкторов класса или для работы с классовыми переменными.
    Пример classmethod:
    ~~~
    class MyClass:
    class_attribute = 123@classmethod
    def class_method(cls):
    return cls.class_attribute

print(MyClass.class_method()) # Выведет: 123
~~~

  1. staticmethod:
    Декоратор создает метод класса, который не принимает ссылку на сам класс (неявно или явно), и не принимает ссылку на экземпляр класса (обычно называемый self).
    Это означает, что staticmethod является статическим методом и может быть вызван как из класса, так и из экземпляра класса, но не имеет доступа к атрибутам и методам класса или экземпляра.
    Статические методы могут быть полезны для группировки связанных функций внутри класса или для создания методов, которые не требуют доступа к состоянию класса или экземпляра.
    Пример staticmethod:
    ~~~
    class MyClass:
    @staticmethod
    def static_method():
    return “This is a static method”
    ~~~

print(MyClass.static_method()) # Выведет: This is a static method
Основное отличие между classmethod и staticmethod заключается в том, что classmethod принимает ссылку на класс, а staticmethod - нет.

https://easyoffer.ru/question/798

65
Q

Как работают декораторы, контекстные менеджеры?

Python

A

Суть:

  • Декоратор это функция расширяющая возможности функции. Принимает в качестве аргумента функцию
  • Контекстный менеджер функция with автоматически управляет входом и выходом из определенного контекста.

Декоратор
Функция, которая принимает другую функцию в качестве аргумента и добавляет к ней некоторую функциональность.

Цель декоратора: изменить поведение функции без изменения ее исходного кода

Технически декораторы реализуются через механизм замыкания
Это некий синтаксический сахар

Применение декораторов

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

Дублирующий код противоречит принципу единой ответственности, а также принципу DRY. И для того чтобы не повторять, чтобы вынести эту функциональность отдельно имеет смысл делать декоратор. Применяется в:

  • rout (flask)
  • loginrequaet (django, flask)
  • логировании
  • подсчете времени

Простой декоратор:

def text_decor(func):
    def wrapper(*args,**kwargs):
        print('Hello')
        func(*args,**kwargs)
        print('Good buy')
    return wrapper

Контекстный менеджер

В питоне есть оператор with. Размещенный внутри код выполняется с особенностью: до и после гарантированно срабатывают события входа в блок with и выхода из него. Объект, который определяет эту логику, называется контекстным менеджером.

События входа и выхода из блока определены методами __enter__ и __exit__. Первый срабатывает в тот момент, когда ход исполнения программы переходит внутрь with. Метод может вернуть значение. Оно будет доступно низлежащему внутри блока with коду.

__exit__ срабатывает в момент выхода из блока, в т.ч. и по причине исключения. В этом случае в метод будет передана тройка значений (exc_class, exc_instance, traceback).

Самый распространённый контекстный менеджер – класс, порожденный функцией open. Он гарантирует, что файл будет закрыт даже в том случае, если внутри блока возникнет ошибка.

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

with open('file.txt') as f:
    data = f.read()
process_data(data)

Пример реализации своего контекстного менеджера на основе класса:

class Printable:
    def \_\_enter\_\_(self):
        print('enter')

    def \_\_exit\_\_(self, type, value, traceback):
        print('exit')

Пример реализации своего контекстного менеджера с использованием встроенной библиотеки contextlib

from contextlib import contextmanager

@contextmanager
def printable():
    print('enter')
    try:
      yield
    finally:
      print('exit')

Контекстные менеджеры также можно использовать для временной замены параметров, переменных окружения, транзакций БД.

66
Q

Как работают dict comprehension, list comprehension и set comprehension?

Python

A

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

Синтаксис list comprehension выглядит следующим образом:

[выражение for элемент in последовательность if условие]
или в расширенной форме:

[выражение for элемент in последовательность]
где:

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

Примеры использования list comprehension:

  1. Создание списка квадратов чисел от 0 до 9:
    squares = [x**2 for x in range(10)]
  2. Фильтрация списка, оставляя только четные числа:
    even_numbers = [x for x in range(10) if x % 2 == 0]
  3. Преобразование списка строк в список их длин:
    strings = ["apple", "banana", "orange"]
    lengths = [len(s) for s in strings]

List comprehension делает код более кратким и выразительным, особенно для простых преобразований и фильтраций данных. Однако не следует злоупотреблять им, чтобы избежать снижения читаемости кода.

67
Q

Можно ли использовать несколько декораторов для одной функции?

Python

A

Да, в Python можно применять несколько декораторов к одной функции.

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

68
Q

Что такое lambda-функции?

Python

A

это анонимные функции, которые могут быть созданы и использованы в одной строке кода.. Они не резервируют имени в пространстве имен.

Лямбды часто передают в функции map, reduce, filter.

Лямбды в Питоне могут состоять только из одного выражения. Используя синтаксис скобок, можно оформить тело лямбды в несколько строк.

Использовать точку с запятой для разделения операторов нельзя.

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

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

double = lambda x: x*2
print(double(5)) # 10

Кейсы использования

В Python мы часто используем их как аргумент функции высшего порядка (функции, которая принимает другие функции в качестве аргументов). Лямбда-функции используют вместе с такими встроенными функциями как filter(), map(),reduce()и др.

my_list = [1, 3, 4, 6, 10, 11, 15, 12, 14]
new_list = list(filter(lambda x: (x%2 == 0) , my_list))
print(new_list) # [4, 6, 10, 12, 14]

Пример с filter()
~~~
current_list = [1, 3, 4, 6, 10, 11, 15, 12, 14]
new_list = list(map(lambda x: x*2 , current_list))
print(new_list) # [2, 6, 8, 12, 20, 22, 30, 24, 28]
~~~
Пример с map()
~~~
from functools import reduce

current_list = [5, 15, 20, 30, 50, 55, 75, 60, 70]
summa = reduce((lambda x, y: x + y), current_list)
print(summa) # 380
~~~
Пример с reduce()
~~~
max_number = lambda a, b: a if a > b else b
print(max_number(3, 5)) # 5
~~~
Лямбда и условные операторы

68
Q

Можно ли создать декоратор из класса?

Python

A

Да, в Python можно создавать декораторы из класса. Для этого класс должен определить методы \_\_init\_\_ (конструктор) и \_\_call\_\_, который будет вызван при применении декоратора к функции.

69
Q

Какие есть основные популярные пакеты (requests, pytest, etc)?

Python

A
70
Q

Что такое exceptions, <try-except>?

Python

A

Обработка исключений. Пробуем выполнить какой-то код, если он выполняется успешно, то после finally продолжаем идти по программе. Если получили исключение, то обрабатываем его в except.

71
Q

Что такое PEP (Python Enhancement Proposal), какие из них знаете (PEP 8, PEP 484)?

Python

A

PEP - Python Enhancement Proposals - база всех предложений как улучшить Python и что изменить.
PEP8 - руководство по написанию кода на Python.

72
Q

Какие есть типы данных и какая разница между list и tuple, зачем они?

Python

A

Изменяемые (mutable)

  • списки (list)
  • словари (dict)
  • множества (set)
  • байтовые массивы (byte array)

Не изменяемые (immutable)

  • кортежи (tuple)
  • диапазон (range)
  • числа (int, float, complex, long)
  • строки (str)
  • булево выражение (bool)
  • NoneType
  • frozenset
  • байты (byte)

https://easyoffer.ru/question/779

73
Q

Как использовать встроенные коллекции (list, set, dictionary)?

Python

A
  1. List (список):
    - Создание списка: mylist = [1, 2, 3, 4, 5]
    - Добавление элемента в конец списка: mylist.append(6)
    - Получение элемента по индексу: print(mylist[2])
    - Изменение элемента по индексу: mylist0 = 10
    - Удаление элемента по значению: mylist.remove(3)
  2. Set (множество):
    - Создание множества: myset = {1, 2, 3, 4, 5}
    - Добавление элемента в множество: myset.add(6)
    - Проверка наличия элемента в множестве: print(3 in myset)
    - Удаление элемента из множества: myset.remove(4)
  3. Dictionary (словарь):
    - Создание словаря: mydict = {‘a’: 1, ‘b’: 2, ‘c’: 3}
    - Получение значения по ключу: print(mydict[‘b’])
    - Добавление новой пары ключ-значение: mydict’d’ = 4
    - Изменение значения по ключу: mydict[‘a’] = 10
    - Удаление элемента по ключу: del mydict’c’
74
Q

Как создается объект в Python, для чего new, зачем init?

Python

A

Объект создается с помощью конструктора класса. Конструктор - это метод с именем __init__, который вызывается при создании нового объекта класса.

При создании объекта в Python происходят следующие шаги:
1. Вызывается метод __new__ класса (метод создания объекта). Этот метод создает новый объект и возвращает его экземпляр.
2. Затем вызывается метод __init__ класса (инициализатор). Этот метод инициализирует новый объект, принимая на вход аргументы, которые передаются при создании объекта.

74
Q

В чем заключается сложность доступа к элементам dict?

Python

A

Dict - это набор пар ключ+значение. Доступ к значению происходит через указание ключа.

Доступ к ключам происходит через метод .key() и их перебор через for loop.

thisdict = {
  "brand": "Ford",
  "model": "Mustang",
  "year": 1964
}

thisdict["brand"]

75
Q

Для чего используют системы контроля версий?

Git

A
  • История изменений
  • Откат изменений
  • Отслеживание авторов изменений
  • Управление параллельными изменениями

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

https://stepik.org/lesson/1036769/step/4?auth=login&unit=1045254

76
Q

Что такое Git?
Каков принцип его работы?

Git

A

Git - это распределенная система управления версиями, которая предназначена для отслеживания изменений в исходном коде программного обеспечения и координации работы нескольких разработчиков над проектом. Эта система разработана Линусом Торвальдсом в 2005 году и с тех пор стала одним из самых популярных инструментов разработки программного обеспечения.

Основные функции:

  1. Отслеживание изменений: Отслеживает изменения в исходном коде проекта, включая добавление, удаление и изменение файлов. Каждое изменение сохраняется в репозитории в виде коммита.
  2. Ветвление и слияние: Поддерживает ветвление, что позволяет разработчикам создавать отдельные ветки для работы над определенными функциями или задачами. После завершения работы ветки могут быть объединены обратно в основную ветку (мастер).
  3. Распределенная система: Каждый разработчик работает с полной копией репозитория, что делает его распределенной системой управления версиями. Это означает, что разработчики могут работать независимо друг от друга и даже офлайн.
  4. История изменений: Сохраняет полную историю изменений проекта, включая комментарии к коммитам, авторов и временные метки изменений. Это обеспечивает прозрачность и возможность восстановления предыдущих состояний проекта.
  5. Совместная работа: Облегчает совместную работу нескольких разработчиков над проектом. Он позволяет им делиться изменениями через удаленные репозитории и обмениваться ветками и коммитами.
77
Q

Что такое commits, branches в Git?

Git

A

Git commit - фиксирует изменения локальных файлов в таймлайне репозитория.
Git branch - управляет ветками (создание, переключение, переименование, удаление)

Git commit - фиксирует изменения локальных файлов в таймлайне репозитория. Другими словами делает “моментальный снимок” репозитория в данный момент времени, который и является версией.

Команда git commit фиксирует изменения, добавленные в индекс (staging area), в истории репозитория.
Статусы файлов в Git:
* Untracked: Файлы новые, не отслеживаемые Git’ом. Появляются в репозитории, но не добавлены в индекс с помощью git add.
* Modified: Файлы изменены в рабочем каталоге, но еще не добавлены в индекс.
* Staged: Измененные файлы добавлены в индекс и готовы к коммиту.
* Committed: Изменения в файлах зафиксированы в истории репозитория.

Git branch

Команда git branch используется для управления ветками в Git.

Создание ветки:

Чтобы создать новую ветку:
* Команда: git branch [branch-name]
* Пример: git branch feature_x

Переключение веток:

Чтобы переключиться на другую ветку:
* Команда: git checkout [branch-name]
* Пример: git checkout feature_x

Удаление ветки:

Чтобы удалить ветку:
* Команда: git branch -d [branch-name] (безопасное удаление, удаляет только смерженные ветки)
* Команда: git branch -D [branch-name] (принудительное удаление, используется для удаления несмерженных веток)
* Пример: git branch -d feature_x

Переименование ветки:

Чтобы переименовать ветку:
Команда: git branch -m [old-branch-name] [new-branch-name]
Пример: git branch -m feature_x feature_y

78
Q

Для чего нужны GitHub, GitLab и т.д.?

Git

A

Репозиторий — это хранилище данных, содержащее все файлы проекта и их историю изменений. Репозитории могут существовать локально на компьютере разработчика или удаленно, например, на таких сервисах, как GitHub, GitLab или Bitbucket.

https://stepik.org/lesson/1036769/step/4?auth=login&unit=1045254

79
Q

Что такое CI?

CI

A
  1. Слияние
  2. Компиляция
  3. Упаковка в docker
  4. Автотесты

Continuous integration (непрерывная интеграция) - все изменения, вносимые в код, объединяются в центральном репозитории (операция называется «слияние»). Слияние происходит несколько раз в день, и после каждого слияния в конкретном проекте срабатывает автоматическая сборка и тестирование.

Бывает, что перед сборкой и тестированием программу требуется скомпилировать (это зависит от языка, на котором она написана). Сегодня все чаще возникает необходимость упаковать приложение в контейнер Docker. Затем автоматические тесты проверяют конкретные модули кода, работу UI, производительность приложения, надежность API и пр. Все эти этапы в совокупности обычно называют «сборкой».

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

https://easyoffer.ru/question/171

80
Q

Как интегрируется автоматическое тестирование в CI?

CI

A

После слияния и подготовки приложения - происходит автоматическое тестирование.

81
Q

Как настроить Job или Pipeline на знакомом вам CI-инструменте?

CI

A

Jenkins:

  1. Создание нового job или pipeline:
    • Зайдите в Jenkins и выберите “New Item” или “New Pipeline”, в зависимости от того, какой тип задачи вы хотите создать.
    • Укажите название задачи и выберите тип сборки, например, Freestyle project для job или Pipeline для pipeline.
  2. Конфигурация и настройка задачи:
    • Настройте параметры задачи, такие как исходный код, настройки сборки, тестирования, и т. д.
    • Добавьте сценарии build steps для выполнения определенных действий в рамках задачи, такие как компиляция, тестирование или развертывание.
  3. Настройка SCM (Source Control Management) и сборки:
    • Настройте подключение к системе контроля версий (например, Git, SVN) для получения исходного кода.
    • Настройте параметры сборки, определяющие, каким образом Jenkins будет собирать, компилировать и тестировать ваш код.
  4. Добавление пост-сборочных действий:
    • Добавьте пост-сборочные действия, такие как отправка уведомлений, архивирование результатов сборки или перенаправление на другие действия.
  5. Настройка триггеров:
    • Настройте триггеры, определяющие условия запуска задачи, например, по расписанию, при изменении код
    • Или при появлении нового коммита в системе контроля версий.
  6. Настройка параметров и переменных:
    • Добавьте параметры или переменные для задачи, например, для передачи значений или настроек во время выполнения job или pipeline.
  7. Сохранение и запуск задачи:
    • Сохраните настройки задачи или pipeline.
    • Запустите задачу вручную для проверки корректности настроек и выполнения действий.
  8. Мониторинг и анализ результатов:
    • Мониторьте выполнение задачи в Jenkins Console Output для отслеживания процесса сборки.
    • Анализируйте результаты сборки, журнал сборки и отчеты о тестировании для выявления ошибок или проблем.

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

81
Q

Какие инструменты для создания репорта после выполнения автоматических тестов вы знаете?

CI

A
  1. Allure Reports
  2. Extent Reports
  3. Report Portal
  4. TestNG
82
Q

Какую информацию должен содержать отчет о выполнении автоматических тестов?

CI

A
  1. Сводка результатов:
    • Общее количество выполненных тестов.
    • Количество пройденных, проваленных и пропущенных тестов.
  2. Детализация по каждому тесту:
    • Название теста.
    • Статус теста (пройден, провален, пропущен).
    • Логи ошибок или сообщения об исключениях (если есть).
    • Время выполнения теста.
    • Скриншоты экрана в случае провала теста.
  3. Трассировка стека и логи:
    • Информация о вызовах методов и трассировке стека для проваленных тестов.
    • Логи и вывод, сгенерированные в процессе выполнения тестов.
  4. Информация о конфигурации:
    • Используемая версия программного обеспечения.
    • Используемая версия тестового фреймворка.
    • Конфигурационные параметры тестового запуска.
  5. Описание тестового окружения:
    • Информация об используемых устройствах или эмуляторах.
    • Версия операционной системы.
    • Информация о браузерах или приложениях, если тестирование происходит на веб-платформе
  6. Общая статистика:
    • Процентное соотношение успешно пройденных тестов.
  7. Тренды выполнения:
    • Графики и диаграммы, показывающие изменения в результате выполнения тестов с течением времени.
  8. Резюме и выводы:
    • Общий анализ результатов тестирования.
    • Основные проблемы или ошибки, выявленные во время выполнения тестов.
    • Рекомендации по улучшению качества программного продукта.
  9. Метрики тестирования:
    • Метрики покрытия тестами (например, покрытие кода).
    • Затраты времени на выполнение тестов.
    • Количество и динамика проваленных и успешно пройденных тестов.
  10. Описание окружения тестирования:
    - Информация о тестовых платформах, устройствах и конфигурациях, которые использовались для выполнения тестов.
  11. Возможность фильтрации и поиска:
    - Возможность быстрого поиска необходимой информации в отчете с использованием фильтров или ключевых слов.

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

82
Q

Что такое клиент-серверная архитектура?

Интернет

A

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

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

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

Как работает данная модель простыми словами?

  1. Клиент (браузер, мобильное приложение) отправляет HTTP-запрос к серверу. Пользователь ввел запрос в поисковую строку интернет-магазина
  2. Сервер обрабатывает запрос и присылает HTTP-ответ клиенту. Сервер магазина обработал запрос и обратился к базе данных в поиске искомого товара (см. шаг 3). После этого сервер вернул массив карточек товаров в ответе и пользователь увидел их на клиенте (в браузере).
  3. Если необходимо получить данные, которые сохраняются в базе данных, то сервер обращается к базе и получает ответ от нее. Сервер базы данных обработал запрос и выдал серверу идентификаторы товаров, которые подходят поисковому запросу.

Основные характеристики:

  • Разделение функций: Отвечает за представление данных пользователю и взаимодействие с пользователем, в то время как сервер занимается обработкой данных, управлением ресурсами и выполнением задач.
  • Централизованное управление: Данные и управляющая логика часто централизованы на сервере, что облегчает обновление, обслуживание и управление безопасностью.
  • Масштабируемость: Архитектура позволяет легко добавлять, обновлять и масштабировать серверные ресурсы в ответ на изменяющиеся требования без необходимости изменения клиентской части.
  • Гибкость: Могут взаимодействовать с различными серверами, а сервера могут обслуживать различных клиентов, что обеспечивает высокую степень гибкости и повторное использование компонентов.

Компоненты:

  • Клиент (Client): Приложение или устройство, используемое пользователем для доступа к сервисам и ресурсам сервера. Клиенты инициируют запросы к серверам.
  • Сервер (Server)^ Мощная система или программное обеспечение, обрабатывающее запросы клиентов, выполняет обработку данных, управляет ресурсами (например, базами данных) и предоставляет различные сервисы.
  • Сеть (Network): Среда передачи данных, которая соединяет клиентов и серверы, обычно через Интернет или локальную сеть (LAN).

Типы клиент-серверных архитектур:

  • Одноуровневая (1-Tier): Клиент и сервер находятся на одной машине, и нет сетевого взаимодействия.
  • Двухуровневая (2-Tier): Прямое взаимодействие между клиентом и сервером, например, клиентское приложение взаимодействует напрямую с базой данных на сервере.
  • Трёхуровневая (3-Tier): Включает промежуточный уровень, например, приложение сервера, которое действует как посредник между клиентом и сервером базы данных, облегчая процесс обработки запросов.
  • Многоуровневая (N-Tier): Более сложная структура с несколькими уровнями, которые могут включать балансировщики нагрузки, сервера приложений, сервера баз данных, сервера кэширования и т.д.

Клиент-серверная архитектура остаётся основным выбором для разработки современных приложений благодаря своей гибкости, масштабируемости и эффективности в управлении ресурсами и обработке данных.

https://easyoffer.ru/question/7886
https://stepik.org/lesson/1036752/step/4?auth=login&unit=1045237

82
Q

Что может выступать в качестве клиента?

Интернет

A
  • Браузер
  • Десктопное приложение
  • Мобильное приложение
83
Q

Что такое REST API, SOAP?
В чем разница?

Интернет

A

REST — это архитектурный стиль. SOAP — это протокол обмена сообщениями.

SOAP (Simple Object Access Protocol) - это протокол обмена данными, основанный на XML, который используется для передачи сообщений между приложениями. Он более строгий и более сложный для использования, чем REST.

REST (Representational State Transfer) - это архитектурный стиль взаимодействия в сети, основанный на простоте и удобстве использования. REST использует стандартные методы HTTP для взаимодействия с ресурсами, такими как GET, POST, PUT и DELETE.

Основные различия между REST и SOAP:

  1. SOAP использует XML для передачи сообщений, в то время как REST может использовать различные форматы, такие как JSON, XML, HTML и другие.
  2. SOAP обладает строгой иерархией запросов и ответов, в то время как REST позволяет более гибкое взаимодействие.
  3. REST использует стандартные методы HTTP для работы с ресурсами, в то время как SOAP может использовать любой протокол передачи данных.
  4. SOAP обладает большим набором стандартов и спецификаций, в то время как REST более прост и легок для использования.

REST (Representational State Transfer) и SOAP (Simple Object Access Protocol) — это два различных подхода к организации взаимодействия между компьютерными системами в сети, чаще всего используемые для разработки веб-сервисов. Они имеют ряд ключевых отличий, которые влияют на выбор технологии в зависимости от требований к проекту.

Основные различия:

Протокол

  • SOAP является строго определённым протоколом с чёткими стандартами, основанным на XML для обмена сообщениями между системами.
  • REST — это архитектурный стиль, а не протокол. Он использует стандартные HTTP-методы и может использовать XML, JSON или другие форматы для передачи данных.

Сообщения

  • SOAP использует сложную структуру сообщений, которые могут включать информацию о безопасности, транзакциях и других данных в заголовках сообщений.
  • REST обычно использует более простые и читаемые форматы сообщений. RESTful веб-сервисы обращаются к ресурсам, используя URL и методы HTTP (GET, POST, PUT, DELETE).

Безопасность

  • SOAP имеет встроенные стандарты безопасности (WS-Security), которые обеспечивают более высокий уровень контроля над безопасностью.
  • REST полагается на стандартные методы безопасности HTTP, такие как HTTPS, аутентификация OAuth и токены JWT.

Транзакции

  • SOAP поддерживает сложные операции и транзакции через стандарты, такие как WS-AtomicTransaction.
  • REST не имеет встроенной поддержки транзакций, но транзакции могут быть реализованы на уровне приложения.

Кэширование

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

SOAP часто используется в корпоративных и финансовых приложениях, где требуется высокий уровень безопасности и надёжность, а также поддержка транзакций.

REST широко применяется для создания веб-сервисов и API из-за его простоты, лёгкости интеграции и эффективности работы с вебом.

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

https://easyoffer.ru/question/7914

84
Q

Какие протоколы передачи данных знаете?

Интернет

A
  • IP
  • TCP
  • UDP
  • DNS
  • HTTP
  • SSH
  • FTP
  • SSL/TLS
  • WebSockets

Internet Protocol — IP
IP отвечает за поиск компьютеров в сети по их IP-адресам. Ещё он предоставляет стратегию маршрутизации, то есть составляет оптимальный маршрут для передачи данных.

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

Работу IP можно сравнить с почтовым отделением: протокол направляет IP-пакеты по интернету так же, как почта рассылает письма по всему миру. При доставке почта использует пункты передачи: письмо из отделения сначала попадает на поезд, потом на грузовик и в конце вручается адресату. В интернете тоже есть «пункты передачи» — их называют маршрутизаторами. Цель маршрутизатора — отправить пакет в пункт назначения по самому короткому пути. Если всё идёт хорошо, пакет прибывает на ближайший к получателю маршрутизатор, который точно знает, куда его отправить. Но бывает и так, что какой-то из маршрутизаторов на пути взломан или вышел из строя, и тогда выбирается другой путь.

DNS

Уникальный IP-адрес есть у каждого домена. Он записывается в виде четырёх чисел от нуля до 255 — например, 74.125.20.113.

DNS связывает IP-адрес с понятным для людей доменным именем, например, 178.79.181.169 превращается в htmlacademy.ru

Принцип работы DNS похож на поиск и вызов контактов в телефоне. Вряд ли кто-то помнит 1317а друзей — да это и необязательно, ведь они хранятся в списке контактов. Когда мы хотим кому-то позвонить, то просто находим нужное имя и нажимаем кнопку вызова — в этот момент начинается соединение, но не по имени, а по 1317у телефона.

DNS-сервер — это и есть «список всех контактов», то есть IP-адресов, которые там хранятся. Каждому IP-адресу присвоен домен. И когда мы вводим в строке браузера имя домена, то происходит запрос к DNS-серверу — запрашивается IP-адрес.

SSL/TLS

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

TCP и UDP

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

HTTP и HTTPS

HTTP и HTTPS предназначены для передачи данных и в итоге пользователи могут просматривать веб-страницы. На самом деле HTTPS — это не отдельный протокол, а расширение HTTP. Он безопаснее, так как использует SSL/TLS для шифрования обычных запросов и ответов.

HTTP

HTTP — один из самых используемых протоколов в интернете, поэтому посмотрим подробнее, как он работает.

Протокол работает в формате запрос-ответ с двумя участниками общения:

клиент — формирует запросы и обрабатывает ответы;
сервер — обрабатывает запросы и формирует ответы.
Клиент делает запрос на сервер для передачи каждого ресурса: файлов HTML, CSS, JavaScript, изображений или видеофайлов. Затем сервер отвечает на запрос, отправляя ресурс.

Для каждого запроса и ответа открывается своё TCP-соединение. При каждом соединении происходит трёхстороннее «рукопожатие»: клиент и сервер трижды обмениваются пустыми пакетами данных, чтобы удостовериться в существовании друг друга и готовности к работе с данными.

Трёхстороннее «рукопожатие» нужно проводить в каждом TCP-соединении, так как HTTP не запоминает состояния, поэтому ни клиент, ни сервер не могут сохранять информацию между различными запросами. HTTP — один из самых ранних протоколов, и при его создании никто не ожидал, что на веб-странице придётся загружать так много ресурсов.

Такое «рукопожатие» делает загрузку страницы медленнее. Чтобы решить проблему, разработчикам приходится сокращать количество загружаемых ресурсов, например, использовать спрайты или разделять файлы по разным доменам — этот метод называется domain sharding. Такие манипуляции уменьшают количество TCP-соединений, хотя и создают свои трудности.

HTTP/2

HTTP/2 — улучшенная версия HTTP. По данным Can I Use, его поддерживают большинство браузеров.

Главное нововведение этого протокола — одно TCP-соединение на разные запросы, или мультиплексирование.

Ещё в HTTP/2 появился push-сервер, то есть сервер может отправлять больше ответов на один клиентский запрос. Например, если клиент запрашивает файлы index.html, style.css и logo.svg, то сервер отправит сразу три файла. Без push-сервера клиенту нужно запрашивать каждый файл отдельно

Поэтому многие оптимизации под HTTP при переходе на HTTP/2 уже не нужны. Например, можно отказаться от разделения ресурсов по доменам.

HTTP/3

HTTP/3 — третья версия HTTP, основанная на QUIC — протоколе, который предполагает быстрое подключение к интернету через UDP.

Главное преимущество HTTP/3 — сокращение задержки при установке соединения. QUIC достаточно одного «рукопожатия», чтобы установить безопасный сеанс. А ещё HTTP/3 работает поверх UDP, поэтому скорость доставки данных быстрее, чем у HTTP и HTTP/2 поверх TCP.

Протокол уже получил статус предложенного стандарта, то есть браузеры почти завершили работу над поддержкой протокола. Но пока поддержки недостаточно, чтобы переводить сайт с HTTP/2 на HTTP/3.

WebSockets

В этом протоколе соединение устанавливается гораздо быстрее, чем в HTTP — здесь отправляется «рукопожатие» сразу со всей необходимой информацией для передачи данных. Канал при этом остаётся открытым, пока кто-то из сторон не прервёт его. Это означает, что запросы и ответы будут происходить практически мгновенно. А если сервер получит новые данные, он отправит их клиенту без запроса.

Протокол WebSockets используют там, где важна скорость доставки данных, например, в чатах и мессенджерах, играх, онлайн-трансляциях. Он, скорее всего, не пригодится при разработке простых веб-приложений, небольших CMS или при использовании REST API, где достаточно HTTP-запросов GET, POST, PUT и DELETE.

https://htmlacademy.ru/blog/soft/protocol

85
Q

Какие методы взаимодействия с API существуют?
В чем разница между ними?

Интернет

A
  • GET
  • POST
  • PUT
  • DELETE
  • PATCH

Основные методы HTTP, которые широко используются при взаимодействии с веб-серверами, включают следующие:

  1. GET: Запрашивает представление ресурса. GET-запросы обычно используются для получения данных от сервера. Они могут быть кэшированы и остаются в истории браузера. Они ограничены в размере.
  2. POST: Отправляет данные для обработки на сервере. POST-запросы часто используются для отправки данных HTML-формы на сервер для обработки. Они не кэшируются и не остаются в истории браузера. Они могут отправлять большие объемы данных.
  3. PUT: Загружает содержимое запроса на указанный URI. Если ресурс существует, он перезаписывается. Если ресурс не существует, сервер может создать его с использованием предоставленных данных.
  4. DELETE: Удаляет указанный ресурс.
  5. PATCH: Применяет частичные модификации к ресурсу. Обычно используется для обновления ресурса с частичными данными.
  6. HEAD: Запрашивает заголовки, которые будут возвращены, как если бы был сделан запрос GET, но без тела ответа.
  7. OPTIONS: Используется для запроса возможностей и параметров коммуникации для указанного ресурса.
  8. TRACE: Используется для тестирования соединения по маршруту к ресурсу. Он выполняет циклический обход маршрутизации, который включает в себя передачу запроса через все узлы маршрута.

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

https://easyoffer.ru/question/687

86
Q

Как можно протестировать API, что там нужно проверять?

Интернет

A

Через отправку запросов по соответствующему протоколу (REST, SOAP).

  • Код ответа
  • Корректность ответа
  • Сверка ответа со схемой
86
Q

Как расшифровывается CRUD?

Интернет

A
  • Create
  • Read
  • Update
  • Delete

Терамин обозначающий четыре базовые функции: создание (create), чтение (read), редактирование (update) и удаление (delete). Как правило, термин “CRUD” употребляется в контексте работы с хранилищем данных.

87
Q

Чем отличается GET от POST?

Интернет

A

GET для получения данных
POST используется для обновления, отправляет данные в теле запроса

87
Q

Какие отличия между XML и JSON?

Интернет

A

JSON и XML – это представления данных, используемые при обмене данными между приложениями. JSON – это открытый формат обмена данными, который могут читать как люди, так и машины. JSON не зависит ни от какого языка программирования и является общим API, используемым в самых разных приложениях. XML – это язык разметки, в котором есть правила для определения любых данных. Он использует теги для разделения атрибутов данных и фактических данных. Хотя оба формата используются для обмена данными, JSON – новый, более гибкий и популярный вариант.

Хотя JSON и XML служат схожим целям, у них есть основные отличия. Понимание этих различий поможет вам решить, что более полезно для вашего варианта использования.

История
Рабочая группа по XML разработала XML в 1996 году и выпустила первую версию в 1998 году. Они получили XML из стандартного языка обобщенной разметки (SGML). После внедрения HTML в 1998 году они разработали XML в качестве инструмента сериализации данных.

Дуглас Крокфорд и Чип Морнингстар презентовали JSON в 2001 году. Они создали JSON из JavaScript.

Формат
JSON использует пары «ключ-значение», чтобы создать картоподобную структуру. Ключ – это строка, которая будет идентифицировать пару. Значение – информация, которую вы передаете этому ключу. Например, у нас может быть пара “NumberProperty”: 10. В ней “NumberProperty” является ключом, а 10 – значением.

Напротив, XML – это язык разметки – подмножество SGML со структурой, аналогичной HTML. Он хранит данные в виде древовидной структуры со слоями информации, которую вы можете отслеживать и читать. Дерево начинается с корневого (родительского) элемента, а затем содержит информацию о дочерних элементах. Эта обширная структура полезна для загрузки множества переменных и динамических конфигураций.

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

Язык XML более сложен и заменяет ссылки на сущности определенными символами. Например, вместо символа < в XML используется ссылка на объект &it;. XML также использует конечные теги, что делает его код длиннее, чем код JSON.

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

Вы можете анализировать JSON с помощью стандартной функции JavaScript, которая более доступна. Из-за различий в синтаксисе и размере файлов вы также можете анализировать JSON быстрее, чем XML.

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

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

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

Поддержка типов данных
JSON поддерживает только ограниченный диапазон типов данных, таких как строки, числа и объекты. JSON также может поддерживать логические массивы, что XML не может сделать без добавления дополнительных тегов.

Однако XML более гибкий и поддерживает сложные типы данных, такие как двоичные данные и временные метки.

Простота использования
Как язык разметки, XML более сложен и требует использования структуры тегов.

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

Безопасность
Синтаксический анализ JSON безопаснее, чем XML.

Структура XML подвержена несанкционированным изменениям, что создает угрозу безопасности, известную как внедрение внешних объектов XML (XXE). Она также уязвима к неструктурированному внешнему объявлению типов документов (DTD). Вы можете предотвратить обе эти проблемы, отключив функцию DTD при передаче.

https://aws.amazon.com/ru/compare/the-difference-between-json-xml/#:~:text=XML%20%D1%81%D0%BB%D0%BE%D0%B6%D0%BD%D0%B5%D0%B5%20%D0%B8%20%D0%BC%D0%B5%D0%BD%D0%B5%D0%B5%20%D0%B3%D0%B8%D0%B1%D0%BA%D0%B8%D0%B9.&text=JSON%20%D0%BF%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D0%B2%D0%B0%D0%B5%D1%82%20%D1%87%D0%B8%D1%81%D0%BB%D0%B0%2C%20%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B%2C%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8,%D0%B4%D0%B0%D1%82%D1%8B%2C%20%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%B8%20%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%82%D0%B2%D0%B0%20%D0%B8%D0%BC%D0%B5%D0%BD.&text=JSON%20%D0%B8%D0%BC%D0%B5%D0%B5%D1%82%20%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B8%D0%B9%20%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%20%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%20%D0%B8%20%D0%BE%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%87%D0%B8%D0%B2%D0%B0%D0%B5%D1%82%20%D0%B1%D0%BE%D0%BB%D0%B5%D0%B5%20%D0%B1%D1%8B%D1%81%D1%82%D1%80%D1%83%D1%8E%20%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D1%83%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85.

88
Q

Какие форматы передачи данных?

Интернет

A

JSON и XML

89
Q

Как происходит шифрование? Или как шифруются сообщения между браузером и сервером?

Интернет

A

Суть: По криптографическому алгоритму Диффи-Хеллмана. При заходе на сайт по HTTPS браузер и сервер обмениваются ключами при помощи этого алгоритма. Эти ключи затем используются для шифрования и расшифрования передаваемой между браузером и сервером информации.

В алгоритме Диффи-Хеллмана информация шифруется открытыми ключами и расшифровывается закрытыми.

Это происходит благодаря алгоритму Диффи-Хеллмана — это криптографический протокол, который используется для безопасного обмена секретными ключами между двумя устройствами.

В контексте работы браузера, Диффи-Хеллман используется для защиты соединения между клиентом (браузером) и сервером.

Когда вы заходите на защищенный сайт (по протоколу HTTPS), ваш браузер и сервер обмениваются ключами с помощью алгоритма Диффи-Хеллмана. Эти ключи затем используются для шифрования и расшифрования передаваемой между браузером и сервером информации.

Пример применения алгоритма Диффи-Хеллмана можно представить себе так:

  • Браузер и сервер обмениваются открытыми ключами (это числа, которые все знают).
  • Браузер и сервер генерируют случайные числа (они не обязательно секретны).
  • Браузер шифрует свое случайное число с помощью открытого ключа сервера, и отправляет результат серверу.
  • Сервер расшифровывает это число с помощью своего секретного ключа, и делает то же самое со своим случайным числом.
  • Браузер и сервер обмениваются результатами. Они могут использовать эти числа для создания общего секретного ключа, который будет использоваться для шифрования и расшифрования передаваемой информации.

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

В алгоритме Диффи-Хеллмана информация шифруется открытыми ключами и расшифровывается закрытыми.

https://easyoffer.ru/question/9574

89
Q

Какие виды баз данных?

A
  • Иерархическая БД – это БД, в которых организована древовидная структура (напр. файловая система ПК).
  • Сетевые БД – это БД связи, которые представлены графами и узлами (напр. система бронирования авиабилетов).
  • Объектно-ориентированные БД – это БД, в которых данные представлены в виде объектов с атрибутами и методами (напр. система управления контентом).
  • Реляционные БД – это БД, данные в которых организованны в таблицы со строками и столбцами.
  • NoSQL БД – это БД которые не используют табличную модель хранения, а используют, например, json или xml форматы.

https://easyoffer.ru/question/7853

90
Q

Охарактеризуйте каждый класс status code (1хх; 2xx; 3xx; 4xx; 5xx).

A
  • 1xx: Информационные
  • 2xx: Успешные
  • 3xx: Перенаправления
  • 4xx: Ошибки клиента
  • 5xx: Ошибки сервера

1xx: Информационные

  • 100 Continue: Промежуточный ответ, указывающий, что начальная часть запроса принята и клиент может продолжать отправку данных.
  • 101 Switching Protocols: Сервер соглашается переключить протоколы в соответствии с запросом клиента, отправленным в заголовке Upgrade.

2xx: Успешные

  • 200 OK: Стандартный ответ для успешных HTTP-запросов. Ресурс успешно обработан и передан в теле ответа.
  • 201 Created: Запрос был успешно выполнен, и в результате был создан новый ресурс.
  • 204 No Content: Запрос успешно обработан, но в ответе нет содержимого.

3xx: Перенаправления

  • 301 Moved Permanently: Запрашиваемый ресурс был окончательно перемещен на URL, указанный в заголовке Location. Клиент должен использовать этот новый URL в будущем.
  • 302 Found: Запрашиваемый ресурс временно находится по другому URI, указанному в заголовке Location.
  • 304 Not Modified: Ресурс не был изменен с момента последнего запроса клиента, использующего условные заголовки типа If-Modified-Since или If-None-Match.

4xx: Ошибки клиента

  • 400 Bad Request: Сервер не может обработать запрос из-за неверного синтаксиса.
  • 401 Unauthorized: Для доступа к запрашиваемому ресурсу требуется аутентификация.
  • 403 Forbidden: Сервер понял запрос, но отказывается его авторизовать.
  • 404 Not Found: Запрашиваемый ресурс не найден на сервере.
  • 405 Method Not Allowed: Метод, указанный в запросе, не поддерживается для данного ресурса.

5xx: Ошибки сервера

  • 500 Internal Server Error: Общая ошибка сервера, когда сервер сталкивается с непредвиденными обстоятельствами.
  • 501 Not Implemented: Сервер не поддерживает функциональные возможности, необходимые для обработки запроса.
  • 502 Bad Gateway: Сервер, выступая в роли шлюза или прокси, получил неверный ответ от вышестоящего сервера.
  • 503 Service Unavailable: Сервер временно не может обработать запрос из-за перегрузки или технического обслуживания.
  • 504 Gateway Timeout: Шлюз или прокси-сервер не получил вовремя ответ от вышестоящего сервера для завершения запроса.

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

90
Q

Какие HTTP-методы?

A

HTTP (HyperText Transfer Protocol) определяет набор методов запросов, которые указывают действие, требуемое для ресурса. Каждый из этих методов исполняет определённую операцию и предназначен для выполнения конкретных задач в контексте веб-коммуникаций. Вот наиболее часто используемые методы:

  1. GET
    Используется для запроса данных от указанного ресурса. Данный метод запрашивает представление ресурса и должен только извлекать данные, не влияя на них.
  2. POST
    Применяется для отправки данных на сервер для создания нового ресурса. Часто используется при заполнении форм на веб-сайтах.
  3. PUT
    Используется для обновления существующего ресурса или создания нового по указанному URI. В отличие от POST, он является идемпотентным, что означает, что повторение одного и того же запроса PUT несколько раз не приведёт к разным результатам.
  4. DELETE
    Предназначен для удаления указанного ресурса.
  5. HEAD
    Аналогичен методу GET, но сервер в ответе возвращает только заголовки и статус код, без тела сообщения. Это полезно для извлечения метаданных.
  6. OPTIONS
    Используется для описания параметров связи с ресурсом. С помощью OPTIONS клиент может узнать, какие методы поддерживаются для ресурса.
  7. PATCH
    Применяется для частичного изменения ресурса. В отличие от PUT, который обновляет полностью весь ресурс, PATCH применяется для обновления только некоторых его частей.
  8. TRACE
    Выполняет тестовый цикл обратной передачи сообщения между клиентом и сервером. Этот метод полезен для диагностических целей, так как позволяет клиенту увидеть, что приходит обратно от сервера.
  9. CONNECT
    Используется для преобразования соединения запроса в прозрачный TCP/IP туннель, обычно для установления зашифрованного SSL соединения через нешифрованный HTTP прокси.

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

91
Q

Какие знаете Web elements?

A

What is Web Element?
Web page components such as:

  • text boxes,
  • checkboxes,
  • buttons,
  • drop-downs,
  • radio buttons,
  • web forms, etc.

are called web elements. These can be identified by attributes like id, classname, name, or XPath.

https://testsigma.com/blog/web-element-in-selenium/#What_is_Web_Element

92
Q

Зачем необходимы инструменты разработчика в браузере (Chrome DevTools) и как они помогают в тестировании.

A

Это набор инструментов, встроенных в браузер Google Chrome, для создания и отладки сайтов. С их помощью можно просматривать исходный код сайта, отлаживать работу frontend: HTML, CSS и JavaScript. Также DevTools позволяет проверять сетевой трафик, быстродействие сайта и многое другое.

  • F12, Ctrl+Shift+I, View Page Code, Inspect
  • Используется для разработки, тестирования, отладки
  • Вкладки:
    • Elements -HTML
    • Console - информация о фронтовых ошибках
    • Sources - файлы и откуда они получены
    • Network - запросы
      • XHR - основные запросы
    • Perfomance
    • Security

https://easyoffer.ru/question/9488

92
Q

Какие браузеры знаете?
В чем их отличие?

A

Chrome & chromium based, Firefox, Safari, Edge

93
Q

Что такое кэш?

A

Кэш — это уже полученные данные и использованные один раз, а потом сохраненные на будущее.

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

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

https://easyoffer.ru/question/9087

94
Q

Что такое сессия?

A

Сессия (session) – это некоторый отрезок во времени, в пределах которого веб-приложение может определять все запросы от одного клиента.

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

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

https://alekseev74.ru/lessons/show/aspnet-mvc/session

95
Q

Зачем нужны cookies?

A

В них хранятся:

  • Данные для аутентификации.
  • Данные о пользователе, например, язык, валюта, что он смотрел?
  • Данные для сбора статистики.
96
Q

Что такое фрейм?

A

Фрейм (от англ. Frame) — это самостоятельный документ, который отображается в отдельном окне браузера и представляет собой полностью законченную HTML-страницу. Простыми словами, фрейм — разделитель браузерных окон на отдельные области.

В 2022 году фрейм как отдельный элемент HTML практически не используется на публичных сайтах и технологию можно назвать устаревшей. Этот тег даже не поддерживается в HTML5. Одна из главных причин — неудобство для поисковых систем, которые формируют выдачу на основе множества фреймов одного сайта, а не единичного.

https://kokoc.com/terminy/frame-html/

97
Q

Что такое HTML/CSS/JavaScript?

A

HTML (HyperText Markup Language) - язык разметки веб-страниц на основе тегов и атрибутов.
CSS (Cascading Style Sheets - язык для описания внешнего вида и форматирования документа.
JavaScript (JS) — это легковесный интерпретируемый язык программирования с функциями первого класса.

HTML

HTML (HyperText Markup Language) — это стандартизированный язык разметки, используемый для создания и оформления страниц на Всемирной паутине. Он определяет структуру и содержание веб-страницы с помощью так называемых тегов и атрибутов, позволяя встроить в текст страницы ссылки, изображения, видео, формы для ввода данных и другие элементы интерактивности.

Основные аспекты:

  • Теги и элементы: Документ состоит из ряда элементов, каждый из которых обозначается начальным и конечным тегом (например, <p>...</p> для абзацев). Теги определяют тип содержимого, которое они описывают, и могут содержать атрибуты, предоставляющие дополнительную информацию об элементе.
  • Атрибуты: Атрибуты предоставляют дополнительную информацию о элементах, такую как идентификаторы (id), классы (class), ссылки (href) и источники (src).
  • Структура документа: Типичный документ содержит структурные элементы, такие как <head> для метаданных (например, заголовок страницы, подключаемые стили и скрипты) и <body> для тела документа, где располагается основное содержимое.
  • Формы: С помощью тегов <form> и связанных с ними элементов ввода (<input>, <textarea>, <button> и т.д.) на веб-страницах создаются формы для сбора данных от пользователя.
  • Ссылки и изображения: Элементы <a> и <img> используются для добавления на страницу ссылок и изображений соответственно.
  • Семантическая разметка: Современные версии включают семантические теги, такие как <article>, <section>, <header>, <footer> и <nav>, которые обеспечивают более точное описание структуры страницы и улучшают её понимание поисковыми системами и вспомогательными технологиями.

Версии:

С момента своего создания в начале 1990-х годов HTML прошёл через несколько версий, каждая из которых расширяла возможности языка и улучшала поддержку современных веб-стандартов. Наиболее актуальной является HTML5, представленная в 2014 году, которая включает новые элементы, атрибуты и API для создания богатых интерактивных веб-приложений.

HTML является основой веб-разработки и работает в тесной связке с CSS (Cascading Style Sheets) для оформления и JavaScript для добавления интерактивности, формируя так называемую “тройственную основу” технологий, на которых строится современный Интернет.

CSS

CSS (Cascading Style Sheets — каскадные таблицы стилей) — это язык, используемый для описания внешнего вида и форматирования документа, написанного на языке разметки (как правило, HTML или XML, включая такие разновидности, как SVG или XHTML). Он позволяет контролировать цвет, шрифт, расстояние между элементами, размер блоков, расположение элементов и многое другое для веб-страниц и приложений.

Основные принципы CSS:

  • Разделение содержания и оформления: Позволяет отделить структуру документа от его внешнего вида. Это означает, что можно изменить внешний вид веб-сайта, не затрагивая его содержимое.
  • Каскадность: Стили применяются в определённом порядке. Если одному и тому же элементу заданы стили через разные селекторы, браузер определяет приоритет правил согласно специфичности селекторов и порядку их определения.
  • Наследование: Некоторые стили, заданные для родительского элемента, наследуются дочерними элементами, если только для дочерних элементов не заданы собственные стили.

Как работает CSS:

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

Пример:
~~~
p {
color: red;
font-size: 16px;
}
~~~
В этом примере выбираются все параграфы (p), текст в которых будет окрашен в красный цвет (color: red;) и иметь размер шрифта 16 пикселей (font-size: 16px;).

Использование CSS:

Может быть подключен к HTML-документу тремя способами:

  1. Внешний стилевой файл: Правила хранятся в отдельном файле, который подключается к HTML-документу с помощью тега <link>.
  2. Внутренний стиль: Правила находятся непосредственно в HTML-документе внутри тега <style>.
  3. Инлайновые стили: Стили применяются непосредственно к HTML-элементу через атрибут style.

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

JavaScript

JavaScript (JS) — это легковесный интерпретируемый (или JIT-компилируемый) язык программирования с функциями первого класса. Наиболее широкое применение находит как язык сценариев веб-страниц, но также используется и в других программных продуктах, например, Node.js или Apache CouchDB. JavaScript это прототипно-ориентированный, мультипарадигменный язык с динамической типизацией, который поддерживает объектно-ориентированный, императивный и декларативный (например, функциональное программирование) стили программирования.

https://easyoffer.ru/question/7926

98
Q

Какую структуру имеет веб-страница?

A

HTML (HyperText Markup Language) — это стандартизированный язык разметки, используемый для создания и оформления страниц на Всемирной паутине. Он определяет структуру и содержание веб-страницы с помощью так называемых тегов и атрибутов, позволяя встроить в текст страницы ссылки, изображения, видео, формы для ввода данных и другие элементы интерактивности.

Основные аспекты:

  • Теги и элементы: Документ состоит из ряда элементов, каждый из которых обозначается начальным и конечным тегом (например, <p>...</p> для абзацев). Теги определяют тип содержимого, которое они описывают, и могут содержать атрибуты, предоставляющие дополнительную информацию об элементе.
  • Атрибуты: Атрибуты предоставляют дополнительную информацию о элементах, такую как идентификаторы (id), классы (class), ссылки (href) и источники (src).
  • Структура документа: Типичный документ содержит структурные элементы, такие как <head> для метаданных (например, заголовок страницы, подключаемые стили и скрипты) и <body> для тела документа, где располагается основное содержимое.
  • Формы: С помощью тегов <form> и связанных с ними элементов ввода (<input>, <textarea>, <button> и т.д.) на веб-страницах создаются формы для сбора данных от пользователя.
  • Ссылки и изображения: Элементы <a> и <img> используются для добавления на страницу ссылок и изображений соответственно.
  • Семантическая разметка: Современные версии включают семантические теги, такие как <article>, <section>, <header>, <footer> и <nav>, которые обеспечивают более точное описание структуры страницы и улучшают её понимание поисковыми системами и вспомогательными технологиями.

Версии:

С момента своего создания в начале 1990-х годов HTML прошёл через несколько версий, каждая из которых расширяла возможности языка и улучшала поддержку современных веб-стандартов. Наиболее актуальной является HTML5, представленная в 2014 году, которая включает новые элементы, атрибуты и API для создания богатых интерактивных веб-приложений.

HTML является основой веб-разработки и работает в тесной связке с CSS (Cascading Style Sheets) для оформления и JavaScript для добавления интерактивности, формируя так называемую “тройственную основу” технологий, на которых строится современный Интернет.

https://easyoffer.ru/question/7926

99
Q

Зачем чистить кэш?

A

Чтобы браузер скачал свежие данные с сервера.

Когда вы используете какой-либо браузер, например Chrome, некоторая информация о посещенных сайтах сохраняется в файлах cookie и кеш-памяти. Удаление этих данных помогает устранить различные проблемы с сайтами (в том числе с загрузкой и отображением веб-страниц).

https://support.google.com/google-ads/answer/32050?hl=ru&co=GENIE.Platform%3DDesktop#:~:text=%D0%9A%D0%BE%D0%B3%D0%B4%D0%B0%20%D0%B2%D1%8B%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D1%82%D0%B5%20%D0%BA%D0%B0%D0%BA%D0%BE%D0%B9%2D%D0%BB%D0%B8%D0%B1%D0%BE,%D0%B8%20%D0%BE%D1%82%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC%20%D0%B2%D0%B5%D0%B1%2D%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86).

100
Q

Какие виды тестирования можно применить только к Web?

A

Вообще пахую. Мб тут потом почитай https://habr.com/ru/companies/space307/articles/668974/

GPT-3.5

101
Q

Для чего в веб страницах используют JavaScript?

A
  1. Динамическое обновление содержимого
  2. Работа с пользовательскими событиями (клики мыши, нажатия клавиш, отправки форм и других)
  3. Валидация данных
  4. AJAX-запросы (асинхронные запросы без перезагрузки страницы)
  5. Создание динамических элементов интерфейса (выпадающие меню, модальные окна, слайдеры)
  6. Анимация

GPT-3.5

102
Q

Что такое REST?

A

REST API (Representational State Transfer Application Programming Interface) — это архитектурный стиль взаимодействия компонентов распределенной системы через интернет. Он предлагает набор ограничений для создания веб-сервисов, которые используют стандартные HTTP-методы для обмена данными между клиентом и сервером. Этот стиль был введен Роем Филдингом в его докторской диссертации в 2000 году и быстро стал популярным благодаря своей простоте, масштабируемости и гибкости.

Основные принципы:

  1. Клиент-серверная архитектура: Разделение ответственности между клиентом (который запрашивает данные) и сервером (который предоставляет данные) улучшает масштабируемость и упрощает компоненты.
  2. Без сохранения состояния (Stateless): Каждый запрос от клиента к серверу должен содержать всю необходимую информацию для его выполнения. Сервер не сохраняет состояние клиента между запросами, что упрощает архитектуру.
  3. Кэширование: Ответы сервера должны быть явно помечены как кэшируемые или некэшируемые, что уменьшает нагрузку на сервер и улучшает производительность за счет уменьшения задержки ответа.
  4. Единообразный интерфейс: Определяет интерфейс взаимодействия между клиентом и сервером, упрощая и декапсулируя архитектуру системы.
  5. Система слоев: Клиент не может знать, общается ли он непосредственно с сервером или с промежуточным узлом, что улучшает масштабируемость системы за счет использования балансировщиков нагрузки, кэшей и т.д.
  6. Код по требованию (необязательно): Сервер может временно расширять или настраивать функциональность клиента, передавая ему исполняемый код.

Особенности:

  • Использование стандартных HTTP-методов: Таких как GET для получения данных, POST для создания новых ресурсов, PUT для обновления существующих ресурсов, DELETE для удаления ресурсов и т.д.
  • Работа с ресурсами: Каждый уникальный URL представляет собой некий ресурс, который может быть представлен в формате JSON, XML или других форматах.
  • Безопасность и авторизация: Хотя он сам по себе не определяет механизмов безопасности, обычно используются стандартные методы, такие как HTTPS, OAuth и токены JSON Web Token (JWT) для обеспечения безопасности данных и авторизации доступа.

REST API широко используется для создания веб-сервисов благодаря своей простоте, возможности масштабирования и поддержке стандартных HTTP-операций, делая его популярным выбором для разработки современных веб-приложений и микросервисов.

https://easyoffer.ru/question/7851

102
Q

Что такое AJAX?

A

AJAX — Asynchronous Javascript and XML - обновление только отдельной части страницы, а не целиком.

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

При использовании AJAX нет необходимости обновлять каждый раз всю страницу, так как обновляется только ее конкретная часть. Это намного удобнее, так как не приходится долго ждать, и экономичнее, так как не все обладают безлимитным интернетом. Правда в этом случае, разработчику необходимо следить, чтобы пользователь был в курсе того, что происходит на странице. Это можно реализовать с использованием индикаторов загрузки, текстовых сообщений о том, что идёт обмен данными с сервером. Необходимо также понимать, что не все браузеры поддерживают AJAX (старые версии браузеров и текстовые браузеры). Плюс Javascript может быть отключен пользователем. Поэтому, не следует злоупотреблять использованием технологии и прибегать к альтернативным методам представления информации на Web-сайте.

Обобщим достоинства AJAX:
* Возможность создания удобного Web-интерфейса
* Активное взаимодействие с пользователем
* Частичная перезагрузка страницы, вместо полной
* Удобство использования

AJAX использует два метода работы с веб-страницей: изменение Web-страницы не перезагружая её, и динамическое обращение к серверу. Второе может осуществляться несколькими способами, в частности, XMLHttpRequest, и использование техники скрытого фрейма.

https://habr.com/ru/articles/14246/

103
Q

Расскажите об алгоритмах шифрования трафика.

Компьютерные сети

A
  • Симметричное шифрование использует один и тот же ключ и для зашифровывания, и для расшифровывания.
    • DES
    • AES
    • Blowfish
  • Асимметричное шифрование использует два разных ключа: один для зашифровывания (который также называется открытым), другой для расшифровывания (называется закрытым).
    • RSA

https://habr.com/ru/articles/344294/

104
Q

Что такое NIC?

A

Сетевой интерфейсный контроллер (Network Interface Controller, NIC) - это аппаратное устройство, позволяющее компьютеру подключаться к сети и обмениваться данными. Сетевая карта или сетевой адаптер. Он обеспечивает физическое соединение между компьютером и сетью, обеспечивая передачу данных по сети.

NIC обычно имеет разъем для подключения к компьютеру (например, PCI, PCI Express, USB) и разъем для подключения к сетевому кабелю (например, Ethernet, Wi-Fi). Он также может иметь светодиоды для индикации статуса соединения и активности сети.

Функции NIC включают в себя:

  1. Поддержка различных типов сетевых стандартов, таких как Ethernet, Wi-Fi, Bluetooth и др.
  2. Обработка данных для передачи и принятия по сети.
  3. Управление и контроль физического соединения с сетью.
  4. Обработка и передача кадров данных между компьютером и сетью.
  5. Поддержка различных протоколов сетевого уровня, таких как TCP/IP, UDP.

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

GPT-3.5

104
Q

Для чего требуется протокол RTP?

A

Протокол RTP (Real-time Transport Protocol) используется для передачи потоковых мультимедийных данных в реальном времени через сеть. Этот протокол широко применяется для передачи аудио- и видеоинформации в реальном времени, такой как VoIP (голосовая связь по Интернету), видеоконференции, стриминг медиа и другие приложения, где важна низкая задержка передачи данных и сохранение последовательности временных меток потока данных.

Протокол RTP предназначен для обеспечения следующих функций и возможностей:

  1. Управление временной синхронизацией данных: RTP позволяет прикреплять временные метки (timestamps) к каждому пакету данных, чтобы обеспечить правильный порядок воспроизведения в реальном времени на стороне приемника.
  2. Обеспечение качества обслуживания (Quality of Service, QoS): RTP предоставляет механизмы для обеспечения низкой задержки, минимальных потерь данных и управления пропускной способности в целях обеспечения качественной передачи потоковых данных.
  3. Поддержка различных типов мультимедийных данных: RTP может передавать различные типы мультимедийных данных, такие как аудио, видео, текст или обобщенные данные, и обеспечивать эффективную передачу этих данных через сеть.
  4. Механизм восстановления данных и обнаружения ошибок: RTP поддерживает механизмы для повторной передачи утраченных пакетов данных, обнаружения и восстановления ошибок передачи, а также реорганизации данных в правильном порядке для воспроизведения в правильной последовательности.

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

GPT-3.5

105
Q

Что, по вашему мнению, лучше SIP или PRI?

A

SIP (Session Initiation Protocol) и PRI (Primary Rate Interface) - это два различных протокола для установления телефонных соединений и обеспечения связи в коммуникационных сетях. Они имеют свои особенности и преимущества, и выбор между ними зависит от конкретных потребностей и условий. Вот некоторые ключевые различия между SIP и PRI:

SIP:
1. SIP является протоколом IP-телефонии, который позволяет передавать голосовое и видео-сообщения по сети Интернет.
2. SIP обеспечивает гибкость и масштабируемость, позволяя управлять большим количеством звонков и добавлять новые функции без необходимости дополнительного оборудования.
3. SIP позволяет интегрировать телефонию с другими IP-сервисами, такими как видеоконференции, сообщения и передача данных.
4. SIP имеет более низкие операционные издержки и предоставляет возможность использования облачной телефонии.

PRI:
1. PRI является традиционным цифровым телефонным сервисом, который используется для передачи изданных данных в традиционных телефонных сетях.
2. PRI предоставляет гарантированное качество обслуживания и стабильное соединение с цифровыми линиями, позволяя обеспечить высокий уровень надежности и стабильности связи.
3. PRI поддерживает различные функции и услуги телефонной среды, такие как функции переадресации, конференц-связи, внутренние номера и др.
4. PRI обеспечивает более высокую пропускную способность по сравнению с аналоговыми цифровыми линиями (T1 или E1) и может обеспечить одновременную передачу более 20-30 голосовых каналов.
5. PRI требует наличие физической линии и установку специального оборудования, что может увеличить начальные инвестиции и операционные издержки.

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

GPT-3.5

106
Q

Что такое NAT?

A

NAT (Network Address Translation) - это технология, позволяющая переводить локальные IP-адреса компьютеров в локальной сети в общедоступные IP-адреса для обмена данными с внешними сетями, такими как Интернет. НАТ используется для эффективного использования ограниченного количества общедоступных IP-адресов, а также для обеспечения безопасности локальной сети.

GPT-3.5

107
Q

Какие версии Android следует тестировать, если заказчик сказал поддерживать с версии 5.0?

A

-

107
Q

Какие мобильные платформы существуют?

Mobile

A

Android
Компания: Google
Ядро: Linux
Система: Открытая
Язык разработки: Java/Kotlin
Магазин: Google Play
Расширение приложений: apk
Установка без магазина: Да

iOS
Компания: Apple
Ядро: Облегченная версия MacOS
Система: Закрытая
Язык разработки: objective-C / Swiftobjective-C /Swift
Магазин: App Store
Расширение приложений: ipa
Установка без магазина: Нет

https://stepik.org/lesson/1036759/step/6?auth=login&unit=1045244

107
Q

Какие версии Android и iOS используются на рынке (минимальные и максимальные)?

A
108
Q

Назовите типы мобильных приложений.

A
  • Нативные
  • Веб-приложения
  • Гибридные
  • Кросс-платформенные

Нативные приложения: написаны на родном для определенной платформы языке программирования. Для Android этим языком является Kotlin/Java, тогда как для iOS - objective-С или Swift. Нативные приложения находятся на самом устройстве, доступ к ним можно получить, нажав на иконку. Они устанавливаются через магазин приложений (Play Market на Android, App Store на iOS и др.). Они разработаны специально для конкретной платформы и могут использовать все возможности устройства - камеру, уведомления и т.п. (при наличии разрешений). В зависимости от предназначения нативного приложения, оно может всецело или частично обходиться без наличия интернет-соединения;

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

Гибридные приложения: это веб-приложение в обертке нативного приложения, что служит контейнером для отображения веб-приложения через встроенный упрощенный браузер (webview в Android(Chrome webview в последней версии) и WKWebView в iOS). Нативный “фундамент” даёт преимущества нативных приложений: доступ к функционалу смартфона (API системы, пуши и т.п.), размещение в маркетах, иконка на рабочем столе и т.п., а сторона веб-приложений дает плюсы в виде кроссплатформенности и простоты обновления контента. Компания, имеющая веб-приложение, может практически “на коленке” собрать гибридные приложения для основных платформ и обеспечить себе присутствие в маркете и на рабочем столе клиентов;

Кроссплатформенные приложения: которые иногда путают с гибридными. Такие приложения разрабатываются с помощью кроссплатформенных фреймворков: React Native (JavaScript), Flutter (Dart), Ionic (JavaScript), Xamarin (.NET and C#) и т.п. и имеют общий код для iOS и Android.

https://vladislaveremeev.gitbook.io/qa_bible/mobilnoe-testirovanie/tipy-mobilnykh-prilozhenii

109
Q

Каков формат файлов сборок приложений для Android и iOS?

A

Android: apk
iOS: ipa

110
Q

Что такое ADB?

A

ADB (Android Debug Bridge) - это утилита командной строки, которая позволяет взаимодействовать с устройствами Android, устанавливать и управлять приложениями, а также делать отладку и тестирование приложений на устройствах Android через компьютер. ADB также может быть использован для доступа к различным системным функциям устройства и выполнения различных действий на нем.

GPT-3.5

111
Q

Как снять логи с AOS/IOS?

A
  • ADB, приложения
  • xcode, через терминал idevicesyslog

Для снятия логов с устройств Android или iOS (AOS - Android, IOS - iOS) можно использовать специальные инструменты и методы. Вот как это можно сделать для каждой из платформ:

Снятие логов с AOS (Android):

  1. С помощью ADB (Android Debug Bridge):
    • Подключите устройство к компьютеру через USB.
    • Откройте командную строку и выполните команду “adb logcat” для получения журнала системы.
    • Дополнительно можно использовать фильтры для поиска определенных типов сообщений.
  2. С помощью сторонних приложений:
    • Существуют приложения на Google Play Store, которые могут помочь в сборе логов с устройства без необходимости использования компьютера, например, CatLog, Logcat Reader, aLogcat и другие.

Снятие логов с IOS (iOS):

  1. Используя Xcode:
    • Подключите устройство к компьютеру с установленным Xcode.
    • Откройте Xcode и выберите “Window” -> “Devices and Simulators”.
    • Выберите соединенное устройство и откройте вкладку “Device Logs”, чтобы просмотреть системные журналы.
  2. Используя консольный инструмент:
    • Запустите терминал на компьютере, подключите устройство и выполните команду “idevicesyslog” для получения журналов системы с устройства.

Помните, что для снятия логов с устройств IOS может потребоваться разработчическое окружение Apple и учетная запись разработчика. В обоих случаях важно соблюдать правила конфиденциальности и безопасность при обработке и хранении логов, так как они могут содержать чувствительную информацию о работе устройства и приложений. Важно также учитывать правила использования и соблюдения конфиденциальности данных при снятии и анализе логов с устройств Android и iOS.

111
Q

Что необходимо проверить при использовании сканера отпечатка/Face ID?

A
112
Q

Как я могу запускать тесты Android без Appium?

A

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

  1. Espresso: Espresso - это фреймворк для автоматизированного тестирования пользовательского интерфейса на Android. Он предоставляет API для написания и запуска UI-тестов в приложениях Android. Espresso интегрирован с Android Studio и рассчитан на тестирование приложений на уровне пользовательского интерфейса (UI).
  2. UI Automator: UI Automator - это другой инструмент от Google для автоматизации тестирования пользовательского интерфейса на устройствах Android. Он позволяет создавать сценарии тестирования на более высоком уровне, включая взаимодействие с различными приложениями и компонентами системы.
  3. Robolectric: Robolectric - это фреймворк для Android, который позволяет запускать тесты на уровне модуля в обычном JVM без необходимости запуска на устройстве или эмуляторе. Robolectric ускоряет процесс автоматизации тестирования и упрощает разработку модульных тестов для Android-приложений.
  4. MonkeyRunner: MonkeyRunner - инструмент для автоматизации тестирования на устройствах Android, который позволяет записывать и запускать различные действия и сценарии на устройствах или эмуляторах Android.

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

113
Q

Объясните концепцию дизайна Appium.

A
  • Appium — это «HTTP-сервер», написанный на платформе Node.js, который управляет сессиями iOS и Android, используя проводной протокол WebSON JSON. Следовательно, перед инициализацией сервера Appium Node.js должен быть предварительно установлен в системе.
  • Когда Appium загружен и установлен, на нашем компьютере настраивается сервер, который предоставляет REST API.
  • Он получает запрос на подключение и команду от клиента и выполняет эту команду на мобильных устройствах (Android / iOS)
  • Он отвечает обратно HTTP-ответами. Опять же, чтобы выполнить этот запрос, он использует платформы автоматизации мобильных тестов для управления пользовательским интерфейсом приложений. Рамки как
  • Инструменты Apple для iOS (инструменты доступны только в Xcode 3.0 или более поздней версии с OS X v10.5 и более поздней версии)
  • Google UIAutomator для Android API уровня 16 или выше
  • Selendroid для Android API уровня 15 или ниже

GPT-3.5

114
Q

Написать чек-лист для функционала корзины в интернет-магазине.

Практические задания по тестированию

A
114
Q

Написать тестовые наборы данных для поля ввода даты, которое отсеивает пользователей в возрасте до 18 лет.

A
115
Q

Написать чек-лист тестирования формы ввода данных платежной карты.

A

Валидация

  • expiry date не в прошлом
  • Номер карты проходит валидацию по Luhn (https://ru.wikipedia.org/wiki/Алгоритм_Луна)
    Пропускаются короткие имена/фамилии (1-2 буквы) и составные фамилии (содержат дефис)

Поведение

  • Номер карты можно скопировать и вставить в форму. Более того, форма должна быть дружественна к приложениям, сохраняющим и заполняющим данные карты (1password, iCloud keychain и т. д.)
  • Цифры в номере карты форматируются по группам
  • Между полями можно переходить по табуляции. Последовательность перехода соответствует визуальному расположению полей на форме.
  • Вбиваемая кириллица приводится к латинице. Все буквы приводятся к верхнему регистру
116
Q

Протестировать «предмет» для различных видов тестирования

  • лифт
  • карандаш
  • калькулятор
A
  1. Какие требования?
    1.1 Если нет требований, то спросить - как предмет вообще произвели и для каких задач?
  2. Если нет требований - узнать есть ли ранее подготовленные чек-листы\кейсы?
  3. Если нет, то попросить создать требования через user-story
  4. Говорим, что будем тестировать из своих соображений и здравого смысла

Карандаш

Калькулятор

В нашем калькуляторе один класс, но есть два граничных значения – 1 и 9. Значит, нам потребуется 3 проверки:

  • По классу эквивалентности: любые 2 числа, например: 2+5=7
  • По первому граничному значению: 1+ любое другое число, например, 1+6=7
  • По второму граничному значению: любая цифра + 9, например, 3+9=12

Дополнительные проверки:

  • Можно ли сложить не 2, а 3 числа;
  • Что будет, если ввести сразу 2 числа (без знака «+»);
  • Будет ли нехватка ресурса, если сложить 9 и 9;
  • Что будет, если сначала нажать «+», а потом цифры?
  • Что будет, если нажать «С» в разных местах вычисления?
  • Что будет, если наживать «+», «=» и «С» в разных комбинациях?
  • Может ли калькулятор совершать 1 миллион операций в секунду;
  • Если это ПО – можно ли запустить одновременно 1 миллион копий этой программы;
  • Если это физический калькулятор – выдержит ли он падение на пол со стола.

Лифт

  1. Functional testing.
    1.1. Проверить, что вызывается с первого этажа.
    1.2. Проверить, что вызванный лифт приедет на первый этаж.
    1.3. Проверить, что на вызванном лифте можно подняться на последний 10-ый этаж.
    1.4. Проверить, что на вызванном лифте можно спуститься 10-го на 1-ый этаж.
    1.5. Проверить, что на вызванном лифте с 1-го этажа можно подняться на 5-ый этаж.
    1.6. Проверить, что вызванный лифт приедет на 5-ый этаж.
    1.7. Проверить, что с 5-го этажа возможно спуститься на первый этаж.
    1.8. Проверить, что с 5-го этажа можно подняться на 10-ый этаж.
    1.9. Проверить, что в лифте работает кнопка “СТОП” при выполнении движения.
    1.10. Проверить, что в лифте работает кнопка “Экстренный вызов\Связь”
    1.11. Проверить, что вызванный лифт который выполняет задание прибудет на вызванный этаж, только после выполнения задания.
    1.12 Проверить, что при загрузке кабины лифта весом 801кг кабина лифта не закроется, произойдет уведомление о перегрузке.
    1.13Проверить, что при попытке отправки лифта без груза, лифт останется на этаже.
  2. GUI testing
    2.1. Проверить, что рядом с лифтом находиться табличка с номером этажа на котором находиться пользователь.
    2.2. Проверить, что при нажатии на кнопку “Вызов”, кнопка подсвечивается. Уведомляя, что команда принята.
    2.3. Проверить, что при нажатии на кнопку “Вызов”, циферблат над дверью отображает местоположении лифта в здании.
    2.4. Проверить, что в кабине лифта присутствуют кнопки управления.
    2.5. Проверить, что в кабине лифта присутствует циферблат с отображением местоположения лифта в здани.
  3. Stress testing
    3.1. Проверить, что при одновременном вызове лифта с разных этажей лифт направиться к одному из этажей.
    3.2. Проверить, что про одновременной отправки лифта на разные этажи лифт выберет один вариант
  4. System testing
    4.1. Проверить, что лифт вызывается.
    4.2. Проверить, что после приезда на этаж двери лифта открываются.
    4.3. Проверить, что после отправки лифта дверь лифта закрывается.
  5. Usability testing
    5.1. Проверить, что кнопка вызова лифта имеет достаточные размеры для нажатия.
    5.2. Проверить, что кнопка вызова лифта подсвечивается после нажатия.
    5.3. Проверить, что в лифт может свободно поместиться 8-мь среднестатистических человека.
    5.4. Проверить, что высота дверей лифта больше среднестатистического человека.
    5.5. Проверить, что ширина дверей лифта больше среднестатистического человека.
117
Q

Имеется Input поле, принимающее целые значения от 18 до 99 включительно.
Следует протестировать с помощью техники тест-дизайна Boundary Values Analysis и Equivalence Partitioning.

A
118
Q

Есть веб-страница с полями: e-mail, password и кнопкой submit.Необходимо привести примеры отрицательных тест-кейсов, по которым можно проверить эту страницу.

A
  1. Пустые оба поля
  2. Пустой email
  3. Пустой пароль
  4. Максимум символов
  5. Невалидные email
  6. Верный email и неверный пароль
  7. unicode
  8. SQL-инъекции
119
Q

Привести примеры тест-кейсов для функционала, находящегося на нескольких страницах проекта (например, поле поиска).

A
119
Q

Как протестировать процесс оплаты в интернет-магазине?

A

Примеры:

  • Платежный поток (Payment flow) должен работать для всех различных вариантов оплаты;
  • Сохраненный способ оплаты должен быть доступен в процессе оформления заказа;
  • Варианты оплаты, такие как Visa, Mastercard, Paypal, UPI, должны быть видны с их логотипом;
  • Применяемые дополнительные предложения или коды скидок должны снизить цену покупки;
  • Конфиденциальные данные, такие как пароли, CVV, OTP и т. д., не должны сохраняться после завершения покупки;
  • Выполнение тестов безопасности является обязательным при хранении данных кредитных карт клиентов или любой другой личной информации;
  • При оформлении заказа в качестве гостя процесс покупки должен проходить гладко и позволить гостю зарегистрироваться после оплаты;
  • Должны происходить безопасные транзакции, и после оплаты клиенту должно быть предложено вернуться в приложение/сайт электронной коммерции;
  • Идентификатор транзакции и детали, связанные с платежом, должны быть сохранены вместе с деталями заказа;
  • Выполните тестовый платеж, используя каждый способ оплаты;
  • Убедитесь, что платеж обрабатывается правильно, используя все виды способов оплаты, таких как дебетовая карта, кредитная карта, интернет-банкинг, PayPal и т. д.;
  • Подтвердить недействительный платеж;
  • Подтвердить отмену заказа.

https://vladislaveremeev.gitbook.io/qa_bible/testirovanie-v-raznykh-sferakh-oblastyakh-testing-different-domains/testirovanie-internet-magazina-ecommerce

120
Q

Как протестировать сломанный тостер?

A
  1. Зачем нам тестировать сломанный тостер?
  2. Какие требования?
121
Q

Как вы провели smoke-testing для приложения типа Telegram?

A
122
Q

Как будет выглядеть баг-репорт, если, к примеру, не работает электрический чайник?

A
123
Q

Есть таблица books с полями: name, price, page_count.Нужно выбрать все имена книг, в которых price более 10 единиц и количество страниц от 20 до 100.

A