Введение в тестирование
программного обеспечения
ЕСЛИ ВЫ ЧТО-НИБУДЬ МОЖЕТЕ УЗНАТЬ ИЗ ЭТОГО,
ТО ЭТО - ПРОВЕРИТЬ СВОЙ КОД ТАК, КАК БУДТО ЖИЗНЬ ЗАВИСИТ ОТ НЕГО.
Программное обеспечение проникло во
все аспекты нашей жизни
Беспилотный грузовик
грузовик Freightliner Inspiration компании Daimler получил разрешение на перевозки
по дорогам общего пользования штата Невада
Неисправности программного
обеспечения
Мы разрабатываем программы, которые
содержат дефекты
• Сколько? Какие?
Трудно предсказать будущее, однако ... Это
весьма вероятно, что программное
обеспечение будет развиваться в будущем не
будет значительно лучше.
Что такое компьютерный "баг“ ?
В 1947 году в Гарвардском университете
работал компьютер под названием Mark II.
Этот компьютер занимал целую комнату.
механические реле для реализации как 50 регистров с плавающей
запятой, так и для арифметического устройства
светящиеся вакуумные трубки
техники программирования компьютера с помощью изменения
конфигурации
Жук (bug), забравшись в Harvard Mark II, привел к ошибкам при
проведении операций с плавающей точкой.
Запись в лабораторном журнале гласила:
«Сегодня обнаружен первый настоящий баг».
Bugs также известны, как ...
ошибки
заблуждение
проблема
инцидент
аномалия
дисперсия
дефект
отказ
несоответствие
погрешность
огреха
особенность
программы :-)
Ariane 5 – Европейское космическое
агенство
4 июня 1996 года, полет Ариан-5
закончился отказом.
Лишь около 40 секунд после стартовой
последовательности, на высоте 3700 м,
носитель свернул с траектории полета,
распалася и взорвался
Ариан-5 - Основная причина
Ariane 5 Полет 501 Отказ,
Доклад по расследованию причин:
программный сегмент для преобразования числа с плавающей запятой в знаковое 16-битное целое было выполнено со значением входных данных вне диапазона представления 16-разрядного целого числа.
Эта ошибка во время выполнения (выход из диапазона, переполнение), которая возникла в обоих (активном и резервном) компьютерах примерно в то же время, не была обнаружена и оба компьютера отключились.
Это привело к полной потере управления ориентацией. Ариан-5 оказался бесконтрольным и аэродинамические силы свернули его с пути.
Этот разрыв был обнаружен бортовым монитором, который воспламенил взрывчатку, предназначенную для уничтожения носителя в воздухе при некорректном поведении.
Mariner 1 (1962 г.) : Ошибка в коде для
космической программы
Код был написан на Фортране и имел ошибку:
DO 3 I = 1.10 вместо ... DO 3 I = 1,10
компилятор воспринял это как допустимое
выражение, поскольку в ФОРТРАНе (DO3I = 1.10 )
Другой вариант:
Математик написал на бумаге формулу с "NOT-R", т.е.
букву R с чертой над ней;
программист не заметил черту, и использовал "R"
вместо "NOT-R".
Проблемы военной авиации
F-18 разбился из-за пропущенного условия else в блоке If...
then ... поэтому не было возможности перехода.
В симуляции F-16 программаная ошибка
пыталась перевернуть виртуальный
самолет всякий раз, когда он пересекал
экватор. Это происходило из-за
пропущенного минуса для указания
южной широты.
Therac-25: Фатальная радиация
В 1986 году человек в Техасе получил от 16,500- 25000 рад в менее чем 10 сек, на площади около 1 см(вместо 180 рад,)
Он потерял левую руку, и умер от осложнений 5 месяцев спустя.
Терак-25 – аппарат для лучевой терапии (онкология).
В 1985-87 гг. 6 человек получили смертельную дозу облучения (количество пациентов, также подвергшихся переоблучению, но выживших, точно не известно).
Therac-25: ОшибкиБыла разработана специальная мультизадачная ОС реального времени для компьютера PDP-11/23 с 32Kбайт и написанная на языке ассемблера
Неправильная синхронизация процессов
Если в пределах 8 сек. курсор покидает командную строку и - после быстрого редактирования параметров - успевает вернуться на нее, то Keyboard Handler этого события просто не заметит,.
дозиметр давал показания в "условных единицах"
Программная блокировка
Во время установки и подгонки параметров подпрограмма Set Up Test вызывается несколько сотен раз. Проверка - переменная F$mal равна 0 . Иначе цикл повторяется.
Эта переменная – однобайтовая : каждый 256-й проход она сбрасываться в ноль. А ведь этот ноль - свидетельство, что все параметры, наконец, установлены.
Авария в энергосистеме в США и
Канаде (2003)
Около 10 млн человек в
Канаде (примерно треть
населения)
40 млн человек в США
Денежный ущерб
составил 6 миллиардов
долларов.
Авария в энергосистеме в США и Канаде (Причины )
В Кливленде, Огайо не подстригли деревья под проводами.
Линии электропередачи в Кливленде нагрелись, провисли и коснулись
деревьев. Произошло короткое замыкание.
Электростанция в Кливленде вышла из строя.
Из-за ошибки в компьютерной системе и нехватки персонала, другие
центры управления не были извещены.
Произошло цепное отключение около 100 других электростанций.
баг в программе, отвечающей за систему оповещения
Две части системы «соревновались» за один ресурс и не могли разрешить
конфликт (ошибка проектирования под названием «состояние гонки»), из-за
этого система оповещения не сработала.
остановка системы оповещения была «тихой». Не было произведено никаких
звуковых или визуальных оповещений.
Происшествие на авианосце USS
Yorktown
21 сентября 1997 года движущая система USS Yorktown
полностью остановилась, оставив авианосец
беспомощным в воде на 3 часа, когда один из членов
экипажа корабля ввѐл ноль в бортовую систему
управления базами данных, а система попыталась
произвести операцию деления на ноль. Программное
обеспечение было установлено в ходе проекта по
использованию компьютеров для уменьшения
необходимого количества людей в экипажах некоторых
кораблей.
ЦРУ дает Советам газа (1982) миллионы долларов, значительный ущерб для
советской экономики
Из-за сбоя в работе программного обеспечения, контролирующего транспортировку газа по магистральному трубопроводу, произошло резкое, скачкообразное повышение давления в Транссибирском газопроводе, в результате чего произошел крупнейший техногенный неядерный взрыв в истории нашей планеты.
Этот сбой относится к разряду запрограммированных - по одной из версий агенты ЦРУ
намеренно внесли изменения в исходники канадского программно-технического
комплекса, приобретенного Советским Союзом для того, чтобы управлять своими
газопроводами. Приобретение было частью стратегического плана СССР по хищению
или получению доступа к секретным технологиям США. Когда ЦРУ получило
информацию об этой покупке, в качестве контрмер оно приступило к программному
саботажу,
Обвал на Уолл-стрит (1987)
Всего за один день,"Черный понедельник" (19 октября 1987 года), котировки Dow Jones упали на 508
пунктов, потеряв 22,6% своей стоимости. Фондовый индекс S&P 500 упал на 20,4%(500 млрд долларов ).
Это были самые большие потери за всю историю Уолл-стрит, которые произошли в течение одного дня.
к октябрю 1987 года многие инвесторы решили выйти из игры, чтобы спокойно подождать прихода более
стабильных времен и условий ведения бизнеса,
биржевые игроки стремились избавиться от акций и облигаций. Это породило панику на бирже.
Поскольку инвесторы обратились в массовое бегство, компьютерная программа биржевой торговли
начала генерировать поток ордеров на продажу, рынок зашатался и... рухнул,
последовал сбой системы, который сделал инвесторов
слепыми, фактически в эти часы они не могли что-либо
контролировать и влиять на ситуацию, они не знали что
они продают и по какой цене.
Патриот не защищает своих солдат (1991)
25 февраля 1991 года, во время первой войны
в Персидском заливе американской системе
противоракетной обороны Patriot,
установленной в Саудовской Аравии, не
удалось перехватить атаку иракских ракет
Скад (Scud). Ракетами были уничтожены
армейские казармы и солдаты, которые в них
находились во время атаки.
28 солдат погибли, 100 получили ранения
Патриот не защищает своих
солдат (1991) Ошибка программного обеспечения, из-за некорректного округления (при
переводе десятых долей секунды в секунды) было неправильно рассчитано время, в результате чего система Patriot просто проигнорировала приближающиеся ракеты Scud. Погрешность составила всего около 0,34 секунды, но за это время ракета преодолевает расстояние в полкилометра.
Ошибка операции деления у Pentium (1993)
чип процессора Intel Pentium периодически допускал незначительные ошибки при делении чисел с плавающей точкой в пределах определенного диапазона.
Например, деление 4195835.0/3145727.0 давало результат 1,33374 вместо 1,33382, (погрешность 0,006%.)
реальные неудобства от ошибка испытали лишь несколько пользователей
Из 5 миллионов дефектных чипов, находящихся в обращении, Intel первоначально предложила заменить чипы Pentium только тем потребителям, которые смогли бы доказать, что им действительно необходима такая высокая точность вычислений. В конце концов, Intel заменила чипы для всех, кто обратился с жалобой.
Потери: 475 млн долларов и престиж компании Intel.
floating-point unit (FPU), математический сопроцессор. использовались специальные таблицы деления, которые и хранились в математическом сопроцессоре, и в которых просто недоставало около пяти тысяч записей
Y2K (1999)
Потери: 500 млрд долларов.
Для экономии памяти компьютера, программное обеспечение часто сохраняло год в формате даты-времени в виде двух цифр, например "99" вместо "1999".
Поэтому при пересечении векового порога программа вполне могла интерпретировать "00" как исторические "1900", а не современные "2000".
Поэтому, когда 2000 год все-таки наступил, многие серьезно опасались, что результат перевода стрелок компьютерных часов будет поистине катастрофическим. Компьютерного апокалипсиса не произошло только потому, что на устранение ошибки было потрачено достаточное количество средств.
Последствия плохого качества
Standish Group обследовала 350 компаний, более 8000 проектов в
1994 году
31% отменена до завершения, 9-16% были прерваны из-за стоимости
и бюджета
исследование в США (1995): 81 млрд долларов США тратят в год на
проекты по разработке программного обеспечения
исследование Национальный институт стандартов и технологий NIST
(2002): ошибки стоят $ 59.5 млрд. в год. Раннее обнаружение может
сохранить $ 22 млрд.
ТестированиеОпределения и Цели
Определение Тестов
Тестирование программного обеспечения:
Методы выполнения программы с целью нахождения так
много дефектов как возможно и / или получения
достаточной уверенности в тестируемой программе (или
системе)
"Программа тестирования может показать наличие ошибок, но
никогда не докажет их отсутствие "(Дейкстра)
Базовые определения тестирования Ошибки: Люди совершают ошибки
Неисправность: Неисправность - это результат ошибки в
программном обеспечении, документация, коде и т.д.
Отказ: Отказ происходит, когда срабатывает неисправность
Многие люди используют вышеперечисленные три термина
заменяя один другим. Этого следует избегать
Аварии: последствия отказов - появление Отказ может или не может
быть очевидным для пользователя
Цепочка зависимости основных понятий надежности
Мотивации Независимо от того, как строги мы,
программное обеспечение будет иметь неисправности
Тестирование представляет собой функцию ограниченных ресурсов на разработку программного обеспечения и время выхода на рынок
Невозможно проверить в отпущенное время все варианты, возможные при эксплуатации -на основе неполного тестирования, мы должны быть достаточно уверены, что система имеет желаемое поведение
Тестирование больших систем является комплексным - это требует стратегию и соответствующую технологию и часто неэффективно на практике
Обзор процесса тестирования
тестирование
Эффективность показывает количество ненайденных
багов.
Помогает локализовать неисправность для дебаггинга.
Повторяемость позволяет понять как неисправность
может быть проверена.
Автоматизация также уменьшет стоимость и время
тестирования.
Систематический настолько, чтобы быть предсказуемым
в плане его влияния на надежность
Процесс тестирования
Процесс тестирования программного обеспечения
Является средством, в котором тестовые деятельности, люди, методы и инструменты обьединяются для проверки продукта
Тестовая деятельность - это задачи, необходимые для тестирования программного продукта
Люди - это тест-менеджеры, руководители и тестеровщики, отвечающие за выполнение тестов
Инструменты - аппаратные средства или программное обеспечение, используемое для автоматизации всех или части ручных тестов деятельности
Качество и эффективность тестирования программного обеспечения, прежде всего, определяется качеством процесса испытаний используется.
- [Тестирование в реальном мире, Эдвард комплект]
Тестовая деятельность Тестирование как деятельность может быть
сгруппировано в:
Подготовка испытания
Планирование испытаний
Дизайн и разработка тестов
Выполнение теста и управления дефектами
Подведение итогов тестов
планирование производстворазработкаисследование
завершениеразработкапланированиеисполнение
Выполнение тестов• Основные виды деятельности:
– Запуск тестов
– Исследование, протоколирование и проверка
дефектов
– Монитор выполнения тестов
– Продолжить создание автоматизации
Phases
Выполнение теста является основным видом деятельности обнаружение дефектов
Unit & Integration
Testing System Testing
BAT* Regression Testing Progressive Testing
System Testing
Cycle 1 Cycle 2
Test Cycle
* Build Acceptance Test
Build / Eng.
Relelase
Build / Eng.
Relelase
Люди
Процесс тестирования является профессиональной дисциплиной, требующей подготовленных, квалифицированных людей
Тестирование - это не работа начального уровня
Хорошие тестеры должны
Иметь мироощущение тестировщика
Обучиться процессу тестирования
Не принимать ничего на веру
Уметь работать в команде
Process
Мироощущение тестировщика
Охота на ошибки
Фокус на поиск ошибок
Получить личное удовлетворение
Быть творчески разрушительным
Использовать воображение, настойчивость, чтобы систематически находить дефекты
Преследовать ошибки, а не людей
Не нападайте на разработчика, который сделал ошибку
People
Обучение
Некоторые ключевые навыки инженеров-тестировщиков Планирование тестов
Использование инструментов тестирования
Выполнение тестов
Протоколирование дефектов
Анализ риска
Контрольные измерения
Проэктирование тестов
Построение тестового окружения
Знание технологий тестирования
Потребности конечного пользователя и рабочей среды
People
Создание прочных отношений
Развивать следующие характеристики
достоверность
Разработка технических знаний
Положительный настрой
Не злорадствовать, не хныкать, не показывать превосходство
Целесообразность
Не чувствовать виноватым, легко адаптироваться
Надежность
Быть ответственным за обеспечение последовательную, качественную поддержку
В эффективном проекте, тестеры и разработчики дополняют друг друга, каждый из которых обеспечивает перспективы и навыки, которые другим может не хватать
People
Инструменты
Инструменты автоматизируют некоторые виды тестирования
Чтобы успешно использовать инструменты, вы должны
Иметь четкое определение процесса
быть обучены пользоваться инструментами
Должна быть доступна поддержка
Есть достаточно времени в расписании для развертывания инструмента
Инструменты не решение, но часть решения
Tools
Intel Confidential
Выбор инструментов
Интеграция
Должен поддерживать ваш процесс
Должен поддерживать использование других инструментов
Понимание и подготовка
Какое обучение требуется?
Удобно ли пользоваться инструментом?
Общая стоимость
Стоимость лицензии или покупки
Установка
Техническое обслуживание и поддержка
Tools
Базовые методы тестирования
Два основных типа тестирования:
Тестирование методом черного ящика (black box)
Тестирование методом белого ящика (white box)
Method
Black-box Testing
Тесты основаны на том, что должна делать система (требования к
продукции)
Требуется четкие и полные спецификации, но не нужны внутренние
знания о системе
Это наиболее распространенный тип тестирования в SW
промышленности
Method
Недостатки:Невозможно проверить функции, которые были реализованы, но не
описаны в спецификацииНевозможно проверить внутреннее функционирование системы
White-box Testing
Стратегия тестов основана на знании реализации системы
Тесты основаны на знании внутренней разработки и реализации
Требуется от тестера детальное знание системы
Method
Func()
{
a=1;
}
Недостатки:
Невозможно тестировать возможности программы, которые не были описаны в реализации
Тестировщик должет иметь знания о коде не меньше разработчика
Что лучше?
Black-box testing!
Потому что знание внутренних кодов вызывает
предвзятое мнение еще до тестирования
White-box testing!
Потому что углубленное знание системы также дает
знание слабых мест
Результат: ни Black Box,ни White Box!
Базовые методы тестирования
Типичное использование для Black-box/White-box
Black-box тестирование находит дефекты в
высокоуровневых тестах (характеристики)
White-Box тестирование находит дефекты в
низкоуровневых тестах (код)
Method
Тесты по степени изолированности компонентовУровни тестирования - это разбиения процесса выполнения тестов на несколько последовательных уровней
Levels
Разработка системы
Модуль
Модульное
тестирование
Интеграционное
тестирование
Системное
тестирование
Dev Dev Test
Модульное тестирование проверяет каждый компонент системы отдельно от других
Цель - выполнить все операторы, ветви и основные пути программы
Обнаружить и устранить ошибки на ранних стадиях проекта (недорого)
Обычно используется метод тестирования White-box
Требуется выделить время в общем графике для модульного тестирования
Требуется заглушки и драйверов для отдельных модулей
Обычно делается разработчиками
Ошибки, как правило, не учитываются для конечного продукта
Модульное тестирование
Правильно разработанные модульные тесты потенциально способны обнаруживать 70% дефектов в программе [Тайер и Lipow]
Level
Интеграционное тестирование
Используется комбинации white-box и black-box методов тестирования
Level
Интеграционное тестирование - это тестирование интерфейсов между компонентами
Цель - проверить, что новые части работают в составе системы так, как спроектированно
Обнаруживает и устраняет ошибки в API, и плохое взаимодействие между функциями.
Два типа методов интеграции: интеграция большого взрыва : все компоненты были объединены сразу
инкрементальная интеграция: компоненты добавляются в восходящем или нисходящем порядке
интеграция большого взрыва является менее эффективным Тяжело определить причины ошибок
Выполняется коллективом разработчиков, тестировщиков, или группой интеграции
Ошибки иногда протоколируются
Системное тестирование
Системное тестирование производится на полностью собранной системе
Цель - проверить, что она отвечает требованиям пользователей
Чаще всего - метод Black-box
Находит различия между текущим и желаемым поведением системы
Тестирование сосредоточены на факторах, таких как функциональность, производительность, совместимость, удобство использования
Обычно выполняется коллективом тестиривщиков
Ошибки, как правило, протоколируются
"Если вы не написали требования для вашего продукта, или если ваши требования не поддаются измерению, то вы не
можете выполнить проверку системы" [Майерс]
Level
По объекту тестирования
Функциональное тестирование
Обнаруживает расхождения между функциональной
спецификации программы и ее фактическим поведением
Требуются четко определенные требования
Тестирование производительности
Определяет разницу между реальной производительностью
системы и желаемой при пиковых и нормальных условиях
Требуются характеристики производительности, которые трудно
составить
Types
Типы тестирования
Тестирование на совместимость
Тест на совместимость, взаимодействие, совместное функционирование
Дорогое и трудоемкое тестирование
Тестирование надежности
Проверяется надежность и доступность пока система работает с типичной нагрузкой
Включает в себя работу системы в течение длительного времени
Это не проверяется непосредственно. Эти задачи оцениваются путем измерения времени до сбоя
Types
Типы тестирования
Нагрузка / Стресс-тестирование
Определяет условия пиковой нагрузки, при которой система
падает ("тест на провал")
Оценка пиковой нагрузки производится для ключевых
эксплуатационных параметров, в том числе
Объем транзакций
Операционная / пользовательская нагрузка
Активность файловой системы
Уровень ошибок
Сетевой трафик
Types
Примечание: эти тесты могут потребовать сложных конфигураций
Типы тестирования
Исследовательское тестирование
Одновременно процесс исследования продукта, разработки
тестов и выполнения тестирования
Полезно как дополнение к другим видам тестов
Регрессивное тестирование
Тесты проверяют влияние последних изменений на ранее
протестированный код
Включает повторное выполнение всех или выбранных тестов
"Вероятность при изменении ввести новые дефекты случайно в существующую систему высокая (от 20% до 50%)." [Росс Коллар]
Types
Основные методы тестирования Есть бесконечное число тестов
Чтобы быть эффективным, тестеровщики должны выбрать те испытания, которые быстрее всего найдут дефекты
Некоторые методы, используемые дла этого:
Класс эквивалентности разделов
Граничные значения
Анализ пути
Таблицы решений
диаграммы переходных состояний
Пользовательские сценарии
Ортогональные массивы / тестирование пары
Итак,
Процесс тестирования
- это процесс, в котором тестовая деятельность,
инструменты, люди объединяются вместе, чтобы
проверить продукт
Параллельно процессу разработки идет процесс
подготовки тестов, планирование, разработка и
выполнение всех подготовительных мероприятий
Вопросы ???????????
Ученик спросил мастера-программиста: "Когда я могу перестать писать
тесты?"
Мастер ответил: "Когда ты перестаешь писать код"
У: “Когда я перестаю писать код?"
М: "Когда ты становишься менеджером"
У:"Когда я становлюсь менеджером?"
М:"Когда ты перестаешь писать тесты"
Ученик побежал писать тесты.
Если код заслуживает быть написанным, он заслуживает иметь тесты