Тестирование программного продукта
Всем понятно, что программное обеспечение, разработанное для решения определенных задач должно решать эти определенные задачи. К сожалению, часто получается не совсем так. Программа, которая должна была выполнить простое действие, явно указанное на нажатой Вами кнопке, выполняет совсем другое – приводит Вас в ярость.
Даже, если Вы настолько терпимы, что можете в течение получаса 18 раз перезапустить программу после сбоя и только после этого метнуть монитор точно в окно, Вы согласитесь с тем, что работа с данной программой была бы более комфортной, если бы она не «падала».
Как же сделать так, что бы случаи падения, зависания, невыполнения нужных действий разработанной Вами программы стали весьма редкими?
Точного ответа на данный вопрос нет. Но на протяжении столетий самые мудрые ученые годами думали на эту тему и, смогли таки, найти средство, которое если и не устраняет всех ошибок программы, то, по крайней мере, создает иллюзию деятельности по их устранению.
И это средство называется ТЕСТИРОВАНИЕ программного продукта.
По мнению мудрых людей, Тестирование является одним из наиболее устоявшихся способов обеспечения качества разработки программного обеспечения и входит в набор эффективных средств современной системы обеспечения качества программного продукта[1].Геннадий Попов, PathVision.ai: Как искусственный интеллект помогает медицине и бизнесу
Качество программного продукта характеризуется набором свойств, определяющих, насколько продукт "хорош" с точки зрения заинтересованных сторон, таких как заказчик продукта, спонсор, конечный пользователь, разработчики и тестировщики продукта, инженеры поддержки, сотрудники отделов маркетинга, обучения и продаж. Каждый из участников может иметь различное представление о продукте и о том, насколько он хорош или плох, то есть о том, насколько высоко качество продукта. Таким образом, постановка задачи обеспечения качества продукта выливается в задачу определения заинтересованных лиц, их критериев качества и затем нахождения оптимального решения, удовлетворяющего этим критериям.
Когда и кто?
По мнению опытных разработчиков, тестирование программного продукта должно проводиться прям с самого начала его создания. Но при этом, сами опытные разработчики в тестировании не должны принимать участия, так как не царское это дело. Тестировать программный продукт должны специально обученные сотрудники, называемые тестировщиками, ибо даже самый опытный разработчик не сможет увидеть свою ошибку, даже с использованием самых новейших оптических приборов.
Тем не менее, все разработчики сходятся во мнении, что тестирование программного продукта с точки зрения классификации по целям должно делиться на два класса:
- Функциональное тестирование
- Нефункциональное тестирование
Функциональное тестирование
Под функциональным тестированием понимается проверка соответствия программного продукта функциональным требованиям, указанным в техническом задании на создание это продукта. Если говорить проще, то при функциональном тестировании проверяется выполняет ли программный продукт все функции, которые должен.
Итак, Вы таки решились провести функциональное тестирование. Вы заглядываете в техническое задание, читаете функциональные требования и понимаете, что по крайней мере они расположены не в том порядке, в каком можно производить тестирование. Вы будете удивлены, что еще достаточно давно другие уже заметили это несоответствие и придумали как его преодолеть.
Для проведения функционального тестирования персоналом отдела технического контроля разрабатывается документ программа и методика испытаний функционала приложения (ПМИ). Документ ПМИ содержит перечень сценариев тестирования программного продукта (test cases) с подробным описанием шагов. Каждый шаг сценария тестирования характеризуется действиями пользователя (специалиста по тестированию) и ожидаемыми результатами – ответной реакции программы на эти действия. Программа и методика испытаний обязана имитировать эксплуатацию программного продукта в реальном режиме. Это означает, что сценарий тестирования должен быть построен на основе анализа операций, которые будут выполнять будущие пользователи системы, а не быть искусственно составленной последовательностью понятных только разработчику манипуляций.[2]
Обычно, функциональное тестирование проводится на двух уровнях:
- Компонентное (модульное) тестирование. Тестирование отдельных компонентов программного продукта, сфокусированное на их специфике, назначении и функциональных особенностях.
- Интеграционное тестирование. Данный вид тестирования проводится после компонентного тестирования и направлен на выявление дефектов взаимодействия различных подсистем на уровне потоков управления и обмена данными.
Нефункциональное тестирование
Нефункциональное тестирование оценивает такие качества программного продукта, как, например, эргономику или производительность.
Думаю, важность данного вида тестирования понятна и не требует обоснования. Ведь всем понятно, что если, к примеру, производительность системы не достаточна, то пользователям придется по пол дня ждать отклика на свои действия, что может привести к их массовой спячке.
Как следует из названия, при нефункциональном тестировании проверяется соответствие программного продукта нефункциональным требованиям из технического задания на его создание. И, как в случае с функциональным тестированием, для нефункционально разрабатывается программа и методика испытаний.
Тестирование встроенного ПО и соблюдение стандартов в эру Agile
Соблюдение отраслевых стандартов – это не то, чем вы можете пренебречь или заняться позже; это неотъемлемая часть процесса разработки встроенного программного обеспечения (ПО). Для некоторых индустрий, — таких как авионика, автомобилестроение и здравоохранение, — строгое следование стандартам качества при разработке сложных и безотказных встроенных систем становится жизненно необходимым условием выпуска продукта на рынок. Традиционно, тестирование играет важную роль в разработке встраиваемых систем для регулируемых стандартами отраслей. Однако за последние годы устоявшиеся практики и процессы тестирования, их место и роль в подобных проектах значительно преобразились. Это резко изменило все правила игры, а когда правила игры меняются, необходимо меняться вместе с ними, чтобы выиграть.
В условиях постоянного развития новых, ультрасовременных технологий компаниям необходимо быстро предлагать рынку надежные, безопасные, простые в использовании и совместимые с другими системами продукты – просто чтобы не потеряться в быстро меняющемся технологическом мире. В такой ситуации традиционная каскадная модель, где процесс разработки ПО строго последователен и тестирование выполняется в самом его конце, уходит в прошлое. Большую популярность приобретают методы DevOps и Agile, поскольку они позволяют инженерам выполнять задачи, которые раньше следовали друг за другом, одновременно.
Исследование, проведенное Ауригой при поддержке независимой исследовательской компании LTM Research, показывает, что эта эволюция роли тестирования в цикле разработки ПО имеет огромное значение. При постоянном дефиците времени производители по-прежнему не могут пожертвовать качеством, надежностью и безопасностью своего продукта. К примеру, широко обсуждаемые сегодня беспилотные автомобили являются источником повышенной опасности, а значит, требуют неукоснительного соблюдения стандартов. Нельзя обойтись и без тестирования встроенного ПО, поскольку практически все решения в области IoT и Connectivity основаны на встроенных технологиях.
Все отрасли стремятся к инновациям, быстрому развитию и распараллеливанию процессов, и это делает тестирование встроенного ПО еще более важным. Здравоохранение, где стандарты традиционно очень высоки, отличает огромный спрос на сложные и сверхточные алгоритмы – такие как, например, алгоритм автоматического распознавания сердечных ритмов для инновационного дефибриллятора, над которым сейчас трудятся инженеры Ауриги. Новые интеллектуальные больничные системы, «умное» медицинское оборудование и носимые устройства, которые появляются почти каждый день, должны быть безопасными и надежными.
Говоря о безопасности, нельзя не упомянуть сферу финансов и растущий интерес к биометрии. Сканирование отпечатков пальцев и сетчатки глаз, распознавание голоса и лица – вот что будет использоваться для идентификации пользователей вместо обычных паролей, к которым мы так привыкли. Но прежде чем позволить встроенному ПО сканировать вашу сетчатку, производители должны убедиться, что оно соответствует всем стандартами и устойчиво к киберугрозам, которые сегодня становятся все масштабнее и изощреннее[1].
Тестирование производительности
В ходе этапа тестирования производительности в первую очередь проводят нагрузочное тестирование, целью которого является проверка, будет ли система адекватно реагировать на внешние воздействия в режиме, близком к режиму реальной эксплуатации.
Кроме нагрузочного тестирования проводят испытания в условиях минимальных аппаратных средств и максимальной нагрузки – стрессовое тестирование, а также, испытания в условиях предельных объемов обрабатываемой информации – объемное тестирование.
Выделяют еще один вид тестирования: тестирование стабильности и надежности, которое включает в себя не только длительное испытание программного продукта в нормальных условиях, но и способность его возвращаться в нормальный режим функционирования после непродолжительных периодов стрессовых нагрузок.
Документация для тестирования
Как уже было указано выше, тестирование проводится в соответствии с программой и методикой испытаний, которая разрабатывается в соответствии с ГОСТ 34.603-92.
Для проведения тестирования разрабатывается контрольный пример, который должен содержать достаточно данных для проверки всех режимов работы программного продукта. Обычно, контрольный пример создается совместно заказчиком и исполнителем на основе реальных данных.
Для проведения всех видов тестирования производительности чаще всего создается так называемый генератор данных, который позволяет в автоматическом режиме создать достаточное количество данных, для достижения объективного результата при оценке производительности.
В ходе проведения тестирования составляется протокол тестирования, куда заносится информация о прохождении всех этапов и шагов тестирования и замечаниях полученных на испытаниях.
Если результат тестирования отрицательный, проводится устранение недостатков и повторное тестирование.
Исследовательское тестирование
Исследовательское тестирование (ad hoc тестирование - подвид функционального тестирования. Оно применяется в быстрорастущих проектах с гибкими методиками разработки, где нет четкой документации и требований. Исследовательское тестирование - высший пилотаж в тестирование программного обеспечения. Качественное тестирование доступно специалистам с высшей квалификацией и практически полностью зависит от исполнителя, его опыта, знаний (как в предметной области, так и в методоиках тестирования), способности быстро проникать в суть.
Нагрузочное тестирование
Нагрузочное тестирование - процесс анализа производительности тестируемой системы под воздействием нагрузок. Цель нагрузочного тестирования- определить способность приложения к внешним нагрузкам. Обычно испытания проводятся в несколько этапов.
1. Генерация тестовых сценариев
Для эффективного анализа сценарии должны быть наиболее близки к реальным сценариям использования. Важно понимать, что всегда возможны исключения, и даже самый подробный план тестирования может не покрыть отдельно взятого случая.
2. Разработка тестовой конфигурации
Имея сценарии тестирования, важно распределить порядок возрастания нагрузки. Для успешного анализа необходимо выделить критерии оценки производительности (скорость отклика, время обработки запроса и т.д.).
3. Проведение тестового испытания
При проведении тестов важно своевременно следить за исполнением сценариев и откликом тестируемой системы. Для эмуляции высоких нагрузок требуется серьезная аппаратная и программная инфраструктура. В некоторых случаях для удешевления работ применяются методы математического моделирования. За основу берутся данные, полученные при низких нагрузках, и аппроксимируются. Чем выше уровень моделируемой нагрузки, тем ниже точность оценки. Однако подобный способ существенно сокращает расходы.
Автоматизация тестирования
Основная особенность автоматизированного тестирования - возможность быстрого проведения регрессионных тестов. Главными плюсами автоматизации (по даннымотчета компании Worksoft) является увеличение эффективности персонала, более раннее обнаружение дефектов и более высокое качество бизнес-процессов. Эти преимущества компенсируются существенным недостатком: дороговизна, - из-за высокой цены на внедрение и поддержку автоматизации тестирования, около 50% компаний до сих пор применяют в основном ручное тестирование.
Тестирование юзабилити
Любое приложение создается для того, чтобы им воспользовались. Удобство использования - важный качественный показатель программы. IT индустрия знает множество примеров, когда проекты взлетали после удачного исправления удобства использования. Чем шире аудитория, тем важнее фактор юзабилити. Тестирование юзабилити включает в себя детальный анализ поведения пользователей. Для оценки эргономики важно иметь данные не только о скорости выполнения бизнес-задачи, но и об эмоциях пользователя, мимике лица, тембра голоса.
Конфигурационное тестирование
Конфигурационное тестирование дает уверенность, что приложение заработает на разных платформах, а значит у максимального числа пользователей. Для ВЕБ-приложений обычно выбирают тестирование на кросс-браузерность. Для Windows приложений - тестирование на различных операционных системах и битностях (x86, x64). Важной составляющей конфигурационного тестирования является тестовая инфраструктура: для проведения испытаний нужно постоянно поддерживать парк тестовых машин. Их число варьируется от 5 до нескольких десятков.
Интеграционное тестирование
Если в вашем проекте более одной компоненты, он нуждается в интеграционном тестировании. При сложной архитектуре приложения необходимым условием обеспечения качества является проверка на взаимодействие частей программы. Тестирование достигается путем разработки и проведения "сквозных" кейсов. Интеграционное тестирование проводится после компонентного. Поэтому очень важно учитывать опыт компонентного тестирования, при этом соблюдая бизнес-ориентацию тест-кейсов.
Стресс тестирование
У любой системы есть предел нормального функционирования. При превышении предела система попадает в состояние стресса и значительно меняет свое поведение. Стресс тестирование проверяет работу приложения в условиях превышения предлов нормального функционирования. Особенно это важно для "критичных" программ: банковского ПО, программ авиационной отрасли, медицины. Стресс тестирование проводят не только на стадии разработки программного обеспечения, но и на протяжении всего цикла функционирования с целью получения и обработки данных поведения системы за долгий период времени.
Исследования рынка тестирования ПО
2022: Как меняются инструменты и подходы к тестированию ПО в крупном российском бизнесе. Обзор TAdviser
Услуги тестирования программного обеспечения в России очень востребованы, и конкуренция в данном сегменте высокая. Несколько просев во время пандемии, в 2021 году этот рынок показал динамичный рост. А с февраля 2022 спрос подогревает возросшая потребность организаций в переходе с западных ИТ-решений на альтернативные, ведь это подразумевает и большой пласт работ, связанных с тестированием софта. TAdviser пообщался с представителями крупного бизнеса из разных отраслей, имеющего глубокие компетенции в области тестирования, а также с представителями игроков, оказывающих такие услуги, и подготовил обзор состояния этой сферы в России. Партнёрами материала выступили компании «ЛАНИТ Экспертиза» (входит в группу ЛАНИТ) и Группа Т1. Подробнее здесь.
2020: Только 13% российских компаний привлекают QA-специалистов на всех этапах разработки ПО
3 сентября 2020 года компания "Перфоманс Лаб" выпустила ежегодный отчет RQR 2020 (Russia Quality Report), отражающий состояние рынка услуг тестирования ИТ-продуктов и обеспечения их качества в 2020. В RQR 2020 описаны тренды и изменения в области тестирования и обеспечения качества ИТ-продуктов в России в 2020 году по сравнению с предыдущими годами на основе отзывов респондентов из разных областей.
В частности, опросы респондентов показали, что запросы на тестирование ИТ-продуктов растут с каждым годом на отечественном рынке. Бизнес понимает насколько важно для выпуска качественного продукта применять методы тестирования, но широкое распространение, в общем, тестирование ИТ-продуктов пока наблюдается не во всех областях, ввиду незнания процессов, дороговизны использования инструментов тестирования и других причин. Хотя есть много отраслей, где тестирование востребовано сегодня и имеет достаточно высокий спрос.
Как известно, создание программных решений высокого качества невозможно без их тестирования. Необходимо привлечение QA-команды (Quality Assurance) к работе над продуктом на ранних этапах. Такой подход также помогает своевременно выявить критические дефекты и впоследствии выпустить на рынок качественное ИТ-решение.
На момент опроса только 13% российских организаций и компаний привлекают к работе специалистов по тестированию на всех этапах жизненного цикла программного обеспечения. К сожалению, отечественный рынок пока не достиг зрелости в этом отношении. Однако показатель хоть и медленно, но неуклонно увеличивается: по сравнению с результатами предыдущего опроса его рост составил 5%.
В сравнении с опросом 2017-2018 годов, организации стали чаще привлекать отдел тестирования на ранних этапах жизненного цикла ПО. Специалисты по QA подключаются к работе на стадиях эксплуатации и поддержки (в 50% случаев), описания требований (50%), проектирования (46%).
Помимо этапа тестирования, в котором QA-специалисты принимают участие в 91% случаев, этих сотрудников также часто привлекают во время внедрения (61%) и разработки (57%) продукта.
Главной целью бизнеса в 2020 году стало сокращение времени вывода продуктов на рынок - эта тенденция наблюдается во всех отраслях, кроме сферы системной интеграции. В предыдущих годах сокращение времени вывода продуктов на рынок было ниже, чем показатель качества ИТ-продуктов. Специалисты "Перфоманс Лаб" полагают, что быстрота выпуска продукта на рынок останется приоритетным критерием для оценки тестирования и одной из главных целей QA на протяжении 2020 и 2021 годов.
В сравнении с 2019 годом, учитывая ситуацию кризиса во многих отраслях, бизнес остро осознал и решительно действует в направлении лидерства выхода на рынок: кто вышел на рынок первым с качественным продуктом - тот и получает больший спрос на рынке.
Довольно постоянным показателем остается большое количество опрошенных компаний, которые, в первую очередь, привлекают свой отдел QA к задаче повышения качества ИТ-продуктов. Об этом заявило 80% участников исследования. 69% респондентов в качестве цели работы специалистов QA выбирают повышение удовлетворенности пользователей.
Роль автоматизированного тестирования в ИТ-процессах за последние годы стала многогранной. Заказчики услуги стремятся с ее помощью получить полный контроль над качеством разрабатываемого продукта и сократить время тестирования за счет исключения человеческого фактора.
По словам специалистов "Перфоманс Лаб", автоматизация позволяет обеспечить максимальное тестовое покрытие и эффективность применения тест-кейсов, приводит к оптимизации затрат, росту производительности труда и уменьшению сроков вывода продукта на рынок. Таким образом, автоматизированное тестирование становится оптимальным способом достижения целого ряда QA-целей. Большинство участников опроса (82%) используют для проверки качества разрабатываемых продуктов автотесты. Столько же респондентов занимаются развитием компетенций по автоматизированному тестированию у своих специалистов в области функционального тестирования.
Большинство респондентов (71%) понимают важность процедуры тестирования мобильных приложений и проводят ее.
Респонденты стали больше использовать Agile: число участников исследования, которые жалуются на отсутствие опыта применения гибких методологий, за последние два года сократилось. Гибкие методологии (Agile) продолжают завоевывать симпатии российских компаний и организаций. Еще четыре года назад такой подход применяли всего 43% опрошенных игроков рынка. В 2020 годах их количество увеличилось до 80%. Еще 17% респондентов указали на недостаточное понимание подходов Agile к тестированию.
Гибкие методологии разработки (Agile) использует большинство (91%) опрошенных из банковских организаций, а в телекоме такие методологии применяет чуть меньше респондентов - 80%. Как показал опрос торговых компаний, Agile в ритейле год от года набирает обороты - большая часть таких организаций 60% использует этот подход. Здесь за последние два года данный показатель вырос на 7%.
По наблюдению исследователей, в российских компаниях есть некоторая инерция в вопросе смены инструментов для тестирования, скорее это постепенный процесс. Респонденты отметили, что большинство из них используют одновременно не менее трех различных инструментов. Сложности перехода на новые продукты зачастую связаны для кого-то с высокой стоимостью перехода, незнанием рынка QA-продуктов. По результатам отчета телеком и eCommerсe индустрии выглядят наиболее гибкими и готовы рассматривать отечественные продукты по сравнению, например, с банковским сектором. Только 14% респондентов ограничивают использование зарубежных инструментов для организации тестирования в рамках программы импортозамещения. Несмотря на то, что большая часть игроков российского рынка все еще отдает предпочтение иностранным инструментам тестирования, число компаний и организаций, которые ограничивают их использование, по сравнению с предыдущим отчетом увеличилось на 8%.
В период сбора данных для отчета 2020 года угроза распространения коронавирусного заболевания Covid-19 еще не была столь остра. Однако уже ясно, что пандемия внесла свои изменения в жизнь и в бизнес. Бюджеты, выделенные на сферу ИТ, в общем, и на тестирование, в частности, сокращаются. Одновременно, поставщики услуг и специалистов в сфере QA будут переходить на удаленный формат работы. Также видно, что текущий кризис не нанесет серьезного урона отраслям, связанным, в первую очередь, с цифровым контентом.
Это, в первую очередь, телекоммуникационная отрасль. Бизнес частично ушел из офисов, и пользователи стали намного чаще пользоваться интернетом и связываться через мобильные и другие онлайн-инструменты. Согласно отчету, инновационные технологические решения в телекоммуникационной среде приживаются легче, по сравнению с другими областями. Так, например, продукты Big Data тестирует большинство опрошенных представителей этой отрасли. Телекоммуникационные компании чаще используют QA-сервисы - в периоды проектирования, разработки и тестирования, системные интеграторы - на стадиях тестирования и эксплуатации.
Ритейл в большей части удержал свои позиции, проще оказалось тем, кто работает через онлайновые каналы продаж. По eCommerce также прошлась волна кризиса, но не так сильно, как по другим областям.
Все банковские организации, принявшие участие в опросе, проводят тестирование своих ИТ-продуктов. Из таких банковских компаний 81% имеют в штате соответствующих специалистов, 63% содержат профильный отдел и еще 63% пользуются аутсорсинг-услугами в этой сфере.
В целом, по отчетам RQR, собственный отдел по тестированию ПО имеют 67% респондентов. В штате 65% опрошенных компаний и организаций есть соответствующие специалисты. Наконец, 39% игроков рынка, принявших участие в исследовании, пользуются аутсорсинг-услугами для тестирования на регулярной основе.
Представители государственного сектора чаще отмечали, что имеют собственный отдел по тестированию или в крайнем случае используют аутсорсинг-услуги. Системные интеграторы предпочитают держать на проектах необходимых сотрудников. К аутсорсинг-услугам чаще прибегают в финансовом и государственном секторах. Популярность аутсорсинга в сферах телекоммуникации, электронной коммерции и системной интеграции ниже: только четверть опрошенных игроков этих рынков используют такой формат работы для тестирования ПО.
Кроме того, более трети организаций, принявших участие в опросе (38%), имеют в своем штате специалиста, ответственного за цифровую трансформацию. Например, такие сотрудники помогают развивать бизнес 58% респондентам, работающим в банковской сфере. Аналогичный подход исповедуют 50% наших собеседников из государственного и телекоммуникационного секторов. В то же время, ни один из опрошенных системных интеграторов к этой практике не прибегает.
Число российских компаний и организаций, использующих возможности искусственного интеллекта, растет. Так, в 2017-2018 гг. эти технологии не применяли 77% респондентов. По данным RQR 2020, их доля сократилась до 68%. Работает с ИИ 32% участников опроса.
Технологии искусственного интеллекта входят и в область обеспечения качества (QA): чуть менее половины (44%) опрошенных игроков рынка заявили, что уже используют ИИ и аналитику для оптимизации QA. Самой популярной причиной использования искусственного интеллекта является автоматизация: так ответили 62% респондентов. Эти технологии также активно применяются в целях предсказательной аналитики (в практике 31% респондента).
В банках 60% случаев искусственный интеллект используется для автоматизации, в 40% - для предсказательной аналитики.
Машинное обучение (Machine learning) – одна из областей искусственного интеллекта, в ней применяются методы по "обучению" аналитических систем посредством решения большого числа похожих задач. Только 19% участников опроса заявили о наличии опыта тестирования продуктов машинного обучения. Быстрее всего эту технологию взяли на вооружение в банковской сфере: о ее применении заявили 33% опрошенных представителей отрасли.
Что касается технологии блокчейн, то ее возможностями пользуются только 3% участников опроса.
2018: Исследование TAdviser: Рынок аутсорсинга услуг тестирования ИТ-систем в России
Настоящее исследование TAdviser посвящено достаточно узкой, с точки зрения финансовой оценки, области в рыночном сегменте аутсорсинговых ИТ-услуг – аутсорсингу услуг тестирования программного обеспечения. Несмотря на относительно скромный – по сравнению с другими видами ИТ-услуг - размер данного сегмента рынка, в последние 2-3 года он привлек к себе внимание аналитиков и профильных СМИ из-за нескольких больших конкурсов с бюджетами в сотни миллионов рублей, проведенных ключевыми заказчиками (крупные банки, госструктуры федерального уровня, розничные сети). Подробнее о результатах исследования здесь.
Смотрите также
- Средства разработки приложений - каталог продуктов и проектов
- Программист
- Agile software development
- DevOps Методология
- День программиста
- Кладбища программистов. Почему не все ИТ-шники хотят работать в корпорациях
- Разработчики сайтов (контакты программистов)
- Рейтинг программистов HackerRank
- Себестоимость часа работы программиста
- Машинное обучение (Machine Learning)
- Искусственный интеллект
- Машинный интеллект
- Когнитивный компьютинг
- Наука о данных (Data Science)
- Нейросети
- [1] Тестирование - способ обеспечения качества
- [2] Тестирование на этапе создания программного продукта
- [3] Идеальный процесс создания информационных систем. Тестирование. Зачем оно нужно?