Некоторые из самых скандальных ошибок

реклама
Lecture 1
5/4/2016 6:59:00 PM
Введение
Введение в тестирование. Начало тестирования. Причины организации тестирования. Причины
появления ошибок. Виды программных ошибок. Тестирование и QA. Тестирование и debugging.
Окончание тестирования. Аксиомы тестирования.
Введение
Программное обеспечение получило большое распространение в последние десятилетия.
Практически все машины, приборы и устройства контролируются программных обеспечением.
Например, автомобили – двигатель, трансмиссия, системы тормозов.
Скорость и качество работы различных организаций напрямую зависит от надёжности
программного обеспечения – банки (обработка денежных транзакций), медицина (постановка
диагноза), производство (управление машинами). Программы и компьютеры заменили чиновников
во многих сферах.
Принимая во внимание выше сказаное и области, в которых применяются компьютеры становится
очевидным критичность качества используемых програмных продуктов.
Тестирование программ стало технической профессией к тому же очень важной.
 КОГДА НАДО НАЧИНАТЬ ТЕСТИРОВАНИЕ ПРОДУКТА?
Тестирование должно проводиться на протяжении всего процесса разработки программного
продукта.
 ПОЧЕМУ НЕОБХОДИМО ТЕСТИРОВАНИЕ?

Сохранение денег и времени благодаря выявлению ошибок на более раних стадиях
создания продукта.
Выявление ошибки в начале разработки или даже не уровне подготовки документации
позволяет значительно сохранить денежные ресурсы.
Стоимость исправления ошибок растёт со временем:
Stage error is found
Requirements
Coding
Program testing
System testing
User acceptance testing
Live running
Comparative cost
$1
$10
$100
$1000
$10000
$100000
1
Lecture 1
5/4/2016 6:59:00 PM

Избежание или уменьшение времени простоя.
В результате своевременного выявления ошибок становится возможным оперативное
устранение неправильного поведения. В случае некачественного или недостаточного
тестирования исправление поздно обнаруженной ошибки (в бета версии или даже в release
версии) с большой вероятностью повлияет на многие компоненты или модули программы.
Исправление таких ошибок будет трудоёмким и долгим, что в свою очередьможет вызвать
простой. Например, отдел QA может ожидать выпуска hotfix в случае обнаружения blocking
bug.

Предоставление более качественных услуг клиенту посредством создания лучшего
программного обеспечения
Выполнение тестерования позволяет выявить и исправить ошибки, что ведёт к
предоставлению более качественного продукта клиенту.

Получение возможности определить желаемые изменения и улучшения для будущих
версий продукта
Тестирование продукта осуществляется под различными углами и не ограничивается
системным тестированием (тестированием на соответствие спецификациям). Под
тестирование попадают непосредственно сами спецификации (например, в случае
обнаружения
несоответсвия
спецификаций,
некорректного
утверждения
или
нерациональной/ошибочной реализации может практиковаться отсылка change request PM’y с
последующим исправлением спецификации). Так же тестированию подвергается удобство
использования, производительность и т.д. (более подробно будет рассказано позже)
Некоторые из самых скандальных ошибок:
1. Медицинский aпарат для радиоактивной терапий „Therac-25”
- 6 несчастных случаев со смертельным исходом или тяжело раненными (1985-87, США,
Канада)
Прямая причина: ошибки в программе контролирования
Ретроспективный анализ[Левесон 1995]:
1) Чрезмерная уверенность в программах software
2) Надежность ≠ уверенность
2. Авиа ракета Ariane 5
- Авторазрушение после 40 секунд неисправности от момента запуска(1996)
Причина: 500 миллионов долларов (ракета), 7 миллионов долларов (проект)
Ретроспективный анализ:
1) главная причина: неразумное переиспользование software
2) Принят код от Ariane 4 без перепроверки
2
5/4/2016 6:59:00 PM
Lecture 1
 КАКОВЫ ПРИЧИНЫ ПОЯВЛЕНИЯ ОШИБОК В ПО?
