- Что такое тестирование?
- Почему оно важно?
- А если бы тестирования не было?
- Какую пользу приносит?
- Определение в Программной Инженерии
- Главные принципы тестирования
- Типы тестирования
- Стратегии тестирования
- Шпаргалка
Определение
Тестирование — это проверка созданного программного продукта на соответствие заданным требованиям, и на отсутствие дефектов.
Тестирование подразумевает запуск программы (или ее компонентов) при помощи ручных (или автоматизированных) программных средств тестирования; тестироваться могут и отдельные компоненты (или отдельные свойства) программы.
Тестирование производится для поиска ошибок, случайных «пропусков» по невнимательности, либо направлено на соблюдение прописанных требований к софту.
Почему тестирование так важно?
Тестирование важно, потому что если в коде есть баги, их поначалу легко найти и исправить, до того как программный продукт передадут владельцу. Качественно протестированный продукт — надежный, безопасный и производительный, это гарантирует экономию времени и денег, и удовлетворение клиентов.
А если бы тестирования не было?
Тестирование крайне важно, потому что баги в коде — это дорого, или даже бывает опасно. Баги могут создать колоссальные потери в деньгах, или даже человеческие жертвы, и история знает такие примеры.
- В апреле 2015 финансовый терминал Bloomberg в Лондоне «упал» из-за бага в коде. Это затронуло 300 тысяч клиентов — трейдеров на финансовом рынке. Из-за этого бага британское правительство было вынуждено отложить размещение займа на 3 миллиарда фунтов.
- Nissan отозвала более 1 миллиона автомашин, из-за программной ошибки в детекторах подушки безопасности. Сообщалось как минимум о двух тяжелых дорожных происшествиях, связанных с этим багом.
- Starbucks закрывала 60% кофеен в Штатах и Канаде, из-за масштабнейшего отказа платежных терминалов. В какой-то момент легендарная сеть отдавала кофе бесплатно, потому что не могла обработать покупки, а выгонять клиентов было не с руки.
- Поставщики Amazon в один прекрасный день обнаружили, что их товары стОят 1 цент, из-за программной ошибки. Разумеется, были понесены потери.
- Уязвимость в Windows 10, позволяющая злоумышленнику выйти из “песочницы” через уязвимость в подсистеме win32k.
- В 2015 истребитель F-35 пал жертвой бага, не позволяющего правильно определять цели.
- Airbus A300 авиакомпании China Airlines потерпел крушение в апреле 1994; в этой катастрофе 264 жертвы
- В 1985 году в Канаде рентгеновский аппарат Therac-25 вышел из строя из-за ошибки в программе. Пациенты получили смертельную дозу радиации, погибли 3 человека, и 3 стали инвалидами.
- В апреле 1999 г. программная ошибка вызвала сбой во время запуска военного спутника стоимостью 1,2 миллиарда долларов. Это пока что самый дорогой баг в программе в истории человечества.
- В мае 1996 г. ошибка в коде привела к списанию со счетов 823 клиентов американского банка сумм на 0,92 миллиарда долларов.
Какую пользу приносит тестирование?
- Эффективность в денежных тратах. Самое важное преимущество. Тестирование позволяет сберечь деньги сейчас, и экономить постоянно. Если баги обнаружены вовремя, они будут исправлены и не принесут проблем.
- Безопасность. Самый “чувствительный” нюанс тестирования. Люди хотят иметь надежные, проверенные программы. Поэтому устранение рисков и проблем до того как они возникнут.
- Качество. Крайне важный нюанс. Тестирование гарантирует, что у клиентов будут только качественные программы.
- Удовлетворение клиентов. Главнейшая цель любого продукта — удовлетворение клиентов. Тестирование интерфейса (UI/UX) гарантирует, что пользователи будут приятно удивлены удобством интерфейса.
Определение тестирования в Программной Инженерии
Как говорится в Стандарте Качества ANSI/IEEE 1059, Тестирование в программной инженерии является оценкой программного продукта — отвечает ли заданным правилам, или нет. Здесь подразумевается оценка функций программного продукта, проверка на отсутствие компонентов, на баги и ошибки, на безопасность, на надежность, и на производительность.
Главные принципы тестирования
Типы тестирования
Тестирование делится на следующие категории:
- Функциональное тестирование
- Нефункциональное тестирование (или Тестирование производительности)
- Эксплуатационное тестирование (регрессионное, или в период сопровождения)
Категория тестирования | Типы тестирования |
---|---|
Функциональное тестирование | Unit-тестирование (модульное) Интеграционное тестирование Smoke-тестирование UAT (тестирование на приемлемость у пользователей) Тестирование локализации и т.п. |
Нефункциональное тестирование | Тестирование системы на Устойчивость Производительность Масштабируемость и т.п. |
Эксплуатационное тестирование | Регрессионное тестирование Тестирование в период сопровождения |
Этот список неполный, а вообще есть около 150 типов тестирования ПО, и их количество постоянно растет. Не всякий тип тестирования применим в каждом конкретном случае. Это зависит от природы и масштаба проекта.
Стратегии тестирования
Юнит-тестирование (модульное): это как бы «базовый» подход к тестированию: оно проходит отдельно по каждой части программы. Это помогает команде оценить пригодность программы.
Интеграционное тестирование: Команда сосредотачивается на собирании приложения в целое, и его дизайне. Цель: понять, правильно ли работают ли вместе все части программы.
Системное тестирование: приложение компилируется в целое, и затем тестируется как одно целое. Эта стратегия проверяет функциональность, безопасность, переносимость, и др.
Шпаргалка
- Что такое тестирование? Это действия для проверки, соответствует ли реальное приложение заданным при его создании целям, и что в приложении нет явных дефектов.
- Тестирование важно, потому что ошибки в программе могут дорого обойтись, или даже быть опасными.
- Критерии тестирования: эффективность траты денег, безопасность, качество продукта и удовлетворение клиентов.
- Три главные категории тестирование: функциональное, нефункциональное, эксплуатационное.
- Главные стратегии тестирования: юнит-тестирование, интеграционное тестирование, валидационное тестирование, и системное тестирование.