163 страницы смеси ответов на вопросы с реальных собеседований, перевода интересного контента с зарубежных ресурсов и агрегации материала с отечественных.
ВНИМАНИЕ! Для того, чтобы увидеть материал целиком, нужно открыть README.md (если смотреть из корня репозитория, то там больше половины обрезается). Если есть что исправить или дополнить – пишите/создавайте issue! :)В первую очередь хочу подчеркнуть, что эта статья от джуна – джунам, от intermediate – таким же и предлагается AS IS, поэтому прошу прощения если вызову кровотечение из глаз у опытных коллег. Также здесь очень много перевода из зарубежных источников и в силу слабенького английского и отсутствия коммерческого опыта там может быть откровенная ересь. Местами присутствует винегрет из русских и английских терминов. Изначально материал делался для себя, но он оказался предварительно востребованным, так что я привёл его в более-менее надлежащий вид, но и только. Данный материал можно улучшать и дополнять бесконечно и именно потому, я считаю, подобного в русскоязычном сегменте нет. В какой-то момент нужно просто остановиться как есть. Ни один лид или сеньор не станет таким заниматься в силу проф. опыта и деформации. Что касается источников и ресурсов, то список не полный. В первоначальном конспекте я не сохранял ссылки, так что, если увидели авторский контент, прошу не ругаться. Список полезных ресурсов я не пытался сделать всеобъемлющим, а лишь указал те, что пригодились лично мне. Также отмечу, что и сам материал далеко не всеобъемлющий. Предполагается, что это некий гибрид ответов на вопросы и базовой теории и здесь темы раскрыты в той мере, что требуется на собеседовании. То есть ориентир и какая-то база есть, но при необходимости копаете дальше уже сами. Каждый термин, каждая тема представляется мне как трехмерный объект и не всегда можно достичь понимания, глядя в лоб (один источник). Порой требуется посмотреть под разными углами (в разных источниках). К тому же, как я уже сказал, это копание можно продолжать бесконечно и это был бы формат толстой книги, а не статьи. Помимо глубины, ограничен материал и в ширину. Практически не раскрыто мобильное тестирование, в основном web. Это обусловлено вопросами с самих собеседований, как говорится, за что купил, за то и продаю. Тестирование в разных сферах добавлено просто для того, чтобы сориентировать новичка. Эта статья не заменит хорошую книгу или курс, с другой стороны, здесь больше реальности.
- HR-часть
- Вопросы с реальных собеседований с этапа HR
- Общее о тестировании
- Что означает тестирование ПО?
- Почему требуется тестирование ПО?
- Что означает обеспечение качества (Quality Assurance - QA) при тестировании ПО?
- Что означает контроль качества (Quality Control - QC) при тестировании ПО?
- Что означает качество ПО? (Software Quality)
- Объясните отличия в QA, QC и тестировании
- Что означает Verification при тестировании ПО?
- Что означает Validation в тестировании ПО?
- Разница между Design Verification и Design Validation?
- Принципы тестирования?
- Что подразумевается под тестовым покрытием? (Test Coverage)
- Что такое модель зрелости тестирования (TMM - Test Maturity Model)?
- Что такое CMM?
- Что такое тестирование со сдвигом влево? (Shift left testing)
- Что такое независимое тестирование? (Independent testing)
- В чем разница между превентивным и реактивным подходами в тестировании? (Preventative and Reactive approaches)
- Перечислите типичные возможные обязанности инженера по обеспечению качества?
- Что такое аудит качества?
- Почему тестирование делится на отдельные этапы?
- Почему невозможно полностью протестировать ПО?
- Как вы тестируете продукт, если требования еще не зафиксированы?
- Как вы узнаете, было ли создано достаточно тестов для тестирования продукта?
- Как вы понимаете инспекцию?
- Какие есть роли/должности в команде?
- Опишите жизненный цикл продукта по этапам - какие участники на каждом этапе, какие у них роли? Какие артефакты на каждом этапе?
- Кто такой SDET?
- Что такое тестирование как сервис? (TaaS – testing as a Service)
- Что подразумевается под тестовой средой? (Test Environment/Test Bed)
- Что подразумевается под тестовыми данными?
- Основные фазы тестирования?
- Подробнее про бета-тестирование?
- Что означает пилотное тестирование? (Pilot)
- В чем отличие build от release?
- Что такое бизнес – логика (domain)?
- Ты – единственный тестировщик на проекте. Что делать?
- Основные инструменты тестировщика?
- Виды тестирования
- Какие существуют основные виды тестирования ПО?
- Типы тестирования? (White/Black/Grey Box)
- Что означает тестирование черного ящика?
- Что означает тестирование белого ящика?
- Что означает тестирование серого ящика? (Grey box)
- Основные отличия White/grey/black box?
- Что такое деструктивное/разрушающее/негативное тестирование? (DT - Destructive testing)
- Что такое недеструктивное/неразрушающее/позитивное тестирование? (NDT – Non Destructive testing)
- Что такое пирамида/уровни тестирования? (Testing Levels)
- Что подразумевается под компонентным/модульным/юнит тестированием? (Component/Module/Unit testing)
- Что подразумевается под интеграционным тестированием? (Integration testing)
- Разница между Unit testing и Integration testing?
- Что такое системное интеграционное тестирование? (SIT - System Integration testing)
- Что подразумевается под инкрементальным подходом? (Incremental Approach)
- Что подразумевается под подходом снизу-вверх? (Bottom-Up Approach)
- Что подразумевается под подходом сверху-вниз? (Top-Down Approach)
- Что подразумевается под гибридным/сэндвич-подходом? (Sandwich Approach)
- Что подразумевается под подходом Большого взрыва? (Big Bang Approach)
- В чем разница между тест-драйвером и тест-заглушкой? (Test Driver and Test Stub)
- Что подразумевается под системным тестированием?
- Можем ли мы провести системное тестирование на любом этапе?
- Что такое функциональное тестирование?
- Что такое тестирование совместимости/взаимодействия? (Compatibility/Interoperability testing)
- Что такое тестирование на соответствие? (Conformance/Compilance testing)
- Что такое нефункциональное тестирование?
- Основные понятия в тестировании производительности?
- Тестирование производительности клиентской части и серверной, в чем разница?
- В общем виде что такое тестирование производительности?
- Что такое тестирование емкости/способностей? (Capacity)
- Что означает тестирование масштабируемости? (Scalability)
- Разница между тестированием ёмкости/способностей и тестированием масштабируемости? (Capacity vs Scalability)
- Расскажите о стрессовом тестировании? (Stress testing)
- Расскажите о нагрузочном тестировании? (Load)
- Что такое объемное тестирование? (Volume testing)
- Тестирование выносливости/стабильности/надежности (Soak/Endurance/Stability/Reliability testing)
- Что такое спайк/шиповое тестирование? (Spike)
- Что такое тестирование устойчивости? (Resilence)
- Что такое тестирование времени отклика? (Response time testing)
- Что такое Ramp тестирование?
- Что такое тестирование хранилища? (Storage testing)
- Что такое тестирование на отказ и восстановление? (Failover and Recovery testing)
- Что вы знаете о Тестировании удобства пользования? (Usability testing)
- Отличия тестирование на удобство пользования и тестирования доступности? (Usability Vs. Accessibility testing)
- Что такое тестирование интерфейса? (UI testing)
- Что такое тестирование рабочего процесса/воркфлоу? (Workflow testing)
- Что вы знаете о пользовательском приемочном тестировании? (UAT – User Acceptance testing)
- Что такое эксплуатационное приемочное тестирование? (OAT - Operational Acceptance testing)
- Расскажите об инсталляционном тестировании?
- Что вы знаете о тестировании безопасности? (Security and Access Control testing)
- Что означает оценка уязвимости/защищенности? (Vulnerability Assessment)
- Расскажите подробнее о тестировании на проникновение? (Penetration testing)
- Отличия Vulnerability Assessment от Penetration testing?
- Что такое Fuzz тестирование?
- Можно ли отнести тестирование безопасности или нагрузочное тестирование к функциональным видам тестирования?
- Что вы знаете о конфигурационном тестировании? (Configuration testing)
- Что подразумевается под проверкой дыма/дымовым тестированием? (Smoke testing)
- Что такое тестирование встряхиванием? (Shake out testing)
- Что подразумевается под санитарным тестированием/согласованности/исправности? (Sanity testing)
- Отличие санитарного тестирования от дымового? (Sanity vs Smoke testing)
- Что вы знаете про регрессионное тестирование? (Regression testing)
- Объясните, что такое тестирование N+1?
- Что означает подтверждающее тестирование? (confirmation/re-testing)
- В чем разница между повторным и регрессионным тестированием?
- Типы регрессии по Канеру?
- Что вы знаете о тестировании сборки? (Build Verification Test)
- Что такое тестирование файлов cookie?
- Что такое тестирование потоков? (Thread testing)
- Что такое тестирование документации? (Documentation testing)
- Какие вы знаете уровни тестирования данных?
- Что такое подкожный тест? (Subcutaneous test)
- Расскажите о локализации, глобализации и интернационализации? (Localization/ globalization/internationalization testing)
- Что такое исследовательское тестирование? (Exploratory testing)
- Что такое Свободное или Интуитивное тестирование? (Adhoc)
- Что вы знаете о мутационном тестировании? (Mutation testing)
- Что означает механизм тестирования по ключевым словам? (Keyword Driven testing Framework)
- Что вы знаете о тестировании интерфейса прикладного программирования (API - Application Programming Interface)?
- Как протестировать API без документации/черным ящиком?
- А что такое endpoint?
- Frontend testing Vs. Backend testing?
- Что подразумевают под эталонным тестированием? (Baseline testing)
- В чем разница между Baseline и Benchmark testing?
- Что такое параллельное/многопользовательское тестирование? (Concurrency/Multi-user testing)
- Как вы думаете, что такое тестирование на переносимость?
- Что такое тестирование графического интерфейса/визуальное тестирование? (GUI - Graphical User Interface)
- Что такое A/B тестирование?
- Что означает сквозное тестирование? (E2E - End–to–End)
- В чем разница между E2E и системным тестированием?
- Что такое параллельное тестирование? (Parallel testing)
- Тест дизайн
- Тест дизайн? (Test Design)
- Перечислите известные техники тест-дизайна?
- Что такое статическое тестирование, когда оно начинается и что оно охватывает?
- Что такое динамическое тестирование, когда оно начинается и что оно охватывает?
- Какие виды Review вы знаете?
- Что вы знаете о Data Flow testing?
- Что вы знаете о Control Flow testing?
- Что такое Loop coverage?
- Что такое Race coverage?
- Тестирование пути и тестирование базового пути? (Path testing & Basis Path testing)
- Что вы знаете о Statement coverage?
- Что вы знаете о Decision coverage?
- Что вы знаете о Branch coverage?
- Что вы знаете о Condition coverage?
- Что вы знаете о FSM coverage?
- Что такое Function coverage?
- Что такое Call coverage?
- Что означает LCSAJ coverage?
- Сравнение некоторых метрик
- Что такое Equivalence Partitioning?
- Что такое Boundary Value Analysis?
- Что такое Error Guessing?
- Что такое Cause/Effect?
- Что такое Exhaustive testing?
- Какие вы знаете комбинаторные техники тест-дизайна?
- Что такое тестирование ортогональных массивов? (OAT - Orthogonal Array testing)
- Что такое Domain analysis/testing?
- Что такое Cyclomatic Complexity в тестировании ПО?
- Что такое State Transition testing?
- Что такое Scenario (use case) testing?
- Что такое Decision Table testing?
- Что такое Random testing?
- Что такое Syntax testing?
- Что вы знаете о Classification tree method?
- Как мы узнаем, что код соответствует спецификациям?
- Что включает в себя матрица отслеживания требований? (RTM - Requirement Traceability Matrix)
- В чем разница между Test matrix и Traceability matrix?
- Что такое анализ GAP?
- Что такое граф причинно-следственных связей? (Cause Effect Graph)
- В чем разница между предугадыванием ошибок и посевом? (Error guessing and error seeding)
- Стили тестов?
- Техники тестирования требований?
- Что такое эвристики?
- Тестовые артефакты и документация (Test Deliverables/TestWare/test artifacts)
- Виды тестовой документации?
- Отличия Test Suite от Test Scenario?
- Какие отличия у плана тестирования и стратегии тестирования?
- Виды тест планов?
- Что является основой для подготовки плана приемки? (PAP - Product Acceptance Plan)
- В чем разница между тест-кейсом и чек-листом?
- В чем разница между тест-кейсами высокого уровня и низкого уровня?
- Чем Test case отличается от сценария тестирования?
- Что такое тест-анализ/основа теста? (Test Analysis/Test Basis)
- Что такое документ бизнес-требований (BRD)?
- Что вы знаете о требованиях (уровни/виды и т. д.)?
- Рассажите, какие есть требования к самим требованиям?
- Дефекты и ошибки
- Что такое дефект?
- Классы дефектов?
- Какие есть категории дефектов?
- Error/Mistake/Defect/Bug/Failure/Fault?
- Каково содержание эффективного сообщения об ошибке?
- Несколько ключевых моментов, которые следует учитывать при написании отчета об ошибке?
- Серьезность и Приоритет Дефекта (Severity & Priority)
- Может ли быть высокий severity и низкий priority? А наоборот?
- Жизненный цикл дефекта?
- Пришёл баг из продакшена, что делаем?
- Что такое утечка дефектов и релиз бага? (Bug Leackage & Bug Release)
- Что означает плотность дефектов при тестировании ПО?
- Что означает процент обнаружения дефектов при тестировании ПО?
- Что означает эффективность устранения дефектов при тестировании ПО? (DRP)
- Что означает эффективность Test case в тестировании ПО? (TCE)
- Возраст дефекта в тестировании ПО?
- Что такое принцип Парето в тестировании ПО?
- Каковы различные способы применения принципа Парето в тестировании ПО?
- В чем основное отличие отладки от тестирования? (Debugging Vs. Testing)
- Почему в программном обеспечении есть ошибки?
- Что вы будете делать, если во время тестирования появится ошибка?
- Как вы справляетесь с невоспроизводимой ошибкой?
- Если продукт находится в производстве и один из его модулей обновляется, то необходимо ли провести повторную проверку?
- Что такое анализ рисков?
- В чем разница между coupling и cohesion?
- Что такое скрытый дефект? (Latent defect)
- Что такое маскировка ошибок, объясните примером?
- Категории отладки? (Debugging)
- Что такое Эффективность удаления дефектов? (DRE - Defect Removal Efficiency)
- Что такое сортировка дефектов? (Bug triage)
- SDLC и STLC
- Что вы знаете о жизненном цикле разработки ПО? (SDLC - Software Development Lifecycle)
- Что такое цикл/колесо Деминга? (Deming circle/cycle/wheel)
- Модели разработки ПО?
- Что такое Agile?
- Что такое Scrum?
- В чем отличие Canban от scrum?
- Что знаете о User stories в гибких подходах к разработке?
- Что значит жизненный цикл тестирования ПО? (STLC – Software Testing Lifecycle)
- Что вы знаете о техниках оценки теста? (Test Estimation)
- В чем разница между SDLC и STLC?
- Что такое быстрая разработка приложений? (RAD - Rapid Application Development)
- Что такое разработка через тестирование (TDD - Test Driven Development)?
- TDD в Agile Model Driven Development (AMDD)
- Тестирование на основе моделей (MDD - Model-driven Development)
- Тестирование на основе данных (DDT - Data Driven testing)
- Тестирование на основе риска (RBT - Risk Based Testing)
- Что вы знаете о потоковом тестировании? (BFT — BusinessFlowTesting)
- Тестирование в разных сферах/областях (testing different domains)
- Что такое веб-тестирование и как его производить?
- Тестирование банковского ПО
- Тестирование электронной коммерции (eCommerce)
- Тестирование платежного шлюза (Payment Gateway)
- Тестирование систем розничной торговли (POS - Point Of Sale)
- Тестирование в сфере страхования (Insurance)
- Тестирование в сфере телекоммуникаций (Telecom)
- Тестирование протокола: L2 и L3 OSI
- Тестирование интернета вещей (IoT - Internet of Things)
- Что такое облачное тестирование? (Cloud testing)
- Что такое тестирование сервис-ориентированной архитектуры? (SOA - Service Oriented Architecture)
- Что такое тестирование планирования ресурсов предприятия? (ERP - Enterprise Resource Planning)
- Тестирование качества видеосвязи WebRTC-based сервиса видеоконференций
- Что такое тестирование ETL?
- Мобильное тестирование
- Каковы особенности в тестировании мобильных приложений? В чем отличия тестирования мобильного приложения от десктопного?
- В чем отличия тестирования мобильного приложения от web?
- Что вы знаете о симуляторах и эмуляторах?
- Типы мобильных приложений?
- Что основное проверить при тестировании мобильного приложения?
- Последнее обновление Android/iOS, что нового?
- Основные различия iOS и Android?
- Виды жестов и т.п.?
- Как проверить использование процессора на мобильных устройствах?
- Объясните критические ошибки, с которыми вы сталкиваетесь при тестировании на мобильных устройствах или в приложениях?
- Сети и около них
- Что такое http?
- Компоненты HTTP?
- Методы HTTP-запроса?
- Что такое ресурс?
- Что такое веб-сервис? (WS - Web service)
- Отличие сервиса от сервера?
- Отличие сервиса от веб-сайта?
- Что такое REST, SOAP? В чем отличия?
- Что такое JSON, XML?
- Коды ответов/состояния сервера с примерами? (HTTP status code)
- Почему ошибка 404 относится к 4** - клиентской, если по идее должна быть 5**?
- Какие еще бывают протоколы?
- TCP/IP это?
- Что такое куки (cookies)?
- Разница между cookie и сессией/сеансом?
- Отличие stateless и stateful?
- Различия методов GET и POST?
- Клиент - серверная архитектура?
- Уровни OSI?
- Что вы подразумеваете под потоковыми медиа? (Streaming media)
- Основные команды Linux?
- Почему важно тестировать в разных браузерах?
- Адаптивный веб-дизайн vs. Отзывчивый веб-дизайн, в чем разница? (Adaptive Vs. Responsive)
- Как сервер узнаёт, с какого типа устройства/браузера/ОС/языка вы открываете веб-сайт? (Например, для Adaptive design)
- Чем отличается авторизация от аутентификации?
- Как работает авторизация/аутентификация? Как сайт понимает, что ты залогинен?
- Почему важно делать подтверждение e-mail при регистрации?
- Что такое кэш и зачем его очищать при тестировании?
- Что такое AJAX в вебе?
- Как работает браузер (коротко)?
- Как работает сотовая связь?
- Как работает подключение к Wi-Fi?
- Базы данных
- Может ли у ПО быть сразу несколько баз данных?
- Что такое SQL?
- Что вы знаете о NoSQL?
- Что такое нормальные формы?
- Понятие хранимой процедуры?
- Понятие триггера?
- Что такое индексы? (Indexes)
- Какие шаги выполняет тестер при тестировании хранимых процедур?
- Как бы вы узнали для тестирования базы данных, сработал триггер или нет?
- Как тестировать загрузку данных при тестировании базы данных?
- Основные команды SQL?
- Подробнее о джойнах? (Join)
- Типы данных в SQL?
- ПРАКТИКА
- Дана форма для регистрации. Протестируйте.
- Определение серьезности и приоритета
- Определение граничных значений и классов эквивалентности
- Логические задачи
- Еще примеры
- Набор небольших задач по SQL
- Тестирование чашки для кофе
- HR: Как вы будете решать конфликты между членами вашей команды?
- HR: Что делать, если разработчик утверждает, что найденный дефект таковым не является?
- Вот тебе комп и работающий сайт. Сделай мне 401-ю ошибку.
- С чего начать абсолютному новичку?
- Путь
- CV
- Собеседование
- Ошибки в работе у начинающих тестировщиков
- Полезное
- Youtube-каналы
- Telegram
- Web
- Книги
- Курсы
- Источники
- Расскажи о себе (всё что хочешь, что нам нужно знать о тебе)
- Есть ли релевантный опыт?
- Какие курсы проходил и вообще, что изучал?
- Что не устраивало на прошлом месте работы (если было), особенно если решил сменить сферу?
- Почему выбрали именно тестирование?
- Почему выбрали именно нашу компанию?
- Как часто бываешь на собеседованиях?
- Уровень английского?
- (Если требуется и уровень хороший) расскажите на английском: как доехали до собеседования/о себе (только не как в обществе анонимных алкоголиков) /почему считаешь, что можешь стать тестировщиком/ как прошёл вчерашний день/о своих хобби/ и т.п.
- Как в целом смотришь на мир, как решаешь возникающие проблемы?
- 3 твоих сильных и 3 слабых стороны?
- Как отдыхаешь? Как проводишь свободное время?
- Какие хобби?
- Что последнее прочитали техническое? Не техническое?
- Если бы мог вернуться в начало осознанной жизни, выбрал бы иной карьерный путь?
- 3 примера, что тебе положительного дал предыдущий опыт работы (если есть)
- 3 плюса и 3 минуса в сфере тестирования лично для тебя
- Как видишь развитие в этой сфере, кем видишь себя через год, три?
- Какая-то одна вещь или ситуация которой ты гордишься
- Представим, что остальных кандидатов много и они опытнее (обычно так и есть), может у тебя есть какие-то преимущества перед ними? Почему ты думаешь, что лучше других кандидатов?
- Зарплатные ожидания сейчас, после испытательного срока, через год?
- Есть ли какие-то факторы, с которыми ты согласишься на меньшие деньги?
- С чем вы точно не готовы мириться в отношении компании или руководителя?
- Ожидания от работы?
- Отношение к переработкам?
- Представь, что ты работаешь уже полгода. Опиши свой рабочий день.
- Что если при выполнении задачи понимаешь, что не укладываешься в сроки?
- Процесс тестирования гарантирует, что ПО будет работать в соответствии с ожиданиями клиентов.
- Это уменьшает циклы кодирования, выявляя проблемы на начальном этапе разработки. Обнаружение проблем на более ранних этапах SDLC обеспечивает правильное использование ресурсов и предотвращает повышение стоимости.
- Команда тестирования привносит взгляд клиента в процесс и находит варианты использования, о которых разработчик может не подумать.
- Любой сбой, дефект или ошибка, обнаруженные клиентом в готовом продукте, нарушают доверие к компании.
- Design Verification используется, когда фактический результат проекта должен быть таким же, как и ожидаемый результат и удовлетворять спецификациям продукта. Design Validation используется для определения того, что окончательный дизайн соответствует ожиданиям пользователя.
- Design Verification спрашивает: Правильно ли вы спроектировали продукт? Design Validation спрашивает: Правильный ли продукт вы разработали?
- Design Verification включает unit and primary integration level testing. Design Validation включает в себя secondary or higher-level integration and system level testing.
- Определенные аспекты Design Validation могут быть выполнены во время Design Verification, но Design Verification не заменяет Design Validation. Design Validation следует после успешного Design Verification.
- Design Verification может проводиться на отдельном модуле или на готовой системе при любых условиях. Design Validation должен проводиться при определенных условиях согласно требованиям пользователя.
- Design Verification может использовать статические методы. Он включает в себя проверку системы, анализ и формальную проверку (тестирование). Design Validation состоит из окончательного отчета (результатов выполнения теста), который проверяется, утверждается и подписывается. Эти документы хранятся для использования в будущем.
- Тестирование демонстрирует наличие дефектов
- Исчерпывающее тестирование недостижимо
- Раннее тестирование
- Скопление/кластеризация дефектов
- Парадокс пестицида
- Тестирование зависит от контекста
- Заблуждение об отсутствии ошибок
- Garbage in, garbage out (GIGO)
Принцип 2. Исчерпывающее тестирование невозможно Вместо попыток «протестировать всё» нам нужен некий подход к тестированию (стратегия), который обеспечит правильный объем тестирования для данного проекта, данных заказчиков (и других заинтересованных лиц) и данного продукта. При определении, какой объем тестирования достаточен, необходимо учитывать уровень риска, включая технические риски и риски, связанные с бизнесом, и такие ограничения проекта как время и бюджет. Оценка и управление рисками – одна из наиболее важных активностей в любом проекте.
Принцип 3. Раннее тестирование Тестовые активности должны начинаться как можно раньше в цикле разработки и быть сфокусированы на определенных целях. Этот принцип связан с понятием «цена дефекта» (cost of defect). Цена дефекта существенно растет на протяжении жизненного цикла разработки ПО. Чем раньше обнаружен дефект, тем быстрее, проще и дешевле его исправить. Дефект, найденный в требованиях, обходится дешевле всего. Еще одно важное преимущество раннего тестирования – экономия времени. Тестовые активности могут начинаться еще до того, как написана первая строчка кода. По мере того, как готовятся требования и спецификации, тестировщики могут приступать к разработке и ревью тест-кейсов. И когда появится первая тестовая версия, можно будет сразу приступать к выполнению тестов.
Принцип 4. Скопление дефектов Небольшое количество модулей содержит большинство дефектов, обнаруженных на этапе предрелизного тестирования, или же демонстрируют наибольшее количество отказов на этапе эксплуатации. Многие тестировщики наблюдали такой эффект – дефекты «кучкуются». Это может происходить потому, что определенная область кода особенно сложна и запутана, или потому, что внесение изменений производит «эффект домино». Это знание часто используется для оценки рисков при планировании тестов – тестировщики фокусируются на известных «проблемных зонах». Также полезно проводить анализ первопричин (root cause analysis), чтобы предотвратить повторное появление дефектов, обнаружить причины возникновения скоплений дефектов и спрогнозировать потенциальные скопления дефектов в будущем.
Принцип 5. Парадокс пестицида Если повторять те же тесты снова и снова, в какой-то момент этот набор тестов перестанет выявлять новые дефекты. Повторное применение тех же тестов и тех же методик приводит к тому, что в продукте остаются именно те дефекты, против которых эти тесты и эти методики неэффективны. Чтобы преодолеть «парадокс пестицидов», необходимо регулярно пересматривать существующие тест-кейсы и создавать новые, разнообразные тесты, которые будут выполняться на различных частях системы.
Принцип 6. Тестирование зависит от контекста Тестирование выполняется по-разному, в зависимости от контекста. Например, тестирование систем, критических с точки зрения безопасности, проводится иначе, чем тестирование сайта интернет-магазина. Этот принцип тесно связан с понятием риска. Что такое риск? Риск – это потенциальная проблема. У риска есть вероятность (likelihood) – она всегда выше 0 и ниже 100% – и есть влияние (impact) – те негативные последствия, которых мы опасаемся. Анализируя риски, мы всегда взвешиваем эти два аспекта: вероятность и влияние. То же можно сказать и о мире ПО: разные системы связаны с различными уровнями риска, влияние того или иного дефекта также сильно варьируется. Одни проблемы довольно тривиальны, другие могут дорого обойтись и привести к большим потерям денег, времени, деловой репутации, а в некоторых случаях даже привести к травмам и смерти. Уровень риска влияет на выбор методологий, техник и типов тестирования. Принцип 7. Заблуждение об отсутствии ошибок Нахождение и исправление дефектов бесполезно, если построенная система неудобна для использования и не соответствует нуждам и ожиданиям пользователей. Заказчики ПО – люди и организации, которые покупают и используют его, чтобы выполнять свои повседневные задачи – на самом деле совершенно не интересуются дефектами и их количеством, кроме тех случаев, когда они непосредственно сталкиваются с нестабильностью продукта. Им также неинтересно, насколько ПО соответствует формальным требованиям, которые были задокументированы. Пользователи ПО более заинтересованы в том, чтобы оно помогало им эффективно выполнять задачи. ПО должно отвечать их потребностям, и именно с этой точки зрения они его оценивают. Даже если вы выполнили все тесты и ошибок не обнаружили, это еще не гарантия того, что ПО будет соответствовать нуждам и ожиданиям пользователей. Иначе говоря, верификация != валидация.
Принцип 8. GIGO
В компьютерной науке «garbage in – garbage out» (GIGO) — это концепция, в которой ошибочные или бессмысленные входные данные создают бессмысленный вывод или «мусор».
Тестовое Покрытие - это одна из метрик оценки качества тестирования, представляющая из себя плотность покрытия тестами требований либо исполняемого кода. Сложность современного ПО и инфраструктуры сделало невыполнимой задачу проведения тестирования со 100% тестовым покрытием. Поэтому для разработки набора тестов, обеспечивающего более-менее высокий уровень покрытия можно использовать специальные инструменты либо техники тест дизайна.Существуют следующие подходы к оценке и измерению тестового покрытия:
- Покрытие требований (Requirements Coverage) - оценка покрытия тестами функциональных и нефункциональных требований к продукту путем построения матриц трассировки (traceability matrix).
- Покрытие кода (Code Coverage) - оценка покрытия исполняемого кода тестами, путем отслеживания непроверенных в процессе тестирования частей ПО.
- Тестовое покрытие на базе анализа потока управления - это одна из техник тестирования белого ящика, основанная на определении путей выполнения кода программного модуля и создания выполняемых тест кейсов для покрытия этих путей.
Ограничения:
- Метод оценки покрытия кода не выявит нереализованные требования, так как работает не с конечным продуктом, а с существующим исходным кодом.
- Метод покрытия требований может оставить непроверенными некоторые участки кода, потому что не учитывает конечную реализацию.
Покрытие кода — совершенно бесполезная метрика. Не существует «правильного» показателя. Это вопрос-ловушка. У вас может быть проект со 100% покрытием кода, в котором по-прежнему остаются баги и проблемы. В реальности нужно следить за другими метриками — хорошо известными показателям CTM (Codepipes testing Metrics).
PDWT (процент разработчиков, пишущих тесты) — вероятно, самый важный показатель. Нет смысла говорить об антипаттернах тестирования ПО, если у вас вообще нет тестов. Все разработчики в команде должны писать тесты. Любую новую функцию можно объявлять сделанной только если она сопровождается одним или несколькими тестами.PBCNT (процент багов, приводящих к созданию новых тестов). Каждый баг в продакшне — отличный повод для написания нового теста, проверяющего соответствующее исправление. Любой баг должен появиться в продакшне не более одного раза. Если ваш проект страдает от появления повторных багов даже после их первоначального «исправления», то команда действительно выиграет от использования этой метрики.
PTVB (процент тестов, которые проверяют поведение, а не реализацию). Тесно связанные тесты пожирают массу времени при рефакторинге основного кода.
PTD (процент детерминированных тестов от общего числа). Тесты должны завершаться ошибкой только в том случае, если что-то не так с бизнес-кодом. Если тесты периодически ломаются без видимой причины — это огромная проблема.
Если после прочтения о метриках вы по-прежнему настаиваете на установке жёсткого показателя для покрытия кода, я дам вам число 20%. Это число должно использоваться как эмпирическое правило, основанное на законе Парето. 20% вашего кода вызывает 80% ваших ошибок
TMM основан на модели зрелости возможностей (CMM — Capability Maturity Model). Это подробная модель для улучшения процесса тестирования. Она может быть дополнена любой моделью улучшения процесса или может использоваться как одиночная модель. Модель ТММ имеет два основных компонента:- Набор из 5 уровней, которые определяют возможности тестирования (testing capability)
- Модель оценки (An Assessment Model)
- Уровень 1. Начальный. ПО должно успешно работать
- На этом уровне области процессов не определены
- Цель тестирования — убедиться, что ПО работает нормально
- На этом уровне не хватает ресурсов, инструментов и обученного персонала.
- Нет проверки качества перед поставкой ПО
- Уровень 2. Определенный. Разработка целей и политик тестирования и отладки.
- Этот уровень отличает тестирование от отладки, и они считаются различными действиями
- Этап тестирования наступает после кодирования
- Основная цель тестирования — показать, что ПО соответствует спецификации.
- Основные методы и методики тестирования
- Уровень 3: Комплексный. Интеграция тестирования в жизненный цикл ПО
- Тестирование интегрируется в весь жизненный цикл
- На основании требований определяются цели испытаний
- Структура тестирования существует
- Тестирование на уровне профессиональной деятельности
- Уровень 4: Управление и измерение. Создание программы тестовых измерений.
- Тестирование — это измеренный и количественный процесс
- Проверка на всех этапах разработки признается как тестирование
- Для повторного использования и регрессионного тестирования есть Test case и они записаны в базу тестов.
- Дефекты регистрируются и получают уровни серьезности
- Уровень 5: Оптимизированный. Оптимизация процесса тестирования.
- Тестирование управляется и определено
- Эффективность и стоимость тестирования можно отслеживать
- Тестирование может постоянно настраиваться и улучшаться
- Практика контроля качества и предотвращения дефектов
- Практикуется процесс повторного использования (Reuse)
- Метрики, связанные с тестированием, также имеют средства поддержки
- Инструменты обеспечивают поддержку разработки тестовых наборов и сбора дефектов
Разница между CMM и TMM: CMM (Модель зрелости возможностей) предназначена для оценки зрелости программных процессов организации. TMM или Test Maturity Model описывает процесс тестирования и связан с мониторингом качества модели тестирования ПО.
В попытке перенести тестирование на более ранний этап жизненного цикла разработки при одновременном улучшении показателей качества, задачи смещаются влево в схеме жизненного цикла разработки ПО. По возможности, тестирование должно проводиться с самого начала фазы проектирования, чтобы построить соответствующую стратегию тестирования. Проще говоря, это подход к тестированию программного обеспечения и тестированию системы, при котором тестирование выполняется на более раннем этапе жизненного цикла. Ключевые преимущества:- Сокращение затрат
- Более высокое качество
- Повышение эффективности
- Конкурентные преимущества
Тестирование по уровням независимости:
- Программист тестирует свой код
- Тестирование проводится другим программистом в организации
- Внутренняя команда тестирования
- Независимая организация тестирования
- Когда программист проверяет свой код: Вы бы никогда не попросили шеф-повара быть его собственным критиком. И даже если вы это сделаете, вам будет трудно поверить всему, что он говорит. Смысл — создатель никогда не может быть хорошим критиком своей собственной работы. Программист знает свой код от и до. Их цель - создать продукт и отправить его в кратчайшие сроки. Вместо того, чтобы искать ошибки со всех возможных точек зрения, они будут искушены найти способы обойти найденные ошибки и ошибки. Писатель Гленфорд Майерс в своей книге «Искусство тестирования программного обеспечения» перечислил разницу в мышлении разработчика и тестировщика. Он сказал, что разработчик думает как строитель, сосредоточенный на строительстве, в то время как тестировщик ищет недостатки, которые приведут к разрушению здания, если не будут решены.
- Тестирование проводится другим программистом в организации: Компромисс — это найти кого-то в организации. Это может быть какой-то другой программист, который участвует в некоторых других проектах. Это дает определенный уровень независимости. Но проблема возникает из-за того же reporting manager. Менеджер может попросить программиста пропустить некоторые тесты, когда есть ограничения по времени. Это приведет к неполному тестированию продукта. Кроме того, если попросить других разработчиков провести тестирование, это приведет к развертыванию различных ресурсов в одном проекте. Это будет вредно для всей работы организации.
- Внутренняя команда тестирования: Наличие другой внутренней команды — это хорошее решение. Но поскольку они будут в организации, на них будут влиять ограничительные сроки. Кроме того, это будет дорого поддерживать внутреннюю команду. Это приведет к большим бюджетным и ресурсным ограничениям для команды. Команда может иметь доступ к ограниченным инструментам и программному обеспечению, таким образом, не отвечая требованиям всех проектов. Среда тестирования также будет варьироваться в зависимости от количества пользователей и числа выполненных интеграций. Затем тестирование будет проводиться в спешном порядке, что приведет к упущению некоторых ошибок, которые могут появиться после выпуска продукта. Решение, которое позаботится обо всех этих недостатках, - «Независимое тестирование».
- Почему независимое тестирование? Независимые тестирующие организации изучат все аспекты вашей продукции. Они работают с мышлением поиска недостатков и ошибок. Они не будут использовать ярлыки в процессе тестирования. И поскольку они не были частью процесса разработки, они будут проводить тесты на нейтральной основе, чтобы прежние интересы не мешали процессу тестирования. Мысль о поиске максимальных «точек останова» пойдет на пользу вашему продукту. Почти все сторонние тестирующие организации предоставят вам подробные отчеты об ошибках и предложат корректирующие меры.
В чем разница между превентивным и реактивным подходами в тестировании? (Preventative and Reactive approaches)
- Превентивный (профилактический) подход: он также известен как Verification Process. Этот подход заключается в предотвращении дефектов. При таком подходе тесты разрабатываются на ранних этапах SDLC, то есть до того, как программное обеспечение было создано. Он подпадает под анализ качества (QA).
- Реактивный подход: он также известен как Validation Process. Этот подход заключается в выявлении дефектов. При таком подходе тесты предназначены для выполнения после того, как программное обеспечение было произведено. Здесь мы пытаемся найти недостатки. Подпадает под контроль качества (QC).
- Команда QA отвечает за мониторинг всего процесса разработки.
- Они несут ответственность за отслеживание результатов каждого этапа SDLC и корректировку их в соответствии с ожиданиями.
- Они несут ответственность за чтение и понимание необходимых документов.
- Анализируют требования к тестированию, а также разрабатываюти выполняют тесты.
- Разрабатывают Test case и расставляют приоритеты в тестировании.
- Записывают проблемы и инциденты в соответствии с задачами проекта и планами управления инцидентами.
- Работают с командой приложения и/или клиентом для решения любых проблем, возникающих в процессе тестирования.
- Проводят регрессионное тестирование каждый раз, когда в код вносятся изменения для исправления дефектов.
- Должны взаимодействовать с клиентами, чтобы лучше понять требования продукта.
- Принимают участие в прохождении процедур тестирования.
- Каждый этап испытаний имеет свое назначение
- Проще управлять поэтапно
- Мы можем запустить разные тесты в разных средах
- Производительность и качество тестирования улучшаются с помощью поэтапного тестирования
- Спецификации ПО могут быть субъективными и приводить к различным интерпретациям.
- ПО может потребоваться слишком много входов, слишком много выходов и слишком много комбинаций путей для тестирования.
- Улучшение документа продукта
- Улучшение процесса (как производства документов, так и проверки)
Это человек, который берет входящие от заказчика требования (несформулированные хотелки), уточняет всё и нормальным языком передаёт разработчикам, следит за рисками, прогрессом и доводит до финала. На нём вся коммуникация с заказчиком, согласования и т. д.
Product Owner
Может выполнять немного разные роли в разных компаниях. Человек, который является хранителем информации о продукте. Его роль быть decision maker, он отвечает со стороны бизнеса за приложение, с него будет спрашивать заказчик. Противоположные роли с ПМ, как адвокат с обвинителем. ПМ со стороны команды, пытается извертеться на плюшки, а PO со стороны заказчика выбивает всё по максимуму для себя.
Knowledge manager
Управление знаниями — это о том, как распоряжаться всеми имеющимися в компании знаниями, чтобы позволять всем сотрудникам максимально быстро находить ответы на вопросы, принимать решения, избегать ошибок, придумывать что-то новое, управлять проектами, подбирать и развивать сотрудников. А значит, нужно выстраивать коммуникации между подразделениями, учить их разговаривать друг с другом. Вопросы менеджера по знаниям ведущим специалистам имеют высший приоритет, поэтому тот всегда держит руку на пульсе. Полученные знания после доставки не теряются, а превращаются в обучающие документы, которые изучают все сотрудники.
Опишите жизненный цикл продукта по этапам — какие участники на каждом этапе, какие у них роли? Какие артефакты на каждом этапе?
- Анализ. Участники: Product owner, BA(бизнес-аналитик), QA. Артефакты: спецификация требований к ПО (Software Requirement Specification, SRS).
- Проектирование. Участники: Product owner, разработчики, системные архитекторы, QA. Артефакты: дизайн-спецификация (Design Specification Document, DSD), Тест-план, тест-сценарии, тест-кейсы; вариативно: тестовая стратегия.
- Разработка. Участники: разработчики. Артефакты: -.
Кроме того, программисты пишут Unit-тесты для проверки правильности работы кода каждого компонента системы, проводят ревью написанного кода, создают билды и разворачивают готовое ПО в программной среде. Этот цикл повторяется до тех пор, пока все требования не будут реализованы.
- Тестирование. Участники: QA. Артефакты: дефект-репорты, сводный отчет о тестировании.
- Внедрение и сопровождение. Участники: команда технической поддержки. Артефакты: замечания, запросы на исправление/улучшение.
SDET | Manual Tester |
Знает всю систему от начала до конца | Ограниченные знания о системе |
SDET участвует в каждом этапе процесса разработки ПО, как Проектирование, разработка и тестирование. | QA участвует только в жизненном цикле тестирования процесса разработки ПО. |
Высококвалифицированный специалист со знаниями как в разработке, так и в тестировании | Тестировщик ПО участвует только в подготовке и выполнении Test case |
SDET может участвовать в разработке средств автоматизации тестирования | Не ожидается разработка средств автоматизации тестирования. |
SDET должны выполнять такие обязанности, как тестирование производительности, автоматическое создание тестовых данных и т. д. | Только задачи по ручному тестированию |
Знает требования и гайдлайны для продуктов | От QA таких знаний не ожидается. |
- Среда разработки (Development Env) – в ней разработчики пишут код, проводят отладку, исправляют ошибки, выполняют Unit-тестирование. За эту среду отвечают также разработчики.
- Среда тестирования (Test Env) – в этой среде работают тестировщики. Тут тестируются новые билды. Здесь тестировщики проверяют функционал, проводят регрессионные проверки, воспроизводят ошибки.
- Интеграционная среда (Integration Env) – иногда реализована в рамках среды тестированя, а иногда в рамках превью среды. В этой среде собрана необходимая для end-to-end тестирования схема взаимодействующих друг с другом модулей, систем, продуктов. Собственно, необходима она для интеграционного тестирования. Поддержка среды – также, как и в случае со средой тестирования
- Превью среда (Preview, Preprod Env) – в идеале, это среда идентичная или максимально приближенная к продуктивной: те же данные, то же аппаратно-программное окружение, та же производительность. Она используется, чтобы сделать финальную проверку ПО в условиях максимально приближенным к «боевым». Здесь тестировщики проводят заключительное end-to-end тестирование функционала, бизнес и/или пользователи проводят UAT, а команды поддержки L3 и L2 выполняют DryRun (пробную установку релиза). Как правило за эту среду отвечает группа L3 поддержки.
- Продакшн среда (Prodaction Env) – среда, в которой работают пользователи. С этой средой работает команда L2 поддержки устанавливая поставки ПО или патчи с исправлениями, выполняя настройки, отвечая за работоспособность всех систем. Инциденты и проблемы требующие исправления ПО передаются в работу команде на L3
Испытательный стенд (Test Bed) – более глобальная сущность и включает в себя operating system, configuration management for the products, hardware, network topology и т. д. Настраиваются в соответствии с требованиями тестируемого приложения. В некоторых случаях испытательный стенд может представлять собой комбинацию тестовой среды и тестовых данных, которые он использует.
Настройка правильной среды тестирования гарантирует успех тестирования ПО. Любые недостатки в этом процессе могут привести к дополнительным затратам и времени для клиента. Следующие люди участвуют в настройке тестовой среды: Системные администраторы, Разработчики, Тестеры.
Тестовые данные — это набор входных значений, необходимых для выполнения Test case. Тестеры определяют данные в соответствии с требованиями. Они могут сделать это вручную или использовать инструменты генерации.- Pre-Alpha: — ПО является прототипом. Пользовательский интерфейс завершен. Но не все функции завершены. На данном этапе ПО не публикуется.
- Alpha: является ранней версией программного продукта. Цель — вовлечь клиента в процесс разработки. Хороший Альфа-тест должен иметь четко определенный план тестирования с комплексными тестовыми примерами. Это дает лучшее представление о надежности программного обеспечения на ранних стадиях. В некоторых случаях тестирование может быть передано на аутсорс.
- Beta: ПО стабильно и выпускается для ограниченной пользовательской базы. Цель состоит в том, чтобы получить отзывы клиентов о продукте и внести соответствующие изменения в ПО.
- Release Candidate (RC): основываясь на отзывах Beta Test, вы вносите изменения в ПО и хотите проверить исправления ошибок. На этом этапе вы не хотите вносить радикальные изменения в функциональность, а просто проверяете наличие ошибок. RC также выпущен для общественности
- Release: Все работает, ПО выпущено для общественности.
Существуют различные типы бета-тестов в тестировании ПО, и они заключаются в следующем:
- Традиционное бета-тестирование: продукт распространяется на целевой рынок, и соответствующие данные собираются по всем аспектам. Эти данные могут быть использованы для улучшения продукта.
- Публичное бета-тестирование: продукт публикуется во внешнем мире через онлайн-каналы, и данные могут быть получены от любого пользователя. На основе обратной связи могут быть сделаны улучшения продукта.
- Техническое бета-тестирование: продукт передается во внутреннюю группу организации и собирает отзывы / данные от сотрудников организации.
- Целевая бета-версия: продукт выпущен на рынок для сбора отзывов об особенностях программы.
- Бета-версия после выпуска. Продукт выпущен на рынок, и данные собираются для внесения улучшений в будущем выпуске продукта.
Пилотное тестирование связано с установкой системы на площадке заказчика (или в среде, моделируемой пользователем) для тестирования на предмет постоянного и регулярного использования. Выявленные недостатки затем отправляются команде разработчиков в виде отчетов об ошибках, и эти ошибки исправляются в следующей сборке системы. Во время этого процесса иногда приемочное тестирование также включается как часть тестирования на совместимость. Это происходит, когда система разрабатывается для замены старой.
Билд это номер, даваемый ПО при передаче от разработчиков тестировщикам. Релиз — это номер, даваемый ПО при передаче конечному пользователю. Бизнес – логика (domain) это то, что конкретная программа по задумке должна сделать. Например, в складской программе проверка на возможность отправить товар (вдруг его нет в наличии). Это правила, которые должны соблюдаться в данной конкретной программе, определенные бизнес-клиентом. Слои приложения – слой пользовательского интерфейса, слой бизнес логики, слой сохранения данных. Начинать знакомство с проектом лучше с интервью. Станьте журналистом. Что да как, где больше всего багов, каким видят тестированиее сейчас и каким его хотят видеть в будущем? Далее в зависимости от методологии разработки и вообще местных обстоятельств гуглим соответствующий вебинар/статью и т.п., в крайнем случае можно поинтересоваться у коллег в тематических сообществах, например, в tg.- DevTools
- Сниффер (например, Charles Proxy)
- Тестирование API (например, Postman или SoapUI)
- Тестирование производительности (например, JMeter)
- Различные инструменты из категории тестирования безопасности (например, OWASP)
- Прочее: мессенджеры, баг-трекинговые системы, генераторы тестовых данных и т.п.
В каждый современный браузер встроены инструменты разработчика — они позволяют быстро отловить и исправить ошибки в разметке или в коде. С их помощью можно узнать, как построилось DOM-дерево, какие теги и атрибуты есть на странице, почему не подгрузились шрифты и многое другое:
- Проверка ответа сервера
- Проверка мобильной адаптивности
- Проверка мобильной выдачи
- Региональная поисковая выдача
- Изменение дизайна
- Анализ протокола безопасности
- Анализ скорости загрузки страницы
- Функциональные виды («Что?» — проверяет весь функционал продукта):
- Функциональное тестирование (Functional testing)
- Тестирование взаимодействия (Interoperability testing)
- Нефункциональное («Как?»):
- Производительности (Performance)
- Тестирование ёмкости/способностей (Capacity testing)
- Стрессовое (Stress testing)
- Нагрузочное (Load testing)
- Объемное тестирование (Volume testing)
- Выносливости (Soak/Endurance testing)
- Стабильности/надежности (Stability / Reliability testing)
- Шиповое (Spike)
- Отказоустойчивости (Stability testing)
- Масштабируемости (Scalability test)
- Отказ и восстановление (Failover and Recovery testing)
- Удобство пользования (Usability testing)
- Тестирование установки (Installation testing)
- Тестирование безопасности (Security and Access Control testing)
- Конфигурационное (Configuration testing)
- Связанное с изменениями:
- Регрессионное (Regression testing)
- Санитарное или проверка согласованности/исправности (Sanity testing)
- Дымовое (Smoke testing)
- Тестирование сборки (Build Verification testing)
Тестирование методом «черного ящика», также известное как тестирование, основанное на спецификации или тестирование поведения – техника тестирования, основанная на работе исключительно с внешними интерфейсами тестируемой системы.
– тестирование, как функциональное, так и нефункциональное, не предполагающее знания внутреннего устройства компонента или системы.
– тест-дизайн, основанный на технике черного ящика – процедура написания или выбора тест-кейсов на основе анализа функциональной или нефункциональной спецификации компонента или системы без знания ее внутреннего устройства.
Почему именно «черный ящик»? Тестируемая программа для тестировщика – как черный непрозрачный ящик, содержания которого он не видит. Целью этой техники является поиск ошибок в таких категориях:
– неправильно реализованные или недостающие функции;
– ошибки интерфейса;
– ошибки в структурах данных или организации доступа к внешним базам данных;
– ошибки поведения или недостаточная производительности системы;
Таким образом, мы не имеем представления о структуре и внутреннем устройстве системы. Нужно концентрироваться на том, ЧТО программа делает, а не на том, КАК она это делает.
Пример:
Тестировщик проводит тестирование веб-сайта, не зная особенностей его реализации, используя только предусмотренные разработчиком поля ввода и кнопки. Источник ожидаемого результата – спецификация.
Поскольку это тип тестирования, по определению он может включать другие его виды. Тестирование черного ящика может быть как функциональным, так и нефункциональным. Функциональное тестирование предполагает проверку работы функций системы, а нефункциональное – соответственно, общие характеристики нашей программы.
Техника черного ящика применима на всех уровнях тестирования (от модульного до приемочного), для которых существует спецификация. Например, при осуществлении системного или интеграционного тестирования, требования или функциональная спецификация будут основой для написания тест-кейсов.
Техники тест-дизайна, основанные на использования черного ящика, включают:
– классы эквивалентности;
– анализ граничных значений;
– таблицы решений;
– диаграммы изменения состояния;
– тестирование всех пар.
Преимущества:
– тестирование производится с позиции конечного пользователя и может помочь обнаружить неточности и противоречия в спецификации;
– тестировщику нет необходимости знать языки программирования и углубляться в особенности реализации программы;
– тестирование может производиться специалистами, независимыми от отдела разработки, что помогает избежать предвзятого отношения;
– можно начинать писать тест-кейсы, как только готова спецификация.
Недостатки:
– тестируется только очень ограниченное количество путей выполнения программы;
– без четкой спецификации (а это скорее реальность на многих проектах) достаточно трудно составить эффективные тест-кейсы;
– некоторые тесты могут оказаться избыточными, если они уже были проведены разработчиком на уровне модульного тестирования;
Противоположностью техники черного ящика является тестирование методом белого ящика, речь о котором пойдет ниже.
Тестирование методом белого ящика (также: прозрачного, открытого, стеклянного ящика; основанное на коде или структурное тестирование) – метод тестирования ПО, который предполагает, что внутренняя структура/устройство/реализация системы известны тестировщику. Мы выбираем входные значения, основываясь на знании кода, который будет их обрабатывать. Точно так же мы знаем, каким должен быть результат этой обработки. Знание всех особенностей тестируемой программы и ее реализации – обязательны для этой техники. Тестирование белого ящика – углубление во внутренне устройство системы, за пределы ее внешних интерфейсов.Техника белого ящика применима на разных уровнях тестирования – от модульного до системного, но главным образом применяется именно для реализации модульного тестирования компонента его автором.
Преимущества:
– тестирование может производиться на ранних этапах: нет необходимости ждать создания пользовательского интерфейса;
– можно провести более тщательное тестирование, с покрытием большого количества путей выполнения программы.
Недостатки:
– для выполнения тестирования белого ящика необходимо большое количество специальных знаний
Основным методом тестирования Белого ящика является анализ покрытия кода. Анализ покрытия кода устраняет пробелы в наборе тестовых примеров. Он определяет области программы, которые не покрываются набором Test case. После выявления пробелов вы создаете контрольные примеры для проверки непроверенных частей кода, тем самым повышая качество программного продукта.
- Охват операторов: — Этот метод требует, чтобы каждое возможное утверждение в коде было проверено хотя бы один раз в процессе тестирования разработки ПО.
- Покрытие ветвления — этот метод проверяет все возможные пути (если-еще и другие условные циклы) программного приложения.
Техника серого ящика применима на разных уровнях тестирования – от модульного до системного, но главным образом применяется на интеграционном уровне для проверки взаимодействия разных модулей программы.
Пример тестирования «серого ящика»: при тестировании веб-сайтов на битые ссылки, если тестер сталкивается с какой-либо проблемой с этими ссылками, он может сразу же внести изменения в HTML-код и проверить в реальном времени.
Методы:
- Матричное тестирование: этот метод тестирования включает в себя определение всех переменных, которые существуют в их программах.
- Регрессионное тестирование: чтобы проверить, повлияло ли изменение в предыдущей версии другие аспекты программы в новой версии.
- Тестирование ортогональных массивов или OAT: обеспечивает максимальное покрытие кода с минимальным количеством тестов.
- Pattern testing: это тестирование выполняется на данных истории предыдущих дефектов системы. В отличие от тестирования черного ящика, в тестировании серого ящика копаются в коде и определяют причину сбоя.
Типичные примеры: ввести неправильно составленный e-mail и номер телефона, загрузить файл непредусмотренного расширения или размера.
Для деструктивного тестирования существует множество способов его тестирования:
- Метод анализа точек отказа: это пошаговое прохождение системы, проводящее оценку того, что может пойти не так в разных точках. Для этой стратегии может быть использована помощь BA (Business Analyst).
- Экспертная проверка тестировщика: проанализируйте или дайте на ревью ваши Test вашему коллеге-тестировщику, который менее знаком с системой/функцией
- Бизнес-анализ тестовых случаев. Конечные пользователи или эксперты могут подумать о многих допустимых сценариях, которые иногда тестировщики могут не учитывать или упустить, так как все их внимание будет сосредоточено на тестировании требований.
- Проведите предварительное тестирование с использованием контрольных таблиц (run sheets). Исследовательское тестирование с использованием контрольных таблиц поможет определить, что было проверено, повторить тесты и позволит вам контролировать охват тестами.
- Используйте другой источник: вы можете попросить кого-нибудь сломать программный продукт и проанализировать различные сценарии.
Правило трёх А(AAA) (arrange, act, assert) или триада «дано, когда, тогда» — хорошая мнемоника, чтобы поддерживать хорошую структуру тестов.
С этими терминами происходит путаница и даже глоссарий ISTQB не проясняет ситуацию. Обычно эти термины используют как синонимы, а конкретика варьируется от компании к компании. Но если копнуть и попробовать разобраться, получается примерно следующее:- Модульное тестирование (юнит-тестирование). Модульные тесты используются для тестирования какого-либо одного логически выделенного и изолированного элемента системы (отдельные методы класса или простая функция, subprograms, subroutines, классы или процедуры) в коде. Очевидно, что это тестирование методом белого ящика и чаще всего оно проводится самими разработчиками. Целью тестирования модуля является не демонстрация правильного функционирования модуля, а демонстрация наличия ошибки в модуле. Изоляция тестируемого блока достигается с помощью заглушек (stubs), манекенов (dummies) и макетов (mockups).
- Компонентное тестирование — тип тестирования ПО, при котором тестирование выполняется для каждого отдельного компонента отдельно, без интеграции с другими компонентами. Его также называют модульным тестированием (Module testing), если рассматривать его с точки зрения архитектуры. Как правило, любое программное обеспечение в целом состоит из нескольких компонентов. Тестирование на уровне компонентов (Component Level testing) имеет дело с тестированием этих компонентов индивидуально. Это один из самых частых типов тестирования черного ящика, который проводится командой QA. Для каждого из этих компонентов будет определен сценарий тестирования, который затем будет приведен к Test case высокого уровня -> детальным Test case низкого уровня с предварительными условиями.
- Тестирование компонентов в малом (CTIS — Component testing In Small). Тестирование компонентов может проводиться с или без изоляции остальных компонентов в тестируемом программном обеспечении или приложении. Если это выполняется с изоляцией другого компонента, то это называется CTIS. Пример: веб-сайт, на котором есть 5 разных веб-страниц, тестирование каждой веб-страницы отдельно и с изоляцией других компонентов.
- Тестирование компонентов в целом (CTIL — Component testing In Large). Тестирование компонентов, выполненное без изоляции других компонентов в тестируемом программном обеспечении или приложении, называется CTIL. Давайте рассмотрим пример, чтобы понять это лучше. Предположим, что есть приложение, состоящее из трех компонентов, таких как Компонент A, Компонент B и Компонент C. Разработчик разработал компонент B и хочет его протестировать. Но для того, чтобы полностью протестировать компонент B, некоторые его функции зависят от компонента A, а некоторые — от компонента C. Функциональный поток: A -> B -> C, что означает, что существует зависимость от B как от A, так и от C, заглушка - вызываемая функция, а драйвер - вызывающая функция. Но компонент A и компонент C еще не разработаны. В этом случае, чтобы полностью протестировать компонент B, мы можем заменить компонент A и компонент C заглушкой и драйверами по мере необходимости. Таким образом, в основном, компоненты A & C заменяются заглушками и драйверами, которые действуют как фиктивные объекты до тех пор, пока они фактически не будут разработаны.
Unit testing | Component testing |
Тестирование отдельных программ, модулей, функций для демонстрации того, что программа выполняется согласно спецификации | Тестирование каждого объекта или частей программного обеспечения отдельно с или без изоляции других объектов |
Проверка в(на) соответствии с design documents | Проверка в(на) соответствии с test requirements, use case |
Пишутся и выполняются(обычно) разработчиками | Тестировщиками |
Выполняется первым | Выполняется после Unit |
Разница между компонентным и модульным тестированием: По-существу эти уровни тестирования представляют одно и тоже, разница лишь в том, что в компонентном тестировании в качестве параметров функций используют реальные объекты и драйверы, а в модульном тестировании — конкретные значения.
Интеграционное тестирование предназначено для проверки насколько хорошо два или более модулей ПО взаимодействуют друг с другом, а также взаимодействия с различными частями системы (операционной системой, оборудованием либо связи между различными системами).Уровни интеграционного тестирования:
- Компонентный интеграционный уровень (Component Integration testing)
- Проверяется взаимодействие между компонентами системы после проведения компонентного тестирования.
- Системный интеграционный уровень (System Integration testing)
- Проверяется взаимодействие между разными системами после проведения системного тестирования.
- Подход Большого взрыва:
- Инкрементальный подход:
- Нисходящий подход
- Подход снизу-вверх
- Сэндвич-подход
Информация должна приходить в течение нескольких секунд или нескольких минут с быстрых тестов на ранних этапах конвейера. И наоборот, более длительные тесты — обычно с более широкой областью — размещаются на более поздних этапах, чтобы не тормозить фидбек от быстрых тестов. Как видите, этапы конвейера развёртывания определяются не типами тестов, а их скоростью и областью действия. Поэтому очень разумно может быть разместить некоторые из самых узких и быстрых интеграционных тестов на ту же стадию, что и юнит-тесты — просто потому что они дают более быструю обратную связь
Именно здесь больше всего споров о названиях. «Область» интеграционных тестов также весьма противоречива, особенно по характеру доступа к приложению (тестирование в чёрном или белом ящике; разрешены mock-объекты или нет). На практике получается так: если тест…- использует базу данных,
- использует сеть для вызова другого компонента/приложения,
- использует внешнюю систему (например, очередь или почтовый сервер),
- читает/записывает файлы или выполняет другие операции ввода-вывода,
- полагается не на исходный код, а на бинарник приложения,
- Юнит-тесты легче поддерживать.
- Юнит-тесты легко воспроизводят пограничные случаи и редкие ситуации.
- Юнит-тесты выполняются гораздо быстрее интеграционных тестов.
- Сбойные юнит-тесты легче исправить, чем интеграционные.
Преимущества: Локализация ошибок проще. Не тратится время на ожидание разработки всех модулей, в отличие от подхода Большого взрыва
Недостатки: Критические модули (на верхнем уровне архитектуры ПО), которые контролируют поток приложения, тестируются последними и могут быть подвержены дефектам. Ранний прототип невозможен.
Вначале тестируются все высокоуровневые модули, и постепенно один за другим добавляются низкоуровневые. Все модули более низкого уровня симулируются заглушками с аналогичной функциональностью, затем по мере готовности они заменяются реальными активными компонентами.Преимущества: Локализация неисправностей проще. Возможность получить ранний прототип. Основные недостатки дизайна могут быть найдены и исправлены в первую очередь. Недостатки: Нужно много заглушек. Модули на более низком уровне тестируются недостаточно.
Представляет собой комбинацию подходов сверху вниз и снизу-вверх. Здесь верхние модули тестируются с нижними модулями, а нижние модули интегрируются с верхними модулями и тестируются. Эта стратегия использует и заглушки и драйверы. Все или практически все разработанные модули собираются вместе в виде законченной системы или ее основной части, и затем проводится интеграционное тестирование. Такой подход очень хорош для сохранения времени. Однако если Test case и их результаты записаны не верно, то сам процесс интеграции сильно осложнится, что станет преградой для команды тестирования при достижении основной цели интеграционного тестирования Тестовый драйвер — это фрагмент кода, который вызывает тестируемый программный компонент. Это полезно при тестировании по принципу «снизу-вверх». Тестовая заглушка - это фиктивная программа, которая интегрируется с приложением для полной функциональности. Они актуальны для тестирования, в котором используется нисходящий подход. Давайте возьмем пример.-
Допустим, есть сценарий для проверки интерфейса между модулями A и B. Мы разработали только модуль-A. Затем мы можем проверить модуль-A, если у нас есть реальный модуль-B или фиктивный модуль для него. В этом случае мы называем модуль-B тестовой заглушкой.
-
Теперь модуль B не может отправлять или получать данные напрямую из модуля A. В таком сценарии мы перемещаем данные из одного модуля в другой, используя некоторые внешние функции, называемые Test Driver.
Заглушки и драйверы не реализуют всю логику программного модуля, а только моделируют обмен данными с вызывающим модулем. Заглушка: вызывается тестируемым модулем. Драйвер: вызывает модуль для тестирования.
Основной задачей системного тестирования является проверка как функциональных, так и не функциональных требований в системе в целом. При этом выявляются дефекты, такие как неверное использование ресурсов системы, непредусмотренные комбинации данных пользовательского уровня, несовместимость с окружением, непредусмотренные сценарии использования, отсутствующая или неверная функциональность, неудобство использования и т. д. Для минимизации рисков, связанных с особенностями поведения в системы в той или иной среде, во время тестирования рекомендуется использовать окружение максимально приближенное к тому, на которое будет установлен продукт после выдачи. Системное тестирование относят к черному ящику.Можно выделить два подхода к системному тестированию:
- на базе требований (requirements based): Для каждого требования пишутся Test case, проверяющие выполнение данного требования.
- на базе случаев использования (use case based): На основе представления о способах использования продукта создаются случаи использования системы (Use Cases). По конкретному случаю использования можно определить один или более сценариев. На проверку каждого сценария пишутся Test case, которые должны быть протестированы.
Функциональные тесты основываются на функциях, выполняемых системой, и могут проводиться на всех уровнях тестирования (компонентном, интеграционном, системном, приемочном). Как правило, эти функции описываются в требованиях, функциональных спецификациях или в виде случаев использования системы (use cases).
Тестирование в перспективе «требования» использует спецификацию функциональных требований к системе как основу для дизайна Test case. В этом случае необходимо сделать список того, что будет тестироваться, а что нет, приоритезировать требования на основе рисков (если это не сделано в документе с требованиями), а на основе этого приоритезировать тестовые сценарии. Это позволит сфокусироваться и не упустить при тестировании наиболее важный функционал.
Тестирование в перспективе «бизнес-процессы» использует знание этих самых бизнес-процессов, которые описывают сценарии ежедневного использования системы. В этой перспективе тестовые сценарии (test scripts), как правило, основываются на случаях использования системы (use cases).
Преимущества функционального тестирования:
- имитирует фактическое использование системы;
- возможность упущения логических ошибок в программном обеспечении;
- вероятность избыточного тестирования.
ПО с хорошими характеристиками взаимодействия может быть легко интегрировано с другими системами, не требуя каких-либо серьезных модификаций. В этом случае, количество изменений и время, требуемое на их выполнение, могут быть использованы для измерения возможности взаимодействия. Например, тестирование совместимости проводится между смартфонами и планшетами для проверки передачи данных через Bluetooth.
Существуют разные уровни тестирования совместимости:
- Аппаратное обеспечение: проверяет совместимость программного обеспечения с различными аппаратными конфигурациями.
- Операционные системы: Он проверяет ваше программное обеспечение на совместимость с различными операционными системами, такими как Windows, Unix*, Mac OS и т. д.
- Программное обеспечение: проверяет ваше разработанное программное обеспечение на совместимость с другим программным обеспечением. Например, приложение MS Word должно быть совместимо с другими программами, такими как MS Outlook, MS Excel, VBA и т. д.
- Сеть: оценка производительности системы в сети с различными параметрами, такими как пропускная способность, скорость работы, емкость.
- Браузер: проверяет совместимость вашего сайта с различными браузерами, такими как Firefox, Google Chrome, Internet Explorer и т. д.
- Устройства: проверяет совместимость вашего программного обеспечения с различными устройствами, такими как устройства USB-порта, принтеры и сканеры, другие мультимедийные устройства и Bluetooth.
- Mobile: проверка совместимости вашего программного обеспечения с мобильными платформами, такими как Android, iOS и т. д.
- Версии программного обеспечения. Он проверяет совместимость вашего программного приложения с различными версиями программного обеспечения. Например, проверка вашего Microsoft Word на совместимость с Windows 7, Windows 7 SP1, Windows 7 SP2, Windows 7 SP3.
- Тестирование обратной совместимости предназначено для проверки поведения разработанного аппаратного / программного обеспечения с использованием более старых версий аппаратного / программного обеспечения.
- Тестирование прямой совместимости заключается в проверке поведения разработанного аппаратного / программного обеспечения с использованием более новых версий аппаратного / программного обеспечения.
- Подключите (connect) два или более устройств от разных производителей
- Проверьте связь между устройствами
- Проверьте, может ли устройство отправлять / получать пакеты или фреймы друг от друга
- Проверьте, правильно ли обрабатываются данные на уровне сети и объектов
- Проверьте, правильно ли работают реализованные алгоритмы
- Результат в порядке: проверьте следующий результат. Результат не в порядке: используйте инструменты мониторинга, чтобы обнаружить источник ошибки
- Отчет о результатах в тестовом отчете.
- Производительность
- Функции
- Прочность (Robustness)
- Совместимость (Interoperability)
- Поведение системы
- Тестирование на соответствие (Compliance testing)
- Нагрузочное тестирование (Load testing)
- Стресс тестирование (Stress testing)
- Объемное тестирование (Volume testing)
Conformance testing | Compliance testing |
Conformance является формальным и точным способом тестирования стандартов | Compliance является неформальным и менее точным способом тестирования стандартов |
Сертификация Conformance применима только к операционной системе, имеющей официальный Certification Authority | Операционная система, которая обеспечивает единый API (Portable Operating System Interface), считается совместимой |
Conformance testing используется для тестирования системы, которая обеспечивает полную поддержку данных стандартов | Compliance testing используется для тестирования системы, обеспечивающей поддержку некоторых из указанных стандартов |
- Нефункциональное тестирование должно повысить удобство использования, эффективность, ремонтопригодность и portability продукта.
- Помогает снизить производственный риск и затраты, связанные с нефункциональными аспектами продукта.
- оптимизировать способ установки, настройки, выполнения, управления и мониторинга продукта.
- Собирать и производить измерения и метрики для внутренних исследований и разработок.
- Улучшать и расширять знания о поведении продукта и используемых технологиях.
- Производительности (Performance)
- Стрессовое (Stress testing)
- Тестирование ёмкости/способностей (Capacity testing)
- Нагрузочное (Load testing)
- Объемное тестирование (Volume testing)
- Выносливости/стабильности/надежности (Soak/Endurance/Stability/Reliability testing)
- Шиповое (Spike)
- Масштабируемости (Scalability Test)
- Тестирование времени отклика (Response Time testing)
- Тестирование на отказоустойчивость (Failover testing)
- Тестирование совместимости (Compatibility testing)
- Тестирование на удобство пользования (Usability testing)
- Тестирование на поддерживаемость/ремонтопригодность (Maintainability testing)
- Тестирование безопасности (Security testing)
- Тестирование аварийного восстановления (Disaster Recovery testing)
- Тестирование на соответствие (Compliance testing)
- Тестирование переносимости (Portability testing)
- Тестирование эффективности (Efficiency testing)
- Базовое тестирование (Baseline testing)
- Тестирование документации (Documentation testing)
- Тестирование восстановления (Recovery testing)
- Интернационализация (Globalization/Internationalization testing)
- Тестирование локализации (Localization testing)
- Время задержки (Latency) — временной интервал между запросом и ответом. Например, у вашего сервиса время задержки составляет 100ms, что означает, что такому сервису потребуется 100 миллисекунд на обработку запроса и генерирование ответа. Как правило, чем ниже время задержки, тем лучше клиентский опыт.
- Время ответа (Response time) — время, необходимое для ответа на запрос
- Пропускная способность (Throughput) - фактическое количество запросов (или пользователей), которое может обработать система за определенное время. В то время как время задержки говорит вам только о времени, метрика пропускной способности информирует об объеме данных, полученных и обработанных в момент времени. Важно не отделять показатели времени задержки от пропускной способности, т.к. высокий показатель времени задержки часто прямо связан с увеличением показателей метрики пропускной способности. Пропускная способность обычно измеряется в rps – (кол-во) запросов в секунду (requests per second).
- Ширина пропускания канала (Bandwidth) - максимальное число запросов (или пользователей), которое может обработать система. В отличие от пропускной способности ширина пропускания канала измеряет максимальный объем, который может обработать приложение.
- Транзакции в секунду. Пользовательские транзакции – это последовательность действий пользователя в интерфейсе. Сравнивая реальное время прохождения транзакции с ожидаемой (или количество транзакций в секунду), вы сможете сделать вывод о том, насколько успешной системой было пройдено нагрузочное тестирование.
- Процент ошибок рассчитывается как отношение невалидных ответов к валидным за промежуток времени.
- Про Average, медианы, перцентили и т.п. углубляться в рамках этой статьи не буду, есть в гугле.
Основная цель тестирования клиентской части состоит в измерении времени, необходимого браузеру, для загрузки HTML-страницы. Наиболее важными показателями здесь являются количество загружаемых данных, их объем, а также количество выполненных запросов.
Собрать данную статистику можно как с использованием встроенных инструментов браузера (DevTools), так и с помощью специализированных инструментов и онлайн-сервисов, которые позволяют замерить необходимые показатели с учетом интересующего региона.
Помимо общего веса страницы, инструменты предоставляют детализированную информацию по каждому из компонентов. Изучив параметры запросов, можно обнаружить ряд проблем, приводящих к ухудшению скорости отображения страницы. К примеру, подгружается слишком большая картинка и Javascript, или отправляется значительное количество запросов.
Другая необходимая проверка направлена на анализ заголовков кэширования, поскольку корректность его выполнения при повторном посещении страницы позволяет повысить скорость загрузки страницы до 80%.
Тестирование серверной части направлено на анализ выполнения запросов и получения соответствующего ответа от Back-end.
Цели данного вида тестирования:
- Измерить время отклика самых важных бизнес-транзакций;
- Определить предельный уровень допустимой нагрузки;
- Выявить «узкие» места в производительности системы;
- Составить рекомендации по улучшению производительности;
- Найти возможные дефекты, проявляющиеся только при одновременной работе большого количества пользователей.
- измерение времени выполнения выбранных операций при определенных интенсивностях выполнения этих операций
- определение количества пользователей, одновременно работающих с приложением
- определение границ приемлемой производительности при увеличении нагрузки (при увеличении интенсивности выполнения этих операций)
- исследование производительности на высоких, предельных, стрессовых нагрузках
В реальном мире проводят только часть из перечисленных подвидов в соответствии с бюджетом и приоритетами данного ПО, а параметры тестов и метрики могут корректироваться в разных ситуациях.
Небольшая заметка. Несмотря на необходимость понимания многих математических и статистических концепций, многие тестировщики и менеджеры либо не имеют достаточных знаний в области математики и статистики, либо не пользуются ими. Это приводит к значительным искажениям и неверной интерпретации результатов тестирования производительности. Поэтому хороший специалист должен обладать и смежными знаниями. Capacity — базовый тест, который обычно выполняется первым. Все последующие тесты на среднее время ответа, регенерацию системы, утилизацию ресурсов нужно выполнять с оглядкой на результаты Capacity. Емкость системы измеряется в rps (requests per second). Используемый подход: ступенчато повышаем нагрузку до момента, когда время ответа начнет расти экспоненциально. Экспоненциальный рост времени ответа, как правило, связан с полной утилизацией одного из ресурсов, из-за которого запросы вместо моментальной обработки выстраиваются друг за другом и ждут своей очереди на обработку. Capacity point – точка, где перестает расти Throughput, но увеличивается Response Time, то есть система перестаёт справляться с запросами.Исходя из этого тестирования выбираются значения для stress, load и soak/endurance тестов. Для stress берётся значение близкое к capacity point, но немного меньше. Для load количество пользователей из зоны деградации.
Важно, ваша цель, не получить кол-во rps, при котором всё взрывается, а понять, какой именно ресурс станет узким местом, при повышении нагрузки. Поэтому, если обстреливаемый вами сервер не покрыт мониторингом — можете даже не начинать тест. Общий подход к сбору телеметрии — чем больше метрик собирается, тем лучше.
В некоторых случаях Capacity называют так же Scalability (масштабируемость), но в целом это не равнозначные понятия.
Профиль нагрузки тот же, что и при нагрузочном тестировании. Что получаем в результате? Ответы на следующие вопросы:- Увеличится ли производительность приложения, если добавить дополнительные аппаратные ресурсы?
- Увеличится ли производительность пропорционально количеству добавленных аппаратных средств?
Разница между тестированием ёмкости/способностей и тестированием масштабируемости? (Capacity vs Scalability)
Тестирование емкости измеряет, сколько пользователей может обработать приложение. Это подмножество тестирования масштабируемости, в котором при тестировании масштабируемости вы получите меру емкости приложения. Тестирование масштабируемости измеряет, насколько хорошо приложение справляется с растущим числом пользователей. Если вы тестируете масштабируемость до тех пор, пока приложение не выйдет из строя, у вас будет мера того, сколько пользователей (емкость) может обработать приложение.
Стрессовое тестирование выполняется самым первым, если нет отдельного Capacity тестирования, хотя по факту это всё равно будет Capacity, т.к. нагрузка берется «с потолка». Позволяет проверить насколько приложение и система в целом работоспособны в условиях высокой нагрузки. Нагрузка на систему будет возрастать непрерывно до тех пор, пока не будет достигнут один из критериев его остановки. Пример: стресс-тест банковской системы был остановлен при превышении отметки в 1500 пользователей, когда высокая загруженность процессора (более 80%) привела к увеличению среднего времени отклика в пять раз и массовому появлению ошибок HTTP(S). Нагрузочное тестирование - это тестирование, имитирующее работу определенного количества бизнес пользователей на каком-либо общем (разделяемом ими) ресурсе. Этот тип тестирования производительности выполняется для диагностики поведения системы при увеличении рабочей нагрузки.Нагрузка на систему обычно подается на протяжении 1-2 часов (в некоторых источниках: 4-8 часов, хотя это уже больше endurance), количество пользователей для нагрузочного теста берется из зоны деградации (в некоторых источниках: определяется в количестве 80% от результата максимальной производительности). В это время собираются метрики производительности: количество запросов в секунду, транзакций в секунду, время отклика от сервера, процент ошибок в ответах, утилизация аппаратных ресурсов и т. д.
Объемное тестирование предназначено для прогнозирования того, может ли система / приложение обрабатывать большой объем данных. Это тестирование сосредоточено на наполнении базы данных продукта в реальных сценариях использования.Пример 1: отправка через POST-запросы очень большого количества данных.
Пример 2: как изменится производительность приложения спустя X лет, если аудитория приложения вырастет в Y раз?
Задачей тестирования стабильности является проверка работоспособности приложения при длительном (многочасовом) тестировании со средним уровнем нагрузки. Время выполнения операций может играть в данном виде тестирования второстепенную роль. При этом на первое место выходит является проверка на утечки памяти, время отклика, правильность подключения и закрытия подключения к модулям (например, БД) и т.п. в течение длительного времени, чтобы гарантировать, что после длительного периода время отклика системы останется таким же или лучше, чем на начало теста. Этот тип тестирования выполняется в самом конце (а где-то по ночам). Так же он помогает управлять будущими нагрузками, ведь нам необходимо понять, сколько дополнительных ресурсов (таких как ЦП, емкость диска, использование памяти или пропускная способность сети) необходимы для поддержки использования в будущем. Этот вид тестирования предназначен для определения поведения системы при внезапном увеличении нагрузки (большого количества пользователей) на систему. Например, дни распродаж в интернет-магазине. Проверка устойчивости проводится для того, чтобы убедиться, что система способна вернуться в исходное состояние после кратковременного напряжения. Например, если в интернет-магазине действует скидка на определенные товары на короткое время, скажем, один час в день. Время ответа относится ко времени, которое требуется одному системному узлу для ответа на запрос другого. Среднее время ответа — это среднее время, затрачиваемое на каждый запрос в оба конца. Пиковое время отклика помогает нам определить, какие компоненты потенциально проблематичны. Коэффициент ошибок - это математический расчет, который отображает процент проблемных запросов. Три критических значения времени отклика: 0,1 секунды, 1,0 секунды и 10 секунд. Это метод тестирования, который предлагает ступенчато поднимать нагрузку до тех пор, пока система не выйдет из строя. Тестирование хранилища определяется как тип тестирования программного обеспечения, который проверяет, сохраняет ли тестируемое приложение соответствующие данные в соответствующих каталогах и достаточно ли у него места для предотвращения неожиданного завершения из-за недостатка дискового пространства. Это также называется тестированием производительности хранилища (Storage Performance testing).Зачем оно нужно?
- Медленное хранилище означает медленное время отклика, длительные запросы и более низкую availability приложений.
- Медленное хранилище — это накладные расходы на обслуживание серверной инфраструктуры.
- Также помогает найти практическое ограничение хранилища перед деплоем.
- Помогает понять, как система будет реагировать при замене или обновлении аппаратного обеспечения.
- Application testing: Тестирование приложений с примерами запросов в production like environment
- Сравните время ответа OLTP
- Сравните время выполнения batch
- Сравните rates непрерывной потоковой передачи
- Application Simulation: Проведите тестирование с использованием стандартного программного обеспечения, аналогичного целевому приложению
- Протестировать на пиковые значения IOPS для баз данных
- Тест пика для data streaming environments
- Проверка задержек хранилища для обмена сообщениями или других однопоточных приложений
- Benchmarking: Провести тестирование с использованием стандартного программного обеспечения.
- Проверка на повреждение данных.
Тестирование на отказ и восстановление очень важно для систем, работающих по принципу «24x7». Если Вы создаете продукт, который будет работать, например, в интернете, то без проведения данного вида тестирования Вам просто не обойтись. Т.к. каждая минута простоя или потеря данных в случае отказа оборудования, может стоить вам денег, потери клиентов и репутации на рынке.
Методика подобного тестирования заключается в симулировании различных условий сбоя и последующем изучении, и оценке реакции защитных систем. В процессе подобных проверок выясняется, была ли достигнута требуемая степень восстановления системы после возникновения сбоя.
Для наглядности рассмотрим некоторые варианты подобного тестирования и общие методы их проведения. Объектом тестирования в большинстве случаев являются весьма вероятные эксплуатационные проблемы, такие как:
- Отказ электричества на компьютере-сервере
- Отказ электричества на компьютере-клиенте
- Незавершенные циклы обработки данных (прерывание работы фильтров данных, прерывание синхронизации).
- Объявление или внесение в массивы данных невозможных или ошибочных элементов.
- Отказ носителей данных.
Тестирование удобства пользования дает оценку уровня удобства использования приложения по следующим пунктам:
- производительность, эффективность (efficiency) — сколько времени и шагов понадобится пользователю для завершения основных задач приложения, например, размещение новости, регистрации, покупка и т. д. ? (меньше - лучше)
- правильность (accuracy) — сколько ошибок сделал пользователь во время работы с приложением? (меньше - лучше)
- активизация в памяти (recall) – как много пользователь помнит о работе приложения после приостановки работы с ним на длительный период времени? (повторное выполнение операций после перерыва должно проходить быстрее чем у нового пользователя)
- эмоциональная реакция (emotional response) – как пользователь себя чувствует после завершения задачи — растерян, испытал стресс? Порекомендует ли пользователь систему своим друзьям? (положительная реакция - лучше)
Отсюда становится очевидно, что тестирование удобства пользования может производиться на разных уровнях разработки ПО: модульном, интеграционном, системном и приемочном.
Отличия тестирование на удобство пользования и тестирования доступности? (Usability Vs. Accessibility testing)
Тестирование доступности (accessibility testing) — это подмножество юзабилити-тестирования. Его цель — убедиться в том, что наш продукт удобен в использовании для людей с различными видами инвалидности или особенностей восприятия. Это могут быть проблемы со зрением, слухом или ограничения в подвижности рук.
Ваш продукт должен правильно работать с соответствующим ПО. Примеры такого программного обеспечения:
- Speech Recognition Software — ПО преобразует произнесенное слово в текст, который служит вводом для компьютера.
- Программа для чтения с экрана — используется для озвучивания текста, отображаемого на экране
- Программное обеспечение для увеличения экрана — используется для увеличения масштаба элементов и облегчения чтения для пользователей с нарушениями зрения.
- Специальная клавиатура, облегчающая ввод для пользователей, у которых проблемы с двигательными функциями.
Цвет не должен быть единственным способом передачи информации. Если вы используете цвет для того, чтобы, допустим, отобразить статус, эту информацию стоит продублировать еще каким-то образом — геометрическими фигурами, иконками или текстовым комментарием. Хорошая контрастность. Хорошая контрастность обеспечивает нормальную видимость элементов управления и текста даже для людей, не различающих те или иные оттенки. Есть отличный инструмент для тестирования веб-сайтов на предмет доступности для людей с различными формами цветовой слепоты: Color Blind Web Page Filter.
Если вы хотите сократить количество тестов, можно ограничиться только тремя фильтрами: дейтеранопия, протанопия и тританопия. Это наиболее выраженные формы цветовой слепоты (не считая крайне редкого черно-белого зрения). Остальные люди с особенностями цветовосприятия видят больше оттенков, и если ваш UI достаточно хорошо виден с этими тремя фильтрами, то и для остальных будет отображаться корректно.Пример чек-листа:
- Предоставляет ли приложение клавиатурные эквиваленты для всех действий мышью и окон?
- Предоставляются ли инструкции как часть пользовательской документации или руководства? Легко ли понять и использовать приложение, используя документацию?
- Упорядочены ли вкладки логически для обеспечения плавной навигации?
- Предусмотрены ли сочетания клавиш для меню?
- Поддерживает ли приложение все операционные системы?
- Четко ли указано время отклика каждого экрана или страницы, чтобы конечные пользователи знали, как долго ждать?
- Все ли надписи правильно написаны?
- Являются ли цвета подходящим для всех пользователей?
- Правильно ли используются изображения или значки, чтобы их было легко понять конечным пользователям?
- Есть ли звуковые оповещения?
- Может ли пользователь настроить аудио или видео элементы управления?
- Может ли пользователь переопределить шрифты по умолчанию для печати и отображения текста?
- Может ли пользователь настроить или отключить мигание, вращение или перемещение элементов?
- Убедитесь, что цветовое кодирование никогда не используется в качестве единственного средства передачи информации или указания на действие
- Видна ли подсветка с инвертированными цветами?
- Тестирование цвета в приложении путем изменения контрастности
- Правильно ли слышат люди с ограниченными возможностями всё имеющее отношение к аудио и видео?
- Протестируйте все мультимедийные страницы без мультимедиа-оборудования.
- Предоставляется ли обучение пользователям с ограниченными возможностями, что позволит им ознакомиться с программным обеспечением или приложением?
Тестирование интерфейса включает в себя тестирование двух основных сегментов:
- Интерфейс веб-сервера и сервера приложений
- Интерфейс сервера приложений и базы данных
- Workflow: он гарантирует, что механизм интерфейса обрабатывает ваши стандартные рабочие процессы как и ожидалось.
- Крайние случаи (Edge cases -unexpected values) — непредвиденные значения: это учитывается, когда тестирование включает дату, месяц и день в обратном порядке.
- Тестирование производительности, нагрузки и сети (Performance, load, and network testing): интерфейс с большим объемом может потребовать больше нагрузочного тестирования, чем интерфейс с низким объемом, в зависимости от механизма интерфейса и инфраструктуры подключения
- Отдельные системы (Individual systems): это включает в себя тестирование каждой системы в отдельности. Например, биллинговая система и система управления запасами для розничного магазина должны работать отдельно.
Например, убедитесь, что система может быть установлена на платформе пользователя и работает правильно. Тестирование рабочего процесса проводится поэтапно. Вот как вы будете выполнять Workflow testing:
- Начальная фаза (Inception phase): эта фаза включает начальное планирование испытаний и тестирование прототипа
- Фаза разработки (Elaboration phase): Эта фаза включает базовую архитектуру тестирования
- Фаза строительства (Construction phase): эта фаза включает в себя значительные испытания в каждой сборке
- Фаза перехода (Transition phase): Эта фаза включает в себя регрессионные тесты и повторные тесты исправлений
- Test engineer: планирует цели теста и график. Определяет Test case и процедуры. Оценивает результаты теста.
- Component engineer: Разработка тестовых компонентов. Автоматизирует некоторые тестовые процедуры.
- Integration Tester: Выполнение интеграционных тестов и выявление дефектов
- System Testers: Выполнение системных тестов и отчеты о дефектах
- Анализ бизнес-требований
- Создать плана тестирования UAT
- Определить Test Scenario
- Создать Test case UAT
- Подготовить Test Data (Production like Data)
- Запустить Test case
- Записать результаты
- Подтвердить бизнес-цели
- Installation testing
- Load & Performance Test Operation
- Backup and Restore testing
- Security testing
- Code Analysis
- Fail over testing
- Recovery testing
- End-to-End Test Environment Operational testing
- Operational Documentation Review
- Резервные копии, сделанные на одном сайте, могут быть развернуты на тот же сайт
- Резервные копии, сделанные на одном сайте, можно развернуть на другом сайте.
- Внедрение любых новых функций в живую производственную среду не должно отрицательно влиять на целостность текущих производственных услуг.
- Процесс внедрения может быть воспроизведен с использованием действующей документации
- Каждый компонент может быть отключен и успешно запущен в согласованные сроки.
- Для оповещений — все критические оповещения должны идти в TEC и ссылаться на документ правильного разрешения.
- Оповещения созданы и выдаются при превышении согласованных пороговых значений
- Любая документация по восстановлению, созданная или измененная, включая сервисные диаграммы, действительна
- Это должно быть передано в соответствующие области поддержки.
- Любой компонент, на который влияет сбой, должен показывать рекомендуемый порядок перезапуска, время завершения и т. д.
Тестирование инсталляции в большинстве своем не входит в Веб-тестирование, являясь специализированным тестированием установки приложений на различные операционные системы.
Следующие проверки должны быть выполнены для этапов:
Установка.
- Установка должна начаться при клике по кнопке, подтверждающей данное действие
- Установки во всех поддерживаемых окружениях и на всех поддерживаемых платформах
- Установки в неподдерживаемых окружениях, а также в нужных окружениях с некорректными настройками
- Права, которые требует инсталляция (чаще всего они должны быть админскими), проверить установить приложение как гость
- Установки в clean state (при отсутствии любых возможных связанных файлов и предыдущих версий)
- Подсчитывается ли при установке количество свободного места на диске и выдается ли предупреждение если места недостаточно
- Установки загруженного ранее приложения, а также прямая установка с использованием сети/беспроводного соединения
- Восстановится ли процесс установки при внезапном его прерывании (отключение устройства, отказ сети, отключение беспроводного соединения)
- Установка приложения, его запуск, удаление приложения должны возвращать систему в исходное состояние
- Распознается ли наличие в системе приложений/программ, необходимых для корректной работы устанавливаемого приложения
- Повторный запуск установки приложения при уже текущем должен выдавать корректное сообщение, двойная установка должна быть исключена
- Процесс установки может быть настраиваемый/дефолтный. Убедиться, что оба корректно работают
- Наличие кнопки, которая предложит сохранить приложение в определенную папку, а также указывает дефолтное местоположение («C:/programs/.»)
- Правильно ли установлены, сохранены ли в корректных папках файлы приложения
- Наличие созданных ярлыков, корректно ли они расположены
- После установки в системной вкладке « Программы и компоненты» должны быть доступны: название приложения, иконка, имя издателя, размер приложения, дата установки и номер версии
- Настройки переменных сред PATH
- Убедиться, что лицензионный ключ сохраняется в Windows Registry library
- Поддерживает ли приложение функции ‘UnInstall’, ‘Modify’, ‘ReInstall’ и корректно ли они работают
- Работа приложения с уже существующими DLL-файлами, с DLL-файлами приложений, которые необходимы для корректной работы устанавливаемого приложения
- Наличие информации/сообщение о том, когда истекает срок действия установленной пробной версии приложения
- Поддерживает ли приложение функцию обновления/автообновления
- При попытке установить ранее установленную версию приложения система должна ее распознать и выдать корректное сообщение
- Сохраняются ли пользовательские настройки при попытке загрузить новую версию/обновить старую версию
- При попытке обновить версию должны быть доступны функции удалить приложение и восстановить приложение
- Стандартные проверки как при первичной установке приложения
- Убедиться, что номер версии приложения сменился новым
- Запустить приложение и убедиться, что оно работает корректно
- Попробовать установить старую версию на более новую
- Наличие корректного сообщения при попытке отката
- Убедиться, что приложение работает корректно
- Не остается ли в системе никаких папок/файлов/ярлыков/ключей реестра после полного удаления приложения
- Корректно ли работает система после установки и последующего удаления приложения
- Конфиденциальность — сокрытие определенных ресурсов или информации
- Целостность – ресурс может быть изменен только в соответствии с полномочиями пользователя
- Доступность — ресурсы должны быть доступны только авторизованному пользователю, внутреннему объекту или устройству
- попытки узнать пароль с помощью внешних средств;
- атака системы с помощью специальных утилит, анализирующих защиты;
- подавление, ошеломление системы (в надежде, что она откажется обслуживать других клиентов);
- целенаправленное введение ошибок в надежде проникнуть в систему в ходе восстановления;
- просмотр несекретных данных в надежде найти ключ для входа в систему.
Типы тестирования безопасности:
- Сканирование уязвимостей/оценка защищенности (Vulnerability Scanning) выполняется с помощью автоматизированного ПО для сканирования системы на наличие известных сигнатур уязвимостей.
- Сканирование безопасности (Security Scanning) включает в себя выявление слабых сторон сети и системы, а затем предоставляет решения для снижения этих рисков. Это сканирование может быть выполнено как ручным, так и автоматизированным.
- Тестирование на проникновение (Penetration testing) — этот тип тестирования имитирует атаку злоумышленника. Это тестирование включает анализ конкретной системы для проверки потенциальных уязвимостей при попытке внешнего взлома.
- Оценка рисков (Risk Assessment) тестирование включает анализ рисков безопасности, наблюдаемых в организации. Риски классифицируются как Низкие, Средние и Высокие. Это тестирование рекомендует меры по снижению риска.
- Аудит безопасности (Security Auditing) - внутренняя проверка приложений и операционных систем на наличие уязвимостей. Аудит также может быть выполнен путем построчной проверки кода
- Этический взлом (Ethical hacking) — совершается с целью выявления проблем безопасности в системе. Это делается White Hat хакерами - это специалисты по безопасности, которые использует свои навыки законным способом для помощи в выявлении дефектов системы, в отличии от Black Hat (преступников) или Gray Hat (что-то между).
- Оценка состояния (Posture Assessment) объединяет сканирование безопасности, этический взлом и оценки рисков, чтобы показать общее состояние безопасности организации.
SDLC фаза | Security Processes |
Requirements | Анализ безопасности для требований и проверка случаев злоупотребления / неправильного использования |
Design | Анализ рисков безопасности для проектирования. Разработка плана тестирования с учетом тестирования безопасности |
Coding and Unit testing | Статическое и динамическое тестирование безопасности и тестирование белого ящика |
Integration testing | Тестирование черного ящика |
System testing | Тестирование черного ящика и сканирование уязвимостей |
Implementation | Тестирование на проникновение, сканирование уязвимостей |
Support | Анализ воздействия патчей |
Методы:
- Активное тестирование
- Inactive testing, тестер вводит новые test data и анализирует результаты.
- В процессе тестирования тестеры создают интеллектуальную модель процесса, и она будет расти и дальше во время взаимодействия с тестируемым программным обеспечением.
- Выполняя тест, тестер будет активно вовлекаться в процесс обнаружения новых Test case и новых идей. Вот почему это называется Active testing.
- Пассивное тестирование
- Пассивное тестирование — отслеживание результатов запуска тестируемого программного обеспечения без введения новых Test case или data.
- Тестирование сети
- Тестирование сети — это процесс измерения и записи текущего состояния работы сети за определенный период времени.
- Тестирование в основном проводится для прогнозирования работы сети под нагрузкой или для выявления проблем, создаваемых новыми сервисами.
- Нам нужно проверить следующие характеристики сети:
- Уровни утилизации
- Количество пользователей
- Использование приложения
- Распределенное Тестирование
- Распределенные тесты применяются для тестирования распределенных приложений, то есть приложений, работающих с несколькими клиентами одновременно. По сути, тестирование распределенного приложения означает тестирование его клиентской и серверной частей по отдельности, но с помощью метода распределенного тестирования мы можем протестировать их все вместе.
- Части теста будут взаимодействовать друг с другом во время теста. Это делает их синхронизированными соответствующим образом. Синхронизация является одним из наиболее важных моментов в распределенном тестировании.
- Тест на проникновение в сеть:
- выявлении уязвимостей сетевого и системного уровня;
- определение неправильных конфигураций и настроек;
- выявление уязвимости беспроводной сети;
- мошеннические услуги;
- отсутствие надежных паролей и наличие слабых протоколов.
- Тест на проникновение приложений:
- выявление недостатков прикладного уровня;
- подделка запросов;
- применение злонамеренных скриптов;
- нарушение работы управления сеансами;
- и т.п.
- Тест на физическое проникновение:
- взлом физических барьеров;
- проверка и взлом замков;
- нарушения работы и обход датчиков;
- вывод из строя камер видеонаблюдения;
- и т. д.
Vulnerability Assessment | Penetration testing | |
Working | Нахождений уязвимостей | Выявление и использование уязвимостей |
Mechanism | Обнаружение и сканирование | Симуляция |
Focus | Ширина | Глубина |
Coverage of Completeness | Высокое покрытие | Низкое |
Cost | Низкая стоимость | Высокая |
Performed By | Внутренний персонал | Атакующий или пентестер |
How often to Run | После каждой сборки | Реже, зависит от политики безопасности компании и продукта |
Result | Предоставит частичную информацию об уязвимостях | Предоставит полную информацию об уязвимостях |
Обычно fuzzing обнаруживает наиболее серьезные ошибки или дефекты безопасности. Это очень экономически эффективный метод тестирования. Fuzzing — один из самых распространенных методов хакеров, используемых для обнаружения уязвимости системы (сюда относятся популярные SQL- или скриптовые инъекции). Примеры фаззеров:
- Mutation-Based Fuzzers: изменяет существующие образцы данных для создания новых test data. Это очень простой и понятный подход, он начинается с действительных образцов и постоянно корректирует каждый байт или файл.
- Generation-Based Fuzzers: определяет новые данные на основе ввода модели. Он начинает генерировать ввод с нуля на основе спецификации.
- PROTOCOL-BASED-fuzzer: самый успешный фаззер — это детальное знание тестируемого формата протокола. Понимание зависит от спецификации. Это включает в себя запись массива спецификации в инструмент, а затем с помощью метода генерации тестов на основе модели проходится спецификация и добавляется неравномерность в содержимое данных, последовательность и т. д. Это также известно как синтаксическое тестирование, грамматическое тестирование, тестирование надежности, и т. д. Fuzzer может генерировать Test case из существующего или использовать допустимые или недействительные входные данные.
- Сбои ассертов и утечки памяти (Assertion failures and memory leaks). Эта методология широко используется для больших приложений, где ошибки влияют на безопасность памяти, что является серьезной уязвимостью.
- Некорректный ввод (Invalid input). Фаззеры используются для генерирования неверного ввода, который используется для тестирования процедур обработки ошибок, и это важно для программного обеспечения, которое не контролирует его ввод. Простой фаззинг может быть способом автоматизации отрицательного тестирования.
- Исправление ошибок (Correctness bugs). Fuzzing также может использоваться для обнаружения некоторых типов ошибок «правильности». Например, поврежденная база данных, плохие результаты поиска и т. д.
Можно ли отнести тестирование безопасности или нагрузочное тестирование к функциональным видам тестирования?
В зависимости от типа проекта конфигурационное тестирование может иметь разные цели:
- Проект по профилированию работы системы Цель Тестирования: определить оптимальную конфигурацию оборудования, обеспечивающую требуемые характеристики производительности и времени реакции тестируемой системы.
- Проект по миграции системы с одной платформы на другую Цель Тестирования: Проверить объект тестирования на совместимость с объявленным в спецификации оборудованием, операционными системами и программными продуктами третьих фирм.
- Серверный
- Клиентский
- Аппаратные средства (тип и количество процессоров, объем памяти, характеристики сети / сетевых адаптеров и т. д.)
- Программные средства (ОС, драйвера и библиотеки, стороннее ПО, влияющее на работу приложения и т. д.)
На следующем (клиентском) уровне, ПО тестируется с позиции его конечного пользователя и конфигурации его рабочей станции. На этом этапе будут протестированы следующие характеристики: удобство использования, функциональность. Для этого необходимо будет провести ряд тестов с различными конфигурациями рабочих станций:
- Тип, версия и битность операционной системы (подобный вид тестирования называется кроссплатформенное тестирование)
- Тип и версия Web барузера, в случае если тестируется Web приложение (подобный вид тестирования называется кросс-браузерное тестирование)
- Тип и модель видео адаптера (при тестировании игр это очень важно)
- Работа приложения при различных разрешениях экрана
- Версии драйверов, библиотек и т. д. (для JAVA приложений версия JAVA машины очень важна, тоже можно сказать и для .NET приложений касательно версии .NET библиотеки)
Перед началом проведения конфигурационного тестирования рекомендуется:
- создавать матрицу покрытия (матрица покрытия - это таблица, в которую заносят все возможные конфигурации),
- проводить приоритезацию конфигураций (на практике, скорее всего, все желаемые конфигурации проверить не получится),
- шаг за шагом, в соответствии с расставленными приоритетами, проверять каждую конфигурацию.
В итоге: конфигурационным называется тестирование совместимости выпускаемого продукта (ПО) с различным аппаратным и программным средствами.
Основные цели — определение оптимальной конфигурации и проверка совместимости приложения с требуемым окружением (оборудованием, ОС и т. д.). Автоматизация конфигурационного тестирования позволяет избежать лишних расходов
Примечание: в ISTQB вообще не говорится о таком виде тестирования как конфигурационное. Согласно глоссарию, данный вид тестирования рассматривается там как тестирование портируемости: configuration testing: See portability testing. portability testing: The process of testing to determine the portability of a software product.
Дымовое тестирование рассматривается как короткий цикл тестов, выполняемый для каждой новой сборки для подтверждения того, что ПО стартует и выполняет основные функции без критических и блокирующих дефектов. В случае отсутствия таковых дефектов дымовое тестирование объявляется пройденным, и команда QA может начинать дальнейшее тестирование полного цикла, в противном случае, сборка объявляется дефектной, что делает дальнейшее тестирование пустой тратой времени и ресурсов. Сборка возвращается на доработку и исправление.Аналогами дымового тестирования являются Build Verification testing и Acceptance testing, выполняемые на функциональном уровне командой тестирования, по результатам которых делается вывод о том, принимается или нет установленная версия ПО в тестирование, эксплуатацию или на поставку заказчику.
Если мы говорим про сайт интернет-магазина, то сценарий будет примерно следующим:
- Сайт открывается
- Можно выбрать случайный товар и добавить его в корзину
- Можно оформить и оплатить заказ
- Приложение устанавливается и запускается
- Можно авторизоваться
- Можно написать сообщение случайном контакту
Регрессионное тестирование требуется, когда есть:
- Изменение требований и кода изменяется в соответствии с требованием
- Новая функция добавлена в ПО
- Устранение дефектов
- Исправлена проблема с производительностью
- Регрессионное тестирование проводится для подтверждения того, что недавнее изменение программы или кода не оказало неблагоприятного воздействия на существующие функции. Повторное тестирование проводится для подтверждения того, что тест-кейсы, которые не прошли, проходят после устранения дефектов.
- Цель регрессионного тестирования подтвердить, что новые изменения кода не должны иметь побочных эффектов для существующих функций. Повторное тестирование проводится на основе исправлений дефектов.
- Проверка дефектов не является частью регрессионного тестирования. Проверка дефекта является частью повторного тестирования
- В зависимости от проекта и наличия ресурсов, регрессионное тестирование может проводиться параллельно с повторным тестированием. Приоритет повторного тестирования выше, чем регрессионное тестирование, поэтому оно проводится перед регрессионным тестированием.
- Вы можете сделать автоматизацию для регрессионного тестирования, ручное тестирование может быть дорогим и трудоемким.
- Регрессионное тестирование называется общим (generic) тестированием. Повторное тестирование — это плановое (planned) тестирование.
- Регрессионное тестирование проводится для пройденных Test case. Повторное тестирование проводится только для неудачных тестов.
- Регрессионное тестирование проверяет наличие неожиданных побочных эффектов. Повторное тестирование гарантирует, что первоначальная ошибка была исправлена.
- Регрессионное тестирование проводится только тогда, когда есть какие-либо изменения или изменения становятся обязательными в существующем проекте. Повторное тестирование выполняет дефект с теми же данными и той же средой с разными входными данными с новой сборкой (build).
- Test case для регрессионного тестирования могут быть получены из функциональной спецификации, user tutorials and manuals, а также defect reports в отношении исправленных проблем. Test case для повторного тестирования не могут быть получены до начала тестирования.
- Регрессия багов (Bug regression) — попытка доказать, что исправленная ошибка на самом деле не исправлена
- Регрессия старых багов (Old bugs regression) — попытка доказать, что недавнее изменение кода или данных сломало исправление старых ошибок, т.е. старые баги стали снова воспроизводиться.
- Регрессия побочного эффекта (Side effect regression) — попытка доказать, что недавнее изменение кода или данных сломало другие части разрабатываемого приложения
Файл cookie — это небольшой фрагмент информации, который веб-сервер хранит в текстовом файле на жестком диске пользователя (клиента). Эта часть информации затем отправляется обратно на сервер каждый раз, когда браузер запрашивает страницу с сервера. Обычно cookie-файлы содержат персонализированные пользовательские данные или информацию, которые используются для связи между различными веб-страницами. Другими словами, куки - это не что иное, как личность пользователя, и они используются для отслеживания того, где пользователь перемещался по страницам сайта. Цель файла cookie - обеспечить быстрое взаимодействие между пользователями и веб-сайтами. Приложения, в которых можно использовать файлы cookie, - это создание корзины покупок, персонализированный веб-интерфейс, отслеживание пользователей, маркетинг, пользовательские сессии и т. д.
Куки состоят в основном из трех вещей:
- Имя сервера, с которого был отправлен куки
- Время жизни (Cookies Lifetime)
- Случайно сгенерированный уникальный номер
- Сеансовые куки: Эти куки активны до тех пор, пока открыт браузер. Когда мы закрываем браузер, этот файл cookie сеанса удаляется.
- Постоянные файлы cookie: эти файлы cookie постоянно хранятся на компьютере пользователя и сохраняются в течение нескольких месяцев или лет.
Примеры Test case для Cookie testing:
- Отключение файлов cookie: отключите все файлы cookie и попытайтесь использовать основные функции сайта
- Поврежденные файлы cookie: вручную отредактируйте файл cookie в блокноте и измените параметры на несколько случайных значений
- Шифрование куки: конфиденциальная информация, такая как пароли и имена пользователей, должна быть зашифрована
- Тестирование файлов cookie в нескольких браузерах. Убедитесь, что с вашего веб-сайта правильно записываются cookie в разных браузерах
- Проверка удаления куки с веб-сайта
- Удаление файлов cookie: удалите все файлы cookie для веб-сайтов и посмотрите, как веб-сайт среагирует
- Доступ к файлам cookie: файлы cookie, написанные одним сайтом, не должны быть доступны другим
- Не допускайте чрезмерного использования файлов cookie: если тестируемое приложение является общедоступным веб-сайтом, не следует злоупотреблять файлами cookie.
- Тестирование с другими настройками. Тестирование должно выполняться правильно, чтобы убедиться, что веб-сайт работает хорошо с другими настройками файлов cookie.
- Категоризируйте куки отдельно: куки не должны храниться в той же категории вирусов, спама или шпионских программ
Тестирование на основе потоков подразделяется на две категории:
- Однопоточное тестирование включает одну транзакцию приложения за раз
- Многопоточное тестирование включает одновременно несколько активных транзакций
- Тестирование на основе потоков является обобщенной формой тестирования на основе сеансов (session-based testing), в котором сеансы являются формой потока, но поток не обязательно является сеансом.
- Для тестирования потока, поток или программа (небольшая функциональность) интегрируются и тестируются постепенно как подсистема, а затем выполняются для всей системы.
- На самом низком уровне оно предоставляет интеграторам лучшее представление о том, что тестировать.
- Вместо непосредственного тестирования программных компонентов требуется, чтобы интеграторы сосредоточились на тестировании логических путей выполнения в контексте всей системы.
- Requirement documents
- Test Plan
- Test case
- Traceability Matrix (RTM)
Здесь работает хорошая аналогия с пирамидой тестирования. Это распределение по количеству тестов на разных уровнях приложения.
- Unit-слой — это когда тестируется один модуль программы, чаще всего это одна функция или метод. Таких тестов должно быть больше всего. Unit-тест для данных — это когда мы определяем требования для каждой ячейки. Нет смысла тестировать дальше, если у нас есть ошибки на уровне ячеек. Если, например, в фамилии содержатся цифры, то какой смысл проверять что-то дальше? Возможно, там должны быть буквы, похожие на эти цифры. И тогда нам нужно всё исправлять и проверять следующий уровень, чтобы у нас всё было в единственном числе и не было дубликатов, если так сказано в требованиях.
- Integration-слой — это когда несколько кусков программы тестируются вместе. Слой API для данных — это когда мы говорим о всей таблице. Допустим, у нас могут быть дубликаты, но не больше ста штук. Если у нас город-миллионник, то на одной улице не может жить миллион человек. Поэтому если мы сделаем выборку по улице, то количество адресов должно быть десять тысяч или тысяча — это надо определить. А если у нас миллион, то с данными что-то не так.
- System-слой — это когда вся программа тестируется полностью. В случае с данными этот слой означает, что тестируется вся система. Здесь включается статистика. Например, мы говорим, что у нас не может быть больше 30% мужчин, рожденных после 1985 года. Или мы говорим, что 80% данных должны быть одного типа.
- Приемочное тестирование — это тест, проводимый для определения того, удовлетворяются ли требования спецификации или контракта в соответствии с его поставкой. Приемочное тестирование в основном выполняется пользователем или заказчиком. Тем не менее, другие акционеры могут быть вовлечены в этот процесс.
Расскажите о локализации, глобализации и интернационализации? (Localization/ globalization/internationalization testing)
Тестирование глобализации, в свою очередь, можно разделить на два подвида:
- Тестирование интернационализации (118N)
- Тестирование локализации (L10N)
Например, одна из задач по интернационализации ПО– корректное редактирование логики всех подключенных параметров форматирования (формат даты, времени, цифровое и валютное форматирование).
Также, тестеры во время проверки на соответствие ПО требованиям 118N тестируют работу продукта на равномерность работы в разных регионах и культурах мира.
Основной задачей тестирования интернациональности является проверка того, может ли программный код работать со всей международной поддержкой без нарушения функциональности, что может привести к потере данных или проблемам целостности информации.
В основном, фокус тестирования интернациональности направлен на:
- Тестирование языковой совместимости. Проводятся проверки того, может ли веб-продукт корректно работать в определенной языковой среде;
- Проверка функциональности: полное выполнение регрессионных тестов в разнообразных языковых средах (корректное отображение специфической информации – даты, времени и валюты);
- Тестирование на корректность отображения графического интерфейса;
- Проверка удобства пользования: тестирование простоты использования ПО на различных операционных системах, разнообразных устройствах и прочее.
В данный вид проверки входит необходимость выполнения работ по переводу всего контента программного обеспечения для конечного пользователя. Во время перевода должны учитываться иконки, информационная графика, справочные материалы, техническая документация и иные культурные особенности регионов, где в будущем будет доступен это программное обеспечение.
На что обратить внимание:
- Длина переведенных слов
- Параметры шрифта пользовательского интерфейса
- Ввод текста в разных локализациях
- RTL-языки (справа-налево) или вертикальных
- Перевод сокращений или аббревиатур
- Мета-теги (проблемы с SEO или отображением имени вкладки (title, description, keywords))
- Соответствие мер исчисления, валюты, postal code и т.п.
Такой вид тестирования обычно не предусматривается в тест плане и тест кейсы выполняются и модифицируются динамически. Эфективность такого тестирования напрямую зависит от опыта тестировщика ранее имевшим дело с этим приложением, платформой, знанием мест скопления возможных багов и рисками кототые относятся к конкретному продукту. Цель данного тестирования — это углубление в познании продукта, приложения и нахождения «на лету» возможных багов. Также такое тестирование помогает в дальнейшем проектировании тест кейсов для покрытия функционала данного приложения. Исследовательское тестирование широко используется в Agile-моделях.
Часто его путают с другим видом тестирования «Exploratory testing» – «Исследовательское тестирование».Свободное тестирование (ad-hoc testing) – это вид тестирования, который выполняется без подготовки к тестированию продукта, без определения ожидаемых результатов, проектирования тестовых сценариев. Это неформальное, импровизационное тестирование. Оно не требует никакой документации, планирования, процессов, которых следует придерживаться при выполнении тестирования. Такой способ тестирования в большинстве случаев дает большее количество заведенных отчётов об ошибке. Это обусловлено тем, что тестировщик на первых шагах приступает к тестированию основной функциональной части продукта и выполняет как позитивные, так и негативные варианты возможных сценариев.
Чаще всего такое тестирование выполняется, когда владелец продукта не обладает конкретными целями, проектной документацией и ранее поставленными задачами. При этом тестировщик полагается на свое общее представление о продукте, сравнение с похожими продуктами, собственный опыт. Однако при тестировании ad-hoc имеет смысл владеть общей информацией о продукте, особенно если проект очень сложный и большой. Поэтому нужно хорошее представление о целях проекта, его назначении и основных функциях, и возможностях. А дальше уже можно приступать к ad-hoc тестированию.
Виды свободного тестирования (ad-hoc testing):
- Buddy testing – процесс, когда 2 человека, как правило разработчик и тестировщик, работают параллельно и находят дефекты в одном и том же модуле тестируемого продукта. Такой вид тестирования помогает тестировщику выполнять необходимые проверки, а разработчику исправлять множество дефектов на ранних этапах.
- Pair testing – процесс, когда 2 тестировщика проверяют один модуль и помогают друг другу. К примеру, один может искать дефекты, а второй их документировать. Таким образом, у одного тестера будет функция, скажем так, обнаружителя, у другого – описателя.
- Monkey testing – произвольное тестирование продукта с целью как можно быстрее, используя различные вариации входных данных, нарушить работу программы или вызвать ее остановку (простыми словами – сломать).
- Buddy testing (Совместное тестирование) – это сочетание модульного тестирования и системного тестирования между разработчиком и тестировщиком.
- Pair testing (Парное тестирование) – выполняется только тестировщиками с разным уровнем знаний и опыта (такое сочетание поможет поделиться взглядами и идеями).
- нет необходимости тратить время на подготовку документации;
- самые важные дефекты зачастую обнаруживаются на ранних этапах;
- часто применяется, когда берут нового сотрудника. С помощью этого метода, человек усваивает за 3 дня то, что, разбираясь тестовыми случаями, разбирал бы неделю – это называется форсированное обучение новых сотрудников;
- возможность найти трудновоспроизводимые и трудноуловимые дефекты, которые невозможно было бы найти, используя стандартные сценарии проверок.
- все возможности сайта доступны без регистрации;
- корректность отображения анимаций и картинок;
- все возможности сайта доступны после регистрации;
- процесс регистрации;
- процесс добавления/удаления из корзины;
- процесс оплаты покупок;
- удобство в пользовании для новичков, простота, подсказки, помощь.
- Шаг 1: Ошибки вводятся в исходный код программы путем создания множества версий, называемых мутантами. Каждый мутант должен содержать одну ошибку, и цель состоит в том, чтобы заставить версию мутанта потерпеть неудачу, что демонстрирует эффективность Test case.
- Шаг 2: Test case применяются к исходной программе, а также к программе мутанта.
- Шаг 3: Сравните результаты оригинальной и мутантной программы.
- Шаг 4: Если исходная программа и программы-мутанты генерируют разные выходные данные, то этот мутант уничтожается by the Test case. Следовательно, Test case достаточно хорош, чтобы обнаружить изменение между оригинальной и мутантной программой.
- Шаг 5: Если исходная программа и программа-мутант генерируют одинаковые выходные данные, мутант остается в живых. В таких случаях необходимо создать более эффективные Test case, которые убивают всех мутантов.
- Операторы замены операндов (Operand replacement operators) – например, в условии if (x> y) поменять местами значения x и y
- Операторы модификации выражений (Expression Modification Operators) – например, в условии if (х == у) Мы можем заменить == на >=
- Операторы модификации операторов (Statement modification Operators) – например, удалить часть else в конструкции if-else или удалить целиком конструкцию if-else, чтобы проверить, как ведет себя программа
Что вы знаете о тестировании интерфейса прикладного программирования (API — Application Programming Interface)?
Простой пример: вы можете встроить на свою главную страницу сайта маленький виджет прогноза погоды, который будет отправлять определенный правилами запрос к API некоего сервиса погоды и получать определенный правилами ответ, содержащий посылку с данными.
Еще более простой пример: примите официанта в качестве API ресторана. В ресторане вы даете заказ на основе блюд, определенных в меню. Официант принимает ваш заказ и на этом ваше участие заканчивается и вам не интересно, что там прозойдёт дальше. От официанта вы ожидаете только итог – вам приносят заказанное блюдо.
Тестирование API — это тип тестирования белого ящика, который включает в себя тестирование API напрямую, а также в рамках интеграционного тестирования, чтобы проверить, соответствует ли API ожиданиям с точки зрения функциональности, надежности, производительности и безопасности приложения. В тестировании API наш основной упор будет сделан на уровне бизнес-логики архитектуры программного обеспечения.
Типы тестирования API:- Unit testing: Для проверки функциональности отдельной операции
- Functional testing: Чтобы проверить функциональность более широких сценариев с помощью блока результатов unit-тестирования, протестированных вместе
- Load testing: Чтобы проверить функциональность и производительность под нагрузкой
- Runtime/Error Detection: Мониторинг приложения для выявления проблем, таких как исключения и утечки ресурсов
- Security testing: Чтобы гарантировать, что реализация API защищена от внешних угроз
- UI testing: Это выполняется как часть end-to-end integration тестов, чтобы убедиться, что каждый аспект пользовательского интерфейса функционирует должным образом.
- Interoperability and WS Compliance testing: Совместимость и WS Compliance testing — это тип тестирования, который применяется к SOAP API. Функциональная совместимость между API-интерфейсами SOAP проверяется путем обеспечения соответствия профилям функциональной совместимости веб-служб. Соответствие WS- * проверено, чтобы гарантировать, что стандарты, такие как WS-Addressing, WS-Discovery, WS-Federation, WS-Policy, WS-Security и WS-Trust, должным образом реализованы и используются
- Penetration testing: Чтобы найти уязвимости при атаках злоумышленников
- Fuzz testing: Для проверки API путем принудительного ввода в систему некорректных данных для попытки принудительного сбоя
- Возвращаемое значение на основе входных условий: его относительно легко проверить, поскольку входные данные могут быть определены и результаты могут быть проверены.
- Ничего не возвращает: при отсутствии возвращаемого значения проверяется поведение API в системе.
- Вызов другого API / события / прерывания: если выход API инициирует какое-либо событие или прерывание, то эти события и прерывания listeners следует отслеживать
- Обновление структуры данных: Обновление структуры данных будет иметь определенный эффект или влияние на систему, и это должно быть проверено
- Изменение определенных ресурсов: если вызов API изменяет некоторые ресурсы, его следует проверить путем доступа к соответствующим ресурсам.
Postman предназначен для проверки запросов с клиента на сервер и получения ответа от бэкенда.
Позволяет писать тесты внутри себя на JS.
Функции:
- отправка запросов
- тесты автоматических запросов
- окружения
- тест-коллекции
- тест-раннер
Известно ли какие порты для Вас открыты? Знаете ли Вы нужные endpoints?
Если дело совсем плохо — просканируйте порты, например, с помощью netcat. Открытые порты сохраните в файл.
Эта операция займёт довольно много времени. Можете почитать советы по работе с Nmap и Netcat.
Если Вам известен нужный порт и соответствующий endopoint — переберите все возможные HTTP методы. Начните с наиболее очевидных POST, PUT, GET. Для ускорения процесса напишите скрипт, например, на Python.
В худшем случае, когда ни порт ни endpoints неизвестны Вам, скорее всего придётся перебирать все открытые порты и генерировать endpoints, которые подходят по смыслу.
Разработчики обычно не особо заморачиваются и закладывают минимально-необходимую информацию. Так что включите воображение и попробуйте придумать endpoints опираясь на бизнес логику и принятые в Вашей компании стандарты.
Если ни endpoints ни бизнес логика Вам неизвестны, то у меня есть подозрение, что Вы тестируете API с не самыми хорошими намерениями.
Смысл в том, что сайт, написанный на любом языке, поддерживающем HTTP запросы, не посылает на сервер никаких PHP/C/Python команд, а общается ним с помощью запросов, описанных в API.Адрес, на который посылаются сообщения называется Endpoint. Обычно это URL (например, название сайта) и порт. Если я хочу создать веб сервис на порту 8080, Endpoint будет выглядеть так: http://vladislaveremeev.ru:8080
Если моему Web сервису нужно будет отвечать на различные сообщения я создам сразу несколько URL (interfaces) по которым к сервису можно будет обратиться. Например:
- https://vladislaveremeev.ru:8080 /resource1/status
- https://vladislaveremeev.ru:8080 /resource1/getserviceInfo
- https://vladislaveremeev.ru:8080 /resource1/putID
- http://vladislaveremeev.ru:8080 /resource1/eventslist
- https://vladislaveremeev.ru:8080 /resource2/putID
Endpoint = Base URL + Resource
Понятие Endpoint может использоваться в более широком смысле. Можно сказать, что какой-то определённый роутер или компьютер является Endpoint. Обычно это понятно из контекста. Также следует обратить внимание на то, что понятие Endpoint выходит за рамки RESTful и может использовать как в SOAP так и в других протоколах. Термин Resource также связан с RESTful, но в более широком смысле может означать что-то другое.
Итак, простейший запрос состоит из метода и Enpoint
Request = Method + Endpoint
Frontend testing — это тип тестирования, который проверяет уровень представления 3-уровневой архитектуры. С точки зрения непрофессионала, вы проверяете GUI - все, что видно на экране, на стороне клиента. Для веб-приложения интерфейсное тестирование будет включать проверку функциональных возможностей, таких как формы, графики, меню, отчеты и т. д., а также связанный Javascript. Frontend testing - это термин, охватывающий различные стратегии тестирования, включая оценку производительности фронтенда, которая является хорошей практикой перед тестированием приложения с высокими пользовательскими нагрузками. Тестер должен хорошо понимать бизнес-требования для выполнения этого типа тестирования. Ранее оптимизация производительности означала оптимизацию на стороне сервера. Это было связано с тем, что большинство веб-сайтов были в основном статичными, а большая часть обработки выполнялась на стороне сервера. Однако сегодня веб-приложения становятся более динамичными и в результате код на стороне клиента нередко становится причиной низкой производительности.Backend testing — это тип тестирования, который проверяет уровень приложений и базы данных 3-уровневой архитектуры. В сложном программном приложении, таком как ERP, внутреннее тестирование повлечет за собой проверку бизнес-логики на уровне приложений. Для более простых приложений бэкэнд-тестирование проверяет серверную часть или базу данных. Это означает, что данные, введенные в интерфейс, будут проверены в базе данных. Базы данных проверяются на наличие свойств ACID, операций CRUD, их схемы, соответствия бизнес-правилам. Базы данных также проверяются на безопасность и производительность. Производится проверка целостности данных, Проверка достоверности данных, Тестирование функций, процедур и триггеров. При внутреннем тестировании нет необходимости использовать графический интерфейс. Вы можете напрямую передавать данные с помощью браузера с параметрами, необходимыми для функции, чтобы получить ответ в некотором формате по умолчанию. Например, XML или JSON. Вы также подключаетесь к базе данных напрямую и проверяете данные с помощью SQL-запросов.
Это подход к тестированию, в котором за точку отсчета берется базовая линия — это показатель конкретного ориентира, который служит основой для нового тестирования. В базовом тестировании тесты собирают и сохраняют все результаты, полученные в исходном коде, и сравнивают с эталонным базовым уровнем. Этот базовый уровень относится к последним принятым результатам испытаний. Если в исходном коде есть новые изменения, то для повторного выполнения тестов необходимо сформировать текущий базовый уровень. Если последние результаты будут приняты, то текущая базовая линия станет эталонной. По большей части Baseline testing относят к тестированию производительности.- Baseline предназначено для оценки производительности приложения. Benchmark сравнивает производительность приложения с отраслевым стандартом.
- Baseline тестирование использует данные, собранные для повышения производительности. Benchmark возвращает информацию о целевом приложении по сравнению с другими приложениями.
- Baseline тестирование сравнивает текущую производительность с предыдущей производительностью приложения, тогда как Benchmark сравнивает производительность нашего приложения с производительностью конкурентов.
- Определяет влияние одновременного доступа к одним и тем же записям базы данных, модулям или коду приложения.
- Определяет и измеряет уровень взаимоблокировки, блокировки и использования однопоточного кода и ограничения доступа к общим ресурсам
Результаты тестирования переносимости представляют собой измерения того, насколько легко программный компонент или приложение будут интегрированы в среду, и затем эти результаты будут сравниваться с нефункциональным требованием переносимости программной системы. Измерение основано на сравнении стоимости адаптации программного обеспечения к новой среде и стоимости реконструкции.
Атрибуты тестирования переносимости:
- Адаптивность: Адаптируемость определяется как способность программного приложения адаптироваться к конкретной среде без каких-либо усилий. Общие стандарты связи между несколькими системами помогают повысить адаптивность системы в целом.
- Installability: Устанавливаемость определяется как способность программного приложения быть установленным в желаемой среде без использования дополнительных ресурсов. Устанавливаемость выполняется на программном обеспечении, которое должно быть установлено в целевой среде.
- Заменяемость: Возможность замены определяется как способность программного приложения заменять другое программное обеспечение в конкретной среде. Приложение, которое заменяет предыдущее приложение, должно давать одинаковые результаты во всех целевых средах.
- Сосуществование: Сосуществование определяется как способность программного приложения работать с другим программным приложением в системе, не мешая друг другу и совместно используя один и тот же ресурс. Специально это тестирование используется в больших системах, которые включают в себя несколько подсистем.
Что такое тестирование графического интерфейса/визуальное тестирование? (GUI — Graphical User Interface)
Цель тестирования графического интерфейса пользователя (GUI) — проверить функциональность интерфейса пользователя.
Примеры:
- Тестирование размера, положения, ширины, высоты элементов.
- Тестирование сообщений об ошибках, которые отображаются.
- Тестирование разных разделов экрана.
- Проверка шрифта, читаемый ли он или нет.
- Тестирование экрана в разных разрешениях с помощью увеличения и уменьшения масштаба, например, 640 x 480, 600x800 и т. д.
- Проверка выравнивания текстов и других элементов, таких как значки, кнопки и т. д. , находятся на своем месте или нет.
- Тестирование цветов шрифтов.
- Проверка цветов сообщений об ошибках, предупреждающих сообщений.
- Проверка, имеет ли изображение хорошую четкость или нет.
- Тестирование выравнивания изображений.
- Проверка орфографии.
- Пользователь не должен разочаровываться при использовании системного интерфейса.
- Тестирование, является ли интерфейс привлекательным или нет.
- Тестирование полос прокрутки в соответствии с размером страницы, если таковые имеются.
- Тестирование отключенных полей, если таковые имеются.
- Тестирование размера изображений.
- Проверка заголовков, правильно ли они выровнены или нет.
- Тестирование цвета гиперссылки.
Давайте попробуем понять это на примере. Предположим, у нас есть интернет магазин и каталог отображается определенным образом. В какой-то момент (новые маркетинговые исследования/пожелания клиента и т. д.) решено изменить дизайн выдачи товаров в каталоге. Независимо от того, сколько проведено анализа, выпуск нового пользовательского интерфейса будет большим изменением и может иметь неприятные последствия.
В этом случае мы можем использовать A / B-тестирование. Мы создадим интерфейс нового варианта и выпустим его для некоторого процента пользователей. Например — мы можем распределить пользователей в соотношении 50:50 или 80:20 между двумя вариантами - A и B. После этого в течение определенного периода времени мы будем наблюдать эффективность обоих вариантов. Таким образом, тестирование A/B помогает принять решение о выборе лучшего варианта.
Сквозное тестирование — это стратегия тестирования для выполнения тестов, которые охватывают все возможные потоки приложения от его начала до конца; проверяет программную систему вместе с ее интеграцией с внешними интерфейсами. Целью сквозного тестирования является создание полного производственного сценария, выявление программных зависимостей и утверждение, что между различными программными модулями и подсистемами передается правильный ввод. Сквозное тестирование обычно выполняется после функционального и системного тестирования. Оно использует реальные данные, такие как данные и тестовая среда, для имитации настроек в реальном времени. Сквозное тестирование также называется цепным тестированием (Chain testing).Для чего оно нужно? Современные программные системы являются сложными и взаимосвязаны с несколькими подсистемами. Подсистема может отличаться от текущей системы или может принадлежать другой организации. Если какая-либо из подсистем выйдет из строя, вся система программного обеспечения может рухнуть. Это серьезный риск, и его можно избежать путем сквозного тестирования.
End to End testing | System testing |
Проверяет программную систему, а также взаимосвязанные подсистемы | Проверяет только программную систему в соответствии со спецификациями требований. |
Проверяет весь E2E flow | Проверяет функциональные возможности и функции системы. |
Все интерфейсы, бэкэнд-системы | Функциональное и нефункциональное тестирование |
Выполняется после завершения System testing | Выполняется после завершения Integration testing |
Сквозное тестирование включает проверку внешних интерфейсов, которые могут быть сложными для автоматизации. Следовательно, ручное тестирование является предпочтительным. | Как ручное, так и автоматическое могут быть выполнены для тестирования системы |
Это Parallel testing | Это НЕ Parallel testing |
|
- анализ имеющихся проектных артефактов: документация (спецификации, требования, планы), модели, исполняемый код и т. д.
- написание спецификации по тест дизайну (Test Design Specification)
- проектирование и создание Test case
- Тест аналитик — определяет «ЧТО тестировать?»
- Тест дизайнер — определяет «КАК тестировать?»
- Cтатические (Static):
- Review:
- Неформальное ревью (Informal review)
- Прохождение (Walkthrough)
- Техническое ревью (Technical Review)
- Инспекция (Inspection)
- Статический анализ (Static Analysis):
- Поток данных (Data Flow)
- Поток управления (Control Flow)
- Путь (Path)
- Стандарты (Standards)
- Динамические (Dynamic):
- Белый ящик (White-box)
- Выражение (Statement)
- Решение (Decision)
- Ветвь (Branch)
- Условие (Condition)
- Конечный автомат (FSM)
- Основанные на опыте (Expirience-based):
- Предугадывание ошибки (Error Guessing — EG)
- Исследовательское тестирование (Exploratory testing)
- Ad-hoc testing
- Черный ящик (Black-box):
- Эквивалентное Разделение (Equivalence Partitioning — EP)
- Анализ Граничных Значений (Boundary Value Analysis — BVA)
- Комбинаторные техники (Combinatorial Test Techniques)
- Переходы между состояниями (State transition)
- Случаи использования (Use case testing)