Причины появления ошибок
Теоретически, ошибки, сделанные компетентным программистом, работающим на современном
программной обеспечении, в соответствующей среде разработки программного обеспечения, не
являются дефектами (предполагается отсутсвие недостатков добросовестности, лени и
некомпетентности программсита). В хорошем, продуманном программном обеспечении источником
ошибок являются сложность и ограниченная способность людей к борьбе со сложностью, а не
тупость. Чем лучше программный процесс, тем менее вероятно, что ошибки, которые сохраняются в
течение тестирования, являются ошибками конкретных программистов. Большинство ошибок,
которые мы находим при помощи тестирования в хорошо разработанном, качественном
программном обеспечении, являются следствием непредсказуемого взаимодейтвия между
компонентами или между объектами, или результатом непредсказуемых побочных эффектов.
Появление ошибок в программе указывает на несовершенство технологического процесса, а не на
вину программиста. Однако, это в идеале («гипотеза компетентного программиста»)
Безусловно, все люди делают ошибки. Люди делают ошибки, т.к. расположены к ним. Такие
внешние факторы как дэдлайны, сложность систем и организации процесса увеличивают
вероятность появления ошибок. В том числе ошибок не только в самом коде, но и в списках
требований к будущему продукту. Многие основные системные ошибки происходят из
документации, на которую ориентируется программист. Если документ содержит ошибку, до и
компонент/программа написаная по этому документу будет содержать ошибку, которая в свою
очередь может привести к системной ошибке.
Виды программных ошибок:
Error
Defect
Failure
Error
 Несоответсвие между вычесленным, полученым или замереным значением и значением
принятым за правильное.
(1) (ISO) a discrepancy between a computed, observed, or measured value or condition and the
true, specified, or theoretically correct value or condition;
(или второй вариант Борис Бейзер «Тестирование чёрного ящика»:
Отказ (IEEE94) – наблюдаемое аномальное поведение любого объекта (не обязательно
тестируемого), такое как несоответствие требованиям или возникновение незапланированих
явлений.
3
Lecture 1
5/4/2016 6:59:00 PM
Defect (syn. with anomaly, fault, issue)
 (IEEE) Анамалия в продукте
 Проблема качества обнаруженая после того как программа была получена тестеровщиком
(или пользователем)
(1) (IEEE) a product anomaly;
(2) synonymous with fault, both imply a quality problem discovered after the software has been
released to end-users (or to another activity in the software process); [Pressman, 203]
Failure
 (IEEE) Неспособность системы или компонента выполнить нужные задачи в заданые
критерии производительности
(IEEE) the inability of a system or component to perform its required functions within specified
performance requirements.
Сrash

(IEEE Institute of Electrical and Electronics Engineers)
Неожиданный и полный отказ системы или компонента
Часто все эти понятия обобщаются одним словом – баг
Роль и цели тестирования в процессе разработки
 ЧТО ТАКОЕ ТЕСТИРОВАНИЕ?
 ЧТО ТАКОЕ QA?
Тестирование - это процесс, целью которого является выявление качества продукта, т.е.
соответствие продукта заявленным требованиям
Oсновной задачей тестирования ПО является получение информации о статусе готовности
заявленной функциональности системы или приложения.
Проведённое тестирование чего-либо не является эквивалентом утверждения, что это что-то
свободно от ошибок.
QA - это процесс, который обеспечивает качество продукта заявленным требованиям
То есть
- Тестинг - просто индикатор качества.
- QA - его гарант
4
Lecture 1
5/4/2016 6:59:00 PM
 ЧТО ТАКОЕ DEBUGGING?
 КАКОВА РАЗНИЦА МЕЖДУ «TESTING» И «DEBUGGING»?
Debugging
Тестирование и debugging (отладка) - разные вещи.
Если
«тестирование» – процесс определения наличия ошибок в программе, то
«debugging» - этап разработки компьютерной программы, на котором обнаруживают,
локализуют и устраняют ошибки
Существуют две взаимодополняющие технологии отладки:


Использование отладчиков — программ, которые включают в себя пользовательский
интерфейс для пошагового выполнения программы: оператор за оператором, функция за
функцией, с остановками на некоторых строках исходного кода или при достижении
определённого условия.
Вывод текущего состояния программы с помощью расположенных в критических точках
программы операторов вывода — на экран, принтер, громкоговоритель или в файл.
 КОГДА ТЕСТИРОВАНИЕ МОЖНО СЧИТАТЬ ОКОНЧЕНЫМ?
Процесс тестирования потенциально бесконечен, как с теоретичекой, так и с практической точки
зрения. Тем не менее, даже зная, что ошибки остались, мы должны завершить тестироване.
Самым главным аспектом при решении окончить тестирование является опредеоение критерия, того
допустимого уровня ошибок при котором продолжение тестирования будет минимально влиять на
улучшение качества продукта.
Ещё одним метод, который дополняет первый это определение приоритетов. Первым делом
делаются тесты, наибольшим приоритетом. Самые важные тесты покроют наиболее важные части
системы и, даже если тестирование всего продукта будет прервано в середине, наиболее выжные
части будут уже покрыты.
Приоритеты и «выходной критерий» (допустимый уровень ошибок) определяется Project
Manager'ом.
5
Lecture 1
5/4/2016 6:59:00 PM
Всегда существует баланс между временем, денежными средставами и качеством:
Aксиомы тестирования
1. Невозможно полное тестирование программы (exhaustive testing is not possible):
 Число возможных входных данных велико.
 Число возможных результатов/выходных данных велико
 Число решений и возможностей в программе велико
 Программные спецификаций субъективны
Например:
В программе есть поле для ввода пароля состоящего из трёх знаков.
Даже при использовании в пароле только букв латинского алфавита существует 26х26х26
комбинаций = 17576 вариантов
На практике же количество комбинаций намного больше – могут быть использованы и специальные
символы, и символы расскдладки другого языка.
Остаются также ситуации, при которых пользователь, например, удаляет один символ используя
кнопку delete. Что предусмотрено в этом случае? Что будет если пользователь нажмёт комбинацию
клавиш при наборе пороля (например, Ctrl+P)?
2. Тестирование не может показать, что продукт не содержит ошибок.
«Безбажных» продуктов не существует. Существуют «недотестированные» продукты.
Всегда можно усовершенстовать или расшиить тесты, которые выявят новые ошибки.
3. Чем больше выявлено ошибок, тем больше вероятность появления других ошибок.
Тестирование вокруг выявленой ошибки в большинстве случаев выявляет смежные ошибки.
Одна ошибка может быть лишь частным случаем большой проблемы в программе.
6
Lecture 1
5/4/2016 6:59:00 PM
4. Парадокс пестецида
(по аналогии с явлением в сельском хозяйстве: насекомые приспосабливаются к яду, что
заставляет искать принципиально новое решение)
Если работа по выявлению ошибок была сделана хорошо и результаты были переданы
корректно программистам, то они, скореее всего, не повторят прошлых ошибок. Хороший
программист, если у него есть время и необходимые ресурсы, обычно изучает проблемы,
выявленные тестировщиками, обобщает идеи и затем исследует своё программное
обеспечение на предмет выявления и исправления в нём таких же или подобных ошибок.
Каждый метод тестирования нацелен на определённый набор ошибок. Если программист
реагирует на результаты тестирования и информацию об ошибках сокращением и удалением
этих ошибок, из этого следует, что его программа улучшается, а эффективность предыдущих
тестов постепенно уменьшается. То есть ваш тест устаревает и вам приходится изучать,
создавать и использовать новые тесты, основанные на новых методах отслеживания новых
ошибок.
5. Не все выявленные ошибки будут исправлены.
Причины могут быть следующими:
 Недостаток времени
 Найденая «ошибка» не является ошибкой
 Велик риск появления ещё большего количества ошибок при починке проблемы
 Ошибка незначительна и допустимо её присутсвие в программе (ресурсы потраченные на
исправление не будут соотвествовать результату)
6. Невсегда возможно определить является ли наблюдаемое поведение действительно ошибкой
Как правило, это утверждение относится к поведению не описаному чётко в спецификациях.
В этом случае поведение рассматриватся более авторитетными личностями проекта – Project
Manager или даже клиент. Возможно дополнение спецификаций новыми деталями, которые
допускали бы наблюдаемое поведение как нормальное.
7. Спецификаций продуктов не всегда чётки и однозначны.
Спецификации обновляются и дополняются на протяжении всего процесса разработки.
Note: QA should challenge PMs on this point
8. Тестеры не являются самыми популярными членами команды.
Несколько полезных советов:
 Находите ошибки как можно раньше. Все будут довольны если вы их обнаружите за
две недели а не за день до окончания периода тестирования.
 Укрепляйте энтузиазм. Каким бы счастливым ты не был при выявление критической
ошибки, будь дипломатичным когда демонстрируешь ее программисту.
7
Скачать